Mercurial > repos > iuc > meme_fimo
changeset 13:4eb02864e5df draft
planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/meme commit e2cf796f991cbe8c96e0cc5a0056b7255ac3ad6b
line wrap: on
line diff
--- a/fimo.xml Wed Apr 25 12:12:47 2018 -0400 +++ b/fimo.xml Thu May 17 14:11:00 2018 -0400 @@ -1,59 +1,59 @@ <tool id="meme_fimo" name="FIMO" version="@WRAPPER_VERSION@.0"> - <description>- Scan a set of sequences for motifs.</description> + <description>- Scan a set of sequences for motifs</description> <macros> <import>macros.xml</import> </macros> <expand macro="requirements" /> <command detect_errors="exit_code"><![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 +fimo + -o ./out/ + $scanrc + #if str( $options_type.options_type_selector ) == 'advanced': + --thresh $options_type.thresh + $options_type.qv_thresh + #if str( $options_type.bgfile_type.bgfile_type_selector ) == 'motif_file': + --bgfile --motif-- + #elif str( $options_type.bgfile_type.bgfile_type_selector ) == 'bgfile': + --bgfile $options_type.bgfile_type.bgfile + #elif str( $options_type.bgfile_type.bgfile_type_selector ) == 'uniform_distr': + --bgfile --uniform-- + #end if + $options_type.max_strand + --max-stored-scores $options_type.max_stored_scores + + #if str( $options_type.motifs_cond.motif_selector) == 'yes': + #for $motif in $options_type.motifs_cond.motifs: + --motif $motif.motif + #end for + #end if + + --motif-pseudo $options_type.motif_pseudo + $options_type.no_qvalue + $options_type.parse_genomic_coords + + #if str( $options_type.psp_cond.psp_selector ) == 'yes': + --psp $options_type.psp_cond.input_psp + --alpha $options_type.psp_cond.alpha + #end if + + #if str( $options_type.prior_dist_cond.prior_dist_selector ) == 'yes': + --prior-dist $options_type.prior_dist_cond.input_prior_dist + #end if #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}' + '$input_motifs' + #if str($fasta_type.fasta_type_selector) == 'history': + '${fasta_type.input_database}' + #else: + '${fasta_type.input_database.fields.path}' #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}' +&& mv ./out/fimo.html '${html_outfile}' +&& mv ./out/fimo.txt '${txt_outfile}' +&& mv ./out/fimo.xml '${xml_outfile}' +&& mv ./out/fimo.gff '${gff_outfile}' ]]></command> <inputs> - <param name="input_motifs" type="data" format="memexml" label="'MEME output' formatted file"/> + <param name="input_motifs" type="data" format="memexml" label="DREME or MEME output XML file" + help="DREME or MEME output XML file containing found motifs"/> <conditional name="fasta_type"> <param name="fasta_type_selector" type="select" label="Source for sequence to search"> <option value="cached">Locally Cached sequences</option> @@ -68,60 +68,63 @@ <param format="fasta" name="input_database" type="data" label="Sequences"/> </when> </conditional> + <param name="scanrc" label="Check reverse complement strand" type="boolean" + truevalue="" falsevalue="--norc" checked="False" + help="Search for motifs also on reverse complement strand"/> <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="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)."/> + <param name="thresh" type="float" value="1e-4" argument="--thresh" + label="Output threshold for displaying search results" + help="Only output results with a p-value less than the given threshold. To apply set threshold to q-values rather than p-values, set --qv-thresh."/> + <param name="qv_thresh" label="Apply output threshold to q-values?" argument="--qv-thresh" + type="boolean" truevalue="--qv_thresh" falsevalue="" checked="False" + help="Default: apply set threshold on p-values"/> <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 name="bgfile_type_selector" type="select" label="Background model selection"> + <option value="default" selected="true">Use embedded letter frequencies from non-redundant DNA/protein database</option> + <option value="motif_file">Use 0-order letter frequencies from motif file</option> + <option value="bgfile">Use 0-order letter frequencies from background file</option> + <option value="uniform_distr">Use uniform letter frequencies</option> </param> <when value="motif_file" /> <when value="default" /> + <when value="uniform_distr" /> <when value="bgfile"> - <param name="bgfile" type="data" format="txt" optional="True" label="Background Model" help="File must be in MEME background file format."/> + <param name="bgfile" type="data" format="txt" optional="True" label="Background model file" help="File must be in Markov background model format (see MEME suite tool fasta-get-markov for details)"/> </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" /> + <param name="max_strand" label="Report best match in case of overlapping matches on both strands?" argument="--max-strand" + type="boolean" truevalue="--max-strand" falsevalue="" checked="False" + 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. If the scores are tied, the matching strand is chosen at random (default: report both matches)."/> + <param name="max_stored_scores" type="integer" value="100000" argument="--max-stored-scores" + label="Maximum number of scores that will be stored" + help="Keeping a complete list of scores may exceed available memory. Once the number of stored scores reaches the maximum allowed, the least significant 50% of scores will be dropped. In this case, the list of reported motifs may be incomplete and the q-value calculation will be approximate."/> <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 name="motif_selector" type="select" label="Specify single input motifs for scanning?"> + <option value="no" selected="true">No</option> + <option value="yes">Yes</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" /> + <when value="no"/> + <when value="yes"> + <repeat name="motifs" title="Supply input motif ID"> + <param name="motif" type="text" value="" label="Motif 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> + <param name="motif_pseudo" type="float" value="0.1" argument="--motif-pseudo" + 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="Disable q-value calculation?" + type="boolean" truevalue="--no-qvalue" falsevalue="" checked="False" argument="--no-qvalue" + help="The q-value calculation is that of Benjamini and Hochberg (1995) (default: calculate q-value for each p-value)"/> + <param name="parse_genomic_coords" label="Check each sequence header for UCSC-style genomic coordinates?" + type="boolean" truevalue="--parse-genomic-coord" falsevalue="" checked="False" argument="--parse-genomic-coord" + help=" If genomic coordinates are found they will be used as the coordinates in the output."/> <conditional name="psp_cond"> <param name="psp_selector" type="select" label="Use position-specific priors?"> <option value="no" selected="true">No</option> @@ -129,7 +132,12 @@ </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."/> + <param name="input_psp" type="data" format="txt" argument="--psp" + label="Select file containing position-specific priors" + help="File should be in MEME PSP format or wiggle format (can be generated by MEME suite tool create-priors)"/> + <param name="alpha" type="float" value="1.0" min="0" max="1.0" argument="--alpha" + 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)"/> </when> </conditional> <conditional name="prior_dist_cond"> @@ -139,19 +147,38 @@ </param> <when value="no"/> <when value="yes"> - <param name="input_prior_dist" type="data" format="txt" label="Select dataset containing binned distribution of priors"/> + <param name="input_prior_dist" type="data" format="txt" argument="--prior-dist" + label="Select dataset containing binned distribution of priors" + help="This file can be generated using the MEME suite tool create-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> + <section name="output_options" title="Additional output options"> + <param name="html_outfile" type="boolean" value="False" label="Output HTML file" help="FIMO HTML output file"/> + <param name="xml_outfile" type="boolean" value="False" label="Output XML file" help="FIMO XML output file"/> + <param name="gff_outfile" type="boolean" value="False" label="Output GFF file" help="FIMO GFF output file"/> + </section> </inputs> <outputs> + <data format="txt" 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="html" name="html_outfile" label="${tool.name} on ${on_string} (html)"> + <filter>(output_options['html_outfile'] is True)</filter> <actions> <conditional name="fasta_type.fasta_type_selector"> <when value="cached"> @@ -165,7 +192,8 @@ </conditional> </actions> </data> - <data format="tabular" name="txt_outfile" label="${tool.name} on ${on_string} (text)"> + <data format="txt" name="gff_outfile" label="${tool.name} on ${on_string} (gff)"> + <filter>(output_options['gff_outfile'] is True)</filter> <actions> <conditional name="fasta_type.fasta_type_selector"> <when value="cached"> @@ -178,38 +206,8 @@ </conditional> </actions> </data> - <data format="tabular" name="gff_outfile" label="${tool.name} on ${on_string} (almost-gff)"> - <filter>options_type['options_type_selector'] == 'basic' or (options_type['options_type_selector'] == 'advanced' and 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<designation>.*)" directory="output" ext="gff" visible="false" /> - <filter>options_type['options_type_selector'] == 'advanced' and 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)"> + <data format="memexml" name="xml_outfile" label="${tool.name} on ${on_string} (xml)"> + <filter>(output_options['xml_outfile'] is True)</filter> <actions> <conditional name="fasta_type.fasta_type_selector"> <when value="cached"> @@ -224,46 +222,57 @@ </data> </outputs> <tests> - <test> - <param name="input_motifs" value="meme_output_xml_1.xml" ftype="memexml"/> + <test expect_num_outputs="4"> + <param name="input_motifs" value="meme_fimo_input_1.xml" ftype="memexml"/> <param name="fasta_type_selector" value="history"/> - <param name="input_database" value="phiX.fasta" ftype="fasta"/> + <param name="input_database" value="hsa_chrM.fa" ftype="fasta"/> + <param name="scanrc" value="true"/> <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="html_outfile" value="True"/> + <param name="xml_outfile" value="True"/> + <param name="gff_outfile" value="True"/> <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"/> + <output name="html_outfile" file="fimo_output_test1.html" lines_diff="20"/> + <output name="txt_outfile" file="fimo_output_test1.txt"/> + <output name="xml_outfile" file="fimo_output_test1.xml" lines_diff="20"/> + <output name="gff_outfile" file="fimo_output_test1.gff"/> </test> - <test> - <param name="input_motifs" value="meme_output_xml_1.xml" ftype="memexml"/> + <test expect_num_outputs="4"> + <param name="input_motifs" value="dreme_fimo_input_1.xml" ftype="memexml"/> <param name="fasta_type_selector" value="history"/> - <param name="input_database" value="phiX.fasta" ftype="fasta"/> + <param name="input_database" value="hsa_chrM.fa" ftype="fasta"/> + <param name="scanrc" value="true"/> <param name="options_type_selector" value="advanced"/> - <param name="parse_genomic_coord" value="yes"/> - <param name="remove_duplicate_coords" value="yes"/> - <param name="output_separate_motifs" value="yes"/> + <param name="bgfile_type_selector" value="bgfile"/> + <param name="bgfile" value="fimo_background_probs_hsa_chrM.txt"/> + <param name="html_outfile" value="True"/> + <param name="xml_outfile" value="True"/> + <param name="gff_outfile" value="True"/> <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"/> + <output name="html_outfile" file="fimo_output_test2.html" lines_diff="20"/> + <output name="txt_outfile" file="fimo_output_test2.txt"/> + <output name="xml_outfile" file="fimo_output_test2.xml" lines_diff="20"/> + <output name="gff_outfile" file="fimo_output_test2.gff"/> + </test> + <test expect_num_outputs="3"> + <param name="input_motifs" value="dreme_fimo_input_1.xml" ftype="memexml"/> + <param name="fasta_type_selector" value="history"/> + <param name="input_database" value="hsa_chrM.fa" ftype="fasta"/> + <param name="scanrc" value="true"/> + <param name="options_type_selector" value="advanced"/> + <param name="thresh" value="0.01"/> + <param name="bgfile_type_selector" value="uniform_distr"/> + <param name="motif_selector" value="yes"/> + <repeat name="motifs"> + <param name="motif" value="ACTAAYH"/> + </repeat> + <param name="html_outfile" value="True"/> + <param name="xml_outfile" value="True"/> + <param name="gff_outfile" value="False"/> + <param name="non_commercial_use" value="True"/> + <output name="html_outfile" file="fimo_output_test3.html" lines_diff="20"/> + <output name="txt_outfile" file="fimo_output_test3.txt"/> + <output name="xml_outfile" file="fimo_output_test3.xml" lines_diff="20"/> </test> </tests> <help>
--- a/fimo_wrapper.py Wed Apr 25 12:12:47 2018 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,194 +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 as e: - stop_err('Error running FIMO:\n%s' % 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/macros.xml Wed Apr 25 12:12:47 2018 -0400 +++ b/macros.xml Thu May 17 14:11:00 2018 -0400 @@ -1,10 +1,11 @@ <?xml version='1.0' encoding='UTF-8'?> <macros> - <token name="@WRAPPER_VERSION@">4.11.2</token> + <token name="@WRAPPER_VERSION@">4.12.0</token> <xml name="requirements"> <requirements> <requirement type="package" version="1.3.23">graphicsmagick</requirement> - <requirement type="package" version="4.11.2">meme</requirement> + <requirement type="package" version="4.12.0">meme</requirement> + <yield/> </requirements> </xml> </macros>
--- a/test-data/dreme1.html Wed Apr 25 12:12:47 2018 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,6199 +0,0 @@ -<!DOCTYPE HTML> -<html> - <head> - <meta charset="UTF-8"> - <title>DREME</title> - <script> - // @JSON_VAR data - var data = { - "program": "dreme", - "version": "4.11.2", - "release": "Thu May 05 14:58:55 2016 -0700", - "cmd": [ - "dreme", "-o", "./output", "-p", - "/tmp/tmpijN1y0/files/000/dataset_1.dat", "-norc", "-rna", "-s", - "1" - ], - "options": { - "revcomp": false, - "ngen": 100, - "add_pv_thresh": 0.01, - "seed": 1, - "stop": { - "evalue": "0.05" - } - }, - "alphabet": { - "name": "RNA", - "like": "rna", - "ncore": 4, - "symbols": [ - { - "symbol": "A", - "name": "Adenine", - "colour": "CC0000" - }, { - "symbol": "C", - "name": "Cytosine", - "colour": "0000CC" - }, { - "symbol": "G", - "name": "Guanine", - "colour": "FFB300" - }, { - "symbol": "U", - "aliases": "T", - "name": "Uracil", - "colour": "008000" - }, { - "symbol": "N", - "aliases": "X.", - "name": "Any base", - "equals": "ACGU" - }, { - "symbol": "V", - "name": "Not U", - "equals": "ACG" - }, { - "symbol": "H", - "name": "Not G", - "equals": "ACU" - }, { - "symbol": "D", - "name": "Not C", - "equals": "AGU" - }, { - "symbol": "B", - "name": "Not A", - "equals": "CGU" - }, { - "symbol": "M", - "name": "Amino", - "equals": "AC" - }, { - "symbol": "R", - "name": "Purine", - "equals": "AG" - }, { - "symbol": "W", - "name": "Weak", - "equals": "AU" - }, { - "symbol": "S", - "name": "Strong", - "equals": "CG" - }, { - "symbol": "Y", - "name": "Pyrimidine", - "equals": "CU" - }, { - "symbol": "K", - "name": "Keto", - "equals": "GU" - } - ] - }, - "background": { - "freqs": [0.221, 0.245, 0.221, 0.312] - }, - "sequence_db": { - "name": "dataset 1", - "file": "/tmp/tmpijN1y0/files/000/dataset_1.dat", - "lmod": "Tue Apr 24 13:55:48 CEST 2018", - "count": 1000 - }, - "control_db": { - "name": "shuffled positive sequences", - "from": "shuffled", - "count": 1000, - "freqs": [0.221, 0.245, 0.221, 0.312] - }, - "motifs": [ - { - "db": 0, - "id": "UUYUCY", - "alt": "MEME", - "len": 6, - "nsites": 459, - "evalue": "1.2e-013", - "p": 387, - "n": 210, - "pvalue": "2.6e-018", - "unerased_evalue": "1.2e-013", - "pwm": [ - [0.000000, 0.000000, 0.000000, 1.000000], - [0.000000, 0.000000, 0.000000, 1.000000], - [0.000000, 0.294118, 0.000000, 0.705882], - [0.000000, 0.000000, 0.000000, 1.000000], - [0.000000, 1.000000, 0.000000, 0.000000], - [0.000000, 0.474946, 0.000000, 0.525054] - ], - "matches": [ - { - "seq": "UUUUCC", - "p": 147, - "n": 75, - "pvalue": "1.8e-007", - "evalue": "8.1e-003" - }, { - "seq": "UUUUCU", - "p": 155, - "n": 94, - "pvalue": "2.2e-005", - "evalue": "1.0e+000" - }, { - "seq": "UUCUCU", - "p": 94, - "n": 51, - "pvalue": "1.3e-004", - "evalue": "6.1e+000" - }, { - "seq": "UUCUCC", - "p": 75, - "n": 42, - "pvalue": "1.1e-003", - "evalue": "5.0e+001" - } - ] - }, { - "db": 0, - "id": "YAGG", - "alt": "MEME", - "len": 4, - "nsites": 793, - "evalue": "5.1e-012", - "p": 600, - "n": 416, - "pvalue": "1.1e-016", - "unerased_evalue": "2.4e-012", - "pwm": [ - [0.000000, 0.692308, 0.000000, 0.307692], - [1.000000, 0.000000, 0.000000, 0.000000], - [0.000000, 0.000000, 1.000000, 0.000000], - [0.000000, 0.000000, 1.000000, 0.000000] - ], - "matches": [ - { - "seq": "CAGG", - "p": 441, - "n": 304, - "pvalue": "1.5e-010", - "evalue": "6.6e-006" - }, { - "seq": "UAGG", - "p": 232, - "n": 165, - "pvalue": "1.1e-004", - "evalue": "4.7e+000" - } - ] - }, { - "db": 0, - "id": "GAAGAW", - "alt": "MEME", - "len": 6, - "nsites": 89, - "evalue": "3.4e-005", - "p": 81, - "n": 22, - "pvalue": "8.2e-010", - "unerased_evalue": "3.5e-004", - "pwm": [ - [0.000000, 0.000000, 1.000000, 0.000000], - [1.000000, 0.000000, 0.000000, 0.000000], - [1.000000, 0.000000, 0.000000, 0.000000], - [0.000000, 0.000000, 1.000000, 0.000000], - [1.000000, 0.000000, 0.000000, 0.000000], - [0.494382, 0.000000, 0.000000, 0.505618] - ], - "matches": [ - { - "seq": "GAAGAU", - "p": 45, - "n": 7, - "pvalue": "2.4e-008", - "evalue": "9.9e-004" - }, { - "seq": "GAAGAA", - "p": 40, - "n": 16, - "pvalue": "7.9e-004", - "evalue": "3.3e+001" - } - ] - }, { - "db": 0, - "id": "SMUGGA", - "alt": "MEME", - "len": 6, - "nsites": 119, - "evalue": "3.7e-003", - "p": 110, - "n": 47, - "pvalue": "9.1e-008", - "unerased_evalue": "2.6e-005", - "pwm": [ - [0.000000, 0.529412, 0.470588, 0.000000], - [0.428571, 0.571429, 0.000000, 0.000000], - [0.000000, 0.000000, 0.000000, 1.000000], - [0.000000, 0.000000, 1.000000, 0.000000], - [0.000000, 0.000000, 1.000000, 0.000000], - [1.000000, 0.000000, 0.000000, 0.000000] - ], - "matches": [ - { - "seq": "GAUGGA", - "p": 22, - "n": 6, - "pvalue": "1.7e-003", - "evalue": "7.1e+001" - }, { - "seq": "GCUGGA", - "p": 33, - "n": 14, - "pvalue": "3.6e-003", - "evalue": "1.5e+002" - }, { - "seq": "CCUGGA", - "p": 32, - "n": 15, - "pvalue": "8.6e-003", - "evalue": "3.5e+002" - }, { - "seq": "CAUGGA", - "p": 29, - "n": 13, - "pvalue": "9.1e-003", - "evalue": "3.7e+002" - } - ] - } - ], - "runtime": { - "host": "ThinkPad-T450s", - "when": "Tue Apr 24 13:55:53 CEST 2018", - "cpu": 16.65, - "real": 16.65, - "stop": "evalue" - } - }; - </script> - <script> -var site_url = ""; -</script> - <script> - -/* - * $ - * - * Shorthand function for getElementById - */ -function $(el) { - return document.getElementById(el); -} - - -/* - * See http://stackoverflow.com/a/5450113/66387 - * Does string multiplication like the perl x operator. - */ -function string_mult(pattern, count) { - if (count < 1) return ''; - var result = ''; - while (count > 1) { - if (count & 1) result += pattern; - count >>= 1, pattern += pattern; - } - return result + pattern; -} - -/* - * See http://stackoverflow.com/questions/814613/how-to-read-get-data-from-a-url-using-javascript - * Slightly modified with information from - * https://developer.mozilla.org/en/DOM/window.location - */ -function parse_params() { - "use strict"; - var search, queryStart, queryEnd, query, params, nvPairs, i, nv, n, v; - search = window.location.search; - queryStart = search.indexOf("?") + 1; - queryEnd = search.indexOf("#") + 1 || search.length + 1; - query = search.slice(queryStart, queryEnd - 1); - - if (query === search || query === "") return {}; - - params = {}; - nvPairs = query.replace(/\+/g, " ").split("&"); - - for (i = 0; i < nvPairs.length; i++) { - nv = nvPairs[i].split("="); - n = decodeURIComponent(nv[0]); - v = decodeURIComponent(nv[1]); - // allow a name to be used multiple times - // storing each value in the array - if (!(n in params)) { - params[n] = []; - } - params[n].push(nv.length === 2 ? v : null); - } - return params; -} - -/* - * coords - * - * Calculates the x and y offset of an element. - * From http://www.quirksmode.org/js/findpos.html - * with alterations to take into account scrolling regions - */ -function coords(elem) { - var myX = myY = 0; - if (elem.getBoundingClientRect) { - var rect; - rect = elem.getBoundingClientRect(); - myX = rect.left + ((typeof window.pageXOffset !== "undefined") ? - window.pageXOffset : document.body.scrollLeft); - myY = rect.top + ((typeof window.pageYOffset !== "undefined") ? - window.pageYOffset : document.body.scrollTop); - } else { - // this fall back doesn't properly handle absolutely positioned elements - // inside a scrollable box - var node; - if (elem.offsetParent) { - // subtract all scrolling - node = elem; - do { - myX -= node.scrollLeft ? node.scrollLeft : 0; - myY -= node.scrollTop ? node.scrollTop : 0; - } while (node = node.parentNode); - // this will include the page scrolling (which is unwanted) so add it back on - myX += (typeof window.pageXOffset !== "undefined") ? window.pageXOffset : document.body.scrollLeft; - myY += (typeof window.pageYOffset !== "undefined") ? window.pageYOffset : document.body.scrollTop; - // sum up offsets - node = elem; - do { - myX += node.offsetLeft; - myY += node.offsetTop; - } while (node = node.offsetParent); - } - } - return [myX, myY]; -} - -/* - * position_popup - * - * Positions a popup relative to an anchor element. - * - * The avaliable positions are: - * 0 - Centered below the anchor. - */ -function position_popup(anchor, popup, position) { - "use strict"; - var a_x, a_y, a_w, a_h, p_x, p_y, p_w, p_h; - var a_xy, spacer, margin, scrollbar, page_w; - // define constants - spacer = 5; - margin = 15; - scrollbar = 15; - // define the positions and widths - a_xy = coords(anchor); - a_x = a_xy[0]; - a_y = a_xy[1]; - a_w = anchor.offsetWidth; - a_h = anchor.offsetHeight; - p_w = popup.offsetWidth; - p_h = popup.offsetHeight; - page_w = null; - if (window.innerWidth) { - page_w = window.innerWidth; - } else if (document.body) { - page_w = document.body.clientWidth; - } - // check the position type is defined - if (typeof position !== "number") { - position = 0; - } - // calculate the popup position - switch (position) { - case 1: - p_x = a_x + a_w + spacer; - p_y = a_y + (a_h / 2) - (p_h / 2); - break; - case 0: - default: - p_x = a_x + (a_w / 2) - (p_w / 2); - p_y = a_y + a_h + spacer; - break; - } - // constrain the popup position - if (p_x < margin) { - p_x = margin; - } else if (page_w != null && (p_x + p_w) > (page_w - margin - scrollbar)) { - p_x = page_w - margin - scrollbar - p_w; - } - if (p_y < margin) { - p_y = margin; - } - // position the popup - popup.style.left = p_x + "px"; - popup.style.top = p_y + "px"; -} - -function lookup_help_popup(popup_id) { - var _body, pop, info; - pop = document.getElementById(popup_id); - if (pop == null) { - _body = document.getElementsByTagName("body")[0]; - pop = document.createElement("div"); - pop.className = "pop_content"; - pop.id = popup_id; - pop.style.backgroundColor = "#FFC"; - pop.style.borderColor = "black"; - info = document.createElement("p"); - info.style.fontWeight = "bold"; - info.appendChild(document.createTextNode("Error: No popup for topic \"" + popup_id + "\".")); - pop.appendChild(info); - // this might cause problems with the menu, but as this only happens - // when something is already wrong I don't think that's too much of a problem - _body.insertBefore(pop, _body.firstChild); - } - if (document.getElementsByTagName('body')[0].hasAttribute("data-autobtns")) { - if (!/\bauto_buttons\b/.test(pop.className)) { - pop.className += " auto_buttons"; - var back_btn_sec = document.createElement("div"); - back_btn_sec.className = "nested_only pop_back_sec"; - var back_btn = document.createElement("span"); - back_btn.className = "pop_back"; - back_btn.appendChild(document.createTextNode("<< back")); - back_btn.addEventListener("click", function(e) { - help_return(); - }, false); - back_btn_sec.appendChild(back_btn); - pop.insertBefore(back_btn_sec, pop.firstChild); - var close_btn_sec = document.createElement("div"); - close_btn_sec.className = "pop_close_sec"; - var close_btn = document.createElement("span"); - close_btn.className = "pop_close"; - close_btn.appendChild(document.createTextNode("close")); - close_btn.addEventListener("click", function(e) { - help_popup(); - }, false); - close_btn_sec.appendChild(close_btn); - pop.appendChild(close_btn_sec); - } - } - return pop; -} - -/* - * help_popup - * - * Moves around help pop-ups so they appear - * below an activator. - */ -function help_popup(activator, popup_id) { - "use strict"; - var pop; - // set default values - if (typeof help_popup.popup === "undefined") { - help_popup.popup = []; - } - if (typeof help_popup.activator === "undefined") { - help_popup.activator = null; - } - var last_pop = (help_popup.popup.length > 0 ? help_popup.popup[help_popup.popup.length - 1] : null); - if (typeof(activator) == "undefined") { // no activator so hide - if (last_pop != null) { - last_pop.style.display = 'none'; - help_popup.popup = []; - } - return; - } - pop = lookup_help_popup(popup_id); - if (pop == last_pop) { - if (activator == help_popup.activator) { - //hide popup (as we've already shown it for the current help button) - last_pop.style.display = 'none'; - help_popup.popup = []; - return; // toggling complete! - } - } else if (last_pop != null) { - //activating different popup so hide current one - last_pop.style.display = 'none'; - } - help_popup.popup = [pop]; - help_popup.activator = activator; - toggle_class(pop, "nested", false); - //must make the popup visible to measure it or it has zero width - pop.style.display = 'block'; - position_popup(activator, pop); -} - -/* - * help_refine - * - * Intended for links within a help popup. Stores a stack of state so - * you can go back. - */ -function help_refine(popup_id) { - if (help_popup.popup == null || help_popup.popup.length == 0 || help_popup.activator == null) { - throw new Error("Can not refine a help popup when one is not shown!"); - } - var pop = lookup_help_popup(popup_id); - var last_pop = help_popup.popup[help_popup.popup.length - 1]; - if (pop == last_pop) return; // slightly odd, but no real cause for alarm - help_popup.popup.push(pop); - toggle_class(pop, "nested", true); - last_pop.style.display = "none"; - //must make the popup visible to measure it or it has zero width - pop.style.display = "block"; - position_popup(help_popup.activator, pop); -} - -/* - * help_return - * - * Intended for links within a help popup. Stores a stack of state so - * you can go back. - */ -function help_return() { - if (help_popup.popup == null || help_popup.popup.length == 0 || help_popup.activator == null) { - throw new Error("Can not return to a earlier help popup when one is not shown!"); - } - var last_pop = help_popup.popup.pop(); - last_pop.style.display = "none"; - var pop = (help_popup.popup.length > 0 ? help_popup.popup[help_popup.popup.length - 1] : null); - if (pop != null) { - toggle_class(pop, "nested", help_popup.popup.length > 1); - pop.style.display = "block"; - position_popup(help_popup.activator, pop); - } else { - help_popup.activator = null; - } -} - -/* - * update_scroll_pad - * - * Creates padding at the bottom of the page to allow - * scrolling of anything into view. - */ -function update_scroll_pad() { - var page, pad; - page = (document.compatMode === "CSS1Compat") ? document.documentElement : document.body; - pad = $("scrollpad"); - if (pad === null) { - pad = document.createElement("div"); - pad.id = 'scrollpad'; - document.getElementsByTagName('body')[0].appendChild(pad); - } - pad.style.height = Math.abs(page.clientHeight - 100) + "px"; -} - -function substitute_classes(node, remove, add) { - "use strict"; - var list, all, i, cls, classes; - list = node.className.split(/\s+/); - all = {}; - for (i = 0; i < list.length; i++) { - if (list[i].length > 0) all[list[i]] = true; - } - for (i = 0; i < remove.length; i++) { - if (all.hasOwnProperty(remove[i])) { - delete all[remove[i]]; - } - } - for (i = 0; i < add.length; i++) { - all[add[i]] = true; - } - classes = ""; - for (cls in all) { - classes += cls + " "; - } - node.className = classes; -} - -/* - * toggle_class - * - * Adds or removes a class from the node. If the parameter 'enabled' is not - * passed then the existence of the class will be toggled, otherwise it will be - * included if enabled is true. - */ -function toggle_class(node, cls, enabled) { - var classes = node.className; - var list = classes.replace(/^\s+/, '').replace(/\s+$/, '').split(/\s+/); - var found = false; - for (var i = 0; i < list.length; i++) { - if (list[i] == cls) { - list.splice(i, 1); - i--; - found = true; - } - } - if (typeof enabled == "undefined") { - if (!found) list.push(cls); - } else { - if (enabled) list.push(cls); - } - node.className = list.join(" "); -} - -/* - * find_child - * - * Searches child nodes in depth first order and returns the first it finds - * with the className specified. - * TODO replace with querySelector - */ -function find_child(node, className) { - var pattern; - if (node == null || typeof node !== "object") { - return null; - } - if (typeof className === "string") { - pattern = new RegExp("\\b" + className + "\\b"); - } else { - pattern = className; - } - if (node.nodeType == Node.ELEMENT_NODE && - pattern.test(node.className)) { - return node; - } else { - var result = null; - for (var i = 0; i < node.childNodes.length; i++) { - result = find_child(node.childNodes[i], pattern); - if (result != null) break; - } - return result; - } -} - -/* - * find_parent - * - * Searches parent nodes outwards from the node and returns the first it finds - * with the className specified. - */ -function find_parent(node, className) { - var pattern; - pattern = new RegExp("\\b" + className + "\\b"); - do { - if (node.nodeType == Node.ELEMENT_NODE && - pattern.test(node.className)) { - return node; - } - } while (node = node.parentNode); - return null; -} - -/* - * find_parent_tag - * - * Searches parent nodes outwards from the node and returns the first it finds - * with the tag name specified. HTML tags should be specified in upper case. - */ -function find_parent_tag(node, tag_name) { - do { - if (node.nodeType == Node.ELEMENT_NODE && node.tagName == tag_name) { - return node; - } - } while (node = node.parentNode); - return null; -} - -/* - * __toggle_help - * - * Uses the 'topic' property of the this object to - * toggle display of a help topic. - * - * This function is not intended to be called directly. - */ -function __toggle_help(e) { - if (!e) e = window.event; - if (e.type === "keydown") { - if (e.keyCode !== 13 && e.keyCode !== 32) { - return; - } - // stop a submit or something like that - e.preventDefault(); - } - - help_popup(this, this.getAttribute("data-topic")); -} - -function setup_help_button(button) { - "use strict"; - var topic; - if (button.hasAttribute("data-topic")) { - topic = button.getAttribute("data-topic"); - if (document.getElementById(topic) != null) { - button.tabIndex = "0"; // make keyboard selectable - button.addEventListener("click", function() { - help_popup(button, topic); - }, false); - button.addEventListener("keydown", function(e) { - // toggle only on Enter or Spacebar, let other keys do their thing - if (e.keyCode !== 13 && e.keyCode !== 32) return; - // stop a submit or something like that - e.preventDefault(); - help_popup(button, topic); - }, false); - } else { - button.style.visibility = "hidden"; - } - } - button.className += " active"; -} - -/* - * help_button - * - * Makes a help button for the passed topic. - */ -function help_button(topic) { - var btn = document.createElement("div"); - btn.className = "help"; - btn.setAttribute("data-topic", topic); - setup_help_button(btn); - return btn; -} - -/* - * prepare_download - * - * Sets the attributes of a link to setup a file download using the given content. - * If no link is provided then create one and click it. - */ -function prepare_download(content, mimetype, filename, link) { - "use strict"; - // if no link is provided then create one and click it - var click_link = false; - if (!link) { - link = document.createElement("a"); - click_link = true; - } - try { - // Use a BLOB to convert the text into a data URL. - // We could do this manually with a base 64 conversion. - // This will only be supported on modern browsers, - // hence the try block. - var blob = new Blob([content], {type: mimetype}); - var reader = new FileReader(); - reader.onloadend = function() { - // If we're lucky the browser will also support the download - // attribute which will let us suggest a file name to save the link. - // Otherwise it is likely that the filename will be unintelligible. - link.setAttribute("download", filename); - link.href = reader.result; - if (click_link) { - // must add the link to click it - document.body.appendChild(link); - link.click(); - document.body.removeChild(link); - } - } - reader.readAsDataURL(blob); - } catch (error) { - if (console && console.log) console.log(error); - // probably an old browser - link.href = ""; - link.visible = false; - } -} - -/* - * add_cell - * - * Add a cell to the table row. - */ -function add_cell(row, node, cls, click_action) { - var cell = row.insertCell(row.cells.length); - if (node) cell.appendChild(node); - if (cls && cls !== "") cell.className = cls; - if (click_action) cell.addEventListener("click", click_action, false); -} - -/* - * add_header_cell - * - * Add a header cell to the table row. - */ -function add_header_cell(row, node, help_topic, cls, colspan) { - var th = document.createElement("th"); - if (node) th.appendChild(node); - if (help_topic && help_topic !== "") th.appendChild(help_button(help_topic)); - if (cls && cls !== "") th.className = cls; - if (typeof colspan == "number" && colspan > 1) th.colSpan = colspan; - row.appendChild(th); -} - -/* - * add_text_cell - * - * Add a text cell to the table row. - */ -function add_text_cell(row, text, cls, action) { - var node = null; - if (typeof(text) != 'undefined') node = document.createTextNode(text); - add_cell(row, node, cls, action); -} - -/* - * add_text_header_cell - * - * Add a text header cell to the table row. - */ -function add_text_header_cell(row, text, help_topic, cls, action, colspan) { - var node = null; - if (typeof(text) != 'undefined') { - var nbsp = (help_topic ? "\u00A0" : ""); - var str = "" + text; - var parts = str.split(/\n/); - if (parts.length === 1) { - if (action) { - node = document.createElement("span"); - node.appendChild(document.createTextNode(str + nbsp)); - } else { - node = document.createTextNode(str + nbsp); - } - } else { - node = document.createElement("span"); - for (var i = 0; i < parts.length; i++) { - if (i !== 0) { - node.appendChild(document.createElement("br")); - } - node.appendChild(document.createTextNode(parts[i])); - } - } - if (action) { - node.addEventListener("click", action, false); - node.style.cursor = "pointer"; - } - } - add_header_cell(row, node, help_topic, cls, colspan); -} - -function setup_help() { - "use strict"; - var help_buttons, i; - help_buttons = document.querySelectorAll(".help:not(.active)"); - for (i = 0; i < help_buttons.length; i++) { - setup_help_button(help_buttons[i]); - } -} - -function setup_scrollpad() { - "use strict"; - if (document.getElementsByTagName('body')[0].hasAttribute("data-scrollpad") && document.getElementById("scrollpad") == null) { - window.addEventListener("resize", update_scroll_pad, false); - update_scroll_pad(); - } -} - -// anon function to avoid polluting global scope -(function() { - "use strict"; - window.addEventListener("load", function load(evt) { - window.removeEventListener("load", load, false); - setup_help(); - setup_scrollpad(); - }, false); -})(); - -/* - * make_link - * - * Creates a text node and if a URL is specified it surrounds it with a link. - * If the URL doesn't begin with "http://" it automatically adds it, as - * relative links don't make much sense in this context. - */ -function make_link(text, url) { - var textNode = null; - var link = null; - if (typeof text !== "undefined" && text !== null) textNode = document.createTextNode(text); - if (typeof url === "string") { - if (url.indexOf("//") == -1) { - url = "http://" + url; - } - link = document.createElement('a'); - link.href = url; - if (textNode) link.appendChild(textNode); - return link; - } - return textNode; -} -</script> - <script> -function motif_logo_template(inputs) { - function _input(name) { - if (typeof inputs[name] === "undefined") { - throw new Error("Missing template variable: " + name); - } - return inputs[name]; - } - return ( -"%!PS-Adobe-3.0 EPSF-3.0\n" + -"%%Title: Sequence Logo : " + _input("TITLE") + "\n" + -"%%Creator: " + _input("CREATOR") + "\n" + -"%%CreationDate: " + _input("CREATIONDATE") + "\n" + -"%%BoundingBox: 0 0 " + _input("BOUNDINGWIDTH") + " " + _input("BOUNDINGHEIGHT") + " \n" + -"%%Pages: 0\n" + -"%%DocumentFonts: \n" + -"%%EndComments\n" + -"\n" + -"% ---- CONSTANTS ----\n" + -"\/cmfactor 72 2.54 div def % defines points -> cm conversion\n" + -"\/cm {cmfactor mul} bind def % defines centimeters\n" + -"\n" + -"% ---- VARIABLES ----\n" + -"\n" + -"% NA = Nucleic Acid, AA = Amino Acid\n" + -"\/logoType (" + _input("LOGOTYPE") + ") def \n" + -"\n" + -"\/logoTitle (" + _input("TITLE") + ") def\n" + -"\n" + -"% Dimensions in cm\n" + -"\/logoWidth " + _input("LOGOWIDTH") + " cm def\n" + -"\/logoHeight " + _input("LOGOLINEHEIGHT") + " cm def\n" + -"\/totalHeight " + _input("LOGOHEIGHT") + " cm def\n" + -"\n" + -"\/yaxis " + _input("YAXIS") + " def\n" + -"\/yaxisLabel (" + _input("YAXISLABEL") + ") def\n" + -"\/yaxisBits " + _input("BARBITS") + " def % bits\n" + -"\/yaxisTicBits " + _input("TICBITS") + " def\n" + -"\n" + -"\/xaxis " + _input("NUMBERING") + " def\n" + -"\/xaxisLabel (" + _input("XAXISLABEL") + ") def\n" + -"\/showEnds (" + _input("SHOWENDS") + ") def \n" + -"\n" + -"\/showFineprint true def\n" + -"\/fineprint (" + _input("FINEPRINT") + ") def\n" + -"\n" + -"\/charsPerLine " + _input("CHARSPERLINE") + " def\n" + -"\n" + -"\/showingBox " + _input("SHOWINGBOX") + " def \n" + -"\/shrinking false def % true falses\n" + -"\/shrink 1.0 def\n" + -"\/outline " + _input("OUTLINE") + " def\n" + -"\n" + -"\/IbeamFraction " + _input("ERRORBARFRACTION") + " def\n" + -"\/IbeamGray 0.50 def\n" + -"\/IbeamLineWidth 0.5 def\n" + -"\n" + -"\/fontsize " + _input("FONTSIZE") + " def\n" + -"\/titleFontsize " + _input("TITLEFONTSIZE") + " def\n" + -"\/smallFontsize " + _input("SMALLFONTSIZE") + " def\n" + -"\n" + -"\/topMargin " + _input("TOPMARGIN") + " cm def\n" + -"\/bottomMargin " + _input("BOTTOMMARGIN") + " cm def\n" + -"\n" + -"\/defaultColor [0 0 0] def \n" + -"\n" + -_input("COLORDICT") + "\n" + -"\n" + -"\/colorDict fullColourDict def\n" + -"\n" + -"% ---- DERIVED PARAMETERS ----\n" + -"\n" + -"\/leftMargin\n" + -" fontsize 3.5 mul\n" + -"\n" + -"def \n" + -"\n" + -"\/rightMargin \n" + -" %Add extra room if showing ends\n" + -" showEnds (false) eq { fontsize}{fontsize 1.5 mul} ifelse\n" + -"def\n" + -"\n" + -"\/yaxisHeight \n" + -" logoHeight \n" + -" bottomMargin sub \n" + -" topMargin sub\n" + -"def\n" + -"\n" + -"\/ticWidth fontsize 2 div def\n" + -"\n" + -"\/pointsPerBit yaxisHeight yaxisBits div def\n" + -"\n" + -"\/stackMargin 1 def\n" + -"\n" + -"% Do not add space aroung characters if characters are boxed\n" + -"\/charRightMargin \n" + -" showingBox { 0.0 } {stackMargin} ifelse\n" + -"def\n" + -"\n" + -"\/charTopMargin \n" + -" showingBox { 0.0 } {stackMargin} ifelse\n" + -"def\n" + -"\n" + -"\/charWidth\n" + -" logoWidth\n" + -" leftMargin sub\n" + -" rightMargin sub\n" + -" charsPerLine div\n" + -" charRightMargin sub\n" + -"def\n" + -"\n" + -"\/charWidth4 charWidth 4 div def\n" + -"\/charWidth2 charWidth 2 div def\n" + -"\n" + -"\/stackWidth \n" + -" charWidth charRightMargin add\n" + -"def\n" + -" \n" + -"\/numberFontsize \n" + -" fontsize charWidth lt {fontsize}{charWidth} ifelse\n" + -"def\n" + -"\n" + -"% movements to place 5'\/N and 3'\/C symbols\n" + -"\/leftEndDeltaX fontsize neg def\n" + -"\/leftEndDeltaY fontsize 1.5 mul neg def\n" + -"\/rightEndDeltaX fontsize 0.25 mul def\n" + -"\/rightEndDeltaY leftEndDeltaY def\n" + -"\n" + -"% Outline width is proporional to charWidth, \n" + -"% but no less that 1 point\n" + -"\/outlinewidth \n" + -" charWidth 32 div dup 1 gt {}{pop 1} ifelse\n" + -"def\n" + -"\n" + -"\n" + -"% ---- PROCEDURES ----\n" + -"\n" + -"\/StartLogo { \n" + -" % Save state\n" + -" save \n" + -" gsave \n" + -"\n" + -" % Print Logo Title, top center \n" + -" gsave \n" + -" SetStringFont\n" + -"\n" + -" logoWidth 2 div\n" + -" logoTitle\n" + -" stringwidth pop 2 div sub\n" + -" totalHeight\n" + -" titleFontsize sub\n" + -" moveto\n" + -"\n" + -" logoTitle\n" + -" show\n" + -" grestore\n" + -"\n" + -" % Print X-axis label, bottom center\n" + -" gsave\n" + -" SetStringFont\n" + -"\n" + -" logoWidth 2 div\n" + -" xaxisLabel\n" + -" stringwidth pop 2 div sub\n" + -" 0\n" + -" titleFontsize 3 div\n" + -" add\n" + -" moveto\n" + -"\n" + -" xaxisLabel\n" + -" show\n" + -" grestore\n" + -"\n" + -" % Show Fine Print\n" + -" showFineprint {\n" + -" gsave\n" + -" SetSmallFont\n" + -" logoWidth\n" + -" fineprint stringwidth pop sub\n" + -" smallFontsize sub\n" + -" smallFontsize 3 div\n" + -" moveto\n" + -" \n" + -" fineprint show\n" + -" grestore\n" + -" } if\n" + -"\n" + -" % Move to lower left corner of last line, first stack\n" + -" leftMargin bottomMargin translate\n" + -"\n" + -" % Move above first line ready for StartLine \n" + -" 0 totalHeight translate\n" + -"\n" + -" SetLogoFont\n" + -"} bind def\n" + -"\n" + -"\/EndLogo { \n" + -" grestore \n" + -" showpage \n" + -" restore \n" + -"} bind def\n" + -"\n" + -"\n" + -"\/StartLine { \n" + -" % move down to the bottom of the line:\n" + -" 0 logoHeight neg translate\n" + -" \n" + -" gsave \n" + -" yaxis { MakeYaxis } if\n" + -" xaxis { showEnds (true) eq {ShowLeftEnd} if } if\n" + -"} bind def\n" + -"\n" + -"\/EndLine{ \n" + -" xaxis { showEnds (true) eq {ShowRightEnd} if } if\n" + -" grestore \n" + -"} bind def\n" + -"\n" + -"\n" + -"\/MakeYaxis {\n" + -" gsave \n" + -" stackMargin neg 0 translate\n" + -" ShowYaxisBar\n" + -" ShowYaxisLabel\n" + -" grestore\n" + -"} bind def\n" + -"\n" + -"\n" + -"\/ShowYaxisBar { \n" + -" gsave \n" + -" SetStringFont\n" + -"\n" + -" \/str 10 string def % string to hold number \n" + -" \/smallgap stackMargin 2 div def\n" + -"\n" + -" % Draw first tic and bar\n" + -" gsave \n" + -" ticWidth neg 0 moveto \n" + -" ticWidth 0 rlineto \n" + -" 0 yaxisHeight rlineto\n" + -" stroke\n" + -" grestore\n" + -"\n" + -" \n" + -" % Draw the tics\n" + -" % initial increment limit proc for\n" + -" 0 yaxisTicBits yaxisBits abs %cvi\n" + -" {\/loopnumber exch def\n" + -"\n" + -" % convert the number coming from the loop to a string\n" + -" % and find its width\n" + -" loopnumber 10 str cvrs\n" + -" \/stringnumber exch def % string representing the number\n" + -"\n" + -" stringnumber stringwidth pop\n" + -" \/numberwidth exch def % width of number to show\n" + -"\n" + -" \/halfnumberheight\n" + -" stringnumber CharBoxHeight 2 div\n" + -" def\n" + -"\n" + -" numberwidth % move back width of number\n" + -" neg loopnumber pointsPerBit mul % shift on y axis\n" + -" halfnumberheight sub % down half the digit\n" + -"\n" + -" moveto % move back the width of the string\n" + -"\n" + -" ticWidth neg smallgap sub % Move back a bit more \n" + -" 0 rmoveto % move back the width of the tic \n" + -"\n" + -" stringnumber show\n" + -" smallgap 0 rmoveto % Make a small gap \n" + -"\n" + -" % now show the tic mark\n" + -" 0 halfnumberheight rmoveto % shift up again\n" + -" ticWidth 0 rlineto\n" + -" stroke\n" + -" } for\n" + -" grestore\n" + -"} bind def\n" + -"\n" + -"\/ShowYaxisLabel {\n" + -" gsave\n" + -" SetStringFont\n" + -"\n" + -" % How far we move left depends on the size of\n" + -" % the tic labels.\n" + -" \/str 10 string def % string to hold number \n" + -" yaxisBits yaxisTicBits div cvi yaxisTicBits mul \n" + -" str cvs stringwidth pop\n" + -" ticWidth 1.5 mul add neg \n" + -"\n" + -"\n" + -" yaxisHeight\n" + -" yaxisLabel stringwidth pop\n" + -" sub 2 div\n" + -"\n" + -" translate\n" + -" 90 rotate\n" + -" 0 0 moveto\n" + -" yaxisLabel show\n" + -" grestore\n" + -"} bind def\n" + -"\n" + -"\n" + -"\/StartStack { % <stackNumber> startstack\n" + -" xaxis {MakeNumber}{pop} ifelse\n" + -" gsave\n" + -"} bind def\n" + -"\n" + -"\/EndStack {\n" + -" grestore\n" + -" stackWidth 0 translate\n" + -"} bind def\n" + -"\n" + -"\n" + -"% Draw a character whose height is proportional to symbol bits\n" + -"\/MakeSymbol{ % charbits character MakeSymbol\n" + -" gsave\n" + -" \/char exch def\n" + -" \/bits exch def\n" + -"\n" + -" \/bitsHeight \n" + -" bits pointsPerBit mul \n" + -" def\n" + -"\n" + -" \/charHeight \n" + -" bitsHeight charTopMargin sub\n" + -" dup \n" + -" 0.0 gt {}{pop 0.0} ifelse % if neg replace with zero \n" + -" def \n" + -" \n" + -" charHeight 0.0 gt {\n" + -" char SetColor\n" + -" charWidth charHeight char ShowChar\n" + -"\n" + -" showingBox { % Unfilled box\n" + -" 0 0 charWidth charHeight false ShowBox\n" + -" } if\n" + -"\n" + -"\n" + -" } if\n" + -"\n" + -" grestore\n" + -"\n" + -" 0 bitsHeight translate \n" + -"} bind def\n" + -"\n" + -"\n" + -"\/ShowChar { % <width> <height> <char> ShowChar\n" + -" gsave\n" + -" \/tc exch def % The character\n" + -" \/ysize exch def % the y size of the character\n" + -" \/xsize exch def % the x size of the character\n" + -"\n" + -" \/xmulfactor 1 def \n" + -" \/ymulfactor 1 def\n" + -" \/limmulfactor 0.01 def\n" + -" \/drawable true def\n" + -"\n" + -" \n" + -" % if ysize is negative, make everything upside down!\n" + -" ysize 0 lt {\n" + -" % put ysize normal in this orientation\n" + -" \/ysize ysize abs def\n" + -" xsize ysize translate\n" + -" 180 rotate\n" + -" } if\n" + -"\n" + -" shrinking {\n" + -" xsize 1 shrink sub 2 div mul\n" + -" ysize 1 shrink sub 2 div mul translate \n" + -"\n" + -" shrink shrink scale\n" + -" } if\n" + -"\n" + -" % Calculate the font scaling factors\n" + -" % Loop twice to catch small correction due to first scaling\n" + -" 2 {\n" + -" gsave\n" + -" xmulfactor ymulfactor scale\n" + -" \n" + -" ysize % desired size of character in points\n" + -" tc CharBoxHeight \n" + -" dup 0.0 ne {\n" + -" div % factor by which to scale up the character\n" + -" \/ymulfactor exch def\n" + -" } % end if\n" + -" {pop pop}\n" + -" ifelse\n" + -"\n" + -" xsize % desired size of character in points\n" + -" tc CharBoxWidth \n" + -" dup 0.0 ne {\n" + -" div % factor by which to scale up the character\n" + -" \/xmulfactor exch def\n" + -" } % end if\n" + -" {pop pop}\n" + -" ifelse\n" + -" grestore\n" + -" % if the multiplication factors get too small we need to avoid a crash\n" + -" xmulfactor limmulfactor lt {\n" + -" \/xmulfactor 1 def\n" + -" \/drawable false def\n" + -" } if\n" + -" ymulfactor limmulfactor lt {\n" + -" \/ymulfactor 1 def\n" + -" \/drawable false def\n" + -" } if\n" + -" } repeat\n" + -"\n" + -" % Adjust horizontal position if the symbol is an I\n" + -" tc (I) eq {\n" + -" charWidth 2 div % half of requested character width\n" + -" tc CharBoxWidth 2 div % half of the actual character\n" + -" sub 0 translate\n" + -" % Avoid x scaling for I \n" + -" \/xmulfactor 1 def \n" + -" } if\n" + -"\n" + -"\n" + -" % ---- Finally, draw the character\n" + -" drawable { \n" + -" newpath\n" + -" xmulfactor ymulfactor scale\n" + -"\n" + -" % Move lower left corner of character to start point\n" + -" tc CharBox pop pop % llx lly : Lower left corner\n" + -" exch neg exch neg\n" + -" moveto\n" + -"\n" + -" outline { % outline characters:\n" + -" outlinewidth setlinewidth\n" + -" tc true charpath\n" + -" gsave 1 setgray fill grestore\n" + -" clip stroke\n" + -" } { % regular characters\n" + -" tc show\n" + -" } ifelse\n" + -" } if\n" + -"\n" + -" grestore\n" + -"} bind def\n" + -"\n" + -"\n" + -"\/ShowBox { % x1 y1 x2 y2 filled ShowBox\n" + -" gsave\n" + -" \/filled exch def \n" + -" \/y2 exch def\n" + -" \/x2 exch def\n" + -" \/y1 exch def\n" + -" \/x1 exch def\n" + -" newpath\n" + -" x1 y1 moveto\n" + -" x2 y1 lineto\n" + -" x2 y2 lineto\n" + -" x1 y2 lineto\n" + -" closepath\n" + -"\n" + -" clip\n" + -" \n" + -" filled {\n" + -" fill\n" + -" }{ \n" + -" 0 setgray stroke \n" + -" } ifelse\n" + -"\n" + -" grestore\n" + -"} bind def\n" + -"\n" + -"\n" + -"\/MakeNumber { % number MakeNumber\n" + -" gsave\n" + -" SetNumberFont\n" + -" stackWidth 0 translate\n" + -" 90 rotate % rotate so the number fits\n" + -" dup stringwidth pop % find the length of the number\n" + -" neg % prepare for move\n" + -" stackMargin sub % Move back a bit\n" + -" charWidth (0) CharBoxHeight % height of numbers\n" + -" sub 2 div %\n" + -" moveto % move back to provide space\n" + -" show\n" + -" grestore\n" + -"} bind def\n" + -"\n" + -"\n" + -"\/Ibeam{ % heightInBits Ibeam\n" + -" gsave\n" + -" % Make an Ibeam of twice the given height in bits\n" + -" \/height exch pointsPerBit mul def \n" + -" \/heightDRAW height IbeamFraction mul def\n" + -"\n" + -" IbeamLineWidth setlinewidth\n" + -" IbeamGray setgray \n" + -"\n" + -" charWidth2 height neg translate\n" + -" ShowIbar\n" + -" newpath\n" + -" 0 0 moveto\n" + -" 0 heightDRAW rlineto\n" + -" stroke\n" + -" newpath\n" + -" 0 height moveto\n" + -" 0 height rmoveto\n" + -" currentpoint translate\n" + -" ShowIbar\n" + -" newpath\n" + -" 0 0 moveto\n" + -" 0 heightDRAW neg rlineto\n" + -" currentpoint translate\n" + -" stroke\n" + -" grestore\n" + -"} bind def\n" + -"\n" + -"\n" + -"\/ShowIbar { % make a horizontal bar\n" + -" gsave\n" + -" newpath\n" + -" charWidth4 neg 0 moveto\n" + -" charWidth4 0 lineto\n" + -" stroke\n" + -" grestore\n" + -"} bind def\n" + -"\n" + -"\n" + -"\/ShowLeftEnd {\n" + -" gsave\n" + -" SetStringFont\n" + -" leftEndDeltaX leftEndDeltaY moveto\n" + -" logoType (NA) eq {(5) show ShowPrime} if\n" + -" logoType (AA) eq {(N) show} if\n" + -" grestore\n" + -"} bind def\n" + -"\n" + -"\n" + -"\/ShowRightEnd { \n" + -" gsave\n" + -" SetStringFont\n" + -" rightEndDeltaX rightEndDeltaY moveto\n" + -" logoType (NA) eq {(3) show ShowPrime} if\n" + -" logoType (AA) eq {(C) show} if\n" + -" grestore\n" + -"} bind def\n" + -"\n" + -"\n" + -"\/ShowPrime {\n" + -" gsave\n" + -" SetPrimeFont\n" + -" (\\242) show \n" + -" grestore\n" + -"} bind def\n" + -"\n" + -" \n" + -"\/SetColor{ % <char> SetColor\n" + -" dup colorDict exch known {\n" + -" colorDict exch get aload pop setrgbcolor\n" + -" } {\n" + -" pop\n" + -" defaultColor aload pop setrgbcolor\n" + -" } ifelse \n" + -"} bind def\n" + -"\n" + -"% define fonts\n" + -"\/SetTitleFont {\/Times-Bold findfont titleFontsize scalefont setfont} bind def\n" + -"\/SetLogoFont {\/Helvetica-Bold findfont charWidth scalefont setfont} bind def\n" + -"\/SetStringFont{\/Helvetica-Bold findfont fontsize scalefont setfont} bind def\n" + -"\/SetPrimeFont {\/Symbol findfont fontsize scalefont setfont} bind def\n" + -"\/SetSmallFont {\/Helvetica findfont smallFontsize scalefont setfont} bind def\n" + -"\n" + -"\/SetNumberFont {\n" + -" \/Helvetica-Bold findfont \n" + -" numberFontsize\n" + -" scalefont\n" + -" setfont\n" + -"} bind def\n" + -"\n" + -"%Take a single character and return the bounding box\n" + -"\/CharBox { % <char> CharBox <lx> <ly> <ux> <uy>\n" + -" gsave\n" + -" newpath\n" + -" 0 0 moveto\n" + -" % take the character off the stack and use it here:\n" + -" true charpath \n" + -" flattenpath \n" + -" pathbbox % compute bounding box of 1 pt. char => lx ly ux uy\n" + -" % the path is here, but toss it away ...\n" + -" grestore\n" + -"} bind def\n" + -"\n" + -"\n" + -"% The height of a characters bounding box\n" + -"\/CharBoxHeight { % <char> CharBoxHeight <num>\n" + -" CharBox\n" + -" exch pop sub neg exch pop\n" + -"} bind def\n" + -"\n" + -"\n" + -"% The width of a characters bounding box\n" + -"\/CharBoxWidth { % <char> CharBoxHeight <num>\n" + -" CharBox\n" + -" pop exch pop sub neg \n" + -"} bind def\n" + -"\n" + -"% Set the colour scheme to be faded to indicate trimming\n" + -"\/MuteColour {\n" + -" \/colorDict mutedColourDict def\n" + -"} def\n" + -"\n" + -"% Restore the colour scheme to the normal colours\n" + -"\/RestoreColour {\n" + -" \/colorDict fullColourDict def\n" + -"} def\n" + -"\n" + -"% Draw the background for a trimmed section\n" + -"% takes the number of columns as a parameter\n" + -"\/DrawTrimBg { % <num> DrawTrimBox\n" + -" \/col exch def\n" + -" \n" + -" \/boxwidth \n" + -" col stackWidth mul \n" + -" def\n" + -" \n" + -" gsave\n" + -" 0.97 setgray\n" + -"\n" + -" newpath\n" + -" 0 0 moveto\n" + -" boxwidth 0 rlineto\n" + -" 0 yaxisHeight rlineto\n" + -" 0 yaxisHeight lineto\n" + -" closepath\n" + -" \n" + -" fill\n" + -" grestore\n" + -"} def\n" + -"\n" + -"\/DrawTrimEdge {\n" + -" gsave\n" + -" 0.2 setgray\n" + -" [2] 0 setdash\n" + -"\n" + -" newpath\n" + -" 0 0 moveto\n" + -" 0 yaxisHeight lineto\n" + -" \n" + -" stroke\n" + -"\n" + -"} def\n" + -"\n" + -"\n" + -"% Deprecated names\n" + -"\/startstack {StartStack} bind def\n" + -"\/endstack {EndStack} bind def\n" + -"\/makenumber {MakeNumber} bind def\n" + -"\/numchar { MakeSymbol } bind def\n" + -"\n" + -"%%EndProlog\n" + -"\n" + -"%%Page: 1 1\n" + -"StartLogo\n" + -"\n" + -_input("DATA") + "\n" + -"\n" + -"EndLogo\n" + -"\n" + -"%%EOF\n" - ); -}</script> - <script> -//====================================================================== -// start Alphabet object -//====================================================================== -var Alphabet = function(alphabet, background) { - "use strict"; - var i, j, sym, aliases, complement, comp_e_sym, ambigs, generate_background; - generate_background = (background == null); - if (generate_background) { - background = []; - for (i = 0; i < alphabet.ncore; i++) background[i] = 1.0 / alphabet.ncore; - } else if (alphabet.ncore != background.length) { - throw new Error("The background length does not match the alphabet length."); - } - this.name = alphabet.name; - this.like = (alphabet.like != null ? alphabet.like.toUpperCase() : null); - this.ncore = alphabet.ncore; - this.symbols = alphabet.symbols; - this.background = background; - this.genbg = generate_background; - this.encode = {}; - this.encode2core = {}; - this.complement = {}; - // check if all symbols are same case - var seen_uc = false; - var seen_lc = false; - var check_case = function (syms) { - var s, sym; - if (typeof syms === "string") { - for (s = 0; s < syms.length; s++) { - sym = syms.charAt(s); - if (sym >= 'a' && sym <= 'z') seen_lc = true; - else if (sym >= 'A' && sym <= 'Z') seen_uc = true; - } - } - }; - for (i = 0; i < this.symbols.length; i++) { - check_case(this.symbols[i].symbol); - check_case(this.symbols[i].aliases); - } - // now map symbols to indexes - var update_array = function(array, syms, index) { - var s, sym; - if (typeof syms === "string") { - for (s = 0; s < syms.length; s++) { - sym = syms.charAt(s); - array[sym] = index; - // when only a single case is used, then encode as case insensitive - if (seen_uc != seen_lc) { - if (sym >= 'a' && sym <= 'z') { - array[sym.toUpperCase()] = index; - } else if (sym >= 'A' && sym <= 'Z') { - array[sym.toLowerCase()] = index; - } - } - } - } - } - // map core symbols to index - for (i = 0; i < this.ncore; i++) { - update_array(this.encode2core, this.symbols[i].symbol, i); - update_array(this.encode, this.symbols[i].symbol, i); - update_array(this.encode2core, this.symbols[i].aliases, i); - update_array(this.encode, this.symbols[i].aliases, i); - } - // map ambigous symbols to index - ambigs = {}; - for (i = this.ncore; i < this.symbols.length; i++) { - update_array(this.encode, this.symbols[i].symbol, i); - update_array(this.encode, this.symbols[i].aliases, i); - ambigs[this.symbols[i].equals] = i; - } - // determine complements - for (i = 0; i < this.ncore; i++) { - complement = this.symbols[i].complement; - if (typeof complement === "string") { - this.complement[i] = this.encode2core[complement]; - } - } - next_symbol: - for (i = this.ncore; i < this.symbols.length; i++) { - complement = ""; - for (j = 0; j < this.symbols[i].equals.length; j++) { - comp_e_sym = this.complement[this.encode2core[this.symbols[i].equals.charAt(j)]]; - if (typeof comp_e_sym !== "number") continue next_symbol; - complement += this.symbols[comp_e_sym].symbol; - } - complement = complement.split("").sort().join(""); - if (typeof ambigs[complement] === "number") { - this.complement[i] = ambigs[complement]; - } - } - // determine case insensitivity - this.case_insensitive = true; - if (seen_uc == seen_lc) { - // when there is a mixture of cases it probably won't - // be case insensitive but we still need to check - loop: - for (i = 0; i < this.symbols.length; i++) { - sym = this.symbols[i].symbol; - if (sym >= 'A' && sym <= 'Z') { - if (this.encode[sym.toLowerCase()] != i) { - this.case_insensitive = false; - break loop; - } - } else if (sym >= 'a' && sym <= 'z') { - if (this.encode[sym.toUpperCase()] != i) { - this.case_insensitive = false; - break loop; - } - } - aliases = this.symbols[i].aliases; - if (aliases != null) { - for (j = 0; j < aliases.length; j++) { - sym = aliases.charAt(j); - if (sym >= 'A' && sym <= 'Z') { - if (this.encode[sym.toLowerCase()] != i) { - this.case_insensitive = false; - break loop; - } - } else if (sym >= 'a' && sym <= 'z') { - if (this.encode[sym.toUpperCase()] != i) { - this.case_insensitive = false; - break loop; - } - } - } - } - } - } - // normalise aliases to remove the prime symbol and eliminate - // the alternate cases when the alphabet is case insensitive - var seen, out; - for (i = 0; i < this.symbols.length; i++) { - sym = this.symbols[i].symbol; - aliases = this.symbols[i].aliases; - if (typeof aliases != "string") aliases = ""; - seen = {}; - out = []; - if (this.case_insensitive) { - sym = sym.toUpperCase(); - aliases = aliases.toUpperCase(); - } - seen[sym] = true; - for (j = 0; j < aliases.length; j++) { - if (!seen[aliases.charAt(j)]) { - seen[aliases.charAt(j)] = true; - out.push(aliases.charAt(j)); - } - } - this.symbols[i].aliases = out.sort().join(""); - } -}; -// return the name of the alphabet -Alphabet.prototype.get_alphabet_name = function() { - return this.name; -}; -// return if the alphabet can be complemented -Alphabet.prototype.has_complement = function() { - return (typeof this.symbols[0].complement === "string"); -}; -// return true if an uppercase letter has the same meaning as the lowercase form -Alphabet.prototype.is_case_insensitive = function() { - return this.case_insensitive; -}; -// return the information content of an alphabet letter -Alphabet.prototype.get_ic = function() { - return Math.log(this.ncore) / Math.LN2; -}; -// return the count of the core alphabet symbols -Alphabet.prototype.get_size_core = function() { - return this.ncore; -}; -// return the count of all alphabet symbols -Alphabet.prototype.get_size_full = function() { - return this.symbols.length; -}; -// return the symbol for the given alphabet index -Alphabet.prototype.get_symbol = function(alph_index) { - "use strict"; - if (alph_index < 0 || alph_index >= this.symbols.length) { - throw new Error("Alphabet index out of bounds"); - } - return this.symbols[alph_index].symbol; -}; -// return the aliases for the given alphabet index -Alphabet.prototype.get_aliases = function(alph_index) { - "use strict"; - if (alph_index < 0 || alph_index >= this.symbols.length) { - throw new Error("Alphabet index out of bounds"); - } - var sym_obj = this.symbols[alph_index]; - return (sym_obj.aliases != null ? sym_obj.aliases : ""); -}; -// return the name for the given alphabet index -Alphabet.prototype.get_name = function(alph_index) { - "use strict"; - var sym; - if (alph_index < 0 || alph_index >= this.symbols.length) { - throw new Error("Alphabet index out of bounds"); - } - sym = this.symbols[alph_index]; - return (typeof sym.name === "string" ? sym.name : sym.symbol); -}; -// return the alphabet it is like or null -Alphabet.prototype.get_like = function() { - "use strict"; - return this.like; -}; -// return the index of the complement for the given alphabet index -Alphabet.prototype.get_complement = function(alph_index) { - var comp_e_sym = this.complement[alph_index]; - if (typeof comp_e_sym === "number") { - return comp_e_sym; - } else { - return -1; - } -}; -// return a string containing the core symbols -Alphabet.prototype.get_symbols = function() { - "use strict"; - var i, core_symbols; - core_symbols = ""; - for (i = 0; i < this.ncore; i++) { - core_symbols += this.symbols[i].symbol; - } - return core_symbols; -}; -// return if the background was not a uniform generated background -Alphabet.prototype.has_bg = function() { - "use strict"; - return !this.genbg; -}; -// get the background frequency for the index -Alphabet.prototype.get_bg_freq = function(alph_index) { - "use strict"; - var freq, i, symbols; - if (alph_index >= 0) { - if (alph_index < this.ncore) { - return this.background[alph_index]; - } else if (alph_index < this.symbols.length) { - freq = 0; - symbols = this.symbols[alph_index].equals; - for (i = 0; i < symbols.length; i++) { - freq += this.background[this.encode2core[symbols.charAt(i)]]; - } - return freq; - } - } - throw new Error("The alphabet index is out of range."); -}; -// get the colour of the index -Alphabet.prototype.get_colour = function(alph_index) { - "use strict"; - if (alph_index < 0 || alph_index >= this.symbols.length) { - throw new Error("BAD_ALPHABET_INDEX"); - } - if (typeof this.symbols[alph_index].colour != "string") { - return "black"; - } - return "#" + this.symbols[alph_index].colour; -}; -// get the rgb componets of the colour at the index -Alphabet.prototype.get_rgb = function(alph_index) { - "use strict"; - if (alph_index < 0 || alph_index >= this.symbols.length) { - throw new Error("BAD_ALPHABET_INDEX"); - } - if (typeof this.symbols[alph_index].colour != "string") { - return {"red": 0, "green": 0, "blue": 0}; - } - var colour = this.symbols[alph_index].colour; - var red = parseInt(colour.substr(0, 2), 16) / 255; - var green = parseInt(colour.substr(2, 2), 16) / 255; - var blue = parseInt(colour.substr(4, 2), 16) / 255; - return {"red": red, "green": green, "blue": blue}; -}; -// convert a symbol into the index -Alphabet.prototype.get_index = function(letter) { - "use strict"; - var alph_index; - alph_index = this.encode[letter]; - if (typeof alph_index === "undefined") { - return -1; - } - return alph_index; -}; -// convert a symbol into the list of core indexes that it equals -Alphabet.prototype.get_indexes = function(letter) { - "use strict"; - var alph_index, comprise_str, i, comprise_list; - alph_index = this.encode[letter]; - if (typeof alph_index === "undefined") { - throw new Error("Unknown letter"); - } - comprise_str = this.symbols[alph_index].equals; - comprise_list = []; - if (typeof comprise_str == "string") { - for (i = 0; i < comprise_str.length; i++) { - comprise_list.push(this.encode2core[comprise_str.charAt(i)]); - } - } else { - comprise_list.push(alph_index); - } - return comprise_list; -}; -// check if a symbol is the primary way of representing the symbol in the alphabet -Alphabet.prototype.is_prime_symbol = function(letter) { - var alph_index; - alph_index = this.encode[letter]; - if (alph_index == null) return false; - if (this.is_case_insensitive()) { - return (this.symbols[alph_index].symbol.toUpperCase() == letter.toUpperCase()); - } else { - return (this.symbols[alph_index].symbol == letter); - } -}; -// compare 2 alphabets -Alphabet.prototype.equals = function(other) { - "use strict"; - var i, sym1, sym2; - // first check that it's actually an alphabet object - if (!(typeof other === "object" && other != null && other instanceof Alphabet)) { - return false; - } - // second shortcircuit if it's the same object - if (this === other) return true; - // compare - if (this.name !== other.name) return false; - if (this.ncore !== other.ncore) return false; - if (this.symbols.length !== other.symbols.length) return false; - for (i = 0; i < this.symbols.length; i++) { - sym1 = this.symbols[i]; - sym2 = other.symbols[i]; - if (sym1.symbol !== sym2.symbol) return false; - if (sym1.aliases !== sym2.aliases) return false; - if (sym1.name !== sym2.name) return false; - if (typeof sym1.colour !== typeof sym2.colour || - (typeof sym1.colour === "string" && typeof sym2.colour === "string" && - parseInt(sym1.colour, 16) != parseInt(sym2.colour, 16))) { - return false; - } - if (sym1.complement !== sym2.complement) return false; - if (sym1.equals !== sym2.equals) return false; - } - return true; -}; -Alphabet.prototype.check_core_subset = function(super_alph) { - var complement_same = true; - var seen_set = {}; - var sub_i, sub_symbol, super_i, super_symbol; - for (sub_i = 0; sub_i < this.ncore; sub_i++) { - sub_symbol = this.symbols[sub_i]; - super_i = super_alph.encode[sub_symbol.symbol]; - if (super_i == null) return 0; - super_symbol = super_alph.symbols[super_i]; - if (seen_set[super_i]) return 0; - seen_set[super_i] = true; - // check complement - if (sub_symbol.complement != null && super_symbol.complement != null) { - if (super_alph.encode[sub_symbol.complement] != super_alph.encode[super_symbol.complement]) { - complement_same = false; - } - } else if (sub_symbol.complement != null || super_symbol.complement != null) { - complement_same = false; - } - } - return (complement_same ? 1 : -1); -}; -// convert a sequence to its reverse complement -Alphabet.prototype.invcomp_seq = function(seq) { - "use strict"; - var syms, i, e_sym, comp_e_sym; - if (!this.has_complement()) throw new Error("Alphabet must be complementable"); - syms = seq.split(""); - for (i = 0; i < syms.length; i++) { - e_sym = this.encode[syms[i]]; - if (typeof e_sym === "undefined") { - e_sym = this.ncore; // wildcard - } - comp_e_sym = this.complement[e_sym]; - if (typeof comp_e_sym === "undefined") { - comp_e_sym = e_sym; // not complementable - } - syms[i] = this.symbols[comp_e_sym].symbol; - } - return syms.reverse().join(""); -}; -// convert the alphabet to the text version -Alphabet.prototype.as_text = function() { - "use strict"; - function name_as_text(name) { - var i, c, out; - out = "\""; - for (i = 0; i < name.length; i++) { - c = name.charAt(i); - if (c == "\"") { - out += "\\\""; - } else if (c == "/") { - out += "\\/"; - } else if (c == "\\") { - out += "\\\\"; - } else { - out += c; - } - } - out += "\""; - return out; - } - function symbol_as_text(sym) { - var out; - out = sym.symbol; - if (typeof sym.name === "string" && sym.name != sym.symbol) { - out += " " + name_as_text(sym.name); - } - if (typeof sym.colour === "string") { - out += " " + sym.colour; - } - return out; - } - var out, i, j, c, sym; - out = ""; - // output core symbols with 2 way complements - for (i = 0; i < this.ncore; i++) { - c = this.complement[i]; - if (typeof c === "number" && i < c && this.complement[c] === i) { - out += symbol_as_text(this.symbols[i]) + " ~ " + symbol_as_text(this.symbols[c]) + "\n"; - } - } - // output core symbols with no complement - for (i = 0; i < this.ncore; i++) { - if (typeof this.complement[i] === "undefined") { - out += symbol_as_text(this.symbols[i]) + "\n"; - } - } - // output ambiguous symbols that have comprising characters - for (i = this.ncore; i < this.symbols.length; i++) { - if (this.symbols[i].equals.length == 0) break; - out += symbol_as_text(this.symbols[i]) + " = " + this.symbols[i].equals + "\n"; - if (typeof this.symbols[i].aliases === "string") { - for (j = 0; j < this.symbols[i].aliases.length; j++) { - if (this.symbols[i].aliases.charAt(j) == this.symbols[i].symbol) continue; - out += this.symbols[i].aliases.charAt(j) + " = " + this.symbols[i].equals + "\n"; - } - } - } - // output aliases of core symbols - for (i = 0; i < this.ncore; i++) { - if (typeof this.symbols[i].aliases === "string") { - for (j = 0; j < this.symbols[i].aliases.length; j++) { - if (this.symbols[i].aliases.charAt(j) == this.symbols[i].symbol) continue; - out += this.symbols[i].aliases.charAt(j) + " = " + this.symbols[i].symbol + "\n"; - } - } - } - // output gap symbols - i = this.symbols.length - 1; - if (this.symbols[i].equals.length == 0) { - out += symbol_as_text(this.symbols[i]) + " =\n"; - if (typeof this.symbols[i].aliases === "string") { - for (j = 0; j < this.symbols[i].aliases.length; j++) { - if (this.symbols[i].aliases.charAt(j) == this.symbols[i].symbol) continue; - out += this.symbols[i].aliases.charAt(j) + " =\n"; - } - } - } - return out; -}; -// output the alphabet as it appears in minimal MEME format -Alphabet.prototype.as_meme = function() { - "use strict"; - function name_as_text(name) { - var i, c, out; - out = "\""; - for (i = 0; i < name.length; i++) { - c = name.charAt(i); - if (c == "\"") { - out += "\\\""; - } else if (c == "/") { - out += "\\/"; - } else if (c == "\\") { - out += "\\\\"; - } else { - out += c; - } - } - out += "\""; - return out; - } - if (this.equals(AlphStd.DNA)) { - return "ALPHABET= ACGT\n"; - } else if (this.equals(AlphStd.PROTEIN)) { - return "ALPHABET= ACDEFGHIKLMNPQRSTVWY\n"; - } else { - return "ALPHABET" + - (this.name != null ? " " + name_as_text(this.name) : "") + - (this.like != null ? " " + this.like + "-LIKE" : "") + "\n" + - this.as_text() + "END ALPHABET\n"; - } -}; - -// Returns a table showing all the letters in the alphabet -Alphabet.prototype.as_table = function() { - "use strict"; - var i, j, row, th, td, aliases, equals, sym; - var table = document.createElement("table"); - // create the core symbol header - row = table.insertRow(table.rows.length); - th = document.createElement("th"); - th.appendChild(document.createTextNode("Symbol(s)")); - row.appendChild(th); - th = document.createElement("th"); - th.appendChild(document.createTextNode("Name")); - row.appendChild(th); - th = document.createElement("th"); - if (this.has_complement()) { - th.appendChild(document.createTextNode("Complement")); - } - row.appendChild(th); - // list the core symbols - for (i = 0; i < this.ncore; i++) { - row = table.insertRow(table.rows.length); - td = document.createElement("td"); - if (this.symbols[i].colour != null) { - td.style.color = '#' + this.symbols[i].colour; - } - td.appendChild(document.createTextNode(this.symbols[i].symbol)); - aliases = this.get_aliases(i); - if (aliases.length > 0) { - td.appendChild(document.createTextNode(' ' + aliases.split('').join(' '))); - } - row.appendChild(td); - td = document.createElement("td"); - if (this.symbols[i].name != null) { - td.appendChild(document.createTextNode(this.symbols[i].name)); - } - row.appendChild(td); - td = document.createElement("td"); - if (this.symbols[i].complement != null) { - td.style.color = this.get_colour(this.get_index(this.symbols[i].complement)); - td.appendChild(document.createTextNode(this.symbols[i].complement)); - } - row.appendChild(td); - } - // create the ambiguous symbol header - row = table.insertRow(table.rows.length); - th = document.createElement("th"); - th.appendChild(document.createTextNode("Symbol(s)")); - row.appendChild(th); - th = document.createElement("th"); - th.appendChild(document.createTextNode("Name")); - row.appendChild(th); - th = document.createElement("th"); - th.appendChild(document.createTextNode("Matches")); - row.appendChild(th); - // list the ambiguous symbols - for (i = this.ncore; i < this.symbols.length; i++) { - row = table.insertRow(table.rows.length); - td = document.createElement("td"); - if (this.symbols[i].colour != null) { - td.style.color = '#' + this.symbols[i].colour; - } - td.appendChild(document.createTextNode(this.symbols[i].symbol)); - aliases = this.get_aliases(i); - if (aliases.length > 0) { - td.appendChild(document.createTextNode(' ' + aliases.split('').join(' '))); - } - row.appendChild(td); - td = document.createElement("td"); - if (this.symbols[i].name != null) { - td.appendChild(document.createTextNode(this.symbols[i].name)); - } - row.appendChild(td); - td = document.createElement("td"); - equals = this.symbols[i].equals.split(''); - for (j = 0; j < equals.length; j++) { - if (j != 0) td.appendChild(document.createTextNode(' ')); - sym = document.createElement("span"); - sym.style.color = this.get_colour(this.get_index(equals[j])); - sym.appendChild(document.createTextNode(equals[j])); - td.appendChild(sym); - } - row.appendChild(td); - } - return table; -}; - -// returns a dictionary of the colours for EPS -Alphabet.prototype._as_eps_dict = function() { - "use strict"; - var i, sym, rgb; - var out = "/fullColourDict <<\n"; - for (i = 0; i < this.ncore; i++) { - sym = this.get_symbol(i); - sym = sym.replace(/\\/g, "\\\\"); - sym = sym.replace(/\(/g, "\\("); - sym = sym.replace(/\)/g, "\\)"); - rgb = this.get_rgb(i); - out += " (" + sym + ") [" + rgb.red.toFixed(4) + " " + rgb.green.toFixed(4) + " " + rgb.blue.toFixed(4) + "]\n"; - } - out += ">> def\n"; - out += "/mutedColourDict <<\n"; - for (i = 0; i < this.ncore; i++) { - sym = this.get_symbol(i); - sym = sym.replace(/\\/g, "\\\\"); - sym = sym.replace(/\(/g, "\\("); - sym = sym.replace(/\)/g, "\\)"); - rgb = Alphabet.lighten_colour(this.get_rgb(i)); - out += " (" + sym + ") [" + rgb.red.toFixed(4) + " " + rgb.green.toFixed(4) + " " + rgb.blue.toFixed(4) + "]\n"; - } - out += ">> def\n"; - return out; -}; - -// return the alphabet name or a list of primary symbols -Alphabet.prototype.toString = function() { - "use strict"; - if (this.name != null) { - return this.name; - } else { - return this.get_symbols(); - } -}; - -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// Helper functions -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -// Convert a colour specified in RGB colourspace values into LAB colourspace -Alphabet.rgb2lab = function(rgb) { - "use strict"; - var xyzHelper, labHelper; - // XYZ helper - xyzHelper = function(value) { - if (value > 0.0445) { - value = (value + 0.055) / 1.055; - value = Math.pow(value, 2.4); - } else { - value /= 12.92; - } - value *= 100; - return value; - }; - // lab helper - labHelper = function(value) { - if (value > 0.008856) { - value = Math.pow(value, 1.0 / 3.0); - } else { - value = (7.787 * value) + (16.0 / 116.0); - } - return value; - }; - // convert into XYZ colourspace - var c1, c2, c3; - if (typeof rgb == "number") { - c1 = xyzHelper(((rgb >> 16) & 0xFF) / 255.0); - c2 = xyzHelper(((rgb >> 8) & 0xFF) / 255.0); - c3 = xyzHelper((rgb & 0xFF) / 255.0); - } else { - c1 = xyzHelper(rgb.red); - c2 = xyzHelper(rgb.green); - c3 = xyzHelper(rgb.blue); - } - var x = (c1 * 0.4124) + (c2 * 0.3576) + (c3 * 0.1805); - var y = (c1 * 0.2126) + (c2 * 0.7152) + (c3 * 0.0722); - var z = (c1 * 0.0193) + (c2 * 0.1192) + (c3 * 0.9505); - // convert into Lab colourspace - c1 = labHelper(x / 95.047); - c2 = labHelper(y / 100.0); - c3 = labHelper(z / 108.883); - var l = (116.0 * c2) - 16; - var a = 500.0 * (c1 - c2); - var b = 200.0 * (c2 - c3); - return {"l": l, "a": a, "b": b}; -}; - -// Convert a colour specified in HSV colourspace into RGB colourspace -Alphabet.hsv2rgb = function(hue, sat, value, output_object) { - // achromatic (grey) - var r = value; - var g = value; - var b = value; - if (sat != 0) { - var h = hue / 60.0; - var i = Math.floor(h); - var f = h - i; - var p = value * (1.0 - sat); - var q = value * (1.0 - (sat * f)); - var t = value * (1.0 - (sat * (1.0 - f))); - if (i == 0) { - r = value; - g = t; - b = p; - } else if (i == 1) { - r = q; - g = value; - b = p; - } else if (i == 2) { - r = p; - g = value; - b = t; - } else if (i == 3) { - r = p; - g = q; - b = value; - } else if (i == 4) { - r = t; - g = p; - b = value; - } else { - r = value; - g = p; - b = q; - } - } - if (output_object) { - return {"red": r, "green": g, "blue": b}; - } else { - return (Math.floor(r * 255) << 15) | (Math.floor(g * 255) << 8) | (Math.floor(b * 255)); - } -}; - -// Calculate a distance score between two colours in LAB colourspace -Alphabet.lab_dist = function(lab1, lab2) { - var c1 = Math.sqrt((lab1.l * lab1.l) + (lab1.a * lab1.a)); - var c2 = Math.sqrt((lab2.l * lab2.l) + (lab2.a * lab2.a)); - var dc = c1 - c2; - var dl = lab1.l - lab2.l; - var da = lab1.a - lab2.a; - var db = lab1.b - lab2.b; - // we don't want NaN due to rounding errors so fudge things a bit... - var dh = 0; - var dh_squared = (da * da) + (db * db) - (dc * dc); - if (dh_squared > 0) { - dh = Math.sqrt(dh_squared); - } - var first = dl; - var second = dc / (1.0 + (0.045 * c1)); - var third = dh / (1.0 + (0.015 * c1)); - return Math.sqrt((first * first) + (second * second) + (third * third)); -}; - -// convert an RGB value into a HSL value -Alphabet.rgb2hsl = function(rgb) { - "use strict"; - var min, max, delta, h, s, l, r, g, b; - if (typeof rgb == "number") { - r = ((rgb >> 16) & 0xFF) / 255.0; - g = ((rgb >> 8) & 0xFF) / 255.0; - b = (rgb & 0xFF) / 255.0; - } else { - r = rgb.red; - g = rgb.green; - b = rgb.blue; - } - min = Math.min(r, g, b); - max = Math.max(r, g, b); - delta = max - min; - l = min + (delta / 2); - if (max == min) { - h = 0; // achromatic (grayscale) - s = 0; - } else { - if (l > 0.5) { - s = delta / (2 - max - min); - } else { - s = delta / (max + min); - } - if (max == r) { - h = (g - b) / delta; - if (g < b) h += 6; - } else if (max == g) { - h = ((b - r) / delta) + 2; - } else { - h = ((r - g) / delta) + 4; - } - h /= 6; - } - return {"h": h, "s": s, "l": l}; -}; - -// convert a HSL value into an RGB value -Alphabet.hsl2rgb = function(hsl, output_object) { - "use strict"; - function _hue(p, q, t) { - "use strict"; - if (t < 0) t += 1; - else if (t > 1) t -= 1; - if (t < (1.0 / 6.0)) { - return p + ((q - p) * 6.0 * t); - } else if (t < 0.5) { - return q; - } else if (t < (2.0 / 3.0)) { - return p + ((q - p) * ((2.0 / 3.0) - t) * 6.0); - } else { - return p; - } - } - var r, g, b, p, q; - if (hsl.s == 0) { - // achromatic (grayscale) - r = hsl.l; - g = hsl.l; - b = hsl.l; - } else { - if (hsl.l < 0.5) { - q = hsl.l * (1 + hsl.s); - } else { - q = hsl.l + hsl.s - (hsl.l * hsl.s); - } - p = (2 * hsl.l) - q; - r = _hue(p, q, hsl.h + (1.0 / 3.0)); - g = _hue(p, q, hsl.h); - b = _hue(p, q, hsl.h - (1.0 / 3.0)); - } - if (output_object) { - return {"red": r, "green": g, "blue": b}; - } else { - return (Math.floor(r * 255) << 15) | (Math.floor(g * 255) << 8) | (Math.floor(b * 255)); - } -}; - -Alphabet.lighten_colour = function(rgb) { - "use strict"; - var hsl = Alphabet.rgb2hsl(rgb); - hsl.l += (1.0 - hsl.l) * 2 / 3; - return Alphabet.hsl2rgb(hsl, typeof rgb != "number"); -}; - -//====================================================================== -// end Alphabet object -//====================================================================== - -//====================================================================== -// start StandardAlphabet object -//====================================================================== - -// an extension of the alphabet object to support some additional fields -// only present in standard alphabets. -var StandardAlphabet = function(enum_code, enum_name, alphabet_data) { - Alphabet.apply(this, [alphabet_data]); - this.enum_code = enum_code; - this.enum_name = enum_name; -}; -StandardAlphabet.prototype = Alphabet.prototype; -StandardAlphabet.prototype.constructor = StandardAlphabet; - -// A unique code for this standard alphabet. -// This code will be a power of 2 to enable creation of bitsets for -// a selection of standard alphabets. -StandardAlphabet.prototype.get_code = function() { - return this.enum_code; -}; - -// A unique name for this standard alphabet. -// this name will be all upper case and the same as the property that -// refers to this alphabet in the AlphStd collection. -StandardAlphabet.prototype.get_enum = function() { - return this.enum_name; -}; - -//====================================================================== -// end StandardAlphabet object -//====================================================================== - -// A collection of standard alphabets. -var AlphStd = { - RNA: new StandardAlphabet(1, "RNA", { - "name": "RNA", - "like": "RNA", - "ncore": 4, - "symbols": [ - {"symbol": "A", "name": "Adenine", "colour": "CC0000"}, - {"symbol": "C", "name": "Cytosine", "colour": "0000CC"}, - {"symbol": "G", "name": "Guanine", "colour": "FFB300"}, - {"symbol": "U", "name": "Uracil", "colour": "008000", - "aliases": "T"}, - {"symbol": "N", "name": "Any base", "equals": "ACGU", "aliases": "X."}, - {"symbol": "V", "name": "Not U", "equals": "ACG"}, - {"symbol": "H", "name": "Not G", "equals": "ACU"}, - {"symbol": "D", "name": "Not C", "equals": "AGU"}, - {"symbol": "B", "name": "Not A", "equals": "CGU"}, - {"symbol": "M", "name": "Amino", "equals": "AC"}, - {"symbol": "R", "name": "Purine", "equals": "AG"}, - {"symbol": "W", "name": "Weak", "equals": "AU"}, - {"symbol": "S", "name": "Strong", "equals": "CG"}, - {"symbol": "Y", "name": "Pyrimidine", "equals": "CU"}, - {"symbol": "K", "name": "Keto", "equals": "GU"} - ] - }), - DNA: new StandardAlphabet(2, "DNA", { - "name": "DNA", - "like": "DNA", - "ncore": 4, - "symbols": [ - {"symbol": "A", "name": "Adenine", "colour": "CC0000", "complement": "T"}, - {"symbol": "C", "name": "Cytosine", "colour": "0000CC", "complement": "G"}, - {"symbol": "G", "name": "Guanine", "colour": "FFB300", "complement": "C"}, - {"symbol": "T", "name": "Thymine", "colour": "008000", "complement": "A", - "aliases": "U"}, - {"symbol": "N", "name": "Any base", "equals": "ACGT", "aliases": "X."}, - {"symbol": "V", "name": "Not T", "equals": "ACG"}, - {"symbol": "H", "name": "Not G", "equals": "ACT"}, - {"symbol": "D", "name": "Not C", "equals": "AGT"}, - {"symbol": "B", "name": "Not A", "equals": "CGT"}, - {"symbol": "M", "name": "Amino", "equals": "AC"}, - {"symbol": "R", "name": "Purine", "equals": "AG"}, - {"symbol": "W", "name": "Weak", "equals": "AT"}, - {"symbol": "S", "name": "Strong", "equals": "CG"}, - {"symbol": "Y", "name": "Pyrimidine", "equals": "CT"}, - {"symbol": "K", "name": "Keto", "equals": "GT"} - ] - }), - PROTEIN: new StandardAlphabet(4, "PROTEIN", { - "name": "Protein", - "like": "PROTEIN", - "ncore": 20, - "symbols": [ - {"symbol": "A", "name": "Alanine", "colour": "0000CC"}, - {"symbol": "C", "name": "Cysteine", "colour": "0000CC"}, - {"symbol": "D", "name": "Aspartic acid", "colour": "FF00FF"}, - {"symbol": "E", "name": "Glutamic acid", "colour": "FF00FF"}, - {"symbol": "F", "name": "Phenylalanine", "colour": "0000CC"}, - {"symbol": "G", "name": "Glycine", "colour": "FFB300"}, - {"symbol": "H", "name": "Histidine", "colour": "FFCCCC"}, - {"symbol": "I", "name": "Isoleucine", "colour": "0000CC"}, - {"symbol": "K", "name": "Lysine", "colour": "CC0000"}, - {"symbol": "L", "name": "Leucine", "colour": "0000CC"}, - {"symbol": "M", "name": "Methionine", "colour": "0000CC"}, - {"symbol": "N", "name": "Asparagine", "colour": "008000"}, - {"symbol": "P", "name": "Proline", "colour": "FFFF00"}, - {"symbol": "Q", "name": "Glutamine", "colour": "008000"}, - {"symbol": "R", "name": "Arginine", "colour": "CC0000"}, - {"symbol": "S", "name": "Serine", "colour": "008000"}, - {"symbol": "T", "name": "Threonine", "colour": "008000"}, - {"symbol": "V", "name": "Valine", "colour": "0000CC"}, - {"symbol": "W", "name": "Tryptophan", "colour": "0000CC"}, - {"symbol": "Y", "name": "Tyrosine", "colour": "33E6CC"}, - {"symbol": "X", "name": "Any amino acid", "equals": "ACDEFGHIKLMNPQRSTVWY", "aliases": "*."}, - {"symbol": "B", "name": "Asparagine or Aspartic acid", "equals": "DN"}, - {"symbol": "Z", "name": "Glutamine or Glutamic acid", "equals": "EQ"}, - {"symbol": "J", "name": "Leucine or Isoleucine", "equals": "IL"} - ] - }) -}; - -//====================================================================== -// start Symbol object -//====================================================================== -var Symbol = function(alph_index, scale, alphabet) { - "use strict"; - //variable prototype - this.symbol = alphabet.get_symbol(alph_index); - this.scale = scale; - this.colour = alphabet.get_colour(alph_index); -}; - -Symbol.prototype.get_symbol = function() { - "use strict"; - return this.symbol; -}; - -Symbol.prototype.get_scale = function() { - "use strict"; - return this.scale; -}; - -Symbol.prototype.get_colour = function() { - "use strict"; - return this.colour; -}; - -Symbol.prototype.toString = function() { - "use strict"; - return this.symbol + " " + (Math.round(this.scale*1000)/10) + "%"; -}; - -function compare_symbol(sym1, sym2) { - "use strict"; - if (sym1.get_scale() < sym2.get_scale()) { - return -1; - } else if (sym1.get_scale() > sym2.get_scale()) { - return 1; - } else { - return 0; - } -} -//====================================================================== -// end Symbol object -//====================================================================== - -//====================================================================== -// start Pspm object -//====================================================================== -var Pspm = function(matrix, name, ltrim, rtrim, nsites, evalue, pssm, alt) { - "use strict"; - var row, col, data, row_sum, delta, evalue_re; - if (typeof name !== "string") { - name = ""; - } - this.name = name; - //construct - if (matrix instanceof Pspm) { - // copy constructor - this.alph_length = matrix.alph_length; - this.motif_length = matrix.motif_length; - this.name = matrix.name; - this.alt = matrix.alt; - this.nsites = matrix.nsites; - this.evalue = matrix.evalue; - this.ltrim = matrix.ltrim; - this.rtrim = matrix.rtrim; - this.pspm = []; - for (row = 0; row < matrix.motif_length; row++) { - this.pspm[row] = []; - for (col = 0; col < matrix.alph_length; col++) { - this.pspm[row][col] = matrix.pspm[row][col]; - } - } - if (matrix.pssm != null) { - this.pssm = []; - for (row = 0; row < matrix.motif_length; row++) { - this.pspm[row] = []; - for (col = 0; col < matrix.alph_length; col++) { - this.pssm[row][col] = matrix.pssm[row][col]; - } - } - } - } else { - // check parameters - if (ltrim == null) { - ltrim = 0; - } else if (typeof ltrim !== "number" || ltrim % 1 !== 0 || ltrim < 0) { - throw new Error("ltrim must be a non-negative integer, got: " + ltrim); - } - if (rtrim == null) { - rtrim = 0; - } else if (typeof rtrim !== "number" || rtrim % 1 !== 0 || rtrim < 0) { - throw new Error("rtrim must be a non-negative integer, got: " + rtrim); - } - if (nsites != null) { - if (typeof nsites !== "number" || nsites < 0) { - throw new Error("nsites must be a positive number, got: " + nsites); - } else if (nsites == 0) { - nsites = null; - } - } - if (evalue != null) { - if (typeof evalue === "number") { - if (evalue < 0) { - throw new Error("evalue must be a non-negative number, got: " + evalue); - } - } else if (typeof evalue === "string") { - evalue_re = /^((?:[+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?)|inf)$/; - if (!evalue_re.test(evalue)) { - throw new Error("evalue must be a non-negative number, got: " + evalue); - } - } else { - throw new Error("evalue must be a non-negative number, got: " + evalue); - } - } - // set properties - this.name = name; - this.alt = alt; - this.nsites = nsites; - this.evalue = evalue; - this.ltrim = ltrim; - this.rtrim = rtrim; - if (typeof matrix === "string") { - // string constructor - data = parse_pspm_string(matrix); - this.alph_length = data["alph_length"]; - this.motif_length = data["motif_length"]; - this.pspm = data["pspm"]; - if (this.evalue == null) { - if (data["evalue"] != null) { - this.evalue = data["evalue"]; - } else { - this.evalue = 0; - } - } - if (this.nsites == null) { - if (typeof data["nsites"] === "number") { - this.nsites = data["nsites"]; - } else { - this.nsites = 20; - } - } - } else { - // assume pspm is a nested array - this.motif_length = matrix.length; - this.alph_length = (matrix.length > 0 ? matrix[0].length : 0); - if (this.nsites == null) { - this.nsites = 20; - } - if (this.evalue == null) { - this.evalue = 0; - } - this.pspm = []; - // copy pspm and check - for (row = 0; row < this.motif_length; row++) { - if (this.alph_length != matrix[row].length) { - throw new Error("COLUMN_MISMATCH"); - } - this.pspm[row] = []; - row_sum = 0; - for (col = 0; col < this.alph_length; col++) { - this.pspm[row][col] = matrix[row][col]; - row_sum += this.pspm[row][col]; - } - delta = 0.1; - if (isNaN(row_sum) || (row_sum > 1 && (row_sum - 1) > delta) || - (row_sum < 1 && (1 - row_sum) > delta)) { - throw new Error("INVALID_SUM"); - } - } - // copy pssm - if (pssm != null) { - this.pssm = []; - for (row = 0; row < this.motif_length; row++) { - this.pssm[row] = []; - for (col = 0; col < this.alph_length; col++) { - this.pssm[row][col] = pssm[row][col]; - } - } - } - } - } -}; - -Pspm.prototype.copy = function() { - "use strict"; - return new Pspm(this); -}; - -Pspm.prototype.reverse = function() { - "use strict"; - var x, y, temp, temp_trim; - //reverse - x = 0; - y = this.motif_length-1; - while (x < y) { - temp = this.pspm[x]; - this.pspm[x] = this.pspm[y]; - this.pspm[y] = temp; - x++; - y--; - } - // reverse pssm (if defined) - if (typeof this.pssm !== "undefined") { - //reverse - x = 0; - y = this.motif_length-1; - while (x < y) { - temp = this.pssm[x]; - this.pspm[x] = this.pssm[y]; - this.pssm[y] = temp; - x++; - y--; - } - } - //swap triming - temp_trim = this.ltrim; - this.ltrim = this.rtrim; - this.rtrim = temp_trim; - return this; //allow function chaining... -}; - -Pspm.prototype.reverse_complement = function(alphabet) { - "use strict"; - var x, y, temp, i, row, c, temp_trim; - if (this.alph_length != alphabet.get_size_core()) { - throw new Error("The alphabet size does not match the size of the pspm."); - } - if (!alphabet.has_complement()) { - throw new Error("The specified alphabet can not be complemented."); - } - // reverse motif - this.reverse(); - //complement - for (x = 0; x < this.motif_length; x++) { - row = this.pspm[x]; - for (i = 0; i < row.length; i++) { - c = alphabet.get_complement(i); - if (c < i) continue; - temp = row[i]; - row[i] = row[c]; - row[c] = temp; - } - } - // complement pssm (if defined) - if (typeof this.pssm !== "undefined") { - //complement - for (x = 0; x < this.motif_length; x++) { - row = this.pssm[x]; - for (i = 0; i < row.length; i++) { - c = alphabet.get_complement(i); - if (c < i) continue; - temp = row[i]; - row[i] = row[c]; - row[c] = temp; - } - } - } - return this; //allow function chaining... -}; - -Pspm.prototype.get_stack = function(position, alphabet, ssc) { - "use strict"; - var row, stack_ic, alphabet_ic, stack, i, sym; - if (this.alph_length != alphabet.get_size_core()) { - throw new Error("The alphabet size does not match the size of the pspm."); - } - row = this.pspm[position]; - stack_ic = this.get_stack_ic(position, alphabet); - if (ssc) stack_ic -= this.get_error(alphabet); - alphabet_ic = alphabet.get_ic(); - stack = []; - for (i = 0; i < this.alph_length; i++) { - sym = new Symbol(i, row[i]*stack_ic/alphabet_ic, alphabet); - if (sym.get_scale() <= 0) { - continue; - } - stack.push(sym); - } - stack.sort(compare_symbol); - return stack; -}; - -Pspm.prototype.get_stack_ic = function(position, alphabet) { - "use strict"; - var row, H, i; - if (this.alph_length != alphabet.get_size_core()) { - throw new Error("The alphabet size does not match the size fo the pspm."); - } - row = this.pspm[position]; - H = 0; - for (i = 0; i < this.alph_length; i++) { - if (row[i] === 0) { - continue; - } - H -= (row[i] * (Math.log(row[i]) / Math.LN2)); - } - return alphabet.get_ic() - H; -}; - -Pspm.prototype.get_error = function(alphabet) { - "use strict"; - if (this.nsites === 0) { - return 0; - } - return (alphabet.get_size_core()-1) / (2 * Math.LN2 * this.nsites); -}; - -Pspm.prototype.get_motif_length = function() { - "use strict"; - return this.motif_length; -}; - -Pspm.prototype.get_alph_length = function() { - "use strict"; - return this.alph_length; -}; - -Pspm.prototype.get_left_trim = function() { - "use strict"; - return this.ltrim; -}; - -Pspm.prototype.get_right_trim = function() { - "use strict"; - return this.rtrim; -}; - -Pspm.prototype.as_best_match = function(alphabet) { - "use strict"; - var match, odds, best_odds, best_index; - var i, j; - match = ""; - for (i = 0; i < this.motif_length; i++) { - best_index = 0; - best_odds = this.pspm[i][0] / alphabet.get_bg_freq(0); - for (j = 1; j < this.alph_length; j++) { - odds = this.pspm[i][j] / alphabet.get_bg_freq(j); - if (odds > best_odds) { - best_odds = odds; - best_index = j; - } - } - match += alphabet.get_symbol(best_index); - } - return match; -}; - -Pspm.prototype.as_count_matrix = function() { - "use strict"; - var count, count_text, text; - var i, j; - text = ""; - for (i = 0; i < this.motif_length; i++) { - if (i !== 0) { - text += "\n"; - } - for (j = 0; j < this.alph_length; j++) { - if (j !== 0) { - text += " "; - } - count = Math.round(this.nsites * this.pspm[i][j]); - count_text = "" + count; - // pad up to length of 4 - if (count_text.length < 4) { - text += (new Array(5 - count_text.length)).join(" ") + count_text; - } else { - text += count_text; - } - } - } - return text; -}; - -Pspm.prototype.as_probability_matrix = function() { - "use strict"; - var text; - var i, j; - text = ""; - for (i = 0; i < this.motif_length; i++) { - if (i !== 0) { - text += "\n"; - } - for (j = 0; j < this.alph_length; j++) { - if (j !== 0) { - text += " "; - } - text += this.pspm[i][j].toFixed(6); - } - } - return text; -}; - -Pspm.prototype.as_score_matrix = function(alphabet, pseudo) { - "use strict"; - var me, score, out, row, col, score_text; - me = this; - if (typeof this.pssm === "undefined") { - if (!(typeof alphabet === "object" && alphabet != null && alphabet instanceof Alphabet)) { - throw new Error("The alphabet is required to generate the pssm."); - } - if (typeof pseudo === "undefined") { - pseudo = 0.01; - } else if (typeof pseudo !== "number" || pseudo < 0) { - throw new Error("Expected positive number for pseudocount"); - } - score = function(row, col) { - "use strict"; - var p, bg, p2; - p = me.pspm[row][col]; - bg = alphabet.get_bg_freq(col); - p2 = (p * me.nsites + bg * pseudo) / (me.nsites + pseudo); - return (p2 > 0 ? Math.round((Math.log(p2 / bg) / Math.LN2) * 100) : -10000); - }; - } else { - score = function(row, col) { - "use strict"; - return me.pssm[row][col]; - }; - } - out = ""; - for (row = 0; row < this.motif_length; row++) { - for (col = 0; col < this.alph_length; col++) { - if (col !== 0) { - out += " "; - } - score_text = "" + score(row, col); - // pad out to 6 characters - if (score_text.length < 6) { - out += (new Array(7 - score_text.length)).join(" ") + score_text; - } else { - out += score_text; - } - } - out += "\n"; - } - return out; -} - -Pspm.prototype.as_pspm = function() { - "use strict"; - return "letter-probability matrix: alength= " + this.alph_length + - " w= " + this.motif_length + " nsites= " + this.nsites + - " E= " + (typeof this.evalue === "number" ? - this.evalue.toExponential() : this.evalue) + "\n" + - this.as_probability_matrix(); -}; - -Pspm.prototype.as_pssm = function(alphabet, pseudo) { - "use strict"; - return "log-odds matrix: alength= " + this.alph_length + - " w= " + this.motif_length + - " E= " + (typeof this.evalue == "number" ? - this.evalue.toExponential() : this.evalue) + "\n" + - this.as_score_matrix(alphabet, pseudo); -}; - -Pspm.prototype.as_meme = function(options) { - var with_header, with_pspm, with_pssm, version, alphabet, bg_source, pseudocount, strands; - var out, alen, i; - // get the options - if (typeof options !== "object" || options === null) { - options = {}; - } - with_header = (typeof options["with_header"] === "boolean" ? options["with_header"] : false); - with_pspm = (typeof options["with_pspm"] === "boolean" ? options["with_pspm"] : false); - with_pssm = (typeof options["with_pssm"] === "boolean" ? options["with_pssm"] : false); - if (!with_pspm && !with_pssm) with_pspm = true; - if (with_header) { - if (typeof options["version"] === "string" && /^\d+(?:\.\d+){0,2}$/.test(options["version"])) { - version = options["version"]; - } else if (typeof options["version"] === "number") { - version = options["version"].toFixed(0); - } else { - version = "4"; - } - if (typeof options["strands"] === "number" && options["strands"] === 1) { - strands = 1; - } else { - strands = 2; - } - if (typeof options["bg_source"] === "string") { - bg_source = options["bg_source"]; - } else { - bg_source = "unknown source"; - } - if (typeof options["alphabet"] === "object" && options["alphabet"] != null - && options["alphabet"] instanceof Alphabet) { - alphabet = options["alphabet"]; - } else { - throw new Error("The alphabet is required to generate the header."); - } - } - // now create the output - out = ""; - if (with_header) { - out = "MEME version " + version + "\n\n"; - out += alphabet.as_meme() + "\n"; - if (alphabet.has_complement()) { // assume DNA has both strands unless otherwise specified - out += "strands: " + (strands === 1 ? "+" : "+ -") + "\n\n"; - } - out += "Background letter frequencies (from " + bg_source + "):\n"; - alen = alphabet.get_size_core(); - for (i = 0; i < alen; i++) { - if (i !== 0) { - if (i % 9 === 0) { // maximum of nine entries per line - out += "\n"; - } else { - out += " "; - } - } - out += alphabet.get_symbol(i) + " " + alphabet.get_bg_freq(i).toFixed(3); - } - } - out += "\n\n"; - out += "MOTIF " + this.name + (this.alt == null ? "" : " " + this.alt); - if (with_pssm) { - out += "\n\n"; - out += this.as_pssm(options["alphabet"], options["pseudocount"]); - } - if (with_pspm) { - out += "\n\n"; - out += this.as_pspm(); - } - return out; -} - -Pspm.prototype.toString = function() { - "use strict"; - var str, i, row; - str = ""; - for (i = 0; i < this.pspm.length; i++) { - row = this.pspm[i]; - str += row.join("\t") + "\n"; - } - return str; -}; - -function parse_pspm_properties(str) { - "use strict"; - var parts, i, eqpos, before, after, properties, prop, num, num_re; - num_re = /^((?:[+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?)|inf)$/; - parts = trim(str).split(/\s+/); - // split up words containing = - for (i = 0; i < parts.length;) { - eqpos = parts[i].indexOf("="); - if (eqpos != -1) { - before = parts[i].substr(0, eqpos); - after = parts[i].substr(eqpos+1); - if (before.length > 0 && after.length > 0) { - parts.splice(i, 1, before, "=", after); - i += 3; - } else if (before.length > 0) { - parts.splice(i, 1, before, "="); - i += 2; - } else if (after.length > 0) { - parts.splice(i, 1, "=", after); - i += 2; - } else { - parts.splice(i, 1, "="); - i++; - } - } else { - i++; - } - } - properties = {}; - for (i = 0; i < parts.length; i += 3) { - if (parts.length - i < 3) { - throw new Error("Expected PSPM property was incomplete. "+ - "Remaing parts are: " + parts.slice(i).join(" ")); - } - if (parts[i+1] !== "=") { - throw new Error("Expected '=' in PSPM property between key and " + - "value but got " + parts[i+1]); - } - prop = parts[i].toLowerCase(); - num = parts[i+2]; - if (!num_re.test(num)) { - throw new Error("Expected numeric value for PSPM property '" + - prop + "' but got '" + num + "'"); - } - properties[prop] = num; - } - return properties; -} - -function parse_pspm_string(pspm_string) { - "use strict"; - var header_re, lines, first_line, line_num, col_num, alph_length, - motif_length, nsites, evalue, pspm, i, line, match, props, parts, - j, prob; - header_re = /^letter-probability\s+matrix:(.*)$/i; - lines = pspm_string.split(/\n/); - first_line = true; - line_num = 0; - col_num = 0; - alph_length; - motif_length; - nsites; - evalue; - pspm = []; - for (i = 0; i < lines.length; i++) { - line = trim(lines[i]); - if (line.length === 0) { - continue; - } - // check the first line for a header though allow matrices without it - if (first_line) { - first_line = false; - match = header_re.exec(line); - if (match !== null) { - props = parse_pspm_properties(match[1]); - if (props.hasOwnProperty("alength")) { - alph_length = parseFloat(props["alength"]); - if (alph_length != 4 && alph_length != 20) { - throw new Error("PSPM property alength should be 4 or 20" + - " but got " + alph_length); - } - } - if (props.hasOwnProperty("w")) { - motif_length = parseFloat(props["w"]); - if (motif_length % 1 !== 0 || motif_length < 1) { - throw new Error("PSPM property w should be an integer larger " + - "than zero but got " + motif_length); - } - } - if (props.hasOwnProperty("nsites")) { - nsites = parseFloat(props["nsites"]); - if (nsites <= 0) { - throw new Error("PSPM property nsites should be larger than " + - "zero but got " + nsites); - } - } - if (props.hasOwnProperty("e")) { - evalue = props["e"]; - if (evalue < 0) { - throw new Error("PSPM property evalue should be " + - "non-negative but got " + evalue); - } - } - continue; - } - } - pspm[line_num] = []; - col_num = 0; - parts = line.split(/\s+/); - for (j = 0; j < parts.length; j++) { - prob = parseFloat(parts[j]); - if (prob != parts[j] || prob < 0 || prob > 1) { - throw new Error("Expected probability but got '" + parts[j] + "'"); - } - pspm[line_num][col_num] = prob; - col_num++; - } - line_num++; - } - if (typeof motif_length === "number") { - if (pspm.length != motif_length) { - throw new Error("Expected PSPM to have a motif length of " + - motif_length + " but it was actually " + pspm.length); - } - } else { - motif_length = pspm.length; - } - if (typeof alph_length !== "number") { - alph_length = pspm[0].length; - if (alph_length != 4 && alph_length != 20) { - throw new Error("Expected length of first row in the PSPM to be " + - "either 4 or 20 but got " + alph_length); - } - } - for (i = 0; i < pspm.length; i++) { - if (pspm[i].length != alph_length) { - throw new Error("Expected PSPM row " + i + " to have a length of " + - alph_length + " but the length was " + pspm[i].length); - } - } - return {"pspm": pspm, "motif_length": motif_length, - "alph_length": alph_length, "nsites": nsites, "evalue": evalue}; -} -//====================================================================== -// end Pspm object -//====================================================================== - -//====================================================================== -// start Logo object -//====================================================================== - -var Logo = function(alphabet, options) { - "use strict"; - this.alphabet = alphabet; - this.fine_text = ""; - this.x_axis = 1; - this.y_axis = true; - this.xlate_nsyms = 1; - this.xlate_start = null; - this.xlate_end = null; - this.pspm_list = []; - this.pspm_column = []; - this.rows = 0; - this.columns = 0; - if (typeof options === "string") { - // the old method signature had fine_text here so we support that - this.fine_text = options; - } else if (typeof options === "object" && options != null) { - this.fine_text = (typeof options.fine_text === "string" ? options.fine_text : ""); - this.x_axis = (typeof options.x_axis === "boolean" ? (options.x_axis ? 1 : 0) : 1); - if (options.x_axis_hidden != null && options.x_axis_hidden) this.x_axis = -1; - this.y_axis = (typeof options.y_axis === "boolean" ? options.y_axis : true); - this.xlate_nsyms = (typeof options.xlate_nsyms === "number" ? options.xlate_nsyms : this.xlate_nsyms); - this.xlate_start = (typeof options.xlate_start === "number" ? options.xlate_start : this.xlate_start); - this.xlate_end = (typeof options.xlate_end === "number" ? options.xlate_end : this.xlate_end); - } -}; - -Logo.prototype.add_pspm = function(pspm, column) { - "use strict"; - var col; - if (typeof column === "undefined") { - column = 0; - } else if (column < 0) { - throw new Error("Column index out of bounds."); - } - this.pspm_list[this.rows] = pspm; - this.pspm_column[this.rows] = column; - this.rows++; - col = column + pspm.get_motif_length(); - if (col > this.columns) { - this.columns = col; - } -}; - -Logo.prototype.get_columns = function() { - "use strict"; - return this.columns; -}; - -Logo.prototype.get_xlate_nsyms = function() { - "use strict"; - return this.xlate_nsyms; -}; - -Logo.prototype.get_xlate_start = function() { - "use strict"; - return (this.xlate_start != null ? this.xlate_start : 0); -}; - -Logo.prototype.get_xlate_end = function() { - "use strict"; - return (this.xlate_end != null ? this.xlate_end : this.columns * this.xlate_nsyms); -}; - -Logo.prototype.get_xlate_columns = function() { - "use strict"; - return this.get_xlate_end() - this.get_xlate_start(); -}; - -Logo.prototype.get_rows = function() { - "use strict"; - return this.rows; -}; - -Logo.prototype.get_pspm = function(row_index) { - "use strict"; - if (row_index < 0 || row_index >= this.rows) { - throw new Error("INDEX_OUT_OF_BOUNDS"); - } - return this.pspm_list[row_index]; -}; - -Logo.prototype.get_offset = function(row_index) { - "use strict"; - if (row_index < 0 || row_index >= this.rows) { - throw new Error("INDEX_OUT_OF_BOUNDS"); - } - return this.pspm_column[row_index]; -}; - -Logo.prototype._as_eps_data = function(ssc, errbars) { - var i, j, pos, stack_pos, pspm, stack, sym, out; - out = ""; - for (i = 0; i < this.rows; i++) { - out += "\nStartLine\n"; - // Indent - for (j = 0; j < this.pspm_column[i]; j++) { - out += "() startstack\nendstack\n\n"; - } - pspm = this.pspm_list[i]; - if (pspm.get_left_trim() > 0) { - out += "MuteColour\nDrawTrimEdge\n" + pspm.get_left_trim() + " DrawTrimBg\n"; - } - for (pos = 0; pos < pspm.get_motif_length(); pos++) { - if (pos != 0 && pos == pspm.get_left_trim()) { // enable full colour - out += "DrawTrimEdge\nRestoreColour\n"; - } else if (pos == (pspm.get_motif_length() - pspm.get_right_trim())) { - out += "MuteColour\n" + pspm.get_right_trim() + " DrawTrimBg\n"; - } - out += "(" + (pos + 1) + ") startstack\n"; - stack = pspm.get_stack(pos, this.alphabet, ssc); - for (stack_pos = 0; stack_pos < stack.length; stack_pos++) { - sym = stack[stack_pos]; - out += " " + (sym.get_scale() * this.alphabet.get_ic()) + " (" + sym.get_symbol() + ") numchar\n"; - } - if (errbars) { - out += " " + pspm.get_error(this.alphabet) + " Ibeam\n"; - } - out += "endstack\n\n"; - } - if (pspm.get_right_trim() > 0 || pspm.get_left_trim() == pspm.get_motif_length()) { - out += "RestoreColour\n"; - } - out += "EndLine\n"; - } - return out; -}; - -Logo.prototype.as_eps = function(options) { - "use strict"; - if (this.xlate_nsyms != 1) throw new Error("Unsupported setting xlate_nsyms for EPS"); - if (this.xlate_start != null) throw new Error("Unsupported setting xlate_start for EPS"); - if (this.xlate_end != null) throw new Error("Unsupported setting xlate_end for EPS"); - - var LOGOHEIGHT = 7.5; // default height of line in cm - var cm2pts, height, width, now, ssc, errbars; - if (typeof options === "undefined") { - options = {}; - } - cm2pts = 72 / 2.54; - if (typeof options.logo_height == "number") { - height = options.logo_height; - } else { - height = LOGOHEIGHT * this.rows; - } - if (typeof options.logo_width == "number") { - width = options.logo_width; - } else { - width = this.columns + 2; - } - now = new Date(); - ssc = (typeof options.ssc == "boolean" ? options.ssc : false); - errbars = (typeof options.show_error_bar == "boolean" ? options.show_error_bar : ssc); - var values = { - "LOGOHEIGHT": height, - "LOGOWIDTH": width, - "BOUNDINGHEIGHT": Math.round(height * cm2pts), - "BOUNDINGWIDTH": Math.round(width * cm2pts), - "LOGOLINEHEIGHT": (height / this.rows), - "CHARSPERLINE": this.columns, - "BARBITS": this.alphabet.get_ic(), - "LOGOTYPE": (this.alphabet.has_complement() ? "NA" : "AA"), - "CREATIONDATE": now.getDate() + "." + (now.getMonth() + 1) + "." + now.getFullYear() + " " + now.getHours() + ":" + now.getMinutes() + ":" + now.getSeconds(), - "ERRORBARFRACTION": (typeof options.error_bar_fraction == "number" ? options.error_bar_fraction : 1.0), - "TICBITS": (typeof options.ticbits == "number" ? options.ticbits : 1.0), - "TITLE": (typeof options.title == "string" ? options.title : ""), - "FINEPRINT": (typeof options.fineprint == "string" ? options.fineprint : this.fine_text), - "XAXISLABEL": (typeof options.xaxislabel == "string" ? options.xaxislabel : ""), - "YAXISLABEL": (typeof options.yaxislabel == "string" ? options.yaxislabel : "bits"), - "SSC": ssc, - "YAXIS": (typeof options.show_y_axis == "boolean" ? options.show_y_axis : this.y_axis), - "SHOWENDS": (typeof options.show_ends == "boolean" ? options.show_ends : false), - "ERRBAR": errbars, - "OUTLINE": (typeof options.show_outline == "boolean" ? options.show_outline : false), - "NUMBERING": (typeof options.show_numbering == "boolean" ? options.show_numbering : this.x_axis != 0), - "SHOWINGBOX": (typeof options.show_box == "boolean" ? options.show_box : false), - "CREATOR": (typeof options.creator == "string" ? options.creator : "motif_logo.js"), - "FONTSIZE": (typeof options.label_font_size == "number" ? options.label_font_size : 12), - "TITLEFONTSIZE": (typeof options.title_font_size == "number" ? options.title_font_size : 12), - "SMALLFONTSIZE": (typeof options.small_font_size == "number" ? options.small_font_size : 6), - "TOPMARGIN" : (typeof options.top_margin == "number" ? options.top_margin : 0.9), - "BOTTOMMARGIN": (typeof options.bottom_margin == "number" ? options.bottom_margin : 0.9), - "COLORDICT": this.alphabet._as_eps_dict(), - "DATA": this._as_eps_data(ssc, errbars) - }; - // now this requires that the script containing the template has been imported! - return motif_logo_template(values); -}; - -//====================================================================== -// end Logo object -//====================================================================== - -// calculate the exact size (in pixels) of an object drawn on the -// canvas assuming that the background of the canvas is transparent. -function canvas_bounds(ctx, cwidth, cheight) { - "use strict"; - var data, r, c, top_line, bottom_line, left_line, right_line, - txt_width, txt_height; - - // extract the image data - data = ctx.getImageData(0, 0, cwidth, cheight).data; - - // set initial values - top_line = -1; bottom_line = -1; left_line = -1; right_line = -1; - txt_width = 0; txt_height = 0; - - // Find the top-most line with a non-transparent pixel - for (r = 0; r < cheight; r++) { - for (c = 0; c < cwidth; c++) { - if (data[r * cwidth * 4 + c * 4 + 3]) { - top_line = r; - break; - } - } - if (top_line != -1) { - break; - } - } - - // Only bother looking if we found at least one set pixel... - if (top_line != -1) { - - //find the last line with a non-transparent pixel - for (r = cheight-1; r >= top_line; r--) { - for(c = 0; c < cwidth; c++) { - if(data[r * cwidth * 4 + c * 4 + 3]) { - bottom_line = r; - break; - } - } - if (bottom_line != -1) { - break; - } - } - // calculate height - txt_height = bottom_line - top_line + 1; - - // Find the left-most line with a non-transparent pixel - for (c = 0; c < cwidth; c++) { - for (r = top_line; r <= bottom_line; r++) { - if (data[r * cwidth * 4 + c * 4 + 3]) { - left_line = c; - break; - } - } - if (left_line != -1) { - break; - } - } - - //find the right most line with a non-transparent pixel - for (c = cwidth-1; c >= left_line; c--) { - for(r = top_line; r <= bottom_line; r++) { - if(data[r * cwidth * 4 + c * 4 + 3]) { - right_line = c; - break; - } - } - if (right_line != -1) { - break; - } - } - txt_width = right_line - left_line + 1; - } - - //return the bounds - return {bound_top: top_line, bound_bottom: bottom_line, - bound_left: left_line, bound_right: right_line, width: txt_width, - height: txt_height}; -} - -//====================================================================== -// start RasterizedAlphabet -//====================================================================== - -// Rasterize Alphabet -// 1) Measure width of text at default font for all symbols in alphabet -// 2) sort in width ascending -// 3) Drop the top and bottom 10% (designed to ignore outliers like 'W' and 'I') -// 4) Calculate the average as the maximum scaling factor (designed to stop I becoming a rectangular blob). -// 5) Assume scale of zero would result in width of zero, interpolate scale required to make perfect width font -// 6) Draw text onto temp canvas at calculated scale -// 7) Find bounds of drawn text -// 8) Paint on to another canvas at the desired height (but only scaling width to fit if larger). -var RasterizedAlphabet = function(alphabet, logo_scale, font, width) { - "use strict"; - var default_size, safety_pad, canvas, ctx, middle, baseline, widths, sizes, - i, sym, size, tenpercent, avg_width, scale, - target_width, target_height; - //variable prototypes - this.alphabet = alphabet; - this.scale = logo_scale; - this.sym_cache = {}; - this.stack_num_cache = []; - this.scale_num_cache = []; - // size of canvas - default_size = 60; // size of measuring canvas - safety_pad = 20; // pixels to pad around so we don't miss the edges - // create a canvas to do our measuring - canvas = document.createElement("canvas"); - if (!canvas.getContext) throw new Error("No canvas support"); - canvas.width = default_size + 2 * safety_pad; - canvas.height = default_size + 2 * safety_pad; - middle = Math.round(canvas.width / 2); - baseline = Math.round(canvas.height - safety_pad); - ctx = canvas.getContext('2d'); - if (!supports_text(ctx)) throw new Error("Canvas does not support text"); - ctx.font = font; - ctx.textAlign = "center"; - ctx.translate(middle, baseline); - // list of widths - widths = []; - sizes = []; - //now measure each letter in the alphabet - for (i = 0; i < alphabet.get_size_core(); ++i) { - // reset the canvas - ctx.clearRect(0, 0, canvas.width, canvas.height); - ctx.fillStyle = alphabet.get_colour(i); - // draw the test text - ctx.fillText(alphabet.get_symbol(i), 0, 0); - //measure - size = canvas_bounds(ctx, canvas.width, canvas.height); - if (size.width === 0) throw new Error("Invisible symbol!"); - widths.push(size.width); - sizes[i] = size; - } - //sort the widths - widths.sort(function(a,b) {return a - b;}); - //drop 10% of the items off each end - tenpercent = Math.floor(widths.length / 10); - for (i = 0; i < tenpercent; ++i) { - widths.pop(); - widths.shift(); - } - //calculate average width - avg_width = 0; - for (i = 0; i < widths.length; ++i) { - avg_width += widths[i]; - } - avg_width /= widths.length; - // calculate the target width - target_width = width * this.scale * 2; - // calculate scales - for (i = 0; i < alphabet.get_size_core(); ++i) { - sym = alphabet.get_symbol(i); - size = sizes[i]; - // calculate scale - scale = target_width / Math.max(avg_width, size.width); - // estimate scaled height - target_height = size.height * scale; - // create an appropriately sized canvas - canvas = document.createElement("canvas"); - canvas.width = target_width; - canvas.height = target_height + safety_pad * 2; - // calculate the middle - middle = Math.round(canvas.width / 2); - // calculate the baseline - baseline = Math.round(canvas.height - safety_pad); - // get the context and prepare to draw the rasterized text - ctx = canvas.getContext('2d'); - ctx.font = font; - ctx.fillStyle = alphabet.get_colour(i); - ctx.textAlign = "center"; - ctx.translate(middle, baseline); - ctx.save(); - ctx.scale(scale, scale); - // draw the text - ctx.fillText(sym, 0, 0); - ctx.restore(); - this.sym_cache[sym] = {"image": canvas, "size": canvas_bounds(ctx, canvas.width, canvas.height)}; - } -}; - -RasterizedAlphabet.prototype.get_alphabet = function() { - return this.alphabet; -}; - -RasterizedAlphabet.prototype.get_scale = function() { - return this.scale; -}; - -RasterizedAlphabet.prototype.draw_stack_sym = function(ctx, letter, dx, dy, dWidth, dHeight) { - "use strict"; - var entry, image, size; - entry = this.sym_cache[letter]; - image = entry.image; - size = entry.size; - ctx.drawImage(image, 0, size.bound_top -1, image.width, size.height+1, dx, dy, dWidth, dHeight); -}; - -RasterizedAlphabet.prototype.draw_stack_num = function(ctx, font, stack_width, index) { - var image, image_ctx, text_length; - if (index >= this.stack_num_cache.length) { - image = document.createElement("canvas"); - // measure the text - image_ctx = image.getContext('2d'); - image_ctx.save(); - image_ctx.font = font; - text_length = image_ctx.measureText("" + (index + 1)).width; - image_ctx.restore(); - // resize the canvas to fit - image.width = Math.ceil(stack_width); - image.height = Math.ceil(text_length); - // draw the text - image_ctx = image.getContext('2d'); - image_ctx.translate(Math.round(stack_width / 2), 0); - image_ctx.font = font; - image_ctx.textBaseline = "middle"; - image_ctx.textAlign = "right"; - image_ctx.rotate(-(Math.PI / 2)); - image_ctx.fillText("" + (index + 1), 0, 0); - this.stack_num_cache[index] = image; - } else { - image = this.stack_num_cache[index]; - } - ctx.drawImage(image, 0, 0); -} - -RasterizedAlphabet.prototype.draw_scale_num = function(ctx, font, num) { - var image, image_ctx, text_size, m_length; - if (num >= this.scale_num_cache.length) { - image = document.createElement("canvas"); - // measure the text - image_ctx = image.getContext('2d'); - image_ctx.font = font; - text_size = image_ctx.measureText("" + num); - if (text_size.actualBoundingBoxAscent && text_size.actualBoundingBoxDesent) { - // resize the canvas to fit - image.width = Math.ceil(text_size.width); - image.height = Math.ceil(text_size.actualBoundingBoxAscent + text_size.actualBoundingBoxDesent); - // draw the text - image_ctx = image.getContext('2d'); - image_ctx.font = font; - image_ctx.textAlign = "right"; - image_ctx.fillText("" + num, image.width, text_size.actualBoundingBoxAscent); - } else { - // measure width of 'm' to approximate height, we double it later anyway - m_length = image_ctx.measureText("m").width; - // resize the canvas to fit - image.width = Math.ceil(text_size.width); - image.height = Math.ceil(2 * m_length); - // draw the text - image_ctx = image.getContext('2d'); - image_ctx.font = font; - image_ctx.textAlign = "right"; - image_ctx.textBaseline = "middle"; - image_ctx.fillText("" + num, image.width, m_length); - } - this.scale_num_cache[num] = image; - } else { - image = this.scale_num_cache[num]; - } - ctx.drawImage(image, -image.width, -Math.round(image.height / 2)) -} - -//====================================================================== -// end RasterizedAlphabet -//====================================================================== - -//====================================================================== -// start LogoMetrics object -//====================================================================== - -var LogoMetrics = function(ctx, logo_columns, logo_rows, has_names, has_finetext, x_axis, y_axis) { - "use strict"; - var i, row_height; - //variable prototypes - this.pad_top = (has_names ? 5 : 0); - this.pad_left = (y_axis ? 10 : 0); - this.pad_right = (has_finetext ? 15 : 0); - this.pad_bottom = 0; - this.pad_middle = 20; - this.name_height = 14; - this.name_font = "bold " + this.name_height + "px Times, sans-serif"; - this.name_spacer = 0; - this.y_axis = y_axis; - this.y_label = "bits"; - this.y_label_height = 12; - this.y_label_font = "bold " + this.y_label_height + "px Helvetica, sans-serif"; - this.y_label_spacer = 3; - this.y_num_height = 12; - this.y_num_width = 0; - this.y_num_font = "bold " + this.y_num_height + "px Helvetica, sans-serif"; - this.y_tic_width = 5; - this.stack_pad_left = 0; - this.stack_font = "bold 25px Helvetica, sans-serif"; - this.stack_height = 90; - this.stack_width = 26; - this.stacks_pad_right = 5; - this.x_axis = x_axis; - this.x_num_above = 2; - this.x_num_height = 12; - this.x_num_width = 0; - this.x_num_font = "bold " + this.x_num_height + "px Helvetica, sans-serif"; - this.fine_txt_height = 6; - this.fine_txt_above = 2; - this.fine_txt_font = "normal " + this.fine_txt_height + "px Helvetica, sans-serif"; - this.letter_metrics = new Array(); - this.summed_width = 0; - this.summed_height = 0; - //calculate the width of the y axis numbers - ctx.font = this.y_num_font; - for (i = 0; i <= 2; i++) { - this.y_num_width = Math.max(this.y_num_width, ctx.measureText("" + i).width); - } - //calculate the width of the x axis numbers (but they are rotated so it becomes height) - if (x_axis == 1) { - ctx.font = this.x_num_font; - for (i = 1; i <= logo_columns; i++) { - this.x_num_width = Math.max(this.x_num_width, ctx.measureText("" + i).width); - } - } else if (x_axis == 0) { - this.x_num_height = 4; - this.x_num_width = 4; - } else { - this.x_num_height = 0; - this.x_num_width = 0; - } - - //calculate how much vertical space we want to draw this - //first we add the padding at the top and bottom since that's always there - this.summed_height += this.pad_top + this.pad_bottom; - //all except the last row have the same amount of space allocated to them - if (logo_rows > 1) { - row_height = this.stack_height + this.pad_middle; - if (has_names) { - row_height += this.name_height; - //the label is allowed to overlap into the spacer - row_height += Math.max(this.y_num_height/2, this.name_spacer); - //the label is allowed to overlap the space used by the other label - row_height += Math.max(this.y_num_height/2, this.x_num_height + this.x_num_above); - } else { - row_height += this.y_num_height/2; - //the label is allowed to overlap the space used by the other label - row_height += Math.max(this.y_num_height/2, this.x_num_height + this.x_num_above); - } - this.summed_height += row_height * (logo_rows - 1); - } - //the last row has the name and fine text below it but no padding - this.summed_height += this.stack_height + (this.y_axis ? this.y_num_height/2 : 0); - - var fine_txt_total = (has_finetext ? this.fine_txt_height + this.fine_txt_above : 0); - if (has_names) { - this.summed_height += fine_txt_total + this.name_height; - this.summed_height += Math.max((this.y_axis ? this.y_num_height/2 : 0), - this.x_num_height + this.x_num_above + this.name_spacer); - } else { - this.summed_height += Math.max((this.y_axis ? this.y_num_height/2 : 0), - this.x_num_height + this.x_num_above + fine_txt_total); - } - - //calculate how much horizontal space we want to draw this - //first add the padding at the left and right since that's always there - this.summed_width += this.pad_left + this.pad_right; - if (this.y_axis) { - //add on the space for the y-axis label - this.summed_width += this.y_label_height + this.y_label_spacer; - //add on the space for the y-axis - this.summed_width += this.y_num_width + this.y_tic_width; - } - //add on the space for the stacks - this.summed_width += (this.stack_pad_left + this.stack_width) * logo_columns; - //add on the padding after the stacks (an offset from the fine text) - this.summed_width += this.stacks_pad_right; - -}; - -//====================================================================== -// end LogoMetrics object -//====================================================================== - -//found this trick at http://talideon.com/weblog/2005/02/detecting-broken-images-js.cfm -function image_ok(img) { - "use strict"; - // During the onload event, IE correctly identifies any images that - // weren't downloaded as not complete. Others should too. Gecko-based - // browsers act like NS4 in that they report this incorrectly. - if (!img.complete) { - return false; - } - // However, they do have two very useful properties: naturalWidth and - // naturalHeight. These give the true size of the image. If it failed - // to load, either of these should be zero. - if (typeof img.naturalWidth !== "undefined" && img.naturalWidth === 0) { - return false; - } - // No other way of checking: assume it's ok. - return true; -} - -function supports_text(ctx) { - "use strict"; - if (!ctx.fillText) { - return false; - } - if (!ctx.measureText) { - return false; - } - return true; -} - -//draws the scale, returns the width -function draw_scale(ctx, metrics, alphabet_ic, raster) { - "use strict"; - var tic_height, i; - tic_height = metrics.stack_height / alphabet_ic; - ctx.save(); - ctx.translate(metrics.y_label_height, metrics.y_num_height/2); - //draw the axis label - ctx.save(); - ctx.font = metrics.y_label_font; - ctx.translate(0, metrics.stack_height/2); - ctx.rotate(-(Math.PI / 2)); - ctx.textAlign = "center"; - ctx.fillText("bits", 0, 0); - ctx.restore(); - - ctx.translate(metrics.y_label_spacer + metrics.y_num_width, 0); - - //draw the axis tics - ctx.save(); - ctx.translate(0, metrics.stack_height); - for (i = 0; i <= alphabet_ic; i++) { - //draw the number - ctx.save(); - ctx.translate(-1, 0); - raster.draw_scale_num(ctx, metrics.y_num_font, i); - ctx.restore(); - //draw the tic - ctx.fillRect(0, -1, metrics.y_tic_width, 2); - //prepare for next tic - ctx.translate(0, -tic_height); - } - ctx.restore(); - - ctx.fillRect(metrics.y_tic_width - 2, 0, 2, metrics.stack_height) - - ctx.restore(); -} - -function draw_stack_num(ctx, metrics, row_index, raster) { - "use strict"; - ctx.save(); - ctx.translate(0, Math.round(metrics.stack_height + metrics.x_num_above)); - if (metrics.x_axis == 1) { - raster.draw_stack_num(ctx, metrics.x_num_font, metrics.stack_width, row_index); - } else if (metrics.x_axis == 0) { - // draw dots instead of the numbers (good for small logos) - ctx.beginPath(); - var radius = Math.round(metrics.x_num_height / 2); - ctx.arc(Math.round(metrics.stack_width / 2), radius, radius, 0, 2 * Math.PI, false); - ctx.fill(); - } - ctx.restore(); -} - -function draw_stack(ctx, metrics, symbols, raster) { - "use strict"; - var preferred_pad, sym_min, i, sym, sym_height, pad; - preferred_pad = 0; - sym_min = 5; - - ctx.save();//1 - ctx.translate(0, metrics.stack_height); - for (i = 0; i < symbols.length; i++) { - sym = symbols[i]; - sym_height = metrics.stack_height * sym.get_scale(); - - pad = preferred_pad; - if (sym_height - pad < sym_min) { - pad = Math.min(pad, Math.max(0, sym_height - sym_min)); - } - sym_height -= pad; - - //translate to the correct position - ctx.translate(0, -(pad/2 + sym_height)); - - //draw - raster.draw_stack_sym(ctx, sym.get_symbol(), 0, 0, metrics.stack_width, sym_height); - //translate past the padding - ctx.translate(0, -(pad/2)); - } - ctx.restore();//1 -} - -function draw_dashed_line(ctx, pattern, start, x1, y1, x2, y2) { - "use strict"; - var x, y, len, i, dx, dy, tlen, theta, mulx, muly, lx, ly; - dx = x2 - x1; - dy = y2 - y1; - tlen = Math.pow(dx*dx + dy*dy, 0.5); - theta = Math.atan2(dy,dx); - mulx = Math.cos(theta); - muly = Math.sin(theta); - lx = []; - ly = []; - for (i = 0; i < pattern; ++i) { - lx.push(pattern[i] * mulx); - ly.push(pattern[i] * muly); - } - i = start; - x = x1; - y = y1; - len = 0; - ctx.beginPath(); - while (len + pattern[i] < tlen) { - ctx.moveTo(x, y); - x += lx[i]; - y += ly[i]; - ctx.lineTo(x, y); - len += pattern[i]; - i = (i + 1) % pattern.length; - x += lx[i]; - y += ly[i]; - len += pattern[i]; - i = (i + 1) % pattern.length; - } - if (len < tlen) { - ctx.moveTo(x, y); - x += mulx * (tlen - len); - y += muly * (tlen - len); - ctx.lineTo(x, y); - } - ctx.stroke(); -} - -function draw_trim_background(ctx, metrics, left_start, left_end, left_divider, right_start, right_end, right_divider) { - "use strict"; - var left_size = left_end - left_start; - var right_size = right_end - right_start; - var line_x; - - ctx.save();//s8 - ctx.fillStyle = "rgb(240, 240, 240)"; - if (left_size > 0) { - ctx.fillRect(left_start * metrics.stack_width, 0, left_size * metrics.stack_width, metrics.stack_height); - } - if (right_size > 0) { - ctx.fillRect(right_start * metrics.stack_width, 0, right_size * metrics.stack_width, metrics.stack_height); - } - ctx.fillStyle = "rgb(51, 51, 51)"; - if (left_size > 0 && left_divider) { - line_x = (left_end * metrics.stack_width) - 0.5; - draw_dashed_line(ctx, [3], 0, line_x, 0, line_x, metrics.stack_height); - } - if (right_size > 0 && right_divider) { - line_x = (right_start * metrics.stack_width) + 0.5; - draw_dashed_line(ctx, [3], 0, line_x, 0, line_x, metrics.stack_height); - } - ctx.restore();//s8 -} - -function size_logo_on_canvas(logo, canvas, show_names, scale) { - "use strict"; - var draw_name, draw_finetext, metrics; - draw_name = (typeof show_names === "boolean" ? show_names : (logo.get_rows() > 1)); - draw_finetext = (logo.fine_text.length > 0); - if (canvas.width !== 0 && canvas.height !== 0) { - return; - } - metrics = new LogoMetrics(canvas.getContext('2d'), - logo.get_xlate_columns(), logo.get_rows(), draw_name, draw_finetext, logo.x_axis, logo.y_axis); - if (typeof scale == "number") { - //resize the canvas to fit the scaled logo - canvas.width = metrics.summed_width * scale; - canvas.height = metrics.summed_height * scale; - } else { - if (canvas.width === 0 && canvas.height === 0) { - canvas.width = metrics.summed_width; - canvas.height = metrics.summed_height; - } else if (canvas.width === 0) { - canvas.width = metrics.summed_width * (canvas.height / metrics.summed_height); - } else if (canvas.height === 0) { - canvas.height = metrics.summed_height * (canvas.width / metrics.summed_width); - } - } -} - -function draw_logo_on_canvas(logo, canvas, show_names, scale) { - "use strict"; - var i, draw_name, draw_finetext, ctx, metrics, raster, pspm_i, pspm, - offset, col_index, motif_position, ssc; - ssc = false; - draw_name = (typeof show_names === "boolean" ? show_names : (logo.get_rows() > 1)); - draw_finetext = (logo.fine_text.length > 0); - ctx = canvas.getContext('2d'); - //assume that the user wants the canvas scaled equally so calculate what the best width for this image should be - metrics = new LogoMetrics(ctx, logo.get_xlate_columns(), logo.get_rows(), draw_name, draw_finetext, logo.x_axis, logo.y_axis); - if (typeof scale == "number") { - //resize the canvas to fit the scaled logo - canvas.width = metrics.summed_width * scale; - canvas.height = metrics.summed_height * scale; - } else { - if (canvas.width === 0 && canvas.height === 0) { - scale = 1; - canvas.width = metrics.summed_width; - canvas.height = metrics.summed_height; - } else if (canvas.width === 0) { - scale = canvas.height / metrics.summed_height; - canvas.width = metrics.summed_width * scale; - } else if (canvas.height === 0) { - scale = canvas.width / metrics.summed_width; - canvas.height = metrics.summed_height * scale; - } else { - scale = Math.min(canvas.width / metrics.summed_width, canvas.height / metrics.summed_height); - } - } - // cache the raster based on the assumption that we will be drawing a lot - // of logos the same size and alphabet - if (typeof draw_logo_on_canvas.raster_cache === "undefined") { - draw_logo_on_canvas.raster_cache = []; - } - for (i = 0; i < draw_logo_on_canvas.raster_cache.length; i++) { - raster = draw_logo_on_canvas.raster_cache[i]; - if (raster.get_alphabet().equals(logo.alphabet) && - Math.abs(raster.get_scale() - scale) < 0.1) break; - raster = null; - } - if (raster == null) { - raster = new RasterizedAlphabet(logo.alphabet, scale, metrics.stack_font, metrics.stack_width); - draw_logo_on_canvas.raster_cache.push(raster); - } - ctx = canvas.getContext('2d'); - ctx.save();//s1 - ctx.scale(scale, scale); - ctx.save();//s2 - ctx.save();//s7 - //create margin - ctx.translate(Math.round(metrics.pad_left), Math.round(metrics.pad_top)); - for (pspm_i = 0; pspm_i < logo.get_rows(); ++pspm_i) { - pspm = logo.get_pspm(pspm_i); - offset = logo.get_offset(pspm_i); - //optionally draw name if this isn't the last row or is the only row - if (draw_name && (logo.get_rows() == 1 || pspm_i != (logo.get_rows()-1))) { - ctx.save();//s4 - ctx.translate(Math.round(metrics.summed_width/2), Math.round(metrics.name_height)); - ctx.font = metrics.name_font; - ctx.textAlign = "center"; - ctx.fillText(pspm.name, 0, 0); - ctx.restore();//s4 - ctx.translate(0, Math.round(metrics.name_height + - Math.min(0, metrics.name_spacer - metrics.y_num_height/2))); - } - //draw scale - if (logo.y_axis) draw_scale(ctx, metrics, logo.alphabet.get_ic(), raster); - ctx.save();//s5 - //translate across past the scale - if (logo.y_axis) { - ctx.translate(Math.round(metrics.y_label_height + metrics.y_label_spacer + - metrics.y_num_width + metrics.y_tic_width), Math.round(metrics.y_num_height / 2)); - } - //draw the trimming background - if (pspm.get_left_trim() > 0 || pspm.get_right_trim() > 0) { - var left_start = offset * logo.get_xlate_nsyms(); - var left_end = (offset + pspm.get_left_trim()) * logo.get_xlate_nsyms(); - var left_divider = true; - if (left_end < logo.get_xlate_start() || left_start > logo.get_xlate_end()) { - // no overlap - left_start = 0; - left_end = 0; - left_divider = false; - } else { - if (left_start < logo.get_xlate_start()) { - left_start = logo.get_xlate_start(); - } - if (left_end > logo.get_xlate_end()) { - left_end = logo.get_xlate_end(); - left_divider = false; - } - left_start -= logo.get_xlate_start(); - left_end -= logo.get_xlate_start(); - if (left_end < left_start) { - left_start = 0; - left_end = 0; - left_divider = false; - } - } - var right_end = (offset + pspm.get_motif_length()) * logo.get_xlate_nsyms(); - //var right_start = right_end - (pspm.get_left_trim() * logo.get_xlate_nsyms()); - var right_start = right_end - (pspm.get_right_trim() * logo.get_xlate_nsyms()); - var right_divider = true; - if (right_end < logo.get_xlate_start() || right_start > logo.get_xlate_end()) { - // no overlap - right_start = 0; - right_end = 0; - right_divider = false; - } else { - if (right_start < logo.get_xlate_start()) { - right_start = logo.get_xlate_start(); - right_divider = false; - } - if (right_end > logo.get_xlate_end()) { - right_end = logo.get_xlate_end(); - } - right_start -= logo.get_xlate_start(); - right_end -= logo.get_xlate_start(); - if (right_end < right_start) { - right_start = 0; - right_end = 0; - right_divider = false; - } - } - draw_trim_background(ctx, metrics, left_start, left_end, left_divider, right_start, right_end, right_divider); - } - //draw letters - var xlate_col; - for (xlate_col = logo.get_xlate_start(); xlate_col < logo.get_xlate_end(); xlate_col++) { - ctx.translate(metrics.stack_pad_left,0); - col_index = Math.floor(xlate_col / logo.get_xlate_nsyms()); - if (xlate_col % logo.get_xlate_nsyms() == 0) { - if (col_index >= offset && col_index < (offset + pspm.get_motif_length())) { - motif_position = col_index - offset; - draw_stack_num(ctx, metrics, motif_position, raster); - draw_stack(ctx, metrics, pspm.get_stack(motif_position, logo.alphabet, ssc), raster); - } - } else { - if (col_index >= offset && col_index < (offset + pspm.get_motif_length())) { - ctx.save();// s5.1 - ctx.translate(0, Math.round(metrics.stack_height)); - // TODO draw a dot or dash or something to indicate continuity of the motif - ctx.restore(); //s5.1 - } - } - ctx.translate(Math.round(metrics.stack_width), 0); - } - ctx.restore();//s5 - ////optionally draw name if this is the last row but isn't the only row - if (draw_name && (logo.get_rows() != 1 && pspm_i == (logo.get_rows()-1))) { - //translate vertically past the stack and axis's - ctx.translate(0, metrics.y_num_height/2 + metrics.stack_height + - Math.max(metrics.y_num_height/2, metrics.x_num_above + metrics.x_num_width + metrics.name_spacer)); - - ctx.save();//s6 - ctx.translate(metrics.summed_width/2, metrics.name_height); - ctx.font = metrics.name_font; - ctx.textAlign = "center"; - ctx.fillText(pspm.name, 0, 0); - ctx.restore();//s6 - ctx.translate(0, metrics.name_height); - } else { - //translate vertically past the stack and axis's - ctx.translate(0, metrics.y_num_height/2 + metrics.stack_height + - Math.max(metrics.y_num_height/2, metrics.x_num_above + metrics.x_num_width)); - } - //if not the last row then add middle padding - if (pspm_i != (logo.get_rows() -1)) { - ctx.translate(0, metrics.pad_middle); - } - } - ctx.restore();//s7 - if (logo.fine_text.length > 0) { - ctx.translate(metrics.summed_width - metrics.pad_right, metrics.summed_height - metrics.pad_bottom); - ctx.font = metrics.fine_txt_font; - ctx.textAlign = "right"; - ctx.fillText(logo.fine_text, 0,0); - } - ctx.restore();//s2 - ctx.restore();//s1 -} - -function create_canvas(c_width, c_height, c_id, c_title, c_display) { - "use strict"; - var canvas = document.createElement("canvas"); - //check for canvas support before attempting anything - if (!canvas.getContext) { - return null; - } - var ctx = canvas.getContext('2d'); - //check for html5 text drawing support - if (!supports_text(ctx)) { - return null; - } - //size the canvas - canvas.width = c_width; - canvas.height = c_height; - canvas.id = c_id; - canvas.title = c_title; - canvas.style.display = c_display; - return canvas; -} - -function logo_1(alphabet, fine_text, pspm) { - "use strict"; - var logo = new Logo(alphabet, fine_text); - logo.add_pspm(pspm); - return logo; -} - -function logo_2(alphabet, fine_text, target, query, query_offset) { - "use strict"; - var logo = new Logo(alphabet, fine_text); - if (query_offset < 0) { - logo.add_pspm(target, -query_offset); - logo.add_pspm(query); - } else { - logo.add_pspm(target); - logo.add_pspm(query, query_offset); - } - return logo; -} - -/* - * Specifies an alternate source for an image. - * If the image with the image_id specified has - * not loaded then a generated logo will be used - * to replace it. - * - * Note that the image must either have dimensions - * or a scale must be set. - */ -function alternate_logo(logo, image_id, scale) { - "use strict"; - var image = document.getElementById(image_id); - if (!image) { - alert("Can't find specified image id (" + image_id + ")"); - return; - } - //if the image has loaded then there is no reason to use the canvas - if (image_ok(image)) { - return; - } - //the image has failed to load so replace it with a canvas if we can. - var canvas = create_canvas(image.width, image.height, image_id, image.title, image.style.display); - if (canvas === null) { - return; - } - //draw the logo on the canvas - draw_logo_on_canvas(logo, canvas, null, scale); - //replace the image with the canvas - image.parentNode.replaceChild(canvas, image); -} - -/* - * Specifes that the element with the specified id - * should be replaced with a generated logo. - */ -function replace_logo(logo, replace_id, scale, title_txt, display_style) { - "use strict"; - var element = document.getElementById(replace_id); - if (!replace_id) { - alert("Can't find specified id (" + replace_id + ")"); - return; - } - //found the element! - var canvas = create_canvas(50, 120, replace_id, title_txt, display_style); - if (canvas === null) { - return; - } - //draw the logo on the canvas - draw_logo_on_canvas(logo, canvas, null, scale); - //replace the element with the canvas - element.parentNode.replaceChild(canvas, element); -} - -/* - * Fast string trimming implementation found at - * http://blog.stevenlevithan.com/archives/faster-trim-javascript - * - * Note that regex is good at removing leading space but - * bad at removing trailing space as it has to first go through - * the whole string. - */ -function trim (str) { - "use strict"; - var ws, i; - str = str.replace(/^\s\s*/, ''); - ws = /\s/; i = str.length; - while (ws.test(str.charAt(--i))); - return str.slice(0, i + 1); -} -</script> - <script> -var current_motif = 0; -var dreme_alphabet = new Alphabet(data.alphabet, data.control_db.freqs); - -/* - * Create a pspm for the given motif data - */ -function motif_pspm(m) { - return new Pspm(m.pwm, m.id, 0, 0, m.nsites, m.evalue); -} - -/* - * Create a count matrix from the given motif data - */ -function motif_count_matrix(motif) { - return motif_pspm(motif).as_count_matrix(); -} - -/* - * Create a probablity matrix from the given motif data - */ -function motif_prob_matrix(motif) { - return motif_pspm(motif).as_probability_matrix(); -} - -/* - * Create a minimal meme format motif from the given motif data - */ -function motif_minimal_meme(motif) { - return motif_pspm(motif).as_meme({ - "with_header": true, - "with_pspm": true, - "with_pssm": false, - "version": data["version"], - "alphabet": dreme_alphabet, - "strands": (data.options.revcomp ? 2 : 1) - }); -} - -/* - * Fill in a template variable - */ -function set_tvar(template, tvar, value) { - var node; - node = find_child(template, tvar); - if (node === null) { - throw new Error("Template does not contain variable " + tvar); - } - node.innerHTML = ""; - if (typeof value !== "object") { - node.appendChild(document.createTextNode(value)); - } else { - node.appendChild(value); - } -} - -/* - * Make a canvas with the motif logo drawn on it. - */ -function make_logo(motif, height, rc) { - var pspm = new Pspm(motif["pwm"]); - if (rc) pspm = pspm.copy().reverse_complement(dreme_alphabet); - var logo = new Logo(dreme_alphabet); - logo.add_pspm(pspm, 0); - var canvas = document.createElement('canvas'); - canvas.height = height; - canvas.width = 0; - draw_logo_on_canvas(logo, canvas, false); - return canvas; -} - -/* - * Create a button designed to contain a single symbol - */ -function make_sym_btn(symbol, title, action) { - var box, sbox; - box = document.createElement("div"); - box.tabIndex = 0; - box.className = "sym_btn"; - sbox = document.createElement("span"); - if (typeof symbol == "string") { - sbox.appendChild(document.createTextNode(symbol)); - } else { - sbox.appendChild(symbol); - } - box.appendChild(sbox); - box.title = title; - box.addEventListener('click', action, false); - box.addEventListener('keydown', action, false); - return box; -} - -/* - * Create a pair of text spans with different classes. - * This is useful when using CSS to only display one of them. - */ -function text_pair(txt1, cls1, txt2, cls2) { - var container, part1, part2; - container = document.createElement("span"); - part1 = document.createElement("span"); - part1.appendChild(document.createTextNode(txt1)); - part1.className = cls1; - container.appendChild(part1); - part2 = document.createElement("span"); - part2.appendChild(document.createTextNode(txt2)); - part2.className = cls2; - container.appendChild(part2); - return container; -} - -/* - * Make a colourised sequence. - */ -function make_seq(seq) { - var i, j, letter, lbox, sbox; - sbox = document.createElement("span"); - for (i = 0; i < seq.length; i = j) { - letter = seq.charAt(i); - for (j = i+1; j < seq.length; j++) { - if (seq.charAt(j) !== letter) { - break; - } - } - lbox = document.createElement("span"); - lbox.style.color = dreme_alphabet.get_colour(dreme_alphabet.get_index(letter)); - lbox.appendChild(document.createTextNode(seq.substring(i, j))); - sbox.appendChild(lbox); - } - return sbox; -} - -/* - * Create a description element taking into account the newlines in the source text. - */ -function make_description(text) { - var i, j, lines, p; - var container = document.createElement("div"); - var paragraphs = text.split(/\n\n+/); - for (i = 0; i < paragraphs.length; i++) { - lines = paragraphs[i].split(/\n/); - p = document.createElement("p"); - p.appendChild(document.createTextNode(lines[0])); - for (j = 1; j < lines.length; j++) { - p.appendChild(document.createElement("br")); - p.appendChild(document.createTextNode(lines[j])); - } - container.appendChild(p); - } - return container; -} - -/* - * Make the table header for the discovered motifs. - */ -function make_motif_header() { - var row = document.createElement("tr"); - add_text_header_cell(row, "", "", "motif_ordinal"); - add_text_header_cell(row, "Motif", "pop_motifs_word", "motif_word"); - add_text_header_cell(row, "Logo", "pop_motifs_logo", "motif_logo"); - if (data.options.revcomp) { - add_text_header_cell(row, "RC Logo", "pop_motifs_rc_logo", "motif_logo"); - } - add_text_header_cell(row, "E-value", "pop_motifs_evalue", "motif_evalue"); - add_text_header_cell(row, "Unerased E-value", "pop_motifs_uevalue", "motif_evalue"); - add_text_header_cell(row, "More", "pop_more", "motif_more"); - add_text_header_cell(row, "Submit/Download", "pop_submit_dl", "motif_submit"); - row.className = "more"; - return row; -} - -/* - * Make a compact motif summary row for the discovered motifs. - */ -function make_motif_row(tbody, ordinal, motif) { - var row = document.createElement("tr"); - add_text_cell(row, "" + ordinal + ".", "motif_ordinal"); - add_text_cell(row, motif["id"], "motif_word"); - add_cell(row, make_logo(motif, 50, false), "motif_logo"); - if (data.options.revcomp) { - add_cell(row, make_logo(motif, 50, true), "motif_logo"); - } - add_text_cell(row, motif["evalue"], "motif_evalue"); - add_text_cell(row, motif["unerased_evalue"], "motif_evalue"); - add_cell(row, make_sym_btn(text_pair("\u21A7", "less", "\u21A5", "more"), "Show more information.", function(e) { toggle_class(tbody, "collapsed"); }, "\u21A5", ""), "motif_more"); - add_cell(row, make_sym_btn("\u21E2", "Submit the motif to another MEME Suite program or download it.", function(e) { action_show_outpop(e, ordinal); }), "motif_submit"); - return row; -} - -/* - * Make a sortable table of enriched matching rows. - */ -function make_motif_words(motif) { - var row, i, match; - var table = document.createElement("table"); - var thead = document.createElement("thead"); - row = document.createElement("tr"); - add_text_header_cell(row, "Word", "pop_match_word", "match_word", function(e) {sort_table(this, compare_words);}); - add_text_header_cell(row, "Positives", "pop_match_pos", "match_count", function(e) {sort_table(this, compare_counts);}); - add_text_header_cell(row, "Negatives", "pop_match_neg", "match_count", function(e) {sort_table(this, compare_counts);}); - add_text_header_cell(row, "P-value", "pop_match_pval", "match_evalue", function(e) {sort_table(this, compare_evalues);}); - add_text_header_cell(row, "E-value", "pop_match_eval", "match_evalue", function(e) {sort_table(this, compare_evalues);}); - thead.appendChild(row); - table.appendChild(thead); - var tbody = document.createElement("tbody"); - for (i = 0; i < motif.matches.length; i++) { - match = motif.matches[i]; - row = document.createElement("tr"); - add_cell(row, make_seq(match.seq), "match_word"); - add_text_cell(row, match.p + " / " + data.sequence_db.count, "match_count"); - add_text_cell(row, match.n + " / " + data.control_db.count, "match_count"); - add_text_cell(row, match.pvalue, "match_evalue"); - add_text_cell(row, match.evalue, "match_evalue"); - tbody.appendChild(row); - } - table.appendChild(tbody); - return table; -} - -/* - * Make an expanded view of a discovered motif. - */ -function make_motif_exp(tbody, ordinal, motif) { - "use strict"; - var box, pspm, logo_box; - box = $("tmpl_motif_expanded").cloneNode(true); - toggle_class(box, "template", false); - box.id = ""; - find_child(box, "tvar_logo").appendChild(make_logo(motif, 150, false)); - if (data.options.revcomp) { - find_child(box, "tvar_rclogo").appendChild(make_logo(motif, 150, true)); - } - set_tvar(box, "tvar_p", motif["p"]); - set_tvar(box, "tvar_p_total", data.sequence_db.count); - set_tvar(box, "tvar_n", motif["n"]); - set_tvar(box, "tvar_n_total", data.control_db.count); - set_tvar(box, "tvar_pvalue", motif["pvalue"]); - set_tvar(box, "tvar_evalue", motif["evalue"]); - set_tvar(box, "tvar_uevalue", motif["unerased_evalue"]); - set_tvar(box, "tvar_words", make_motif_words(motif)); - var cell = document.createElement("td"); - cell.colSpan = 8; - cell.appendChild(box); - var row = document.createElement("tr"); - row.className = "more"; - row.appendChild(cell); - return row; -} - -/* - * Convert a string containing a scientific number into the log of that number - * without having an intermediate representation of the number. - * This is intended to avoid underflow problems with the tiny evalues that - * MEME and DREME can create. - */ -function sci2log(scinum) { - "use strict"; - var ev_re, match, sig, exp; - ev_re = /^(.*)e(.*)$/; - if (match = ev_re.exec(scinum)) { - sig = parseFloat(match[1]); - exp = parseInt(match[2]); - return Math.log(sig) + (exp * Math.log(10)); - } - return 0; -} - -/* - * Create a table of discovered motifs. A fresh table body is used for each - * motif to make hiding/showing rows with css easier. - */ -function make_motifs() { - "use strict"; - var i, row, tbody, motif, ordinal; - // make the motifs table - var container = $("motifs"); - container.innerHTML = ""; // clear content - var table = document.createElement("table"); - // add a header that is always shown - var thead = document.createElement("thead"); - thead.appendChild(make_motif_header()); - table.appendChild(thead); - for (i = 0; i < data.motifs.length; i++) { - ordinal = i + 1; - motif = data.motifs[i]; - tbody = document.createElement("tbody"); - tbody.className = "collapsed"; - tbody.appendChild(make_motif_row(tbody, ordinal, motif)); - tbody.appendChild(make_motif_exp(tbody, ordinal, motif)); - // create a following header for every row except the last one - if ((i + 1) < data.motifs.length) tbody.appendChild(make_motif_header()); - table.appendChild(tbody); - } - container.appendChild(table); -} - -/* - * Create a table showing all the alphabet symbols, their names and frequencies. - */ -function make_alpha_bg(alph, freqs) { - function colour_symbol(index) { - var span = document.createElement("span"); - span.appendChild(document.createTextNode(alph.get_symbol(index))); - span.style.color = alph.get_colour(index); - span.className = "alpha_symbol"; - return span; - } - var table, thead, tbody, row, th, span, i; - // create table - table = document.createElement("table"); - table.className = "inputs"; - // create header - thead = document.createElement("thead"); - table.appendChild(thead); - row = thead.insertRow(thead.rows.length); - if (alph.has_complement()) { - add_text_header_cell(row, "Name", "pop_alph_name"); - add_text_header_cell(row, "Bg.", "pop_alph_control"); - add_text_header_cell(row, ""); - add_text_header_cell(row, ""); - add_text_header_cell(row, ""); - add_text_header_cell(row, "Bg.", "pop_alph_control"); - add_text_header_cell(row, "Name", "pop_alph_name"); - } else { - add_text_header_cell(row, ""); - add_text_header_cell(row, "Name", "pop_alph_name"); - add_text_header_cell(row, "Bg.", "pop_alph_control"); - } - // add alphabet entries - tbody = document.createElement("tbody"); - table.appendChild(tbody); - if (alph.has_complement()) { - for (i = 0; i < alph.get_size_core(); i++) { - var c = alph.get_complement(i); - if (i > c) continue; - row = tbody.insertRow(tbody.rows.length); - add_text_cell(row, alph.get_name(i)); - add_text_cell(row, "" + freqs[i].toFixed(3)); - add_cell(row, colour_symbol(i)); - add_text_cell(row, "~"); - add_cell(row, colour_symbol(c)); - add_text_cell(row, "" + freqs[c].toFixed(3)); - add_text_cell(row, alph.get_name(c)); - } - } else { - for (i = 0; i < alph.get_size_core(); i++) { - row = tbody.insertRow(tbody.rows.length); - add_cell(row, colour_symbol(i)); - add_text_cell(row, alph.get_name(i)); - add_text_cell(row, "" + freqs[i].toFixed(3)); - } - } - return table; -} - -/* - * Updates the format download text in the popup. - * This is called when either the format or current motif changes. - */ -function update_outpop_format(index) { - var motif = data.motifs[index]; - var fn = [motif_count_matrix, motif_prob_matrix, motif_minimal_meme]; - var suffix = ["_counts.txt", "_freqs.txt", ".meme"]; - var format = parseInt($("text_format").value); - var text = fn[format](motif); - prepare_download(text, "text/plain", motif.id + suffix[format], $("outpop_text_dl")); - $("outpop_text").value = text; -} - -/* - * Updates the motif logos and format download text in the popup. - * This is called whenever the current motif changes. - */ -function update_outpop_motif(index) { - "use strict"; - var motifs, motif, pspm, logo, canvas, num; - motifs = data["motifs"]; - if (index < 0 || index >= motifs.length) {return;} - current_motif = index; - motif = motifs[index]; - pspm = new Pspm(motif["pwm"]); - logo = new Logo(dreme_alphabet, ""); - logo.add_pspm(pspm, 0); - canvas = $("outpop_logo"); - canvas.width = canvas.width; // clear canvas - draw_logo_on_canvas(logo, canvas, false); - canvas = $("outpop_logo_rc"); - canvas.width = canvas.width; // clear rc canvas - if (data.options.revcomp) { - pspm.reverse_complement(dreme_alphabet); - logo = new Logo(dreme_alphabet, ""); - logo.add_pspm(pspm, 0); - draw_logo_on_canvas(logo, canvas, false); - } - num = $("outpop_num"); - num.innerHTML = ""; - num.appendChild(document.createTextNode("" + (index + 1))); - update_outpop_format(index); -} - - -/* - * Initialise and display the download popup. - */ -function action_show_outpop(e, ordinal) { - "use strict"; - function init() { - "use strict"; - var close_btn, next_btn, prev_btn, cancel_btn, do_btn; - var tab1, tab2, tab3; - var pnl1, pnl2, pnl3; - var format_list; - var tbl_submit, inputs, i, default_prog; - close_btn = $("outpop_close"); - close_btn.addEventListener("click", action_hide_outpop, false); - close_btn.addEventListener("keydown", action_hide_outpop, false); - next_btn = $("outpop_next"); - next_btn.addEventListener("click", action_outpop_next, false); - next_btn.addEventListener("keydown", action_outpop_next, false); - prev_btn = $("outpop_prev"); - prev_btn.addEventListener("click", action_outpop_prev, false); - prev_btn.addEventListener("keydown", action_outpop_prev, false); - cancel_btn = $("outpop_cancel"); - cancel_btn.addEventListener("click", action_hide_outpop, false); - do_btn = $("outpop_do"); - do_btn.addEventListener("click", action_outpop_submit, false); - tab1 = $("outpop_tab_1"); - tab1.tabIndex = 0; - tab1.addEventListener("click", action_outpop_tab, false); - tab1.addEventListener("keydown", action_outpop_tab, false); - tab2 = $("outpop_tab_2"); - tab2.tabIndex = 0; - tab2.addEventListener("click", action_outpop_tab, false); - tab2.addEventListener("keydown", action_outpop_tab, false); - tab3 = $("outpop_tab_3"); - tab3.tabIndex = 0; - tab3.addEventListener("click", action_outpop_tab, false); - tab3.addEventListener("keydown", action_outpop_tab, false); - pnl1 = $("outpop_pnl_1"); - pnl2 = $("outpop_pnl_2"); - pnl3 = $("outpop_pnl_3"); - toggle_class(tab1, "activeTab", true); - toggle_class(tab2, "activeTab", false); - toggle_class(tab3, "activeTab", false); - pnl1.style.display = "block"; - pnl2.style.display = "none"; - pnl3.style.display = "none"; - format_list = $("text_format"); - format_list.addEventListener("change", action_outpop_format, false); - // setup program selection - tbl_submit = $("programs"); - // when not dna, hide the inputs for programs that require dna motifs - toggle_class(tbl_submit, "alphabet_dna", dreme_alphabet.has_complement());//TODO FIXME alphabet_dna is a bad name for a field when allowing custom alphabets - // add a click listener for the radio buttons - inputs = tbl_submit.querySelectorAll("input[type='radio']"); - for (i = 0; i < inputs.length; i++) { - inputs[i].addEventListener("click", action_outpop_program, false); - } - // ensure that a default program option is selected for DNA and Protein - default_prog = document.getElementById(dreme_alphabet.has_complement() ? "submit_tomtom" : "submit_fimo"); - default_prog.checked = true; - action_outpop_program.call(default_prog); - // disable reverse-complement when not DNA - $("logo_rc_option").disabled = !dreme_alphabet.has_complement(); - // set errorbars on when ssc is on - $("logo_ssc").addEventListener("change", action_outpop_ssc, false); - } - // store the focused element - action_hide_outpop.last_active = document.activeElement; - if (!e) e = window.event; - if (e.type === "keydown") { - if (e.keyCode !== 13 && e.keyCode !== 32) { - return; - } - // stop a submit or something like that - e.preventDefault(); - } - // hide the help popup - help_popup(); - // on first load initilize the popup - if (!action_show_outpop.ready) { - init(); - action_show_outpop.ready = true; - } - update_outpop_motif(ordinal - 1); - // display the download popup - $("grey_out_page").style.display = "block"; - $("download").style.display = "block"; - $("outpop_close").focus(); -} - -/* - * Hide the download popup. - */ -function action_hide_outpop(e) { - if (!e) e = window.event; - if (e.type === "keydown") { - if (e.keyCode !== 13 && e.keyCode !== 32) { - return; - } - // stop a submit or something like that - e.preventDefault(); - } - $("download").style.display = "none"; - $("grey_out_page").style.display = "none"; - if (typeof action_hide_outpop.last_active !== "undefined") { - action_hide_outpop.last_active.focus(); - } -} - -/* - * Show the next motif in the download popup. - */ -function action_outpop_next(e) { - if (!e) e = window.event; - if (e.type === "keydown") { - if (e.keyCode !== 13 && e.keyCode !== 32) { - return; - } - // stop a submit or something like that - e.preventDefault(); - } - update_outpop_motif(current_motif + 1); -} - -/* - * Show the previous motif in the download popup. - */ -function action_outpop_prev(e) { - if (!e) e = window.event; - if (e.type === "keydown") { - if (e.keyCode !== 13 && e.keyCode !== 32) { - return; - } - // stop a submit or something like that - e.preventDefault(); - } - update_outpop_motif(current_motif - 1); -} - -/* - * Highlight the selected row in the program list. - */ -function action_outpop_program() { - "use strict"; - var table, tr, rows, i; - tr = find_parent_tag(this, "TR"); - table = find_parent_tag(tr, "TABLE"); - rows = table.querySelectorAll("tr"); - for (i = 0; i < rows.length; i++) { - toggle_class(rows[i], "selected", rows[i] === tr); - } -} - -/* - * Enable error bars when small sample correction is enabled. - */ -function action_outpop_ssc() { - "use strict"; - $("logo_err").value = $("logo_ssc").value; -} - -/* - * Submit the motif to the selected program. - */ -function action_outpop_submit(e) { - "use strict"; - var form, input, program, motifs; - // find out which program is selected - var radios, i; - radios = document.getElementsByName("program"); - program = "fimo"; // default to fimo, since it works with all alphabet types - for (i = 0; i < radios.length; i++) { - if (radios[i].checked) program = radios[i].value; - } - - motifs = motif_minimal_meme(data.motifs[current_motif]); - form = document.createElement("form"); - form.setAttribute("method", "post"); - form.setAttribute("action", site_url + "/tools/" + program); - - input = document.createElement("input"); - input.setAttribute("type", "hidden"); - input.setAttribute("name", "motifs_embed"); - input.setAttribute("value", motifs); - form.appendChild(input); - - document.body.appendChild(form); - form.submit(); - document.body.removeChild(form); -} - -/* - * Download the format text. - * Wire the link containing the data URI text to a download button so it looks - * the same as the server submit stuff. - */ -function action_outpop_download_motif(e) { - $("outpop_text_dl").click(); -} - -/* - * Download the motif logo. - * The EPS format can be calculated locally in Javascript - */ -function action_outpop_download_logo(e) { - "use strict"; - var pspm, logo, eps; - var logo_rc, logo_ssc, logo_width, logo_height; - var motif = data.motifs[current_motif]; - if ($("logo_format").value == "0") { // EPS - logo_rc = ($("logo_rc").value == "1"); - logo_ssc = ($("logo_ssc").value == "1"); - logo_width = parseFloat($("logo_width").value); - if (isNaN(logo_width) || !isFinite(logo_width) || logo_width <= 0) logo_width = null; - logo_height = parseFloat($("logo_height").value); - if (isNaN(logo_height) || !isFinite(logo_height) || logo_height <= 0) logo_height = null; - // create a PSPM from the motif - pspm = motif_pspm(motif); - if (logo_rc) pspm.reverse_complement(dreme_alphabet); - logo = new Logo(dreme_alphabet); - logo.add_pspm(pspm, 0); - eps = logo.as_eps({"ssc": logo_ssc, "logo_width": logo_width, "logo_height": logo_height}); - prepare_download(eps, "application/postscript", motif.id + ".eps"); - } else { - $("logo_motifs").value = motif_minimal_meme(motif); - $("logo_form").submit(); - } -} - -/* - * Change the selected tab in the download popup. - */ -function action_outpop_tab(e) { - "use strict"; - var tab1, tab2, tab3, pnl1, pnl2, pnl3, do_btn; - if (!e) e = window.event; - if (e.type === "keydown") { - if (e.keyCode !== 13 && e.keyCode !== 32) { - return; - } - // stop a submit or something like that - e.preventDefault(); - } - tab1 = $("outpop_tab_1"); - tab2 = $("outpop_tab_2"); - tab3 = $("outpop_tab_3"); - pnl1 = $("outpop_pnl_1"); - pnl2 = $("outpop_pnl_2"); - pnl3 = $("outpop_pnl_3"); - do_btn = $("outpop_do"); - - toggle_class(tab1, "activeTab", (this === tab1)); - toggle_class(tab2, "activeTab", (this === tab2)); - toggle_class(tab3, "activeTab", (this === tab3)); - pnl1.style.display = ((this === tab1) ? "block" : "none"); - pnl2.style.display = ((this === tab2) ? "block" : "none"); - pnl3.style.display = ((this === tab3) ? "block" : "none"); - do_btn.value = ((this === tab1) ? "Submit" : "Download"); - do_btn.removeEventListener("click", action_outpop_submit, false); - do_btn.removeEventListener("click", action_outpop_download_logo, false); - do_btn.removeEventListener("click", action_outpop_download_motif, false); - if (this === tab1) { - do_btn.addEventListener("click", action_outpop_submit, false); - } else if (this === tab2) { - do_btn.addEventListener("click", action_outpop_download_motif, false); - } else { - do_btn.addEventListener("click", action_outpop_download_logo, false); - } -} - -/* - * Update the text in the download format popup. - */ -function action_outpop_format() { - update_outpop_format(current_motif); -} - -/* - * Find all text nodes in the given container. - */ -function text_nodes(container) { - var textNodes = []; - var stack = [container]; - // depth first search to maintain ordering when flattened - while (stack.length > 0) { - var node = stack.pop(); - if (node.nodeType == Node.TEXT_NODE) { - textNodes.push(node); - } else { - for (var i = node.childNodes.length-1; i >= 0; i--) { - stack.push(node.childNodes[i]); - } - } - } - return textNodes; -} - -/* - * Get the text out of a specific text node. - */ -function node_text(node) { - if (node === undefined) { - return ''; - } else if (node.textContent) { - return node.textContent; - } else if (node.innerText) { - return node.innerText; - } else { - return ''; - } -} - -/* - * Get the text contained within the element. - */ -function elem_text(elem, separator) { - if (separator === undefined) separator = ''; - return text_nodes(elem).map(node_text).join(separator); -} - -/* - * Sort all rows in the first table body based on the column of the given element and the comparison function. - * The sort is not very fast and is intended for small tables only. - */ -function sort_table(colEle, compare_function) { - //find the parent of colEle that is either a td or th - var i, j; - var cell = colEle; - while (true) { - if (cell == null) return; - if (cell.nodeType == Node.ELEMENT_NODE && - (cell.tagName.toLowerCase() == "td" || cell.tagName.toLowerCase() == "th")) { - break; - } - cell = cell.parentNode; - } - //find the parent of cell that is a tr - var row = cell; - while (true) { - if (row == null) return; - if (row.nodeType == Node.ELEMENT_NODE && row.tagName.toLowerCase() == "tr") { - break; - } - row = row.parentNode; - } - //find the parent of row that is a table - var table = row; - while (true) { - if (table == null) return; - if (table.nodeType == Node.ELEMENT_NODE && table.tagName.toLowerCase() == "table") { - break; - } - table = table.parentNode; - } - var column_index = cell.cellIndex; - // do a bubble sort, because the tables are so small it doesn't matter - var change; - var trs = table.tBodies[0].getElementsByTagName('tr'); - var already_sorted = true; - var reverse = false; - while (true) { - do { - change = false; - for (i = 0; i < trs.length -1; i++) { - var v1 = elem_text(trs[i].cells[column_index]); - var v2 = elem_text(trs[i+1].cells[column_index]); - if (reverse) { - var tmp = v1; - v1 = v2; - v2 = tmp; - } - if (compare_function(v1, v2) > 0) { - exchange(trs[i], trs[i+1], table); - change = true; - already_sorted = false; - trs = table.tBodies[0].getElementsByTagName('tr'); - } - } - } while (change); - if (reverse) break;// we've sorted twice so exit - if (!already_sorted) break;// sort did something so exit - // when it's sorted one way already then sort the opposite way - reverse = true; - } - // put arrows on the headers - var headers = table.tHead.getElementsByTagName('tr'); - for (i = 0; i < headers.length; i++) { - for (j = 0; j < headers[i].cells.length; j++) { - var cell = headers[i].cells[j]; - var arrows = cell.getElementsByClassName("sort_arrow"); - var arrow; - if (arrows.length == 0) { - arrow = document.createElement("span"); - arrow.className = "sort_arrow"; - cell.insertBefore(arrow, cell.firstChild); - } else { - arrow = arrows[0]; - } - arrow.innerHTML = ""; - if (j == column_index) { - arrow.appendChild(document.createTextNode(reverse ? "\u25B2" : "\u25BC")); - } - } - } -} - -/* - * Swap two rows in a table. - */ -function exchange(oRowI, oRowJ, oTable) { - var i = oRowI.rowIndex; - var j = oRowJ.rowIndex; - if (i == j+1) { - oTable.tBodies[0].insertBefore(oRowI, oRowJ); - } if (j == i+1) { - oTable.tBodies[0].insertBefore(oRowJ, oRowI); - } else { - var tmpNode = oTable.tBodies[0].replaceChild(oRowI, oRowJ); - if(typeof(oRowI) != "undefined") { - oTable.tBodies[0].insertBefore(tmpNode, oRowI); - } else { - oTable.appendChild(tmpNode); - } - } -} - -/* - * Compare two E-values which may be very small. - */ -function compare_evalues(v1, v2) { - var e1 = sci2log(v1); - var e2 = sci2log(v2); - if (e1 < e2) return -1; - else if (e1 > e2) return 1; - return 0; -} - -/* - * Compare two counts. - */ -function compare_counts(v1, v2) { - var re = /(\d+)\s*\/\s*\d+/; - var m1 = re.exec(v1); - var m2 = re.exec(v2); - if (m1 == null && m2 == null) return 0; - if (m1 == null) return -1; - if (m2 == null) return 1; - return parseInt(m2[1]) - parseInt(m1[1]); -} - -/* - * Compare two sequence words. - */ -function compare_words(v1, v2) { - return v1.localeCompare(v2); -} - - -</script> - <style> -/* The following is the content of meme.css */ -body { background-color:white; font-size: 12px; font-family: Verdana, Arial, Helvetica, sans-serif;} - -div.help { - display: inline-block; - margin: 0px; - padding: 0px; - width: 12px; - height: 13px; - cursor: pointer; - background-image: url(data:image/gif;base64,R0lGODlhDAANAIABANR0AP///yH5BAEAAAEALAAAAAAMAA0AAAIdhI8Xy22MIFgv1DttrrJ7mlGNNo4c+aFg6SQuUAAAOw==); -} - -div.help:hover { - background-image: url(data:image/gif;base64,R0lGODlhDAANAKEAANR0AP///9R0ANR0ACH+EUNyZWF0ZWQgd2l0aCBHSU1QACH5BAEAAAIALAAAAAAMAA0AAAIdDGynCe3PgoxONntvwqz2/z2K2ImjR0KhmSIZUgAAOw==); -} - -p.spaced { line-height: 1.8em;} - -span.citation { font-family: "Book Antiqua", "Palatino Linotype", serif; color: #004a4d;} - -p.pad { padding-left: 30px; padding-top: 5px; padding-bottom: 10px;} - -td.jump { font-size: 13px; color: #ffffff; background-color: #00666a; - font-family: Georgia, "Times New Roman", Times, serif;} - -a.jump { margin: 15px 0 0; font-style: normal; font-variant: small-caps; - font-weight: bolder; font-family: Georgia, "Times New Roman", Times, serif;} - -h2.mainh {font-size: 1.5em; font-style: normal; margin: 15px 0 0; - font-variant: small-caps; font-family: Georgia, "Times New Roman", Times, serif;} - -h2.line {border-bottom: 1px solid #CCCCCC; font-size: 1.5em; font-style: normal; - margin: 15px 0 0; padding-bottom: 3px; font-variant: small-caps; - font-family: Georgia, "Times New Roman", Times, serif;} - -h4 {border-bottom: 1px solid #CCCCCC; font-size: 1.2em; font-style: normal; - margin: 10px 0 0; padding-bottom: 3px; font-family: Georgia, "Times New Roman", Times, serif;} - -h5 {margin: 0px} - -a.help { font-size: 9px; font-style: normal; text-transform: uppercase; - font-family: Georgia, "Times New Roman", Times, serif;} - -div.pad { padding-left: 30px; padding-top: 5px; padding-bottom: 10px;} - -div.pad1 { margin: 10px 5px;} - -div.pad2 { margin: 25px 5px 5px;} -h2.pad2 { padding: 25px 5px 5px;} - -div.pad3 { padding: 5px 0px 10px 30px;} - -div.box { border: 2px solid #CCCCCC; padding:10px; overflow: hidden;} - -div.bar { border-left: 7px solid #00666a; padding:5px; margin-top:25px; } - -div.subsection {margin:25px 0px;} - -img {border:0px none;} - -th.majorth {text-align:left;} -th.minorth {font-weight:normal; text-align:left; width:8em; padding: 3px 0px;} -th.actionth {font-weight:normal; text-align:left;} - -.explain h5 {font-size:1em; margin-left: 1em;} - -div.doc {margin-left: 2em; margin-bottom: 3em;} - -th.trainingset { - border-bottom: thin dashed black; - font-weight:normal; - padding:0px 10px; -} -div.pop_content { - position:absolute; - z-index:50; - width:300px; - padding: 5px; - background: #E4ECEC; - font-size: 12px; - font-family: Arial; - border-style: double; - border-width: 3px; - border-color: #AA2244; - display:none; -} - -div.pop_content > *:first-child { - margin-top: 0px; -} - -div.pop_content h1, div.pop_content h2, div.pop_content h3, div.pop_content h4, -div.pop_content h5, div.pop_content h6, div.pop_content p { - margin: 0px; -} - -div.pop_content p + h1, div.pop_content p + h2, div.pop_content p + h3, -div.pop_content p + h4, div.pop_content p + h5, div.pop_content p + h6 { - margin-top: 5px; -} - -div.pop_content p + p { - margin-top: 5px; -} - -div.pop_content > *:last-child { - margin-bottom: 0px; -} - -div.pop_content div.pop_close { - /* old definition */ - float:right; - bottom: 0; -} - -div.pop_content span.pop_close, div.pop_content span.pop_back { - display: inline-block; - border: 2px outset #661429; - background-color: #CCC; - padding-left: 1px; - padding-right: 1px; - padding-top: 0px; - padding-bottom: 0px; - cursor: pointer; - color: #AA2244; /*#661429;*/ - font-weight: bold; -} - -div.pop_content span.pop_close:active, div.pop_content span.pop_back:active { - border-style: inset; -} - -div.pop_content span.pop_close { - float:right; - /*border: 2px outset #AA002B;*/ - /*color: #AA2244;*/ -} - -div.pop_content:not(.nested) .nested_only { - display: none; -} - -div.pop_back_sec { - margin-bottom: 5px; -} - -div.pop_close_sec { - margin-top: 5px; -} - -table.hide_advanced tr.advanced { - display: none; -} -span.show_more { - display: none; -} -table.hide_advanced span.show_more { - display: inline; -} -table.hide_advanced span.show_less { - display: none; -} - - -/***************************************************************************** - * Program logo styling - ****************************************************************************/ -div.prog_logo { - border-bottom: 0.25em solid #0f5f60; - height: 4.5em; - width: 24em; - display:inline-block; -} -div.prog_logo img { - float:left; - width: 4em; - border-style: none; - margin-right: 0.2em; -} -div.prog_logo h1, div.prog_logo h1:hover, div.prog_logo h1:active, div.prog_logo h1:visited { - margin:0; - padding:0; - font-family: Arial, Helvetica, sans-serif; - font-size: 3.2em; - line-height: 1em; - vertical-align: top; - display: block; - color: #026666; - letter-spacing: -0.06em; - text-shadow: 0.04em 0.06em 0.05em #666; -} -div.prog_logo h2, div.prog_logo h2:hover, div.prog_logo h2:active, div.prog_logo h2:visited { - display: block; - margin:0; - padding:0; - font-family: Helvetica, sans-serif; - font-size: 0.9em; - line-height: 1em; - letter-spacing: -0.06em; - color: black; -} - -div.big.prog_logo { - font-size: 18px; -} - -</style> - <style> -/* dreme output specific css */ -div.header { - position: relative; - overflow: hidden; - margin-top: 15px; - margin-bottom: 5px; - margin-right: 3px; - margin-left: 3px; -} -div.header > h2 { - font-size: 1.5em; - font-style: normal; - margin: 0; - font-variant: small-caps; - font-family: Georgia, "Times New Roman", Times, serif; -} -div.header > span { - position: absolute; - right: 0; - bottom: 0; -} - -div.template { - position: absolute; - z-index: 1; - left: 0; - top: 0; - visibility: hidden; -} - -div.sym_btn { - display:inline-block; - text-decoration: underline; - cursor: pointer; - font-size: 20px; - line-height:20px; - text-align: center; - width: 20px; - height: 20px; - color: blue; -} -div.sym_btn:hover { - color: white; - background-color: blue; -} - -div.sym_btn.positioned { - position: absolute; - top: 0px; -} - -div.box + div.box { - margin-top: 5px; -} - -th.motif_ordinal { - -} -td.motif_ordinal { - text-align: right; - padding-right: 10px; - font-weight: bold; - font-size: large; -} -th.motif_word { - padding-right: 10px; -} -td.motif_word { - font-size:15px; - font-family: 'Courier New', Courier, monospace; - padding-right: 10px; -} -th.motif_logo { - padding-right: 10px; -} -td.motif_logo { - padding-right: 10px; -} -th.motif_evalue { - text-align:right; - padding-right: 10px; -} -td.motif_evalue { - text-align: right; - white-space: nowrap; - padding-right: 20px; -} -th.motif_more { - padding: 0 5px; -} -td.motif_more { - text-align: center; - padding: 0 5px; -} -th.motif_submit { - padding: 0 5px; -} -td.motif_submit { - text-align: center; - padding: 0 5px; -} -th.match_word { - padding-right: 10px; -} -td.match_word { - padding-right: 10px; - font-weight: bold; - font-size: large; - font-family: 'Courier New', Courier, monospace; -} -th.match_evalue, th.match_count { - text-align: right; - padding-right: 10px; -} -td.match_evalue, td.match_count { - text-align: right; - white-space: nowrap; - padding-right: 20px; -} - -div.tabArea { - font-size: 80%; - font-weight: bold; -} - -.norc div.tabArea { - display: none; -} - -span.tab, span.tab:visited { - cursor: pointer; - color: #888; - background-color: #ddd; - border: 2px solid #ccc; - padding: 2px 1em; - text-decoration: none; -} -span.tab.middle { - border-left-width: 0px; -} -div.tabArea.base span.tab { - border-top-width: 0px; -} -div.tabArea.top span.tab { - border-bottom-width: 0px; -} - -span.tab:hover { - background-color: #bbb; - border-color: #bbb; - color: #666; -} -span.tab.activeTab, span.tab.activeTab:hover, span.tab.activeTab:visited { - background-color: white; - color: black; - cursor: default; -} -div.tabMain { - border: 2px solid #ccc; - background-color: white; - padding: 10px; -} -div.tabMain.base { - margin-top: 5px; - display: inline-block; - max-width: 98%; -} - -div.tabMain.top { - margin-bottom: 5px; -} - -div.grey_background { - position:fixed; - z-index: 8; - background-color: #000; - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; - opacity: 0.5; - left: 0; - top: 0; - width: 100%; - height: 100%; -} - -div.popup_wrapper { - position:fixed; - z-index:9; - width:100%; - height:0; - top:50%; - left:0; -} - -div.popup { - width: 600px; - z-index:9; - margin-left: auto; - margin-right: auto; - padding: 5px; - background-color: #FFF; - border-style: double; - border-width: 5px; - border-color: #00666a; - position:relative; -} -div.close { - cursor: pointer; - border: 1px solid black; - width:15px; - height:15px; - line-height:15px; /* this causes vertical centering */ - text-align:center; - background-color:#FFF; - color:#000; - font-size:15px; - font-family:monospace; -} - -div.close:hover { - color:#FFF; - background-color:#000; -} - -div.navnum { - width:100%; - height:20px; - line-height:20px; - text-align:center; - font-size:medium; -} - -div.navarrow { - font-size: 30px; - text-decoration:none; - cursor: pointer; - -moz-user-select: none; - -webkit-user-select: none; - -ms-user-select: none; -} - -div.navarrow > span.inactive { - display: inline; -} -div.navarrow > span.active { - display: none; -} - -div.navarrow:hover > span.active { - display: inline; -} -div.navarrow:hover > span.inactive { - display: none; -} - -table.programs { - width: 100%; -} - -table.programs tr { - background-color: #EFE; -} - -table.programs tr.selected { - background-color: #262; - color: #FFF; -} - -table.programs tr.dna_only { - display: none; -} - -table.programs.alphabet_dna tr.dna_only { - display: table-row; -} - -table.inputs { - margin-top: 20px; - border-collapse:collapse; -} -table.inputs * td, table.inputs * th { - padding-left: 15px; - padding-right: 15px; - padding-top: 1px; - padding-bottom: 1px; -} - -/* program settings */ -span.strand_none, span.strand_given, span.strand_both { - display: none; -} -td.none span.strand_none, td.given span.strand_given, td.both span.strand_both { - display: inline; -} - -/* show the expanded motif only when the collapsed one is hidden */ -tbody *.less, tbody.collapsed *.more { - display: none; -} - -tbody.collapsed *.less { - display: inline; -} - -</style> - </head> - <body data-scrollpad="true"> - <!-- --> - <div id="grey_out_page" class="grey_background" style="display:none;"> - </div> - - <!-- Help popups --> - <div class="pop_content" id="pop_"> - <p>Help poup.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - - <div class="pop_content" id="pop_motifs_word"> - <p> - The name of the motif uses the IUPAC codes for nucleotides which has - a different letter to represent each of the 15 possible combinations. - </p> - <p> - The name is itself a representation of the motif though the position - weight matrix is not directly equalivant as it is generated from the - sites found that matched the letters given in the name. - </p> - <p> - <a id="doc_alphabets_url" href="#"> - Read more about the MEME suite's use of the IUPAC alphabets. - </a> - <script>$("doc_alphabets_url").href = site_url + "/doc/alphabets.html";</script> - </p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - <div class="pop_content" id="pop_motifs_logo"> - <p>The logo of the motif.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - <div class="pop_content" id="pop_motifs_rc_logo"> - <p>The logo of the reverse complement motif.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - <div class="pop_content" id="pop_motifs_evalue"> - <p>The E-value is the enrichment p-value times the number of candidate - motifs tested.</p> - <p>The enrichment p-value is calculated using Fisher's Exact Test for - enrichment of the motif in the positive sequences.</p> - <p>Note that the counts used in Fisher's Exact Test are made after - erasing sites that match previously found motifs.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - <div class="pop_content" id="pop_motifs_uevalue"> - <p>The E-value of the motif calculated without erasing the sites of - previously found motifs.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - <div class="pop_content" id="pop_more"> - <p>Show more information on the motif.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - <div class="pop_content" id="pop_submit_dl"> - <p>Submit your motif to another MEME Suite program or download your motif.</p> - <h5>Supported Programs</h5> - <dl> - <dt>Tomtom</dt> - <dd>Tomtom is a tool for searching for similar known motifs. - </dd> - <dt>MAST</dt> - <dd>MAST is a tool for searching biological sequence databases for - sequences that contain one or more of a group of known motifs. - </dd> - <dt>FIMO</dt> - <dd>FIMO is a tool for searching biological sequence databases for - sequences that contain one or more known motifs. - </dd> - <dt>GOMO</dt> - <dd>GOMO is a tool for identifying possible roles (Gene Ontology - terms) for DNA binding motifs. - </dd> - <dt>SpaMo</dt> - <dd>SpaMo is a tool for inferring possible transcription factor - complexes by finding motifs with enriched spacings. - </dd> - </dl> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - <div class="pop_content" id="pop_motif_positives"> - <p># positive sequences matching the motif / # positive sequences.</p> - <p>Note these counts are made after erasing sites that match previously - found motifs.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - <div class="pop_content" id="pop_motif_negatives"> - <p># negative sequences matching the motif / # negative sequences.</p> - <p>Note these counts are made after erasing sites that match previously - found motifs.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - <div class="pop_content" id="pop_motif_pvalue"> - <p>The p-value of Fisher's Exact Test for enrichment of the motif in - the positive sequences.</p> - <p>Note that the counts used in Fisher's Exact Test are made after - erasing sites that match previously found motifs.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - <div class="pop_content" id="pop_motif_evalue"> - <p>The E-value is the motif p-value times the number of candidate motifs - tested.</p> - <p>Note that the p-value was calculated with counts made after - erasing sites that match previously found motifs.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - <div class="pop_content" id="pop_motif_uevalue"> - <p>The E-value of the motif calculated without erasing the sites of - previously found motifs.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - <div class="pop_content" id="pop_match_word"> - <p>All words matching the motif whose uncorrected p-value is less than - <span id="help_add_pv_thresh"></span>.</p> - <script>$("help_add_pv_thresh").innerHTML = data.options.add_pv_thresh;</script> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - <div class="pop_content" id="pop_match_pos"> - <p># positive sequences with matches to the word / # positive sequences.</p> - <p>Note these counts are made after erasing sites that match previously - found motifs.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - <div class="pop_content" id="pop_match_neg"> - <p># negative sequences with matches to the word / # negative sequences.</p> - <p>Note these counts are made after erasing sites that match previously - found motifs.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - <div class="pop_content" id="pop_match_pval"> - <p>The p-value of Fisher's Exact Test for enrichment of the word in - the positive sequences.</p> - <p>Note that the counts used in Fisher's Exact Test are made after - erasing sites that match previously found motifs.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - <div class="pop_content" id="pop_match_eval"> - <p>The word p-value times the number of candidates tested.</p> - <p>Note that the p-value was calculated with counts made after - erasing sites that match previously found motifs.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - - <div class="pop_content" id="pop_seq_source"> - <p>The sequence file used by DREME to find the motifs.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - <div class="pop_content" id="pop_seq_alph"> - <p>The alphabet of the sequences.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - <div class="pop_content" id="pop_seq_count"> - <p>The count of the sequences.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - - <div class="pop_content" id="pop_alph_name"> - <p>The name of the alphabet symbol.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - - <div class="pop_content" id="pop_alph_control"> - <p>The frequency of the alphabet symbol in the control dataset.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - - <!-- templates --> - - <div class="template box expanded_motif" id="tmpl_motif_expanded"> - <div> - <span class="tvar_logo"></span> - <span class="tvar_rclogo"></span> - </div> - <h4>Details</h4> - <table class="details"> - <thead> - <tr> - <th class="match_count">Positives <div class="help" data-topic="pop_motif_positives"></div></th> - <th class="match_count">Negatives <div class="help" data-topic="pop_motif_negatives"></div></th> - <th class="match_evalue">P-value <div class="help" data-topic="pop_motif_pvalue"></div></th> - <th class="match_evalue">E-value <div class="help" data-topic="pop_motif_evalue"></div></th> - <th class="match_evalue">Unerased E-value <div class="help" data-topic="pop_motif_uevalue"></div></th> - </tr> - </thead> - <tbody> - <tr> - <td class="match_count"> - <span class="tvar_p"></span> / <span class="tvar_p_total"></span> - </td> - <td class="match_count"> - <span class="tvar_n"></span> / <span class="tvar_n_total"></span> - </td> - <td class="tvar_pvalue match_evalue"></td> - <td class="tvar_evalue match_evalue"></td> - <td class="tvar_uevalue match_evalue"></td> - </tr> - </tbody> - </table> - <h4>Enriched Matching Words</h4> - <div class="tvar_words"></div> - </div> - - - <div class="popup_wrapper"> - <div class="popup" style="display:none; top: -150px;" id="download"> - <div> - <div style="float:right; "> - <div id="outpop_close" class="close" tabindex="0">x</div> - </div> - <h2 class="mainh" style="margin:0; padding:0;">Submit or Download</h2> - <div style="clear:both"></div> - </div> - <div style="height:100px"> - <div style="float:right; width: 30px;"> - <div id="outpop_prev" class="navarrow" tabindex="0"> - <span class="inactive">⇧</span><span class="active">⬆</span> - </div> - <div id="outpop_num" class="navnum"></div> - <div id="outpop_next" class="navarrow" tabindex="0"> - <span class="inactive">⇩</span><span class="active">⬇</span> - </div> - </div> - <div id="logo_box" style="height: 100px; margin-right: 40px;"> - <canvas id="outpop_logo" height="100" width="250"></canvas> - <canvas id="outpop_logo_rc" height="100" width="250"></canvas> - </div> - </div> - <div> - <!-- tabs start --> - <div class="tabArea top"> - <span id="outpop_tab_1" class="tab">Submit Motif</span><span - id="outpop_tab_2" class="tab middle">Download Motif</span><span - id="outpop_tab_3" class="tab middle">Download Logo</span> - </div> - <div class="tabMain top"> - <!-- Submit to another program --> - <div id="outpop_pnl_1"> - <h4 class="compact">Submit to program</h4> - <table id="programs" class="programs"> - <tr class="dna_only"> - <td><input type="radio" name="program" value="tomtom" id="submit_tomtom"></td> - <td><label for="submit_tomtom">Tomtom</label></td> - <td><label for="submit_tomtom">Find similar motifs in - published libraries or a library you supply.</label></td> - </tr> - <tr> - <td><input type="radio" name="program" value="fimo" id="submit_fimo"></td> - <td><label for="submit_fimo">FIMO</label></td> - <td><label for="submit_fimo">Find motif occurrences in - sequence data.</label></td> - </tr> - <tr> - <td><input type="radio" name="program" value="mast" id="submit_mast"></td> - <td><label for="submit_mast">MAST</label></td> - <td><label for="submit_mast">Rank sequences by affinity to - groups of motifs.</label></td> - </tr> - <tr class="dna_only"> - <td><input type="radio" name="program" value="gomo" id="submit_gomo"></td> - <td><label for="submit_gomo">GOMo</label></td> - <td><label for="submit_gomo">Identify possible roles (Gene - Ontology terms) for motifs.</label></td> - </tr> - <tr class="dna_only"> - <td><input type="radio" name="program" value="spamo" id="submit_spamo"></td> - <td><label for="submit_spamo">SpaMo</label></td> - <td><label for="submit_spamo">Find other motifs that are - enriched at specific close spacings which might imply the existance of a complex.</label></td> - </tr> - </table> - </div> - <!-- download text format --> - <div id="outpop_pnl_2"> - <div> - <label for="text_format">Format:</label> - <select id="text_format"> - <option value="0">Count Matrix</option> - <option value="1">Probability Matrix</option> - <option value="2">Minimal MEME</option> - </select> - </div> - <textarea id="outpop_text" name="content" - style="width:99%; white-space: pre; word-wrap: normal; overflow-x: scroll;" - rows="8" readonly="readonly" wrap="off"></textarea> - <a id="outpop_text_dl" download="meme.txt" href=""></a> - </div> - <!-- download logo format --> - <div id="outpop_pnl_3"> - <form id="logo_form" method="post" action=""> - <script>$("logo_form").action = site_url + "/utilities/generate_logo";</script> - <input type="hidden" name="program" value="DREME"/> - <input type="hidden" id="logo_motifs" name="motifs" value=""/> - <table> - <tr> - <td><label for="logo_format">Format:</label></td> - <td> - <select id="logo_format" name="png"> - <option value="1">PNG (for web)</option> - <option value="0">EPS (for publication)</option> - </select> - </td> - </tr> - <tr> - <td><label for="logo_rc">Orientation:</label></td> - <td> - <select id="logo_rc" name="rc1"> - <option value="0">Normal</option> - <option value="1" id="logo_rc_option">Reverse Complement</option> - </select> - </td> - </tr> - <tr> - <td><label for="logo_ssc">Small Sample Correction:</label></td> - <td> - <input type="hidden" id="logo_err" name="errbars" value="0"/> - <select id="logo_ssc" name="ssc"> - <option value="0">Off</option> - <option value="1">On</option> - </select> - </td> - </tr> - <tr> - <td><label for="logo_width">Width:</label></td> - <td> - <input type="text" id="logo_width" size="4" placeholder="default" name="width"/> cm - </td> - </tr> - <tr> - <td><label for="logo_height">Height:</label></td> - <td> - <input type="text" id="logo_height" size="4" placeholder="default" name="height"/> cm - </td> - </tr> - </table> - </form> - </div> - <!-- Buttons --> - <div> - <div style="float:left;"> - <input type="button" id="outpop_do" value="Submit" /> - </div> - <div style="float:right;"> - <input id="outpop_cancel" type="button" value="Cancel" /> - </div> - <div style="clear:both;"></div> - </div> - </div> - </div> - </div> - </div> - - - - <!-- Page starts here --> - <div id="top" class="pad1"> - <div class="prog_logo big"> - <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAAAd0SU1FB9wLGwYBMoyhiwgAACAASURBVHja7Z13fFRV9sC/503JpIeaKFVREBQVEEFFQVcUuyDouuraFoVV17IrayPjDP4U3XXXhrpiXxuKKF1dV8WCiEgXRUAQlJIYAilMf+f3x3szmVSSkICyOR/eh8wr9717z7mn3XPOhRZogRbYLQiQJiJGy1D8D0LHjh1/XrZsmQK9gU3Ap0mE0QL7KTx411136Z///GdV1ZhpmvrYY4+pqsZUVceNG6dAz5Zh2j/hnpKSEtM0TVVVrfq/qmosFtMxY8Yo8CPQHejucDjyfm0dbZFp1WGaxmJ3ppSWSiQUIhQKIWJxehGhpKSE1LQ0uvfowQHZ2exYt65D8dq1qzUaXR2LxTYCP7UM4a8MVFWA9mY0+nLhmjV63LHH6vMvvKATJkzQfn366CtPPKEDjjtOV61apeeedZZqMKgaCKju2KFmYaFqJKJaWqqqqoACR/9a+u5sQT+IiD77zDPbKCnR00aOZPHSpcydO5fLf/972rdvTzgcZsEnnzDmqquYPmsW/PxzxbMOB4NPOokRZ5+tB3XrJsAUYKmqOkQkVuVVKUBGDRbGz/vSvPlfBHcVDpB7XP/+Gz9/5x1mzJ/P1i1buPbaa1m/fj1du3alW5curPvqqxobCoVCpKSkIO3a1Wc89bCuBy51OZwu1RgiBqGYGf1uw09/Bd5t4QDNT+wKfPXoxIl9jzm6gkt/OmsWn3/4oRIMyrfLlzPuzjvp27cvHTt2ZNGXX+K/7baaW8zJITM1lflz5wL8ZtWqVWm9evXaVcv7Q2cN6hM68tAuR2MIhirFpUEef+MdBFK1RQQ0v6g/MC9PLxk5Uq+/7joIBECSJmwwKKqKR4RTTjyR0885h2effZaNa9Ywa9YstKQkoQzGwSwuJhwIwK5ddO3a9b+9evWqjQPoSf16qUOQles2gYLL5WDaBwu5dtSw8L/eeKdFB2huaJWTo0NOOMF8wOs1qiG/QhfghtGj+dMNN4DblhJlZVBaWg35AIYI7NgBbjcbNmwwjz766I+WLl16OfCDfUs3YB3AAdke6d7tYNR2Jv6wuZA2rbIwxbFPxfD/jBn4t7vv5uUnnzRsTNelEEIoBKWl1qH1YM7hMAXffWcsWbBgMLAB+AgoAtYC5SJCp86dUTPG89M/ACASi1mDH4u2+AH2Bvzhpps+p3Xrmi+mp2Oa5h613y4nh1WLFuHxeHTq1KmDVbWVqjJjxozU4cOH88rsj1FXKteMOh3D4eQ/ny/hjnwfn32zyWUYxtAWK6D54YW1X355WbcePSr32elk1EUX8cYbb1gzvvG+BEzA2b49msQ1RARVZe7cuTzzjwl079qB6R8s4PhThjF58mQADjroIDZs2CAtBLAXFMEaTwaDe4R8ALKzEbcbVUVVE4hP/t/lctGnTx9+c8op3HvffQm9YubMmZx77rlic2Rzbw7I/5oreNzJgwapqqI7dqA7d1pHSUnyVG5Uw0MGD6agoCCB7IQ+kcQFIpEIkydPZszYsQmuoaqEw2H95JNPdOHChTHgervJT4DTWzhA08OjwGWT7r8/u3xXhckei8W47c47obwcMjMtsy9OEHUojdhI/M2oUXwwb16dIqKqJVFaWkJmZlal60OGDJk7b968M1SVsWPH8uSTTxYC7WmBvQIbV6xcGQK0aM0a3bRsmW5fu1b1559NLSzUakdBgXXYawC7A0CXLVtW7fzMmTOrnTNNU03T1OXLl5u1ia4WaA4lQbXVmDFjcoFcIHfJ0qUXqKqaBQXVCMC0kZ+MtNogEAjoli1bar0ef/bee++tiXDMFszsQ+jbt+/r1111leqOHZWJIBBQ7913azgc1qaAeABCVUKqQgBvAO8BL7RgZu9xhd6nnnpqNLpzp8559VXVkhL9ZOZM/X79+j1Bdm1sP2KaZix+rqioSBctWqSqejPw2KhRo+IPxjp06KC0rOg2p82AkE8O4zkbiAJ6ySWXVJLRjUW2qmqrVq30+eefr3RrFWYQf4+pqjpq1Khq7zYMY4/0g5agxppgPCnARcC1GPRFSUF5gAn0VNVz69vMkiVLWLNmDRdeeGGt93Tu3JmNGzfu1slkGAZbt24lNze30jWHw4Fpmo3GYwv7SIY7GYKD8UA/INteQFaKEL7iqBNPPPHYhjTXp08f+vTpU+O1rVu38sc//pE5c+ZgmiaGUbtLJu5HqMNdfYXT6VwdjUY/b+EAdXm9DMNlmmYrAA/I6SKe6ao/JM38v2Pw52oPrgV9Seu06RugTzT62ZogNzeXbdu2ISIYhpFmmmagxRNYC7Gbptlnw5Il29Z/9dW2H1ev3jpddQPwQ79+/f5k32NNsSpStdeSXonZ99JLL+0RAkWEG2+8samUU7Zt2xb3KKppmptbREAd43Vwly5fdDniCLS42DoRDILb3fnRiRPzLzzrrIdVlX9MeoKCw36GSMUIpaWlJVh0UVHRHiPt4YcfbhqKruxyFiDUIsfrhpWAfjprlpplZVZUb1UHTyBgRfnGD1Xt0KlTvR0++xIcDodecMEFCvxDVXv/79nrM2lnzuAanUWdnV8InzocDu104IGqO3aY+vPPWqOrt7BQdds2jcRijTLzmsg5VO93RCyCNa+88kotKCgosTnC6f8rIkD/PGcsQ044AYAZL9XOgkdfdlnxibEYuzZvjkpOjrN1q1Yc1Llz4p4Lzz+fcePH21qBidMwGDhwIA8++CAn2O1XZcWjR4/mmmuuoX///k2ruIjw9ttvc/755+9enjudAGIYBu3atctUVXr16vXOqlWrOovIpv169pszeX/yP/9Z+0xOPqLRymy+yvHp7Nl61tChetbQoTpt6tRaF2x+qSLh6quvTvw9adIkE3hrw4YNjv3WDNSZDEZ5/6Hl9zhvGjsWzKZbOykH0tu2Tdjie9H9XCmYpCHPjR49mqeffjqZi5iq+jQwVkTM/c4MVCUfcM564y6u+8ufmxRRV1xxxb6xWUUSR0Ofa2clqdgSzOTVV181otHoNTNnzjxjv9MBzBl0EeUUNeD9e2Dkfc/z53xPnUGeN4wezcFHHlmvwX1j1iwAJk6cuNf7tmLFit16CavCww8/jMPhSHZ+sWDBAi688EL97W9/O0tVPSIS2m9EgDmda8XgSRRFKvqjigooQh85h+Xx819BaxO2nQ/ODGAjrA5A9WyeTA4kg1y2UCnO75cOJ510Eh9//HGN10aOHKmLFi2a98MPP5y834gAEYaikIx8+7wAhpr8oabnpgMvA5/Av4C+1Y5bWMRoIJUXBg0apL8G5KsqH3/8cY0iUFWZOnWqnHfeeUNUtcPeJoBUwFPHkdoYbqQ+BBiitYVMWYs57iqnYskv0trEoGlzjXGMX7du3R3RaNMlcDz55JN1c7VGKrFVg1DjiE++duutt6phGAtV1dhbBHBW6+zM0iM6tSkccFTPwv6HH1o44KiehUd0ap34PahPr0Kga4MJ4CjOUWgjUgvxKIiDc8yZpMVPReEkrZ/uk2hz69atr7344ot2i3sOY8aMqRXJt99+e40yf9q0aU2iRHbs2FEGDhx4wPr1689sbiXwcDEck3My044ePWKo4dRwRjQUILPtgZRt34rDeTCxWJSs1rk8PmUOKSkeCYWCDSR5OiXQpLYggLCCS8TCv0CmmBWELtDNThPeKZBdzzdtuPrqqyU1NVXPPPNMsrKyqs26hkJtil12dnaN7HvEiBEN1kPatGnD9OnTOe+88yqdnzRpkoiIpzk5wMnZGWkrhxxz+HG3XHRqqsPplPKyMlxZ7dkVCODMaEtZeRlpOe3419S5dOt8ANFYrDHy/5i4wocgKH9Xg0MFvkiewVolqNKexu+p5TFIq+/7fve733Wcm5PzStzbJyK43e4mHbjbbrutmgyvmmdQX+jatSu1ia4tW7asbS4O0Mntcn5wxx9GaUlJiQQiiivFQKNhHAaEy8pwuj1kt8njqTfepXvXA+nToyvzvlzZCK2HYxGsf8oKPNxunE5U3+Kv6uBdBI8qHlEOB76sLiBQA04GfPV840/dIPDEV1/dd5lhXP0TLAmrzveIyKlnnXV3z549uSknp/Qf27dnDh06lGHDhu2RLG+M4ygOmzZt4swzz+SCCy6o8f7PPvtsS3MRwPI22Zn61LT3JRwoQw0noIg4UP0Wp8uNwzAQEbp3PZDB/Xqxs2xXwzs8B6dGcNvs3BST2+V0ogAynI/N6SwTYYCCC8FTnQEkwNEwqYNDwbgZCoAPROSBL6CLMXv2rctmz85eC5suX7Yss3fv5lmMi0QiqGo1ziMiZGdns2LFCjp37kynTp3w+/01EoqtDJY0FwEEI6FAzgF5OQw6vi/ZuZ2qsDTFYRj4n5pKSXmAwcc0cqBCHC0ODrFlf1TdLK6CqWUKA5IxvhwkDCfsoSY3AHhCLQKIZ+x4gNgy0KOgpP9RR5kh1QNVVZrafEx28lRF7M6dO+vFXbZt2zYzLiKbRQfof2QvBg/sh5HZlrJdAcp2BSgPBO0jRFnAUvaGDuhNWKVR+XhacQiwQkJsq9RRk9fFVgvjKCgHUTjY/j0TCNOApItnraacWAUgNgI9kr4n8Hu4HejxCVwhIufbkT9ah07RoD5PmTIFwzBqVCDrS2hjxozh0ksvzW1WP4DGPTGqlO/4GTEMMGMJRBticGiXA4hEYxAO1J17V7sCmJpkq70vw6shsrwWV6fadPGFQkSg+6dW9a7dQtuK7glgSAXxuA3IFbgnaQhmPvroo2kvvviiTJkyhfnz51ebsa+++mqD+nzRRRdVUxAbsu6hqvztb3/ToqKi9LfeessNuJqFAFJcTsx4UqXhsIY8o03i7x+3FfH1uk10ymvbKOTbLP4uxEaFWb3CVtw5ZP9f0yw37OttU6mkI9QK7SALONh+7geFTp9bhHBI8jsdkGkTQeDyyy+XRy6++MCJQ4aQ4jJwuxy4nQYOw2DqM4/w6KOPNsi/EJ/p4XCYYDCIiDBz5sz6IF9FhKysLFHVZ4YPH74DiDQLAfxnwTI8bhcA6QceCmrCrh1JyFGcDgebC7ZbMe+N0XohB0BNtkuUFdUNapYqrBTlWnawIPnRKm8z+sHO+rzTsPP3HfCdAcUKrRwWAcTZglj0WNmpNV+15OgLYMLYU/nsoYP4+w0D6NPzIFYu/YqbLDEhDZ3NW7duZf369agq55xzTr0IZ+TIkfTs2fMqEflns4qAXcEQD7000+pQeBehcMTqY0paJXZkGILDYbDw63UYTkcjGQGFMrJ6oUXjZEKEOEHOZbJcTsy+1wW018revtKvbGKqr3SzxYgA6tiNFxFg1nhy+x4coaA0g+8Lc1mxqSsOw8CMmYrAIYcc8pWIMGHCBD744IN4mjGzZ8+u9UM6d+5Mz5496yP7TWDh+PHj5c0337z5m2++eS75YnNYAUuBYcUlZRTtLKNtNjhTMyAWhkAJVCm57zAMPl60ktRUD4FG+Nu1jjUEYxQlVe51A22A4hDsTIEihdxwPXUAJ7QywWXP9gKgvQluhSyjMmEkOqmzOBqTawpLiKalf+WcumQkaZ7VRCMRwsEyycnKCq9bt+4e4G2v1wswbs2aNfcfcsghnH322XsU26CqFBQUGHl5eZMsCca/apSDTQxnAEsNw+Bfb7yDw+nAiIYs5ljDfguC4HQ5oQEeOX2LTsDRtgqwraHjIrDhBNgKfA+kOmFIPblNOhADchXuAGKm1auOSRbJarGqh6PT6YPJuTj4dvgDrPv7zJNp3+pHwsEQS77bqNlpLkrLylxVfBEP9OvXL7t169bFzzzzTKMJIO4YysvLU9216wWgNRDYGwQAdrFkj8dj6WmGUaupVx4MIohCDXK8ts45SMewuJdq40usaoUdbzRABDgU3hZrrwBxWs/GrdJLgamAQ+dyACnI1PlDNslZW5Z/tvxC98at82MSLg+nOwkhEvnHy+8QicYEeDP5JSUlJSXFxcVnXH311Yfcd999DepTfJFpxIgRiAgbFi+Oh8gJtWnCzQBvJ3ynBdvrObkaKPs18aDRAIRrfcVHLc9nWRYoOTbCU0LWgpJD4Zn+VoiBiIGDCA+tWt/5xElPnb/11uzhOfD6tNUb1sy654XZcx+c8v5MPPpM4Q0l5yb67k36tnyuwcsaYN2bb7652lbidzvjwUpIFZFvZ8yY8U9AFi1bJpgmpw4e7Hn8iSfa7y0C2BFXmMLRmGUFZOVZXKBKR9I8KbYzr/khDVphKYJxKGggAXSsgWhjapmBAfueoKTQ86ftbd4cNvZv342KPtj3b/4FC4C/AOfbxygC/BGYjJerKymY+dyNn6fwsR1g8eLFh4kFNdr+yev9IsLAgQMBnjFN8xawah8RCjH12Wfd2dnZf9pbBHCl9U1JXj61TfHUrEZX4tpTiMJRgEcrMPiuzbu7NcDqSDYHDCzF0p0w5WBtaSDd3fGKDwdc1/rO464bt+kZbmRrjY35yQMW4+VBNNH0kYnr3sS5/r17917bt29fzjzzzER0kmmaiAiHdu/OgL59WfzBB0QikUqv+L/HHoNWrcjOztY/33jjnap6dnNbAYmPq8S2DAcYTUdvWuGTq7PAnzmdozEpM4azNsmMe99G5nr791H1fGerJCL4RKCvEzpbcSd8Y99jOohFx7cfNf/JS9Yu5C4b+V5yUcZWoiA/d+NjCV4mIVxGPjvwVzJJ7yGfUvxMXLly5aH2uRduvfXW30+bNo1Vq1bN9Hg8Zxd8842069TJKoAdDlf65uVLl743b/bsUwcff7zx1xtvVBE5CpjV7ARAJbepQGlBHaK+gSqA4BZLoIeBGnOAzHcRCeJVAy9wElbd3jgU1TyhdwuH2Q+8HYMrndaagClgKBTbDao4gtnzTlr93YZ/sslm688AF+InM2l2tyKfAEIaPo7HyybCDALgrwzEzTx8pPR6rJesYlXyN1z+97///fKMjAyXx+OJANF2HTo4CNSaFX76I5Mn6+Djj+emcePkhWnTzli6ePH/NbcIALghMcBij7DhqHGkXbYTyOPxXFw/9sJVGveKhqkWSWK+TT8JsdJGfk1UmdKYDomle84Pw4VRCKj1uyPQmQo38I8pMe75eGqSVePnanxJyAfwUYyfVOAa+3enj679aMW9H99bFLwn+Ln6NWKapq66flWNxFlWVhZpqNiipIQ+3bufoKr/anYCcDqdyypZ+6oEgoGqwbuEI1Fuu/J8cjLTFOhUrw4ZpCS5X6uy/KEYzEfoJdVV/Y72gMQX0x0NHIc0gc3HQ2SQlXi5zrAcLO74esMxML8//LsBQ/U1+TyOFx3yxJCH7njjjpM9Lo+ISIZhGPVhjY7vvv66Tg722cKF4HKBKrfecIOKyEnNTgAulyvJTWmha9eW7xEUl9NRKcwpHImi2mCTrDboIVW2hEl65veSNCkUFoiFyH71fGc/S5dMNBKxiSgSg28bOVSfIUxC+fCREY+s59GKHIZ6Qu+1dRealq0FBectWLBAAXr26SM9DjnksCVLlvTdGzoAYhgEy3bgycgmvU0eGijhgHatq/mw60fsu9ccpGK5tyZiidp/L7bPXwakaP11ALcJHye1G8WS/+4YBBs1QD4U+Bo45U/+PzXK9e5yuSq6XD3aWIEZp40cKSUbNyrl5fLa5Mn06dMnrVk5gL0Vm+XtKy4EEVLSMkGEDZsLKsKi7aybmy85m2CwYWOoDSeUDvbfZQthmgF3S8NCvdVIcqfO5oznT2POfxww5Xj4jn0Dg6KRSJyd0uGgg2q8qbSs7IzNP/0ksViMjPR0Jk+e3LwcQERmqypqmrTueDCoJpb+K0W0CIgKu4JNU91E6yYE077+qgGt1FoXkPrQ0nJwhaBrhUqxsN/duLIBTz+YyL6DBWaSuR0Oh2vMZDZEPuzQu3eJqmYempe3CXikua2ADBGxAkOo0AUioSrmSkome6sWssI2+0vi9nz8w7IWWG7eWmGXpVekAz/Cyr5geCD2M5hL+IWAmiaFRUU1LiCZqiERWSYiAaDL3jADUVW6dcy1RlmsSOBoMgGoWg6iRkYFST3PKbDQ0tYHUF0/UIEsl4XcOtcRBCKTuMYNWg6aB/IK9Iv9UghARKo5gqrg46SsrKz2e8MVXAnHoJDexqbS5HAMgWBZk7J7Tfo/mfdErb46arLt6/MuAzmojPSVU7i4OwT7gsyDfr+oqlyqWrHbWS1QUlJSvldcwTWlMZmmSVp2a3YW7UiSylEUSE9NaeIPoFwAFdJFCRh7mAp/LLo5j9e+DZAxEPgDHFP6S0G8y+UCtxsxDFrl5OAwjB9i9UwwbRYCSE1NTVFV0jzuauxZq85XO7Pz+Rkf4XanEA7Xf1JJ7d66dUQZpk7mohyCtQCkdbUT3s1YCItag7YB9wg4KvhLmvnDkmoR2/L/jfo+21wi4OGYaeqNvzuLmGnaYeL2QDprZlE/7yhtsC9Aa+7RQkyOM0awNp4cqyYxo3osQPJvtxN+U/fbytdD/zN/aciPm9zxgwZyuuYiAAUkGAoTLN2BiAFlRVbwlMOdUFhcTme1Ldb2WBE6h4XG+RRW0gOcGAYcYfdXbeSLwncmPG/fuxsZNHj3PNXLoc2K6b9wYigSupwbGNug527nZrxMx8uBe4sAKsynnUVWSFgSbYgITofBh4u+xu1qvBTanQEvlf9ok6R6isKiGBzeiJjCuuD4ZhvIfN7DyTtRjT6vj+gk7iJGvrUEXQdBtsPL53qvrsbHefjYvNcJoE3nQzFj8awgC11tsjO57OzB/PDTNis82jSJRmON4TMOcXNCXaZbTQShMMMJJw5M8utT+e+KJmJEGvBF/ya/0rJz04Gf05hIevq49C4dHuwgOkEnTr94+pXG3UYxXsprQH4PrEDQITEz1mGvKoGVNP9YLCGI4/hwuxw899qHiQCRcCRK6a5Ag6phYWn4DkyOISnAIXFtFjlqkpcsEW1q+MgDI3tXlIOOV1o+A3im0uRQbuGeKtE8Xt6ASkEoG/BhpeH6MPEyGS95+GqJAtpTeIiNm9kssk3ye3ftfT3wb5SX8PIZJrOZwL3cxFCUTvh5FqB/Xv8ruZNcHDyBn6K9SgAJuW6HhyngcDj3SN5rZQO+ZtYRpZc4yNDqzy5OQj6KpS9QOd4PDCbhY2MVNjwNHyOqEMQBeNmAcjF+PsdysZ6FFR3cfJDKSyu2rTDwsxYvxUC7Nultvp7749z/e+ubt7hv6H3xYNO3T+t2WtclY5fcszeVwKpmScULDQc7Nm+o17NL4IAaiUoxRHfLHQ6KZ2mQTlShVy3WY827bFRFvsWGR9Rw3xZ8dMXP53h5Dx8BlEnNrvr7+R5hjv0NrVCuL7qtqMexHY+VNFcaqvoR+UTxcf7EoRPz97YVUAnh5TsqZ25Z6wG1Y3ARdPsSvozC+Fq8iy8ma/k1EolB3wSq04hRS9yfNOVChDKKfD7GT64d5CE1yOamLBjQm3y+sAniIfJR8vnD+Nnjh8pd0gc/zqlfTxXqSH5tdgIQh5NYknPHNGO07nCQlRHkMFizcUul+7+EEQrLgWMEMudXDuOOY62Iiiz002tBRq5URnQ8O2JHLZ/q+XRPRaKfnfg5iXyOAYIog2v4rqvx8h7eSvpG48BHCD8D8NolboQr8PM0afyH/yP7uSXP6cjDR6qIPLbPCKDs581ktM2rpIkbTjfZGWm4nE4Wrfo+ce30aPQ0gdelIk1suLPCfKvNDGxXTfGciaHKwBruj5kwt5bmfmoSVuAlHcGNn1uQJI+cl1S8BPDzND5Ow5fIB2gKOAkvgo8X8LIVH4KXdVf2uVLI54p94QhKhP6nt26PiGHrAla9gFgsyvUXDSMQDNOv18EJVt5F9US1F2xs5LqB3+7GE5ii06tk95aSJkJ2LSKiqkNnrcIcAy48sWZTsKGzshyYZn/gNXjJJp8XUVrjs4paNDn4OBl4CC9ulP72uW54KUCYXdejzWYFHNyhPSJimYGGEzSGQ6Ns27KJtq1y2BUKgcbo0eVAAqEwrbMyMIp3uqtYbS7g8M/BcVwVbV8FEUUx6KIx+gIfJC5mcCbQVuIpRy5q3WHTgMIoXNKPKra0lwwUL5L0XqsYXVHco4iSDfyIn8cT8t0K8boLL0OB2cBDwN0Im5uV1fqI70S1KencbncdbzYC2Fq0w1oRVAVPBlq+nSlzP+LIzq1p1+aYRKZQLFEfUCv7kSvs80tdcC8VSRyIEFOTXRikq5WVcYr5Jh8aF6Dm2xgoN2Hlo/5HlFOD82kLdsx9FehnvW5HFXOvLVao9yuAQRTFQRQoRVmAUGqXoC0CnHgZh9IJpTtesvDxNF6eQ/Hhr+Id9HIYVuyBAEvwsU/jCZptLSAQClcIanEQDEdZvbmYEjMlYRq63W6m/OdzAqEwRTvLksmgIMlec8bssiwJ2Mk6YGVivV8ZKS477l7JQ+hjhyGEENAwTir0it33WSgGvkH4FlhVMr4kHViG8D1CayAHP53x0wc/vfHRFZgBPAisw0suEKiG/HwUK5l0FfD1HiE/n3FNgahm4QDJAaEgEA3iSXFxxx9GgghqmoghqEKq221XXDLi4rnIztm7LE4ADhgO/DfR4qWY5vREHJGqcChwhU5nKvCICh5bh1ibrAQohBywsR7sNEZS8GeWL+sTVT1fRKYnIWAW8Cx+W977GW4j/jzgRdTOcfAyFzgN2IKvCU1AaRrcNRcHGNOtY57l7bM9gPEUIVEzyTsIwXAET4qb1tnpcc3RNGGjWCHcaiPy5K9qswbssvCi/E2Fb9XgAtFEINKcKq7gsEKjQpAqId9C+NkIHrxMJZ8rbcLZBrwOvIcQxcst+DgDHw58VTyNzQVeO9MI4E+cz1+rW0PNzgFEhB8LiiqigtQEhxuJhSElA8JWZdBIOMzFw04gEAqT17YV5s/FCEwOw/1uuFEgw9L36Bi1qm58DqBvISqsUOhvl4lVxMrSTSDf0hVMtf6PU44a0wAADOxJREFUn3I2qcD18YqtJ1js3Y/gs7dq86JNMuO9OFBS8e+GcL38AZiAz/ae3sIgfVD/DVwo98veNwMPaJNTMdMjAUhrXaurWFUZecoATNMkBl96rLy7Fyo8v2Q54KoEgQ1HxeRf8ZTqeLl4iXMEQTD5UiN8KyDFy+gOuAVGD6SGlbOmYcmLbUSk2cUeXE3UsgehG16OrOJFrIrVc/FxAF4EL7dKpqwTkUzJl6v3jR+g0lqAQLicJKldjWNErcgh0wFb+kFU4Lvk5VyF3E+pZEerUPtSrQg7RXAA6wrnkgrc1h9ea0YzrJ9tBu6yZ36sidotx8cylP/aJibkEyJ5BTSfyfiIb2t/JcpoRXfh5SGEW+pyPze7J9CMRSzEh8vt11X+lnhmcHFJGbtgmwkLbYTPxpbX9hMnpVvr2xb2f2IpymqtzUOovI6DHRRzZHgbT/SHvze7/PUlqZy+Jk528NMOr+3UEYL4WJbk2ppuE8Ig4EH8dMfaMfRW/Gys61uanQBKCjYj8WqhalZUDgXEcLD42/VEojEem/IuLpcz8aUGbLft7PipzCgk0seN64iqEJUaOI/d/Eo5n1K5nED/2v3/vzaovnI5nmKdoGWMYxTwHj5a4eVRfLyOb/fBLM1OAK7UNKLhoB2IZev0CfvOwdpNW4nFYjgEypTCATbCTYvdB5NYhgGc+kVyAoda8Xw1sIAdmKxkfwMf99j6Raatb/TAYCxw76Aeg/6CnzTyeRz4x742AxOQ2ToPrSNGPVEvwDA40TTzAeZDZwP+A/TQCnkPMESS6wka/KhKTLWyG1FMJhvDKWV/BCUdtXZCE6QNPl57/MvHp8/fNH+aPaAd8FV4TfeZK7hCyzdxuOrOVkn1uGmdlU7fguDOhTBArLp58Uze5AQfF3AmtoUg5bxDGisQjrb3CUSEsLIXAjL2FfjZBTyLl+s0omNV9XC5XT5iIifjJYqvYTjdK9vGWYtCUWKRcC1EAqaVMpYr8K5ABxvzPyu8lMQFDIE+iXZ/S7kq/1TTrk5v7Rs03TiXH9jfQXno5d++/FdLg+YW8nkJu0DnL44A4gpf8eYNSKisxpKx9se8FN/JS+FHE07TuPPHeqrs2zwrGijJ3HsT4d9qEkL5gihj+F8AofCSIy+ZLSJiHGCkImTga7jes3cIQBwI0LZL90T5uNQUN0n1+uJOI6ddSvI7gcEDYEnMEgfrDNh16ZVMuOyaymvqci7l4uCPAscS5UQZYVXr+kWCFw/5XNpErT2Bl3mQKA/bqHLre4cAnCnWHLZdww7D4PE33sPpMDBVCYYjyRtHLVc49RirkDMu+DkTplx/Mb5VnVmFn8+q0ddZlMl5LDdGNCiGf19o8UHgVbw82ARtTQBOAejVvtdCfAxvHAHk4yOfmXjrXTO/8X7BlIxEQfUtQ4sItg9y5KGdMU0zTsWLIzDk2KSghmPAPOxe5n9+KFvxVY///xUqcTEaUBl9N0QQA/j6uq+vNk1zTuMkSYU78SWEQpQZ+PlwT74rNTVVO7RvzUWnHR93BliewMxcKN2G4XDwwLzpDOvQhz7du7Jm4xZ6z/n46xNUj64WljWeS1Bi3NOMbtx9AfHFoyYA0zQLDcNot2ciwM+l+LgZYSNeFC+X4G1qEWFxggm5r+PY6CAtxY0gvDx7Hk+53RdUQ76X36HsqIz8+Zn7iTkn5DeByPJiNhb5NesAPtbZixkLgbHkN5VHTatSLa/O+RhPiguny8VmkUiVGTKSGC7uSQ5qXDQK3K79hgsIfcnn/AZwjYer/P4C355NUqfdkA+pISJWWY6fI8hnIjALP5820htklYhRZYO7gKtWnMorfMp5pwwkGI4kfAVJbP8iYDJBKuLJ+eIWYCZEOmCtE/z6wccK8rmMpP0V6pjpU/BxUdLvl/FZNY/2nAD8NdfUxcsg8ilE6IFyCV5W4KvfDluVIFwOqZmwcyuSYmA4LKI9uEP76hWtLLb/AlBi+Ym/NICnQB8FvRKMf+5nFv3h9UD+DnxJSnp+EwWb7NYM9PEpftqhBBC6AB3twMbdTPgqhWAMB5QUgOEg3eXh6TffQ0Qo2F6FlsZzMcrLdrybsOVQB+gLIK+CXAuOt2BA4X6Ffj9nkV9rsgp4ObkS8r1kIPRtqtcb9fzIAPA8ynm28vJinaJNhEAwnCAGQwwrLkuVVzM/AXFgqtIxtyLML3RuaBjCYwl1IepciCttEX89+Wt6z/kdyELo+2UT59b9UnSBTnWoTq/ZiBe8DEK5CB9L9i4BWNxgJX7uxctHwH/JR/FyYhJbOiX+ZyQa5dQB1qbQhsNBSeFPliQIlFVgT8HjdlG0s8yOCMZEWWR/1TpWn5rJc08fyf0fLGHFsC/gmOftJw8mn6f2G+RbBH2pHcxRVel7Fz/xfX4PQTkFfxPkFO6RJ9DHEPy8gHAqMA8vx9lX1sRr0LicTuZ9ZW1yoKaJM8WDqsmM7C+4qei8Srs0/LClEIfDIGVGynsIp+HmFe5eOJVpvkugJAbGRXDsU/ZglaL0wZ8U+frrVwQVH0uRiiLUSVCSxAmm4cff1K937sGH/9f2JBaTz834eZ58lgNHqipOO9RLVUnNbGU5AtOzeOfdJXhS3PHVPwxDCF4TRLbLQGLi5a4VCrumoOEfIethkDH2bFhUbdOFX+aMdgC/QdmF8AJWfkFOPcLCT8FLb3yVts9bYre5EpLkfjwFLZ9DgG74G7913p7HA/hpRT7r8PIwPrLx8qg8IDbRWmG7ajggFkVRHA4rUbRjbmvmZixma7diPE95UId+ESyb1xVCr8Gx38PCiRC8CU6M4OXf+DjmVzKjY8B7NpK6JbHzOVh7FK/Cz4QanvwUrVjqTngKrXE9osq9t5DPQIQVifI0+4wALCLoRj4R8jkaMEzsDaPsAD1JyYRdxYm9/qKeGMHLggzddjzlgRCPx94lFnr8jyAvQb/vYeEEcE7Ce2w7YAE+OjdgBrpQ2iEU1icmrllZe+UxOrMScoUsfElRSz6ieHkT7L4KP9Rg++cA3yRi/5tEBHiTskkra58K5FCRVJFVp+3px0U+EZQRsQGxQ9Z/UnCa3RErGFSE7Fg6ZZlBUtJcXLJtCAK0ykq3zcZYAI5dAgvvwBF7lbuOPQblM6TyTty78ZTFgHeAMfALthYsS6ojXlYB1wMz8KGChBQFL2vw0ZX8JP+Ml09QzsHfdMiPc4D7azFNFDgQiODjbnuAb0bwxNGKcritqMzBzyybCFbHesZSnfMrPLYhwrgEWpmZzB+0mq7rc3FJ5eVrd9qNzwWdb9/K1cMGk7F9O7ABfz02dsznLWA7wiZ8jVsT30dE8CPQCS9DUd4ARuoOvfH292/X+96574JEZpFVfHKUbYI3eXSz7IadrrQR3BqlE0IaVkxeCJ+dj5/PowijgFyUE4AhrlmuAZGzI+fesXkkgrI6awcHl+XwwAFvcvyMXmwpLOZ3ZwyC9Na4gsXc88xbRA+68TPOes4gs+hKrMIQB9jf9yjCw/iS4vy8ZAPHAq/gox2/ZogrdF6+xcdhtnjItJXHTsBIfM2X0+DcjRw7ogbNcztwpR2eHEM5AR834KUz8APCBZEhkb84J7pY/4dtFLp2MiDSn+ScTDNeNNL2GEZvimA8mPeymVW0EFiDErMVIAOftRN3Jflp+c4v+NUjP1lX8HEYXhaggM8eLC/rsfYoajYCkEZSbW+U9ggG8B5KCTADP5fhZYkUSh5l5LXrlMXBgVx+Ez0JgqXMT/+G0vcCDO53OKkeD2ZaNs+lvc62B0rR0bHbtJ1+AzjxMy1pZjyFtd9uJjAK+BTffpPoUZNIU1tHUGAw/hr9A/vYD1DZVhW8HIdyDfkoyunaVt+lLRRHykihE0TDoCZhiWCq0io7g03fLufLo8ro9+khvNd9GeHW0ZsQXsbHX2wl9HK7ysZMhEvw8R/2d7C8gr9JKIp7xQvd9J24C2UGWLlrKeoiKjFu2zycmGny3oIVnH1aX/xZr3PnllGoKve2mUrqI6ndAuMCG7Ayf0pQyvGTQQs0KzRHUOgw/CyPk9ag8p5cuv0UAhKh+KfvibYx+XDV19y5ZRTRcIiH8mbieMZJcHRwNMpbKCUoHVqQ/2slAB+D8CKe+z0XuF9wU2IGOCCYzbK0DSw8ooRdrYJsWlWEAu+3W4G37CLMo00Q0hA+x4/gb+aKWi3QrBwAfKiIFOKEHms74ED4MHsF3QMHkvdjNtt3lmkwFObbnVujTy59d6drvnOjpmm0Vp9EC/zKCMAGx2ZHzAyHYmXbC2JXLTgilrOmNHZc58xYaSDMP16cPsN4zXHk+sHbMsO7wl1wM67Jc+pboJmsgPrBAlXNKy8uIJN0XA7LMxiOmfGNnQpLS8tIeO/2cb28FmiBFmiBFmiBFmiBFmiBFmiBFmiB/wH4f+jryq6sRdUDAAAAAElFTkSuQmCC" alt="DREME Logo"/> - <h1>DREME</h1> - <h2>Discriminative Regular Expression Motif Elicitation</h2> - </div> - <p class="spaced"> - For further information on how to interpret these results or to get a - copy of the MEME software please access - <a href="http://meme.nbcr.net/">http://meme.nbcr.net</a>. - </p> - <p> - If you use DREME in your research please cite the following paper:<br /> - <span class="citation"> - Timothy L. Bailey, "DREME: Motif discovery in transcription factor ChIP-seq data", <i>Bioinformatics</i>, <b>27</b>(12):1653-1659, 2011. - <a href="http://bioinformatics.oxfordjournals.org/content/27/12/1653">[full text]</a> - </span> - </p> - </div> - <!-- navigation --> - <div class="pad2"> - <a class="jump" href="#motifs_sec">Discovered Motifs</a> - | - <a class="jump" href="#inputs_sec">Inputs & Settings</a> - | - <a class="jump" href="#info_sec">Program information</a> - </div> - <!-- alert the user when their browser is not up to the task --> - <noscript><h1 style="color:red">Javascript is required to view these results!</h1></noscript> - <h1 id="html5_warning" style="color:red; display:none;">Your browser does not support canvas!</h1> - <script> - if (!window.HTMLCanvasElement) $("html5_warning").style.display = "block"; - </script> - <!-- description --> - <div id="description_section" style="display:none"> - <div id="description" class="header"> - <h2>Description</h2> - </div> - <div id="description_text" class="box"> - </div> - </div> - <script> - if (data.description) { - $("description_text").innerHTML = ""; - $("description_text").appendChild(make_description(data.description)); - $("description_section").style.display = "block"; - } - </script> - <!-- motifs --> - <div id="motifs_sec" class="header"> - <h2>Discovered Motifs</h2> - <span><a href="#inputs_sec">Next</a> <a href="#">Top</a></span> - </div> - <div id="motifs" class="box"> - <p>No motifs were discovered!</p> - </div> - <script>make_motifs();</script> - <!-- inputs and settings --> - <div id="inputs_sec" class="header"> - <h2>Inputs & Settings</h2> - <span><a href="#motifs_sec">Previous</a> <a href="#info_sec">Next</a> <a href="#">Top</a></span> - </div> - <div class="box"> - <h4>Sequences</h4> - <table id="seq_info" class="inputs"> - <tr><th>Source <div class="help" data-topic="pop_seq_source"></div></th> - <th>Alphabet <div class="help" data-topic="pop_seq_alph"></div></th> - <th>Sequence Count <div class="help" data-topic="pop_seq_count"></div></th> - </tr> - <tr> - <td id="ins_seq_source"></td> - <td id="ins_seq_alphabet"></td> - <td id="ins_seq_count"></td> - </tr> - </table> - <script> - { - var db = data.sequence_db; - $("ins_seq_source").innerHTML = db.file; - $("ins_seq_alphabet").innerHTML = dreme_alphabet.get_alphabet_name(); - $("ins_seq_count").innerHTML = db.count; - } - </script> - <h4>Control Sequences</h4> - <table id="seq_info" class="inputs"> - <tr><th>Source <div class="help" data-topic="pop_seq_source"></div></th> - <th>Sequence Count <div class="help" data-topic="pop_seq_count"></div></th> - </tr> - <tr> - <td id="ins_cseq_source"></td> - <td id="ins_cseq_count"></td> - </tr> - </table> - <script> - { - var db = data.control_db; - if (db.from == "shuffled") { - $("ins_cseq_source").innerHTML = "Shuffled Sequences"; - } else { - $("ins_cseq_source").innerHTML = db.file; - } - $("ins_cseq_count").innerHTML = db.count; - } - </script> - <h4>Background</h4> - <span id="alpha_bg"></span> - <script> - { - $("alpha_bg").appendChild(make_alpha_bg(dreme_alphabet, data.control_db.freqs)); - } - </script> - <h4>Other Settings</h4> - <table id="tbl_settings" class="inputs hide_advanced"> - <tr> - <th>Strand Handling</th> - <td id="opt_strand"> - <span class="strand_none">This alphabet only has one strand</span> - <span class="strand_given">Only the given strand is processed</span> - <span class="strand_both">Both the given and reverse complement strands are processed</span> - </td> - </tr> - <tr><th># REs to Generalize</th><td id="opt_ngen"></td></tr> - <tr><th>Shuffle Seed</th><td id="opt_seed"></td></tr> - <tr><th>E-value Threshold</th><td id="opt_stop_evalue"></td></tr> - <tr><th>Max Motif Count</th><td id="opt_stop_count"></td></tr> - <tr><th>Max Run Time</th><td id="opt_stop_time"></td></tr> - </table> - <script> - { - $("opt_strand").className = (dreme_alphabet.has_complement() ? (data.options.revcomp ? "both" : "given") : "none"); - $("opt_ngen").innerHTML = data.options.ngen; - $("opt_seed").innerHTML = data.options.seed; - $("opt_stop_evalue").innerHTML = data.options.stop.evalue; - $("opt_stop_count").innerHTML = (typeof data.options.stop.count == "number" ? data.options.stop.count : "No maximum motif count."); - $("opt_stop_time").innerHTML = (typeof data.options.stop.time == "number" ? data.options.stop.time + " seconds." : "No maximum running time."); - } - </script> - </div> - <!-- list information on this program --> - <div id="info_sec" class="bar" style="position:relative"> - <div style="position: absolute; right: 0;"><a href="#inputs_sec">Previous</a> <a href="#">Top</a></div> - <div class="subsection"> - <h5 id="version">DREME version</h5> - <span id="ins_version"></span> - (Release date: <span id="ins_release"></span>)<br> - </div> - <script> - $("ins_version").innerHTML = data["version"]; - $("ins_release").innerHTML = data["release"]; - </script> - <div class="subsection"> - <h5 id="reference">Reference</h5> - <span class="citation"> - Timothy L. Bailey, "DREME: Motif discovery in transcription factor ChIP-seq data", <i>Bioinformatics</i>, <b>27</b>(12):1653-1659, 2011. - <a href="http://bioinformatics.oxfordjournals.org/content/27/12/1653">[full text]</a> - </span> - </div> - <div class="subsection"> - <h5 id="command">Command line</h5> - <textarea id="cmd" rows="3" style="width:100%;" readonly="readonly"> - </textarea> - <script>$("cmd").value = data["cmd"].join(" ");</script> - </div> - </div> - - </body> -</html>
--- a/test-data/dreme1.txt Wed Apr 25 12:12:47 2018 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,102 +0,0 @@ -# DREME 4.12.0 -# command: dreme -oc dreme_out -rna -norc -p dreme_test_sites.fa -e 0.05 -mink 3 -maxk 8 -# positives: 1000 from dreme_test_sites.fa (Thu Apr 19 19:09:45 CEST 2018) -# negatives: 1000 from shuffled positives -# host: ThinkPad-T450s -# when: Thu Apr 19 19:11:17 CEST 2018 - -MEME version 4.12.0 - -ALPHABET "RNA" RNA-LIKE -A "Adenine" CC0000 -C "Cytosine" 0000CC -G "Guanine" FFB300 -U "Uracil" 008000 -N "Any base" = ACGU -X = ACGU -. = ACGU -V "Not U" = ACG -H "Not G" = ACU -D "Not C" = AGU -B "Not A" = CGU -M "Amino" = AC -R "Purine" = AG -W "Weak" = AU -S "Strong" = CG -Y "Pyrimidine" = CU -K "Keto" = GU -T = U -END ALPHABET - -Background letter frequencies (from dataset): -A 0.221 C 0.245 G 0.221 U 0.312 - - -MOTIF UUYUCY DREME-1 - -# Word Pos Neg P-value E-value -# BEST UUYUCY 387 210 2.6e-018 1.2e-013 -# UUUUCC 147 75 1.8e-007 8.1e-003 -# UUUUCU 155 94 2.2e-005 1.0e+000 -# UUCUCU 94 51 1.3e-004 6.1e+000 -# UUCUCC 75 42 1.1e-003 5.0e+001 - -letter-probability matrix: alength= 4 w= 6 nsites= 459 E= 1.2e-013 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.294118 0.000000 0.705882 -0.000000 0.000000 0.000000 1.000000 -0.000000 1.000000 0.000000 0.000000 -0.000000 0.474946 0.000000 0.525054 - - -MOTIF YAGG DREME-2 - -# Word Pos Neg P-value E-value -# BEST YAGG 600 416 1.1e-016 5.1e-012 -# CAGG 441 304 1.5e-010 6.6e-006 -# UAGG 232 165 1.1e-004 4.7e+000 - -letter-probability matrix: alength= 4 w= 4 nsites= 793 E= 5.1e-012 -0.000000 0.692308 0.000000 0.307692 -1.000000 0.000000 0.000000 0.000000 -0.000000 0.000000 1.000000 0.000000 -0.000000 0.000000 1.000000 0.000000 - - -MOTIF GAAGAW DREME-3 - -# Word Pos Neg P-value E-value -# BEST GAAGAW 81 22 8.2e-010 3.4e-005 -# GAAGAU 45 7 2.4e-008 9.9e-004 -# GAAGAA 40 16 7.9e-004 3.3e+001 - -letter-probability matrix: alength= 4 w= 6 nsites= 89 E= 3.4e-005 -0.000000 0.000000 1.000000 0.000000 -1.000000 0.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 0.000000 -0.000000 0.000000 1.000000 0.000000 -1.000000 0.000000 0.000000 0.000000 -0.494382 0.000000 0.000000 0.505618 - - -MOTIF SMUGGA DREME-4 - -# Word Pos Neg P-value E-value -# BEST SMUGGA 110 47 9.1e-008 3.7e-003 -# GAUGGA 22 6 1.7e-003 7.1e+001 -# GCUGGA 33 14 3.6e-003 1.5e+002 -# CCUGGA 32 15 8.6e-003 3.5e+002 -# CAUGGA 29 13 9.1e-003 3.7e+002 - -letter-probability matrix: alength= 4 w= 6 nsites= 119 E= 3.7e-003 -0.000000 0.529412 0.470588 0.000000 -0.428571 0.571429 0.000000 0.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 1.000000 0.000000 -0.000000 0.000000 1.000000 0.000000 -1.000000 0.000000 0.000000 0.000000 - - -# Stopping reason: E-value threshold exceeded -# Running time: 13.45 seconds
--- a/test-data/dreme1.xml Wed Apr 25 12:12:47 2018 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -<dreme version="4.12.0" release="Tue Jun 27 16:22:50 2017 -0700"> - <model> - <command_line>dreme -oc dreme_out -rna -norc -p dreme_test_sites.fa -e 0</command_line> - <positives name="dreme test sites" count="1000" file="dreme_test_sites.fa" last_mod_date="Thu Apr 19 19:09:45 CEST 2018" /> - <negatives name="shuffled positive sequences" count="1000" from="shuffled"/> - <alphabet name="RNA" like="rna"> - <letter id="A" symbol="A" name="Adenine" colour="CC0000"/> - <letter id="C" symbol="C" name="Cytosine" colour="0000CC"/> - <letter id="G" symbol="G" name="Guanine" colour="FFB300"/> - <letter id="U" symbol="U" aliases="T" name="Uracil" colour="008000"/> - <letter id="N" symbol="N" aliases="X." equals="ACGU" name="Any base"/> - <letter id="V" symbol="V" equals="ACG" name="Not U"/> - <letter id="H" symbol="H" equals="ACU" name="Not G"/> - <letter id="D" symbol="D" equals="AGU" name="Not C"/> - <letter id="B" symbol="B" equals="CGU" name="Not A"/> - <letter id="M" symbol="M" equals="AC" name="Amino"/> - <letter id="R" symbol="R" equals="AG" name="Purine"/> - <letter id="W" symbol="W" equals="AU" name="Weak"/> - <letter id="S" symbol="S" equals="CG" name="Strong"/> - <letter id="Y" symbol="Y" equals="CU" name="Pyrimidine"/> - <letter id="K" symbol="K" equals="GU" name="Keto"/> - </alphabet> - <strands>none</strands> - <background A="0.221" C="0.245" G="0.221" U="0.312" from="dataset"/> - <stop evalue="0"/> - <ngen>100</ngen> - <add_pv_thresh>0.01</add_pv_thresh> - <seed>1</seed> - <host>ThinkPad-T450s</host> - <when>Thu Apr 19 19:40:08 CEST 2018</when> - </model> - <motifs>
--- a/test-data/dreme2.html Wed Apr 25 12:12:47 2018 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,6118 +0,0 @@ -<!DOCTYPE HTML> -<html> - <head> - <meta charset="UTF-8"> - <title>DREME</title> - <script> - // @JSON_VAR data - var data = { - "program": "dreme", - "version": "4.12.0", - "release": "Tue Jun 27 16:22:50 2017 -0700", - "cmd": [ - "dreme", "-oc", "dreme_out_adv", "-rna", "-norc", "-p", - "dreme_test_sites.fa", "-e", "0.00001", "-mink", "4", "-maxk", "10" - ], - "options": { - "revcomp": false, - "ngen": 100, - "add_pv_thresh": 0.01, - "seed": 1, - "stop": { - "evalue": "1e-05" - } - }, - "alphabet": { - "name": "RNA", - "like": "rna", - "ncore": 4, - "symbols": [ - { - "symbol": "A", - "name": "Adenine", - "colour": "CC0000" - }, { - "symbol": "C", - "name": "Cytosine", - "colour": "0000CC" - }, { - "symbol": "G", - "name": "Guanine", - "colour": "FFB300" - }, { - "symbol": "U", - "aliases": "T", - "name": "Uracil", - "colour": "008000" - }, { - "symbol": "N", - "aliases": "X.", - "name": "Any base", - "equals": "ACGU" - }, { - "symbol": "V", - "name": "Not U", - "equals": "ACG" - }, { - "symbol": "H", - "name": "Not G", - "equals": "ACU" - }, { - "symbol": "D", - "name": "Not C", - "equals": "AGU" - }, { - "symbol": "B", - "name": "Not A", - "equals": "CGU" - }, { - "symbol": "M", - "name": "Amino", - "equals": "AC" - }, { - "symbol": "R", - "name": "Purine", - "equals": "AG" - }, { - "symbol": "W", - "name": "Weak", - "equals": "AU" - }, { - "symbol": "S", - "name": "Strong", - "equals": "CG" - }, { - "symbol": "Y", - "name": "Pyrimidine", - "equals": "CU" - }, { - "symbol": "K", - "name": "Keto", - "equals": "GU" - } - ] - }, - "background": { - "freqs": [0.221, 0.245, 0.221, 0.312] - }, - "sequence_db": { - "name": "dreme test sites", - "file": "dreme_test_sites.fa", - "lmod": "Thu Apr 19 19:09:45 CEST 2018", - "count": 1000 - }, - "control_db": { - "name": "shuffled positive sequences", - "from": "shuffled", - "count": 1000, - "freqs": [0.221, 0.245, 0.221, 0.312] - }, - "motifs": [ - { - "db": 0, - "id": "UUYUCY", - "alt": "DREME-1", - "len": 6, - "nsites": 459, - "evalue": "3.3e-013", - "p": 387, - "n": 210, - "pvalue": "2.6e-018", - "unerased_evalue": "3.3e-013", - "pwm": [ - [0.000000, 0.000000, 0.000000, 1.000000], - [0.000000, 0.000000, 0.000000, 1.000000], - [0.000000, 0.294118, 0.000000, 0.705882], - [0.000000, 0.000000, 0.000000, 1.000000], - [0.000000, 1.000000, 0.000000, 0.000000], - [0.000000, 0.474946, 0.000000, 0.525054] - ], - "matches": [ - { - "seq": "UUUUCC", - "p": 147, - "n": 75, - "pvalue": "1.8e-007", - "evalue": "2.2e-002" - }, { - "seq": "UUUUCU", - "p": 155, - "n": 94, - "pvalue": "2.2e-005", - "evalue": "2.8e+000" - }, { - "seq": "UUCUCU", - "p": 94, - "n": 51, - "pvalue": "1.3e-004", - "evalue": "1.7e+001" - }, { - "seq": "UUCUCC", - "p": 75, - "n": 42, - "pvalue": "1.1e-003", - "evalue": "1.4e+002" - } - ] - }, { - "db": 0, - "id": "YAGG", - "alt": "DREME-2", - "len": 4, - "nsites": 793, - "evalue": "1.4e-011", - "p": 600, - "n": 416, - "pvalue": "1.1e-016", - "unerased_evalue": "6.3e-012", - "pwm": [ - [0.000000, 0.692308, 0.000000, 0.307692], - [1.000000, 0.000000, 0.000000, 0.000000], - [0.000000, 0.000000, 1.000000, 0.000000], - [0.000000, 0.000000, 1.000000, 0.000000] - ], - "matches": [ - { - "seq": "CAGG", - "p": 441, - "n": 304, - "pvalue": "1.5e-010", - "evalue": "1.8e-005" - }, { - "seq": "UAGG", - "p": 232, - "n": 165, - "pvalue": "1.1e-004", - "evalue": "1.3e+001" - } - ] - } - ], - "runtime": { - "host": "ThinkPad-T450s", - "when": "Tue Apr 24 18:44:36 CEST 2018", - "cpu": 18.17, - "real": 18.17, - "stop": "evalue" - } - }; - </script> - <script> -var site_url = "http://meme-suite.org"; -</script> - <script> - -/* - * $ - * - * Shorthand function for getElementById - */ -function $(el) { - return document.getElementById(el); -} - - -/* - * See http://stackoverflow.com/a/5450113/66387 - * Does string multiplication like the perl x operator. - */ -function string_mult(pattern, count) { - if (count < 1) return ''; - var result = ''; - while (count > 1) { - if (count & 1) result += pattern; - count >>= 1, pattern += pattern; - } - return result + pattern; -} - -/* - * See http://stackoverflow.com/questions/814613/how-to-read-get-data-from-a-url-using-javascript - * Slightly modified with information from - * https://developer.mozilla.org/en/DOM/window.location - */ -function parse_params() { - "use strict"; - var search, queryStart, queryEnd, query, params, nvPairs, i, nv, n, v; - search = window.location.search; - queryStart = search.indexOf("?") + 1; - queryEnd = search.indexOf("#") + 1 || search.length + 1; - query = search.slice(queryStart, queryEnd - 1); - - if (query === search || query === "") return {}; - - params = {}; - nvPairs = query.replace(/\+/g, " ").split("&"); - - for (i = 0; i < nvPairs.length; i++) { - nv = nvPairs[i].split("="); - n = decodeURIComponent(nv[0]); - v = decodeURIComponent(nv[1]); - // allow a name to be used multiple times - // storing each value in the array - if (!(n in params)) { - params[n] = []; - } - params[n].push(nv.length === 2 ? v : null); - } - return params; -} - -/* - * coords - * - * Calculates the x and y offset of an element. - * From http://www.quirksmode.org/js/findpos.html - * with alterations to take into account scrolling regions - */ -function coords(elem) { - var myX = myY = 0; - if (elem.getBoundingClientRect) { - var rect; - rect = elem.getBoundingClientRect(); - myX = rect.left + ((typeof window.pageXOffset !== "undefined") ? - window.pageXOffset : document.body.scrollLeft); - myY = rect.top + ((typeof window.pageYOffset !== "undefined") ? - window.pageYOffset : document.body.scrollTop); - } else { - // this fall back doesn't properly handle absolutely positioned elements - // inside a scrollable box - var node; - if (elem.offsetParent) { - // subtract all scrolling - node = elem; - do { - myX -= node.scrollLeft ? node.scrollLeft : 0; - myY -= node.scrollTop ? node.scrollTop : 0; - } while (node = node.parentNode); - // this will include the page scrolling (which is unwanted) so add it back on - myX += (typeof window.pageXOffset !== "undefined") ? window.pageXOffset : document.body.scrollLeft; - myY += (typeof window.pageYOffset !== "undefined") ? window.pageYOffset : document.body.scrollTop; - // sum up offsets - node = elem; - do { - myX += node.offsetLeft; - myY += node.offsetTop; - } while (node = node.offsetParent); - } - } - return [myX, myY]; -} - -/* - * position_popup - * - * Positions a popup relative to an anchor element. - * - * The avaliable positions are: - * 0 - Centered below the anchor. - */ -function position_popup(anchor, popup, position) { - "use strict"; - var a_x, a_y, a_w, a_h, p_x, p_y, p_w, p_h; - var a_xy, spacer, margin, scrollbar, page_w; - // define constants - spacer = 5; - margin = 15; - scrollbar = 15; - // define the positions and widths - a_xy = coords(anchor); - a_x = a_xy[0]; - a_y = a_xy[1]; - a_w = anchor.offsetWidth; - a_h = anchor.offsetHeight; - p_w = popup.offsetWidth; - p_h = popup.offsetHeight; - page_w = null; - if (window.innerWidth) { - page_w = window.innerWidth; - } else if (document.body) { - page_w = document.body.clientWidth; - } - // check the position type is defined - if (typeof position !== "number") { - position = 0; - } - // calculate the popup position - switch (position) { - case 1: - p_x = a_x + a_w + spacer; - p_y = a_y + (a_h / 2) - (p_h / 2); - break; - case 0: - default: - p_x = a_x + (a_w / 2) - (p_w / 2); - p_y = a_y + a_h + spacer; - break; - } - // constrain the popup position - if (p_x < margin) { - p_x = margin; - } else if (page_w != null && (p_x + p_w) > (page_w - margin - scrollbar)) { - p_x = page_w - margin - scrollbar - p_w; - } - if (p_y < margin) { - p_y = margin; - } - // position the popup - popup.style.left = p_x + "px"; - popup.style.top = p_y + "px"; -} - -function lookup_help_popup(popup_id) { - var _body, pop, info; - pop = document.getElementById(popup_id); - if (pop == null) { - _body = document.getElementsByTagName("body")[0]; - pop = document.createElement("div"); - pop.className = "pop_content"; - pop.id = popup_id; - pop.style.backgroundColor = "#FFC"; - pop.style.borderColor = "black"; - info = document.createElement("p"); - info.style.fontWeight = "bold"; - info.appendChild(document.createTextNode("Error: No popup for topic \"" + popup_id + "\".")); - pop.appendChild(info); - // this might cause problems with the menu, but as this only happens - // when something is already wrong I don't think that's too much of a problem - _body.insertBefore(pop, _body.firstChild); - } - if (document.getElementsByTagName('body')[0].hasAttribute("data-autobtns")) { - if (!/\bauto_buttons\b/.test(pop.className)) { - pop.className += " auto_buttons"; - var back_btn_sec = document.createElement("div"); - back_btn_sec.className = "nested_only pop_back_sec"; - var back_btn = document.createElement("span"); - back_btn.className = "pop_back"; - back_btn.appendChild(document.createTextNode("<< back")); - back_btn.addEventListener("click", function(e) { - help_return(); - }, false); - back_btn_sec.appendChild(back_btn); - pop.insertBefore(back_btn_sec, pop.firstChild); - var close_btn_sec = document.createElement("div"); - close_btn_sec.className = "pop_close_sec"; - var close_btn = document.createElement("span"); - close_btn.className = "pop_close"; - close_btn.appendChild(document.createTextNode("close")); - close_btn.addEventListener("click", function(e) { - help_popup(); - }, false); - close_btn_sec.appendChild(close_btn); - pop.appendChild(close_btn_sec); - } - } - return pop; -} - -/* - * help_popup - * - * Moves around help pop-ups so they appear - * below an activator. - */ -function help_popup(activator, popup_id) { - "use strict"; - var pop; - // set default values - if (typeof help_popup.popup === "undefined") { - help_popup.popup = []; - } - if (typeof help_popup.activator === "undefined") { - help_popup.activator = null; - } - var last_pop = (help_popup.popup.length > 0 ? help_popup.popup[help_popup.popup.length - 1] : null); - if (typeof(activator) == "undefined") { // no activator so hide - if (last_pop != null) { - last_pop.style.display = 'none'; - help_popup.popup = []; - } - return; - } - pop = lookup_help_popup(popup_id); - if (pop == last_pop) { - if (activator == help_popup.activator) { - //hide popup (as we've already shown it for the current help button) - last_pop.style.display = 'none'; - help_popup.popup = []; - return; // toggling complete! - } - } else if (last_pop != null) { - //activating different popup so hide current one - last_pop.style.display = 'none'; - } - help_popup.popup = [pop]; - help_popup.activator = activator; - toggle_class(pop, "nested", false); - //must make the popup visible to measure it or it has zero width - pop.style.display = 'block'; - position_popup(activator, pop); -} - -/* - * help_refine - * - * Intended for links within a help popup. Stores a stack of state so - * you can go back. - */ -function help_refine(popup_id) { - if (help_popup.popup == null || help_popup.popup.length == 0 || help_popup.activator == null) { - throw new Error("Can not refine a help popup when one is not shown!"); - } - var pop = lookup_help_popup(popup_id); - var last_pop = help_popup.popup[help_popup.popup.length - 1]; - if (pop == last_pop) return; // slightly odd, but no real cause for alarm - help_popup.popup.push(pop); - toggle_class(pop, "nested", true); - last_pop.style.display = "none"; - //must make the popup visible to measure it or it has zero width - pop.style.display = "block"; - position_popup(help_popup.activator, pop); -} - -/* - * help_return - * - * Intended for links within a help popup. Stores a stack of state so - * you can go back. - */ -function help_return() { - if (help_popup.popup == null || help_popup.popup.length == 0 || help_popup.activator == null) { - throw new Error("Can not return to a earlier help popup when one is not shown!"); - } - var last_pop = help_popup.popup.pop(); - last_pop.style.display = "none"; - var pop = (help_popup.popup.length > 0 ? help_popup.popup[help_popup.popup.length - 1] : null); - if (pop != null) { - toggle_class(pop, "nested", help_popup.popup.length > 1); - pop.style.display = "block"; - position_popup(help_popup.activator, pop); - } else { - help_popup.activator = null; - } -} - -/* - * update_scroll_pad - * - * Creates padding at the bottom of the page to allow - * scrolling of anything into view. - */ -function update_scroll_pad() { - var page, pad; - page = (document.compatMode === "CSS1Compat") ? document.documentElement : document.body; - pad = $("scrollpad"); - if (pad === null) { - pad = document.createElement("div"); - pad.id = 'scrollpad'; - document.getElementsByTagName('body')[0].appendChild(pad); - } - pad.style.height = Math.abs(page.clientHeight - 100) + "px"; -} - -function substitute_classes(node, remove, add) { - "use strict"; - var list, all, i, cls, classes; - list = node.className.split(/\s+/); - all = {}; - for (i = 0; i < list.length; i++) { - if (list[i].length > 0) all[list[i]] = true; - } - for (i = 0; i < remove.length; i++) { - if (all.hasOwnProperty(remove[i])) { - delete all[remove[i]]; - } - } - for (i = 0; i < add.length; i++) { - all[add[i]] = true; - } - classes = ""; - for (cls in all) { - classes += cls + " "; - } - node.className = classes; -} - -/* - * toggle_class - * - * Adds or removes a class from the node. If the parameter 'enabled' is not - * passed then the existence of the class will be toggled, otherwise it will be - * included if enabled is true. - */ -function toggle_class(node, cls, enabled) { - var classes = node.className; - var list = classes.replace(/^\s+/, '').replace(/\s+$/, '').split(/\s+/); - var found = false; - for (var i = 0; i < list.length; i++) { - if (list[i] == cls) { - list.splice(i, 1); - i--; - found = true; - } - } - if (typeof enabled == "undefined") { - if (!found) list.push(cls); - } else { - if (enabled) list.push(cls); - } - node.className = list.join(" "); -} - -/* - * find_child - * - * Searches child nodes in depth first order and returns the first it finds - * with the className specified. - * TODO replace with querySelector - */ -function find_child(node, className) { - var pattern; - if (node == null || typeof node !== "object") { - return null; - } - if (typeof className === "string") { - pattern = new RegExp("\\b" + className + "\\b"); - } else { - pattern = className; - } - if (node.nodeType == Node.ELEMENT_NODE && - pattern.test(node.className)) { - return node; - } else { - var result = null; - for (var i = 0; i < node.childNodes.length; i++) { - result = find_child(node.childNodes[i], pattern); - if (result != null) break; - } - return result; - } -} - -/* - * find_parent - * - * Searches parent nodes outwards from the node and returns the first it finds - * with the className specified. - */ -function find_parent(node, className) { - var pattern; - pattern = new RegExp("\\b" + className + "\\b"); - do { - if (node.nodeType == Node.ELEMENT_NODE && - pattern.test(node.className)) { - return node; - } - } while (node = node.parentNode); - return null; -} - -/* - * find_parent_tag - * - * Searches parent nodes outwards from the node and returns the first it finds - * with the tag name specified. HTML tags should be specified in upper case. - */ -function find_parent_tag(node, tag_name) { - do { - if (node.nodeType == Node.ELEMENT_NODE && node.tagName == tag_name) { - return node; - } - } while (node = node.parentNode); - return null; -} - -/* - * __toggle_help - * - * Uses the 'topic' property of the this object to - * toggle display of a help topic. - * - * This function is not intended to be called directly. - */ -function __toggle_help(e) { - if (!e) e = window.event; - if (e.type === "keydown") { - if (e.keyCode !== 13 && e.keyCode !== 32) { - return; - } - // stop a submit or something like that - e.preventDefault(); - } - - help_popup(this, this.getAttribute("data-topic")); -} - -function setup_help_button(button) { - "use strict"; - var topic; - if (button.hasAttribute("data-topic")) { - topic = button.getAttribute("data-topic"); - if (document.getElementById(topic) != null) { - button.tabIndex = "0"; // make keyboard selectable - button.addEventListener("click", function() { - help_popup(button, topic); - }, false); - button.addEventListener("keydown", function(e) { - // toggle only on Enter or Spacebar, let other keys do their thing - if (e.keyCode !== 13 && e.keyCode !== 32) return; - // stop a submit or something like that - e.preventDefault(); - help_popup(button, topic); - }, false); - } else { - button.style.visibility = "hidden"; - } - } - button.className += " active"; -} - -/* - * help_button - * - * Makes a help button for the passed topic. - */ -function help_button(topic) { - var btn = document.createElement("div"); - btn.className = "help"; - btn.setAttribute("data-topic", topic); - setup_help_button(btn); - return btn; -} - -/* - * prepare_download - * - * Sets the attributes of a link to setup a file download using the given content. - * If no link is provided then create one and click it. - */ -function prepare_download(content, mimetype, filename, link) { - "use strict"; - // if no link is provided then create one and click it - var click_link = false; - if (!link) { - link = document.createElement("a"); - click_link = true; - } - try { - // Use a BLOB to convert the text into a data URL. - // We could do this manually with a base 64 conversion. - // This will only be supported on modern browsers, - // hence the try block. - var blob = new Blob([content], {type: mimetype}); - var reader = new FileReader(); - reader.onloadend = function() { - // If we're lucky the browser will also support the download - // attribute which will let us suggest a file name to save the link. - // Otherwise it is likely that the filename will be unintelligible. - link.setAttribute("download", filename); - link.href = reader.result; - if (click_link) { - // must add the link to click it - document.body.appendChild(link); - link.click(); - document.body.removeChild(link); - } - } - reader.readAsDataURL(blob); - } catch (error) { - if (console && console.log) console.log(error); - // probably an old browser - link.href = ""; - link.visible = false; - } -} - -/* - * add_cell - * - * Add a cell to the table row. - */ -function add_cell(row, node, cls, click_action) { - var cell = row.insertCell(row.cells.length); - if (node) cell.appendChild(node); - if (cls && cls !== "") cell.className = cls; - if (click_action) cell.addEventListener("click", click_action, false); -} - -/* - * add_header_cell - * - * Add a header cell to the table row. - */ -function add_header_cell(row, node, help_topic, cls, colspan) { - var th = document.createElement("th"); - if (node) th.appendChild(node); - if (help_topic && help_topic !== "") th.appendChild(help_button(help_topic)); - if (cls && cls !== "") th.className = cls; - if (typeof colspan == "number" && colspan > 1) th.colSpan = colspan; - row.appendChild(th); -} - -/* - * add_text_cell - * - * Add a text cell to the table row. - */ -function add_text_cell(row, text, cls, action) { - var node = null; - if (typeof(text) != 'undefined') node = document.createTextNode(text); - add_cell(row, node, cls, action); -} - -/* - * add_text_header_cell - * - * Add a text header cell to the table row. - */ -function add_text_header_cell(row, text, help_topic, cls, action, colspan) { - var node = null; - if (typeof(text) != 'undefined') { - var nbsp = (help_topic ? "\u00A0" : ""); - var str = "" + text; - var parts = str.split(/\n/); - if (parts.length === 1) { - if (action) { - node = document.createElement("span"); - node.appendChild(document.createTextNode(str + nbsp)); - } else { - node = document.createTextNode(str + nbsp); - } - } else { - node = document.createElement("span"); - for (var i = 0; i < parts.length; i++) { - if (i !== 0) { - node.appendChild(document.createElement("br")); - } - node.appendChild(document.createTextNode(parts[i])); - } - } - if (action) { - node.addEventListener("click", action, false); - node.style.cursor = "pointer"; - } - } - add_header_cell(row, node, help_topic, cls, colspan); -} - -function setup_help() { - "use strict"; - var help_buttons, i; - help_buttons = document.querySelectorAll(".help:not(.active)"); - for (i = 0; i < help_buttons.length; i++) { - setup_help_button(help_buttons[i]); - } -} - -function setup_scrollpad() { - "use strict"; - if (document.getElementsByTagName('body')[0].hasAttribute("data-scrollpad") && document.getElementById("scrollpad") == null) { - window.addEventListener("resize", update_scroll_pad, false); - update_scroll_pad(); - } -} - -// anon function to avoid polluting global scope -(function() { - "use strict"; - window.addEventListener("load", function load(evt) { - window.removeEventListener("load", load, false); - setup_help(); - setup_scrollpad(); - }, false); -})(); - -/* - * make_link - * - * Creates a text node and if a URL is specified it surrounds it with a link. - * If the URL doesn't begin with "http://" it automatically adds it, as - * relative links don't make much sense in this context. - */ -function make_link(text, url) { - var textNode = null; - var link = null; - if (typeof text !== "undefined" && text !== null) textNode = document.createTextNode(text); - if (typeof url === "string") { - if (url.indexOf("//") == -1) { - url = "http://" + url; - } - link = document.createElement('a'); - link.href = url; - if (textNode) link.appendChild(textNode); - return link; - } - return textNode; -} -</script> - <script> -function motif_logo_template(inputs) { - function _input(name) { - if (typeof inputs[name] === "undefined") { - throw new Error("Missing template variable: " + name); - } - return inputs[name]; - } - return ( -"%!PS-Adobe-3.0 EPSF-3.0\n" + -"%%Title: Sequence Logo : " + _input("TITLE") + "\n" + -"%%Creator: " + _input("CREATOR") + "\n" + -"%%CreationDate: " + _input("CREATIONDATE") + "\n" + -"%%BoundingBox: 0 0 " + _input("BOUNDINGWIDTH") + " " + _input("BOUNDINGHEIGHT") + " \n" + -"%%Pages: 0\n" + -"%%DocumentFonts: \n" + -"%%EndComments\n" + -"\n" + -"% ---- CONSTANTS ----\n" + -"\/cmfactor 72 2.54 div def % defines points -> cm conversion\n" + -"\/cm {cmfactor mul} bind def % defines centimeters\n" + -"\n" + -"% ---- VARIABLES ----\n" + -"\n" + -"% NA = Nucleic Acid, AA = Amino Acid\n" + -"\/logoType (" + _input("LOGOTYPE") + ") def \n" + -"\n" + -"\/logoTitle (" + _input("TITLE") + ") def\n" + -"\n" + -"% Dimensions in cm\n" + -"\/logoWidth " + _input("LOGOWIDTH") + " cm def\n" + -"\/logoHeight " + _input("LOGOLINEHEIGHT") + " cm def\n" + -"\/totalHeight " + _input("LOGOHEIGHT") + " cm def\n" + -"\n" + -"\/yaxis " + _input("YAXIS") + " def\n" + -"\/yaxisLabel (" + _input("YAXISLABEL") + ") def\n" + -"\/yaxisBits " + _input("BARBITS") + " def % bits\n" + -"\/yaxisTicBits " + _input("TICBITS") + " def\n" + -"\n" + -"\/xaxis " + _input("NUMBERING") + " def\n" + -"\/xaxisLabel (" + _input("XAXISLABEL") + ") def\n" + -"\/showEnds (" + _input("SHOWENDS") + ") def \n" + -"\n" + -"\/showFineprint true def\n" + -"\/fineprint (" + _input("FINEPRINT") + ") def\n" + -"\n" + -"\/charsPerLine " + _input("CHARSPERLINE") + " def\n" + -"\n" + -"\/showingBox " + _input("SHOWINGBOX") + " def \n" + -"\/shrinking false def % true falses\n" + -"\/shrink 1.0 def\n" + -"\/outline " + _input("OUTLINE") + " def\n" + -"\n" + -"\/IbeamFraction " + _input("ERRORBARFRACTION") + " def\n" + -"\/IbeamGray 0.50 def\n" + -"\/IbeamLineWidth 0.5 def\n" + -"\n" + -"\/fontsize " + _input("FONTSIZE") + " def\n" + -"\/titleFontsize " + _input("TITLEFONTSIZE") + " def\n" + -"\/smallFontsize " + _input("SMALLFONTSIZE") + " def\n" + -"\n" + -"\/topMargin " + _input("TOPMARGIN") + " cm def\n" + -"\/bottomMargin " + _input("BOTTOMMARGIN") + " cm def\n" + -"\n" + -"\/defaultColor [0 0 0] def \n" + -"\n" + -_input("COLORDICT") + "\n" + -"\n" + -"\/colorDict fullColourDict def\n" + -"\n" + -"% ---- DERIVED PARAMETERS ----\n" + -"\n" + -"\/leftMargin\n" + -" fontsize 3.5 mul\n" + -"\n" + -"def \n" + -"\n" + -"\/rightMargin \n" + -" %Add extra room if showing ends\n" + -" showEnds (false) eq { fontsize}{fontsize 1.5 mul} ifelse\n" + -"def\n" + -"\n" + -"\/yaxisHeight \n" + -" logoHeight \n" + -" bottomMargin sub \n" + -" topMargin sub\n" + -"def\n" + -"\n" + -"\/ticWidth fontsize 2 div def\n" + -"\n" + -"\/pointsPerBit yaxisHeight yaxisBits div def\n" + -"\n" + -"\/stackMargin 1 def\n" + -"\n" + -"% Do not add space aroung characters if characters are boxed\n" + -"\/charRightMargin \n" + -" showingBox { 0.0 } {stackMargin} ifelse\n" + -"def\n" + -"\n" + -"\/charTopMargin \n" + -" showingBox { 0.0 } {stackMargin} ifelse\n" + -"def\n" + -"\n" + -"\/charWidth\n" + -" logoWidth\n" + -" leftMargin sub\n" + -" rightMargin sub\n" + -" charsPerLine div\n" + -" charRightMargin sub\n" + -"def\n" + -"\n" + -"\/charWidth4 charWidth 4 div def\n" + -"\/charWidth2 charWidth 2 div def\n" + -"\n" + -"\/stackWidth \n" + -" charWidth charRightMargin add\n" + -"def\n" + -" \n" + -"\/numberFontsize \n" + -" fontsize charWidth lt {fontsize}{charWidth} ifelse\n" + -"def\n" + -"\n" + -"% movements to place 5'\/N and 3'\/C symbols\n" + -"\/leftEndDeltaX fontsize neg def\n" + -"\/leftEndDeltaY fontsize 1.5 mul neg def\n" + -"\/rightEndDeltaX fontsize 0.25 mul def\n" + -"\/rightEndDeltaY leftEndDeltaY def\n" + -"\n" + -"% Outline width is proporional to charWidth, \n" + -"% but no less that 1 point\n" + -"\/outlinewidth \n" + -" charWidth 32 div dup 1 gt {}{pop 1} ifelse\n" + -"def\n" + -"\n" + -"\n" + -"% ---- PROCEDURES ----\n" + -"\n" + -"\/StartLogo { \n" + -" % Save state\n" + -" save \n" + -" gsave \n" + -"\n" + -" % Print Logo Title, top center \n" + -" gsave \n" + -" SetStringFont\n" + -"\n" + -" logoWidth 2 div\n" + -" logoTitle\n" + -" stringwidth pop 2 div sub\n" + -" totalHeight\n" + -" titleFontsize sub\n" + -" moveto\n" + -"\n" + -" logoTitle\n" + -" show\n" + -" grestore\n" + -"\n" + -" % Print X-axis label, bottom center\n" + -" gsave\n" + -" SetStringFont\n" + -"\n" + -" logoWidth 2 div\n" + -" xaxisLabel\n" + -" stringwidth pop 2 div sub\n" + -" 0\n" + -" titleFontsize 3 div\n" + -" add\n" + -" moveto\n" + -"\n" + -" xaxisLabel\n" + -" show\n" + -" grestore\n" + -"\n" + -" % Show Fine Print\n" + -" showFineprint {\n" + -" gsave\n" + -" SetSmallFont\n" + -" logoWidth\n" + -" fineprint stringwidth pop sub\n" + -" smallFontsize sub\n" + -" smallFontsize 3 div\n" + -" moveto\n" + -" \n" + -" fineprint show\n" + -" grestore\n" + -" } if\n" + -"\n" + -" % Move to lower left corner of last line, first stack\n" + -" leftMargin bottomMargin translate\n" + -"\n" + -" % Move above first line ready for StartLine \n" + -" 0 totalHeight translate\n" + -"\n" + -" SetLogoFont\n" + -"} bind def\n" + -"\n" + -"\/EndLogo { \n" + -" grestore \n" + -" showpage \n" + -" restore \n" + -"} bind def\n" + -"\n" + -"\n" + -"\/StartLine { \n" + -" % move down to the bottom of the line:\n" + -" 0 logoHeight neg translate\n" + -" \n" + -" gsave \n" + -" yaxis { MakeYaxis } if\n" + -" xaxis { showEnds (true) eq {ShowLeftEnd} if } if\n" + -"} bind def\n" + -"\n" + -"\/EndLine{ \n" + -" xaxis { showEnds (true) eq {ShowRightEnd} if } if\n" + -" grestore \n" + -"} bind def\n" + -"\n" + -"\n" + -"\/MakeYaxis {\n" + -" gsave \n" + -" stackMargin neg 0 translate\n" + -" ShowYaxisBar\n" + -" ShowYaxisLabel\n" + -" grestore\n" + -"} bind def\n" + -"\n" + -"\n" + -"\/ShowYaxisBar { \n" + -" gsave \n" + -" SetStringFont\n" + -"\n" + -" \/str 10 string def % string to hold number \n" + -" \/smallgap stackMargin 2 div def\n" + -"\n" + -" % Draw first tic and bar\n" + -" gsave \n" + -" ticWidth neg 0 moveto \n" + -" ticWidth 0 rlineto \n" + -" 0 yaxisHeight rlineto\n" + -" stroke\n" + -" grestore\n" + -"\n" + -" \n" + -" % Draw the tics\n" + -" % initial increment limit proc for\n" + -" 0 yaxisTicBits yaxisBits abs %cvi\n" + -" {\/loopnumber exch def\n" + -"\n" + -" % convert the number coming from the loop to a string\n" + -" % and find its width\n" + -" loopnumber 10 str cvrs\n" + -" \/stringnumber exch def % string representing the number\n" + -"\n" + -" stringnumber stringwidth pop\n" + -" \/numberwidth exch def % width of number to show\n" + -"\n" + -" \/halfnumberheight\n" + -" stringnumber CharBoxHeight 2 div\n" + -" def\n" + -"\n" + -" numberwidth % move back width of number\n" + -" neg loopnumber pointsPerBit mul % shift on y axis\n" + -" halfnumberheight sub % down half the digit\n" + -"\n" + -" moveto % move back the width of the string\n" + -"\n" + -" ticWidth neg smallgap sub % Move back a bit more \n" + -" 0 rmoveto % move back the width of the tic \n" + -"\n" + -" stringnumber show\n" + -" smallgap 0 rmoveto % Make a small gap \n" + -"\n" + -" % now show the tic mark\n" + -" 0 halfnumberheight rmoveto % shift up again\n" + -" ticWidth 0 rlineto\n" + -" stroke\n" + -" } for\n" + -" grestore\n" + -"} bind def\n" + -"\n" + -"\/ShowYaxisLabel {\n" + -" gsave\n" + -" SetStringFont\n" + -"\n" + -" % How far we move left depends on the size of\n" + -" % the tic labels.\n" + -" \/str 10 string def % string to hold number \n" + -" yaxisBits yaxisTicBits div cvi yaxisTicBits mul \n" + -" str cvs stringwidth pop\n" + -" ticWidth 1.5 mul add neg \n" + -"\n" + -"\n" + -" yaxisHeight\n" + -" yaxisLabel stringwidth pop\n" + -" sub 2 div\n" + -"\n" + -" translate\n" + -" 90 rotate\n" + -" 0 0 moveto\n" + -" yaxisLabel show\n" + -" grestore\n" + -"} bind def\n" + -"\n" + -"\n" + -"\/StartStack { % <stackNumber> startstack\n" + -" xaxis {MakeNumber}{pop} ifelse\n" + -" gsave\n" + -"} bind def\n" + -"\n" + -"\/EndStack {\n" + -" grestore\n" + -" stackWidth 0 translate\n" + -"} bind def\n" + -"\n" + -"\n" + -"% Draw a character whose height is proportional to symbol bits\n" + -"\/MakeSymbol{ % charbits character MakeSymbol\n" + -" gsave\n" + -" \/char exch def\n" + -" \/bits exch def\n" + -"\n" + -" \/bitsHeight \n" + -" bits pointsPerBit mul \n" + -" def\n" + -"\n" + -" \/charHeight \n" + -" bitsHeight charTopMargin sub\n" + -" dup \n" + -" 0.0 gt {}{pop 0.0} ifelse % if neg replace with zero \n" + -" def \n" + -" \n" + -" charHeight 0.0 gt {\n" + -" char SetColor\n" + -" charWidth charHeight char ShowChar\n" + -"\n" + -" showingBox { % Unfilled box\n" + -" 0 0 charWidth charHeight false ShowBox\n" + -" } if\n" + -"\n" + -"\n" + -" } if\n" + -"\n" + -" grestore\n" + -"\n" + -" 0 bitsHeight translate \n" + -"} bind def\n" + -"\n" + -"\n" + -"\/ShowChar { % <width> <height> <char> ShowChar\n" + -" gsave\n" + -" \/tc exch def % The character\n" + -" \/ysize exch def % the y size of the character\n" + -" \/xsize exch def % the x size of the character\n" + -"\n" + -" \/xmulfactor 1 def \n" + -" \/ymulfactor 1 def\n" + -" \/limmulfactor 0.01 def\n" + -" \/drawable true def\n" + -"\n" + -" \n" + -" % if ysize is negative, make everything upside down!\n" + -" ysize 0 lt {\n" + -" % put ysize normal in this orientation\n" + -" \/ysize ysize abs def\n" + -" xsize ysize translate\n" + -" 180 rotate\n" + -" } if\n" + -"\n" + -" shrinking {\n" + -" xsize 1 shrink sub 2 div mul\n" + -" ysize 1 shrink sub 2 div mul translate \n" + -"\n" + -" shrink shrink scale\n" + -" } if\n" + -"\n" + -" % Calculate the font scaling factors\n" + -" % Loop twice to catch small correction due to first scaling\n" + -" 2 {\n" + -" gsave\n" + -" xmulfactor ymulfactor scale\n" + -" \n" + -" ysize % desired size of character in points\n" + -" tc CharBoxHeight \n" + -" dup 0.0 ne {\n" + -" div % factor by which to scale up the character\n" + -" \/ymulfactor exch def\n" + -" } % end if\n" + -" {pop pop}\n" + -" ifelse\n" + -"\n" + -" xsize % desired size of character in points\n" + -" tc CharBoxWidth \n" + -" dup 0.0 ne {\n" + -" div % factor by which to scale up the character\n" + -" \/xmulfactor exch def\n" + -" } % end if\n" + -" {pop pop}\n" + -" ifelse\n" + -" grestore\n" + -" % if the multiplication factors get too small we need to avoid a crash\n" + -" xmulfactor limmulfactor lt {\n" + -" \/xmulfactor 1 def\n" + -" \/drawable false def\n" + -" } if\n" + -" ymulfactor limmulfactor lt {\n" + -" \/ymulfactor 1 def\n" + -" \/drawable false def\n" + -" } if\n" + -" } repeat\n" + -"\n" + -" % Adjust horizontal position if the symbol is an I\n" + -" tc (I) eq {\n" + -" charWidth 2 div % half of requested character width\n" + -" tc CharBoxWidth 2 div % half of the actual character\n" + -" sub 0 translate\n" + -" % Avoid x scaling for I \n" + -" \/xmulfactor 1 def \n" + -" } if\n" + -"\n" + -"\n" + -" % ---- Finally, draw the character\n" + -" drawable { \n" + -" newpath\n" + -" xmulfactor ymulfactor scale\n" + -"\n" + -" % Move lower left corner of character to start point\n" + -" tc CharBox pop pop % llx lly : Lower left corner\n" + -" exch neg exch neg\n" + -" moveto\n" + -"\n" + -" outline { % outline characters:\n" + -" outlinewidth setlinewidth\n" + -" tc true charpath\n" + -" gsave 1 setgray fill grestore\n" + -" clip stroke\n" + -" } { % regular characters\n" + -" tc show\n" + -" } ifelse\n" + -" } if\n" + -"\n" + -" grestore\n" + -"} bind def\n" + -"\n" + -"\n" + -"\/ShowBox { % x1 y1 x2 y2 filled ShowBox\n" + -" gsave\n" + -" \/filled exch def \n" + -" \/y2 exch def\n" + -" \/x2 exch def\n" + -" \/y1 exch def\n" + -" \/x1 exch def\n" + -" newpath\n" + -" x1 y1 moveto\n" + -" x2 y1 lineto\n" + -" x2 y2 lineto\n" + -" x1 y2 lineto\n" + -" closepath\n" + -"\n" + -" clip\n" + -" \n" + -" filled {\n" + -" fill\n" + -" }{ \n" + -" 0 setgray stroke \n" + -" } ifelse\n" + -"\n" + -" grestore\n" + -"} bind def\n" + -"\n" + -"\n" + -"\/MakeNumber { % number MakeNumber\n" + -" gsave\n" + -" SetNumberFont\n" + -" stackWidth 0 translate\n" + -" 90 rotate % rotate so the number fits\n" + -" dup stringwidth pop % find the length of the number\n" + -" neg % prepare for move\n" + -" stackMargin sub % Move back a bit\n" + -" charWidth (0) CharBoxHeight % height of numbers\n" + -" sub 2 div %\n" + -" moveto % move back to provide space\n" + -" show\n" + -" grestore\n" + -"} bind def\n" + -"\n" + -"\n" + -"\/Ibeam{ % heightInBits Ibeam\n" + -" gsave\n" + -" % Make an Ibeam of twice the given height in bits\n" + -" \/height exch pointsPerBit mul def \n" + -" \/heightDRAW height IbeamFraction mul def\n" + -"\n" + -" IbeamLineWidth setlinewidth\n" + -" IbeamGray setgray \n" + -"\n" + -" charWidth2 height neg translate\n" + -" ShowIbar\n" + -" newpath\n" + -" 0 0 moveto\n" + -" 0 heightDRAW rlineto\n" + -" stroke\n" + -" newpath\n" + -" 0 height moveto\n" + -" 0 height rmoveto\n" + -" currentpoint translate\n" + -" ShowIbar\n" + -" newpath\n" + -" 0 0 moveto\n" + -" 0 heightDRAW neg rlineto\n" + -" currentpoint translate\n" + -" stroke\n" + -" grestore\n" + -"} bind def\n" + -"\n" + -"\n" + -"\/ShowIbar { % make a horizontal bar\n" + -" gsave\n" + -" newpath\n" + -" charWidth4 neg 0 moveto\n" + -" charWidth4 0 lineto\n" + -" stroke\n" + -" grestore\n" + -"} bind def\n" + -"\n" + -"\n" + -"\/ShowLeftEnd {\n" + -" gsave\n" + -" SetStringFont\n" + -" leftEndDeltaX leftEndDeltaY moveto\n" + -" logoType (NA) eq {(5) show ShowPrime} if\n" + -" logoType (AA) eq {(N) show} if\n" + -" grestore\n" + -"} bind def\n" + -"\n" + -"\n" + -"\/ShowRightEnd { \n" + -" gsave\n" + -" SetStringFont\n" + -" rightEndDeltaX rightEndDeltaY moveto\n" + -" logoType (NA) eq {(3) show ShowPrime} if\n" + -" logoType (AA) eq {(C) show} if\n" + -" grestore\n" + -"} bind def\n" + -"\n" + -"\n" + -"\/ShowPrime {\n" + -" gsave\n" + -" SetPrimeFont\n" + -" (\\242) show \n" + -" grestore\n" + -"} bind def\n" + -"\n" + -" \n" + -"\/SetColor{ % <char> SetColor\n" + -" dup colorDict exch known {\n" + -" colorDict exch get aload pop setrgbcolor\n" + -" } {\n" + -" pop\n" + -" defaultColor aload pop setrgbcolor\n" + -" } ifelse \n" + -"} bind def\n" + -"\n" + -"% define fonts\n" + -"\/SetTitleFont {\/Times-Bold findfont titleFontsize scalefont setfont} bind def\n" + -"\/SetLogoFont {\/Helvetica-Bold findfont charWidth scalefont setfont} bind def\n" + -"\/SetStringFont{\/Helvetica-Bold findfont fontsize scalefont setfont} bind def\n" + -"\/SetPrimeFont {\/Symbol findfont fontsize scalefont setfont} bind def\n" + -"\/SetSmallFont {\/Helvetica findfont smallFontsize scalefont setfont} bind def\n" + -"\n" + -"\/SetNumberFont {\n" + -" \/Helvetica-Bold findfont \n" + -" numberFontsize\n" + -" scalefont\n" + -" setfont\n" + -"} bind def\n" + -"\n" + -"%Take a single character and return the bounding box\n" + -"\/CharBox { % <char> CharBox <lx> <ly> <ux> <uy>\n" + -" gsave\n" + -" newpath\n" + -" 0 0 moveto\n" + -" % take the character off the stack and use it here:\n" + -" true charpath \n" + -" flattenpath \n" + -" pathbbox % compute bounding box of 1 pt. char => lx ly ux uy\n" + -" % the path is here, but toss it away ...\n" + -" grestore\n" + -"} bind def\n" + -"\n" + -"\n" + -"% The height of a characters bounding box\n" + -"\/CharBoxHeight { % <char> CharBoxHeight <num>\n" + -" CharBox\n" + -" exch pop sub neg exch pop\n" + -"} bind def\n" + -"\n" + -"\n" + -"% The width of a characters bounding box\n" + -"\/CharBoxWidth { % <char> CharBoxHeight <num>\n" + -" CharBox\n" + -" pop exch pop sub neg \n" + -"} bind def\n" + -"\n" + -"% Set the colour scheme to be faded to indicate trimming\n" + -"\/MuteColour {\n" + -" \/colorDict mutedColourDict def\n" + -"} def\n" + -"\n" + -"% Restore the colour scheme to the normal colours\n" + -"\/RestoreColour {\n" + -" \/colorDict fullColourDict def\n" + -"} def\n" + -"\n" + -"% Draw the background for a trimmed section\n" + -"% takes the number of columns as a parameter\n" + -"\/DrawTrimBg { % <num> DrawTrimBox\n" + -" \/col exch def\n" + -" \n" + -" \/boxwidth \n" + -" col stackWidth mul \n" + -" def\n" + -" \n" + -" gsave\n" + -" 0.97 setgray\n" + -"\n" + -" newpath\n" + -" 0 0 moveto\n" + -" boxwidth 0 rlineto\n" + -" 0 yaxisHeight rlineto\n" + -" 0 yaxisHeight lineto\n" + -" closepath\n" + -" \n" + -" fill\n" + -" grestore\n" + -"} def\n" + -"\n" + -"\/DrawTrimEdge {\n" + -" gsave\n" + -" 0.2 setgray\n" + -" [2] 0 setdash\n" + -"\n" + -" newpath\n" + -" 0 0 moveto\n" + -" 0 yaxisHeight lineto\n" + -" \n" + -" stroke\n" + -"\n" + -"} def\n" + -"\n" + -"\n" + -"% Deprecated names\n" + -"\/startstack {StartStack} bind def\n" + -"\/endstack {EndStack} bind def\n" + -"\/makenumber {MakeNumber} bind def\n" + -"\/numchar { MakeSymbol } bind def\n" + -"\n" + -"%%EndProlog\n" + -"\n" + -"%%Page: 1 1\n" + -"StartLogo\n" + -"\n" + -_input("DATA") + "\n" + -"\n" + -"EndLogo\n" + -"\n" + -"%%EOF\n" - ); -}</script> - <script> -//====================================================================== -// start Alphabet object -//====================================================================== -var Alphabet = function(alphabet, background) { - "use strict"; - var i, j, sym, aliases, complement, comp_e_sym, ambigs, generate_background; - generate_background = (background == null); - if (generate_background) { - background = []; - for (i = 0; i < alphabet.ncore; i++) background[i] = 1.0 / alphabet.ncore; - } else if (alphabet.ncore != background.length) { - throw new Error("The background length does not match the alphabet length."); - } - this.name = alphabet.name; - this.like = (alphabet.like != null ? alphabet.like.toUpperCase() : null); - this.ncore = alphabet.ncore; - this.symbols = alphabet.symbols; - this.background = background; - this.genbg = generate_background; - this.encode = {}; - this.encode2core = {}; - this.complement = {}; - // check if all symbols are same case - var seen_uc = false; - var seen_lc = false; - var check_case = function (syms) { - var s, sym; - if (typeof syms === "string") { - for (s = 0; s < syms.length; s++) { - sym = syms.charAt(s); - if (sym >= 'a' && sym <= 'z') seen_lc = true; - else if (sym >= 'A' && sym <= 'Z') seen_uc = true; - } - } - }; - for (i = 0; i < this.symbols.length; i++) { - check_case(this.symbols[i].symbol); - check_case(this.symbols[i].aliases); - } - // now map symbols to indexes - var update_array = function(array, syms, index) { - var s, sym; - if (typeof syms === "string") { - for (s = 0; s < syms.length; s++) { - sym = syms.charAt(s); - array[sym] = index; - // when only a single case is used, then encode as case insensitive - if (seen_uc != seen_lc) { - if (sym >= 'a' && sym <= 'z') { - array[sym.toUpperCase()] = index; - } else if (sym >= 'A' && sym <= 'Z') { - array[sym.toLowerCase()] = index; - } - } - } - } - } - // map core symbols to index - for (i = 0; i < this.ncore; i++) { - update_array(this.encode2core, this.symbols[i].symbol, i); - update_array(this.encode, this.symbols[i].symbol, i); - update_array(this.encode2core, this.symbols[i].aliases, i); - update_array(this.encode, this.symbols[i].aliases, i); - } - // map ambigous symbols to index - ambigs = {}; - for (i = this.ncore; i < this.symbols.length; i++) { - update_array(this.encode, this.symbols[i].symbol, i); - update_array(this.encode, this.symbols[i].aliases, i); - ambigs[this.symbols[i].equals] = i; - } - // determine complements - for (i = 0; i < this.ncore; i++) { - complement = this.symbols[i].complement; - if (typeof complement === "string") { - this.complement[i] = this.encode2core[complement]; - } - } - next_symbol: - for (i = this.ncore; i < this.symbols.length; i++) { - complement = ""; - for (j = 0; j < this.symbols[i].equals.length; j++) { - comp_e_sym = this.complement[this.encode2core[this.symbols[i].equals.charAt(j)]]; - if (typeof comp_e_sym !== "number") continue next_symbol; - complement += this.symbols[comp_e_sym].symbol; - } - complement = complement.split("").sort().join(""); - if (typeof ambigs[complement] === "number") { - this.complement[i] = ambigs[complement]; - } - } - // determine case insensitivity - this.case_insensitive = true; - if (seen_uc == seen_lc) { - // when there is a mixture of cases it probably won't - // be case insensitive but we still need to check - loop: - for (i = 0; i < this.symbols.length; i++) { - sym = this.symbols[i].symbol; - if (sym >= 'A' && sym <= 'Z') { - if (this.encode[sym.toLowerCase()] != i) { - this.case_insensitive = false; - break loop; - } - } else if (sym >= 'a' && sym <= 'z') { - if (this.encode[sym.toUpperCase()] != i) { - this.case_insensitive = false; - break loop; - } - } - aliases = this.symbols[i].aliases; - if (aliases != null) { - for (j = 0; j < aliases.length; j++) { - sym = aliases.charAt(j); - if (sym >= 'A' && sym <= 'Z') { - if (this.encode[sym.toLowerCase()] != i) { - this.case_insensitive = false; - break loop; - } - } else if (sym >= 'a' && sym <= 'z') { - if (this.encode[sym.toUpperCase()] != i) { - this.case_insensitive = false; - break loop; - } - } - } - } - } - } - // normalise aliases to remove the prime symbol and eliminate - // the alternate cases when the alphabet is case insensitive - var seen, out; - for (i = 0; i < this.symbols.length; i++) { - sym = this.symbols[i].symbol; - aliases = this.symbols[i].aliases; - if (typeof aliases != "string") aliases = ""; - seen = {}; - out = []; - if (this.case_insensitive) { - sym = sym.toUpperCase(); - aliases = aliases.toUpperCase(); - } - seen[sym] = true; - for (j = 0; j < aliases.length; j++) { - if (!seen[aliases.charAt(j)]) { - seen[aliases.charAt(j)] = true; - out.push(aliases.charAt(j)); - } - } - this.symbols[i].aliases = out.sort().join(""); - } -}; -// return the name of the alphabet -Alphabet.prototype.get_alphabet_name = function() { - return this.name; -}; -// return if the alphabet can be complemented -Alphabet.prototype.has_complement = function() { - return (typeof this.symbols[0].complement === "string"); -}; -// return true if an uppercase letter has the same meaning as the lowercase form -Alphabet.prototype.is_case_insensitive = function() { - return this.case_insensitive; -}; -// return the information content of an alphabet letter -Alphabet.prototype.get_ic = function() { - return Math.log(this.ncore) / Math.LN2; -}; -// return the count of the core alphabet symbols -Alphabet.prototype.get_size_core = function() { - return this.ncore; -}; -// return the count of all alphabet symbols -Alphabet.prototype.get_size_full = function() { - return this.symbols.length; -}; -// return the symbol for the given alphabet index -Alphabet.prototype.get_symbol = function(alph_index) { - "use strict"; - if (alph_index < 0 || alph_index >= this.symbols.length) { - throw new Error("Alphabet index out of bounds"); - } - return this.symbols[alph_index].symbol; -}; -// return the aliases for the given alphabet index -Alphabet.prototype.get_aliases = function(alph_index) { - "use strict"; - if (alph_index < 0 || alph_index >= this.symbols.length) { - throw new Error("Alphabet index out of bounds"); - } - var sym_obj = this.symbols[alph_index]; - return (sym_obj.aliases != null ? sym_obj.aliases : ""); -}; -// return the name for the given alphabet index -Alphabet.prototype.get_name = function(alph_index) { - "use strict"; - var sym; - if (alph_index < 0 || alph_index >= this.symbols.length) { - throw new Error("Alphabet index out of bounds"); - } - sym = this.symbols[alph_index]; - return (typeof sym.name === "string" ? sym.name : sym.symbol); -}; -// return the alphabet it is like or null -Alphabet.prototype.get_like = function() { - "use strict"; - return this.like; -}; -// return the index of the complement for the given alphabet index -Alphabet.prototype.get_complement = function(alph_index) { - var comp_e_sym = this.complement[alph_index]; - if (typeof comp_e_sym === "number") { - return comp_e_sym; - } else { - return -1; - } -}; -// return a string containing the core symbols -Alphabet.prototype.get_symbols = function() { - "use strict"; - var i, core_symbols; - core_symbols = ""; - for (i = 0; i < this.ncore; i++) { - core_symbols += this.symbols[i].symbol; - } - return core_symbols; -}; -// return if the background was not a uniform generated background -Alphabet.prototype.has_bg = function() { - "use strict"; - return !this.genbg; -}; -// get the background frequency for the index -Alphabet.prototype.get_bg_freq = function(alph_index) { - "use strict"; - var freq, i, symbols; - if (alph_index >= 0) { - if (alph_index < this.ncore) { - return this.background[alph_index]; - } else if (alph_index < this.symbols.length) { - freq = 0; - symbols = this.symbols[alph_index].equals; - for (i = 0; i < symbols.length; i++) { - freq += this.background[this.encode2core[symbols.charAt(i)]]; - } - return freq; - } - } - throw new Error("The alphabet index is out of range."); -}; -// get the colour of the index -Alphabet.prototype.get_colour = function(alph_index) { - "use strict"; - if (alph_index < 0 || alph_index >= this.symbols.length) { - throw new Error("BAD_ALPHABET_INDEX"); - } - if (typeof this.symbols[alph_index].colour != "string") { - return "black"; - } - return "#" + this.symbols[alph_index].colour; -}; -// get the rgb componets of the colour at the index -Alphabet.prototype.get_rgb = function(alph_index) { - "use strict"; - if (alph_index < 0 || alph_index >= this.symbols.length) { - throw new Error("BAD_ALPHABET_INDEX"); - } - if (typeof this.symbols[alph_index].colour != "string") { - return {"red": 0, "green": 0, "blue": 0}; - } - var colour = this.symbols[alph_index].colour; - var red = parseInt(colour.substr(0, 2), 16) / 255; - var green = parseInt(colour.substr(2, 2), 16) / 255; - var blue = parseInt(colour.substr(4, 2), 16) / 255; - return {"red": red, "green": green, "blue": blue}; -}; -// convert a symbol into the index -Alphabet.prototype.get_index = function(letter) { - "use strict"; - var alph_index; - alph_index = this.encode[letter]; - if (typeof alph_index === "undefined") { - return -1; - } - return alph_index; -}; -// convert a symbol into the list of core indexes that it equals -Alphabet.prototype.get_indexes = function(letter) { - "use strict"; - var alph_index, comprise_str, i, comprise_list; - alph_index = this.encode[letter]; - if (typeof alph_index === "undefined") { - throw new Error("Unknown letter"); - } - comprise_str = this.symbols[alph_index].equals; - comprise_list = []; - if (typeof comprise_str == "string") { - for (i = 0; i < comprise_str.length; i++) { - comprise_list.push(this.encode2core[comprise_str.charAt(i)]); - } - } else { - comprise_list.push(alph_index); - } - return comprise_list; -}; -// check if a symbol is the primary way of representing the symbol in the alphabet -Alphabet.prototype.is_prime_symbol = function(letter) { - var alph_index; - alph_index = this.encode[letter]; - if (alph_index == null) return false; - if (this.is_case_insensitive()) { - return (this.symbols[alph_index].symbol.toUpperCase() == letter.toUpperCase()); - } else { - return (this.symbols[alph_index].symbol == letter); - } -}; -// compare 2 alphabets -Alphabet.prototype.equals = function(other) { - "use strict"; - var i, sym1, sym2; - // first check that it's actually an alphabet object - if (!(typeof other === "object" && other != null && other instanceof Alphabet)) { - return false; - } - // second shortcircuit if it's the same object - if (this === other) return true; - // compare - if (this.name !== other.name) return false; - if (this.ncore !== other.ncore) return false; - if (this.symbols.length !== other.symbols.length) return false; - for (i = 0; i < this.symbols.length; i++) { - sym1 = this.symbols[i]; - sym2 = other.symbols[i]; - if (sym1.symbol !== sym2.symbol) return false; - if (sym1.aliases !== sym2.aliases) return false; - if (sym1.name !== sym2.name) return false; - if (typeof sym1.colour !== typeof sym2.colour || - (typeof sym1.colour === "string" && typeof sym2.colour === "string" && - parseInt(sym1.colour, 16) != parseInt(sym2.colour, 16))) { - return false; - } - if (sym1.complement !== sym2.complement) return false; - if (sym1.equals !== sym2.equals) return false; - } - return true; -}; -Alphabet.prototype.check_core_subset = function(super_alph) { - var complement_same = true; - var seen_set = {}; - var sub_i, sub_symbol, super_i, super_symbol; - for (sub_i = 0; sub_i < this.ncore; sub_i++) { - sub_symbol = this.symbols[sub_i]; - super_i = super_alph.encode[sub_symbol.symbol]; - if (super_i == null) return 0; - super_symbol = super_alph.symbols[super_i]; - if (seen_set[super_i]) return 0; - seen_set[super_i] = true; - // check complement - if (sub_symbol.complement != null && super_symbol.complement != null) { - if (super_alph.encode[sub_symbol.complement] != super_alph.encode[super_symbol.complement]) { - complement_same = false; - } - } else if (sub_symbol.complement != null || super_symbol.complement != null) { - complement_same = false; - } - } - return (complement_same ? 1 : -1); -}; -// convert a sequence to its reverse complement -Alphabet.prototype.invcomp_seq = function(seq) { - "use strict"; - var syms, i, e_sym, comp_e_sym; - if (!this.has_complement()) throw new Error("Alphabet must be complementable"); - syms = seq.split(""); - for (i = 0; i < syms.length; i++) { - e_sym = this.encode[syms[i]]; - if (typeof e_sym === "undefined") { - e_sym = this.ncore; // wildcard - } - comp_e_sym = this.complement[e_sym]; - if (typeof comp_e_sym === "undefined") { - comp_e_sym = e_sym; // not complementable - } - syms[i] = this.symbols[comp_e_sym].symbol; - } - return syms.reverse().join(""); -}; -// convert the alphabet to the text version -Alphabet.prototype.as_text = function() { - "use strict"; - function name_as_text(name) { - var i, c, out; - out = "\""; - for (i = 0; i < name.length; i++) { - c = name.charAt(i); - if (c == "\"") { - out += "\\\""; - } else if (c == "/") { - out += "\\/"; - } else if (c == "\\") { - out += "\\\\"; - } else { - out += c; - } - } - out += "\""; - return out; - } - function symbol_as_text(sym) { - var out; - out = sym.symbol; - if (typeof sym.name === "string" && sym.name != sym.symbol) { - out += " " + name_as_text(sym.name); - } - if (typeof sym.colour === "string") { - out += " " + sym.colour; - } - return out; - } - var out, i, j, c, sym; - out = ""; - // output core symbols with 2 way complements - for (i = 0; i < this.ncore; i++) { - c = this.complement[i]; - if (typeof c === "number" && i < c && this.complement[c] === i) { - out += symbol_as_text(this.symbols[i]) + " ~ " + symbol_as_text(this.symbols[c]) + "\n"; - } - } - // output core symbols with no complement - for (i = 0; i < this.ncore; i++) { - if (typeof this.complement[i] === "undefined") { - out += symbol_as_text(this.symbols[i]) + "\n"; - } - } - // output ambiguous symbols that have comprising characters - for (i = this.ncore; i < this.symbols.length; i++) { - if (this.symbols[i].equals.length == 0) break; - out += symbol_as_text(this.symbols[i]) + " = " + this.symbols[i].equals + "\n"; - if (typeof this.symbols[i].aliases === "string") { - for (j = 0; j < this.symbols[i].aliases.length; j++) { - if (this.symbols[i].aliases.charAt(j) == this.symbols[i].symbol) continue; - out += this.symbols[i].aliases.charAt(j) + " = " + this.symbols[i].equals + "\n"; - } - } - } - // output aliases of core symbols - for (i = 0; i < this.ncore; i++) { - if (typeof this.symbols[i].aliases === "string") { - for (j = 0; j < this.symbols[i].aliases.length; j++) { - if (this.symbols[i].aliases.charAt(j) == this.symbols[i].symbol) continue; - out += this.symbols[i].aliases.charAt(j) + " = " + this.symbols[i].symbol + "\n"; - } - } - } - // output gap symbols - i = this.symbols.length - 1; - if (this.symbols[i].equals.length == 0) { - out += symbol_as_text(this.symbols[i]) + " =\n"; - if (typeof this.symbols[i].aliases === "string") { - for (j = 0; j < this.symbols[i].aliases.length; j++) { - if (this.symbols[i].aliases.charAt(j) == this.symbols[i].symbol) continue; - out += this.symbols[i].aliases.charAt(j) + " =\n"; - } - } - } - return out; -}; -// output the alphabet as it appears in minimal MEME format -Alphabet.prototype.as_meme = function() { - "use strict"; - function name_as_text(name) { - var i, c, out; - out = "\""; - for (i = 0; i < name.length; i++) { - c = name.charAt(i); - if (c == "\"") { - out += "\\\""; - } else if (c == "/") { - out += "\\/"; - } else if (c == "\\") { - out += "\\\\"; - } else { - out += c; - } - } - out += "\""; - return out; - } - if (this.equals(AlphStd.DNA)) { - return "ALPHABET= ACGT\n"; - } else if (this.equals(AlphStd.PROTEIN)) { - return "ALPHABET= ACDEFGHIKLMNPQRSTVWY\n"; - } else { - return "ALPHABET" + - (this.name != null ? " " + name_as_text(this.name) : "") + - (this.like != null ? " " + this.like + "-LIKE" : "") + "\n" + - this.as_text() + "END ALPHABET\n"; - } -}; - -// Returns a table showing all the letters in the alphabet -Alphabet.prototype.as_table = function() { - "use strict"; - var i, j, row, th, td, aliases, equals, sym; - var table = document.createElement("table"); - // create the core symbol header - row = table.insertRow(table.rows.length); - th = document.createElement("th"); - th.appendChild(document.createTextNode("Symbol(s)")); - row.appendChild(th); - th = document.createElement("th"); - th.appendChild(document.createTextNode("Name")); - row.appendChild(th); - th = document.createElement("th"); - if (this.has_complement()) { - th.appendChild(document.createTextNode("Complement")); - } - row.appendChild(th); - // list the core symbols - for (i = 0; i < this.ncore; i++) { - row = table.insertRow(table.rows.length); - td = document.createElement("td"); - if (this.symbols[i].colour != null) { - td.style.color = '#' + this.symbols[i].colour; - } - td.appendChild(document.createTextNode(this.symbols[i].symbol)); - aliases = this.get_aliases(i); - if (aliases.length > 0) { - td.appendChild(document.createTextNode(' ' + aliases.split('').join(' '))); - } - row.appendChild(td); - td = document.createElement("td"); - if (this.symbols[i].name != null) { - td.appendChild(document.createTextNode(this.symbols[i].name)); - } - row.appendChild(td); - td = document.createElement("td"); - if (this.symbols[i].complement != null) { - td.style.color = this.get_colour(this.get_index(this.symbols[i].complement)); - td.appendChild(document.createTextNode(this.symbols[i].complement)); - } - row.appendChild(td); - } - // create the ambiguous symbol header - row = table.insertRow(table.rows.length); - th = document.createElement("th"); - th.appendChild(document.createTextNode("Symbol(s)")); - row.appendChild(th); - th = document.createElement("th"); - th.appendChild(document.createTextNode("Name")); - row.appendChild(th); - th = document.createElement("th"); - th.appendChild(document.createTextNode("Matches")); - row.appendChild(th); - // list the ambiguous symbols - for (i = this.ncore; i < this.symbols.length; i++) { - row = table.insertRow(table.rows.length); - td = document.createElement("td"); - if (this.symbols[i].colour != null) { - td.style.color = '#' + this.symbols[i].colour; - } - td.appendChild(document.createTextNode(this.symbols[i].symbol)); - aliases = this.get_aliases(i); - if (aliases.length > 0) { - td.appendChild(document.createTextNode(' ' + aliases.split('').join(' '))); - } - row.appendChild(td); - td = document.createElement("td"); - if (this.symbols[i].name != null) { - td.appendChild(document.createTextNode(this.symbols[i].name)); - } - row.appendChild(td); - td = document.createElement("td"); - equals = this.symbols[i].equals.split(''); - for (j = 0; j < equals.length; j++) { - if (j != 0) td.appendChild(document.createTextNode(' ')); - sym = document.createElement("span"); - sym.style.color = this.get_colour(this.get_index(equals[j])); - sym.appendChild(document.createTextNode(equals[j])); - td.appendChild(sym); - } - row.appendChild(td); - } - return table; -}; - -// returns a dictionary of the colours for EPS -Alphabet.prototype._as_eps_dict = function() { - "use strict"; - var i, sym, rgb; - var out = "/fullColourDict <<\n"; - for (i = 0; i < this.ncore; i++) { - sym = this.get_symbol(i); - sym = sym.replace(/\\/g, "\\\\"); - sym = sym.replace(/\(/g, "\\("); - sym = sym.replace(/\)/g, "\\)"); - rgb = this.get_rgb(i); - out += " (" + sym + ") [" + rgb.red.toFixed(4) + " " + rgb.green.toFixed(4) + " " + rgb.blue.toFixed(4) + "]\n"; - } - out += ">> def\n"; - out += "/mutedColourDict <<\n"; - for (i = 0; i < this.ncore; i++) { - sym = this.get_symbol(i); - sym = sym.replace(/\\/g, "\\\\"); - sym = sym.replace(/\(/g, "\\("); - sym = sym.replace(/\)/g, "\\)"); - rgb = Alphabet.lighten_colour(this.get_rgb(i)); - out += " (" + sym + ") [" + rgb.red.toFixed(4) + " " + rgb.green.toFixed(4) + " " + rgb.blue.toFixed(4) + "]\n"; - } - out += ">> def\n"; - return out; -}; - -// return the alphabet name or a list of primary symbols -Alphabet.prototype.toString = function() { - "use strict"; - if (this.name != null) { - return this.name; - } else { - return this.get_symbols(); - } -}; - -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// Helper functions -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -// Convert a colour specified in RGB colourspace values into LAB colourspace -Alphabet.rgb2lab = function(rgb) { - "use strict"; - var xyzHelper, labHelper; - // XYZ helper - xyzHelper = function(value) { - if (value > 0.0445) { - value = (value + 0.055) / 1.055; - value = Math.pow(value, 2.4); - } else { - value /= 12.92; - } - value *= 100; - return value; - }; - // lab helper - labHelper = function(value) { - if (value > 0.008856) { - value = Math.pow(value, 1.0 / 3.0); - } else { - value = (7.787 * value) + (16.0 / 116.0); - } - return value; - }; - // convert into XYZ colourspace - var c1, c2, c3; - if (typeof rgb == "number") { - c1 = xyzHelper(((rgb >> 16) & 0xFF) / 255.0); - c2 = xyzHelper(((rgb >> 8) & 0xFF) / 255.0); - c3 = xyzHelper((rgb & 0xFF) / 255.0); - } else { - c1 = xyzHelper(rgb.red); - c2 = xyzHelper(rgb.green); - c3 = xyzHelper(rgb.blue); - } - var x = (c1 * 0.4124) + (c2 * 0.3576) + (c3 * 0.1805); - var y = (c1 * 0.2126) + (c2 * 0.7152) + (c3 * 0.0722); - var z = (c1 * 0.0193) + (c2 * 0.1192) + (c3 * 0.9505); - // convert into Lab colourspace - c1 = labHelper(x / 95.047); - c2 = labHelper(y / 100.0); - c3 = labHelper(z / 108.883); - var l = (116.0 * c2) - 16; - var a = 500.0 * (c1 - c2); - var b = 200.0 * (c2 - c3); - return {"l": l, "a": a, "b": b}; -}; - -// Convert a colour specified in HSV colourspace into RGB colourspace -Alphabet.hsv2rgb = function(hue, sat, value, output_object) { - // achromatic (grey) - var r = value; - var g = value; - var b = value; - if (sat != 0) { - var h = hue / 60.0; - var i = Math.floor(h); - var f = h - i; - var p = value * (1.0 - sat); - var q = value * (1.0 - (sat * f)); - var t = value * (1.0 - (sat * (1.0 - f))); - if (i == 0) { - r = value; - g = t; - b = p; - } else if (i == 1) { - r = q; - g = value; - b = p; - } else if (i == 2) { - r = p; - g = value; - b = t; - } else if (i == 3) { - r = p; - g = q; - b = value; - } else if (i == 4) { - r = t; - g = p; - b = value; - } else { - r = value; - g = p; - b = q; - } - } - if (output_object) { - return {"red": r, "green": g, "blue": b}; - } else { - return (Math.floor(r * 255) << 15) | (Math.floor(g * 255) << 8) | (Math.floor(b * 255)); - } -}; - -// Calculate a distance score between two colours in LAB colourspace -Alphabet.lab_dist = function(lab1, lab2) { - var c1 = Math.sqrt((lab1.l * lab1.l) + (lab1.a * lab1.a)); - var c2 = Math.sqrt((lab2.l * lab2.l) + (lab2.a * lab2.a)); - var dc = c1 - c2; - var dl = lab1.l - lab2.l; - var da = lab1.a - lab2.a; - var db = lab1.b - lab2.b; - // we don't want NaN due to rounding errors so fudge things a bit... - var dh = 0; - var dh_squared = (da * da) + (db * db) - (dc * dc); - if (dh_squared > 0) { - dh = Math.sqrt(dh_squared); - } - var first = dl; - var second = dc / (1.0 + (0.045 * c1)); - var third = dh / (1.0 + (0.015 * c1)); - return Math.sqrt((first * first) + (second * second) + (third * third)); -}; - -// convert an RGB value into a HSL value -Alphabet.rgb2hsl = function(rgb) { - "use strict"; - var min, max, delta, h, s, l, r, g, b; - if (typeof rgb == "number") { - r = ((rgb >> 16) & 0xFF) / 255.0; - g = ((rgb >> 8) & 0xFF) / 255.0; - b = (rgb & 0xFF) / 255.0; - } else { - r = rgb.red; - g = rgb.green; - b = rgb.blue; - } - min = Math.min(r, g, b); - max = Math.max(r, g, b); - delta = max - min; - l = min + (delta / 2); - if (max == min) { - h = 0; // achromatic (grayscale) - s = 0; - } else { - if (l > 0.5) { - s = delta / (2 - max - min); - } else { - s = delta / (max + min); - } - if (max == r) { - h = (g - b) / delta; - if (g < b) h += 6; - } else if (max == g) { - h = ((b - r) / delta) + 2; - } else { - h = ((r - g) / delta) + 4; - } - h /= 6; - } - return {"h": h, "s": s, "l": l}; -}; - -// convert a HSL value into an RGB value -Alphabet.hsl2rgb = function(hsl, output_object) { - "use strict"; - function _hue(p, q, t) { - "use strict"; - if (t < 0) t += 1; - else if (t > 1) t -= 1; - if (t < (1.0 / 6.0)) { - return p + ((q - p) * 6.0 * t); - } else if (t < 0.5) { - return q; - } else if (t < (2.0 / 3.0)) { - return p + ((q - p) * ((2.0 / 3.0) - t) * 6.0); - } else { - return p; - } - } - var r, g, b, p, q; - if (hsl.s == 0) { - // achromatic (grayscale) - r = hsl.l; - g = hsl.l; - b = hsl.l; - } else { - if (hsl.l < 0.5) { - q = hsl.l * (1 + hsl.s); - } else { - q = hsl.l + hsl.s - (hsl.l * hsl.s); - } - p = (2 * hsl.l) - q; - r = _hue(p, q, hsl.h + (1.0 / 3.0)); - g = _hue(p, q, hsl.h); - b = _hue(p, q, hsl.h - (1.0 / 3.0)); - } - if (output_object) { - return {"red": r, "green": g, "blue": b}; - } else { - return (Math.floor(r * 255) << 15) | (Math.floor(g * 255) << 8) | (Math.floor(b * 255)); - } -}; - -Alphabet.lighten_colour = function(rgb) { - "use strict"; - var hsl = Alphabet.rgb2hsl(rgb); - hsl.l += (1.0 - hsl.l) * 2 / 3; - return Alphabet.hsl2rgb(hsl, typeof rgb != "number"); -}; - -//====================================================================== -// end Alphabet object -//====================================================================== - -//====================================================================== -// start StandardAlphabet object -//====================================================================== - -// an extension of the alphabet object to support some additional fields -// only present in standard alphabets. -var StandardAlphabet = function(enum_code, enum_name, alphabet_data) { - Alphabet.apply(this, [alphabet_data]); - this.enum_code = enum_code; - this.enum_name = enum_name; -}; -StandardAlphabet.prototype = Alphabet.prototype; -StandardAlphabet.prototype.constructor = StandardAlphabet; - -// A unique code for this standard alphabet. -// This code will be a power of 2 to enable creation of bitsets for -// a selection of standard alphabets. -StandardAlphabet.prototype.get_code = function() { - return this.enum_code; -}; - -// A unique name for this standard alphabet. -// this name will be all upper case and the same as the property that -// refers to this alphabet in the AlphStd collection. -StandardAlphabet.prototype.get_enum = function() { - return this.enum_name; -}; - -//====================================================================== -// end StandardAlphabet object -//====================================================================== - -// A collection of standard alphabets. -var AlphStd = { - RNA: new StandardAlphabet(1, "RNA", { - "name": "RNA", - "like": "RNA", - "ncore": 4, - "symbols": [ - {"symbol": "A", "name": "Adenine", "colour": "CC0000"}, - {"symbol": "C", "name": "Cytosine", "colour": "0000CC"}, - {"symbol": "G", "name": "Guanine", "colour": "FFB300"}, - {"symbol": "U", "name": "Uracil", "colour": "008000", - "aliases": "T"}, - {"symbol": "N", "name": "Any base", "equals": "ACGU", "aliases": "X."}, - {"symbol": "V", "name": "Not U", "equals": "ACG"}, - {"symbol": "H", "name": "Not G", "equals": "ACU"}, - {"symbol": "D", "name": "Not C", "equals": "AGU"}, - {"symbol": "B", "name": "Not A", "equals": "CGU"}, - {"symbol": "M", "name": "Amino", "equals": "AC"}, - {"symbol": "R", "name": "Purine", "equals": "AG"}, - {"symbol": "W", "name": "Weak", "equals": "AU"}, - {"symbol": "S", "name": "Strong", "equals": "CG"}, - {"symbol": "Y", "name": "Pyrimidine", "equals": "CU"}, - {"symbol": "K", "name": "Keto", "equals": "GU"} - ] - }), - DNA: new StandardAlphabet(2, "DNA", { - "name": "DNA", - "like": "DNA", - "ncore": 4, - "symbols": [ - {"symbol": "A", "name": "Adenine", "colour": "CC0000", "complement": "T"}, - {"symbol": "C", "name": "Cytosine", "colour": "0000CC", "complement": "G"}, - {"symbol": "G", "name": "Guanine", "colour": "FFB300", "complement": "C"}, - {"symbol": "T", "name": "Thymine", "colour": "008000", "complement": "A", - "aliases": "U"}, - {"symbol": "N", "name": "Any base", "equals": "ACGT", "aliases": "X."}, - {"symbol": "V", "name": "Not T", "equals": "ACG"}, - {"symbol": "H", "name": "Not G", "equals": "ACT"}, - {"symbol": "D", "name": "Not C", "equals": "AGT"}, - {"symbol": "B", "name": "Not A", "equals": "CGT"}, - {"symbol": "M", "name": "Amino", "equals": "AC"}, - {"symbol": "R", "name": "Purine", "equals": "AG"}, - {"symbol": "W", "name": "Weak", "equals": "AT"}, - {"symbol": "S", "name": "Strong", "equals": "CG"}, - {"symbol": "Y", "name": "Pyrimidine", "equals": "CT"}, - {"symbol": "K", "name": "Keto", "equals": "GT"} - ] - }), - PROTEIN: new StandardAlphabet(4, "PROTEIN", { - "name": "Protein", - "like": "PROTEIN", - "ncore": 20, - "symbols": [ - {"symbol": "A", "name": "Alanine", "colour": "0000CC"}, - {"symbol": "C", "name": "Cysteine", "colour": "0000CC"}, - {"symbol": "D", "name": "Aspartic acid", "colour": "FF00FF"}, - {"symbol": "E", "name": "Glutamic acid", "colour": "FF00FF"}, - {"symbol": "F", "name": "Phenylalanine", "colour": "0000CC"}, - {"symbol": "G", "name": "Glycine", "colour": "FFB300"}, - {"symbol": "H", "name": "Histidine", "colour": "FFCCCC"}, - {"symbol": "I", "name": "Isoleucine", "colour": "0000CC"}, - {"symbol": "K", "name": "Lysine", "colour": "CC0000"}, - {"symbol": "L", "name": "Leucine", "colour": "0000CC"}, - {"symbol": "M", "name": "Methionine", "colour": "0000CC"}, - {"symbol": "N", "name": "Asparagine", "colour": "008000"}, - {"symbol": "P", "name": "Proline", "colour": "FFFF00"}, - {"symbol": "Q", "name": "Glutamine", "colour": "008000"}, - {"symbol": "R", "name": "Arginine", "colour": "CC0000"}, - {"symbol": "S", "name": "Serine", "colour": "008000"}, - {"symbol": "T", "name": "Threonine", "colour": "008000"}, - {"symbol": "V", "name": "Valine", "colour": "0000CC"}, - {"symbol": "W", "name": "Tryptophan", "colour": "0000CC"}, - {"symbol": "Y", "name": "Tyrosine", "colour": "33E6CC"}, - {"symbol": "X", "name": "Any amino acid", "equals": "ACDEFGHIKLMNPQRSTVWY", "aliases": "*."}, - {"symbol": "B", "name": "Asparagine or Aspartic acid", "equals": "DN"}, - {"symbol": "Z", "name": "Glutamine or Glutamic acid", "equals": "EQ"}, - {"symbol": "J", "name": "Leucine or Isoleucine", "equals": "IL"} - ] - }) -}; - -//====================================================================== -// start Symbol object -//====================================================================== -var Symbol = function(alph_index, scale, alphabet) { - "use strict"; - //variable prototype - this.symbol = alphabet.get_symbol(alph_index); - this.scale = scale; - this.colour = alphabet.get_colour(alph_index); -}; - -Symbol.prototype.get_symbol = function() { - "use strict"; - return this.symbol; -}; - -Symbol.prototype.get_scale = function() { - "use strict"; - return this.scale; -}; - -Symbol.prototype.get_colour = function() { - "use strict"; - return this.colour; -}; - -Symbol.prototype.toString = function() { - "use strict"; - return this.symbol + " " + (Math.round(this.scale*1000)/10) + "%"; -}; - -function compare_symbol(sym1, sym2) { - "use strict"; - if (sym1.get_scale() < sym2.get_scale()) { - return -1; - } else if (sym1.get_scale() > sym2.get_scale()) { - return 1; - } else { - return 0; - } -} -//====================================================================== -// end Symbol object -//====================================================================== - -//====================================================================== -// start Pspm object -//====================================================================== -var Pspm = function(matrix, name, ltrim, rtrim, nsites, evalue, pssm, alt) { - "use strict"; - var row, col, data, row_sum, delta, evalue_re; - if (typeof name !== "string") { - name = ""; - } - this.name = name; - //construct - if (matrix instanceof Pspm) { - // copy constructor - this.alph_length = matrix.alph_length; - this.motif_length = matrix.motif_length; - this.name = matrix.name; - this.alt = matrix.alt; - this.nsites = matrix.nsites; - this.evalue = matrix.evalue; - this.ltrim = matrix.ltrim; - this.rtrim = matrix.rtrim; - this.pspm = []; - for (row = 0; row < matrix.motif_length; row++) { - this.pspm[row] = []; - for (col = 0; col < matrix.alph_length; col++) { - this.pspm[row][col] = matrix.pspm[row][col]; - } - } - if (matrix.pssm != null) { - this.pssm = []; - for (row = 0; row < matrix.motif_length; row++) { - this.pspm[row] = []; - for (col = 0; col < matrix.alph_length; col++) { - this.pssm[row][col] = matrix.pssm[row][col]; - } - } - } - } else { - // check parameters - if (ltrim == null) { - ltrim = 0; - } else if (typeof ltrim !== "number" || ltrim % 1 !== 0 || ltrim < 0) { - throw new Error("ltrim must be a non-negative integer, got: " + ltrim); - } - if (rtrim == null) { - rtrim = 0; - } else if (typeof rtrim !== "number" || rtrim % 1 !== 0 || rtrim < 0) { - throw new Error("rtrim must be a non-negative integer, got: " + rtrim); - } - if (nsites != null) { - if (typeof nsites !== "number" || nsites < 0) { - throw new Error("nsites must be a positive number, got: " + nsites); - } else if (nsites == 0) { - nsites = null; - } - } - if (evalue != null) { - if (typeof evalue === "number") { - if (evalue < 0) { - throw new Error("evalue must be a non-negative number, got: " + evalue); - } - } else if (typeof evalue === "string") { - evalue_re = /^((?:[+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?)|inf)$/; - if (!evalue_re.test(evalue)) { - throw new Error("evalue must be a non-negative number, got: " + evalue); - } - } else { - throw new Error("evalue must be a non-negative number, got: " + evalue); - } - } - // set properties - this.name = name; - this.alt = alt; - this.nsites = nsites; - this.evalue = evalue; - this.ltrim = ltrim; - this.rtrim = rtrim; - if (typeof matrix === "string") { - // string constructor - data = parse_pspm_string(matrix); - this.alph_length = data["alph_length"]; - this.motif_length = data["motif_length"]; - this.pspm = data["pspm"]; - if (this.evalue == null) { - if (data["evalue"] != null) { - this.evalue = data["evalue"]; - } else { - this.evalue = 0; - } - } - if (this.nsites == null) { - if (typeof data["nsites"] === "number") { - this.nsites = data["nsites"]; - } else { - this.nsites = 20; - } - } - } else { - // assume pspm is a nested array - this.motif_length = matrix.length; - this.alph_length = (matrix.length > 0 ? matrix[0].length : 0); - if (this.nsites == null) { - this.nsites = 20; - } - if (this.evalue == null) { - this.evalue = 0; - } - this.pspm = []; - // copy pspm and check - for (row = 0; row < this.motif_length; row++) { - if (this.alph_length != matrix[row].length) { - throw new Error("COLUMN_MISMATCH"); - } - this.pspm[row] = []; - row_sum = 0; - for (col = 0; col < this.alph_length; col++) { - this.pspm[row][col] = matrix[row][col]; - row_sum += this.pspm[row][col]; - } - delta = 0.1; - if (isNaN(row_sum) || (row_sum > 1 && (row_sum - 1) > delta) || - (row_sum < 1 && (1 - row_sum) > delta)) { - throw new Error("INVALID_SUM"); - } - } - // copy pssm - if (pssm != null) { - this.pssm = []; - for (row = 0; row < this.motif_length; row++) { - this.pssm[row] = []; - for (col = 0; col < this.alph_length; col++) { - this.pssm[row][col] = pssm[row][col]; - } - } - } - } - } -}; - -Pspm.prototype.copy = function() { - "use strict"; - return new Pspm(this); -}; - -Pspm.prototype.reverse = function() { - "use strict"; - var x, y, temp, temp_trim; - //reverse - x = 0; - y = this.motif_length-1; - while (x < y) { - temp = this.pspm[x]; - this.pspm[x] = this.pspm[y]; - this.pspm[y] = temp; - x++; - y--; - } - // reverse pssm (if defined) - if (typeof this.pssm !== "undefined") { - //reverse - x = 0; - y = this.motif_length-1; - while (x < y) { - temp = this.pssm[x]; - this.pspm[x] = this.pssm[y]; - this.pssm[y] = temp; - x++; - y--; - } - } - //swap triming - temp_trim = this.ltrim; - this.ltrim = this.rtrim; - this.rtrim = temp_trim; - return this; //allow function chaining... -}; - -Pspm.prototype.reverse_complement = function(alphabet) { - "use strict"; - var x, y, temp, i, row, c, temp_trim; - if (this.alph_length != alphabet.get_size_core()) { - throw new Error("The alphabet size does not match the size of the pspm."); - } - if (!alphabet.has_complement()) { - throw new Error("The specified alphabet can not be complemented."); - } - // reverse motif - this.reverse(); - //complement - for (x = 0; x < this.motif_length; x++) { - row = this.pspm[x]; - for (i = 0; i < row.length; i++) { - c = alphabet.get_complement(i); - if (c < i) continue; - temp = row[i]; - row[i] = row[c]; - row[c] = temp; - } - } - // complement pssm (if defined) - if (typeof this.pssm !== "undefined") { - //complement - for (x = 0; x < this.motif_length; x++) { - row = this.pssm[x]; - for (i = 0; i < row.length; i++) { - c = alphabet.get_complement(i); - if (c < i) continue; - temp = row[i]; - row[i] = row[c]; - row[c] = temp; - } - } - } - return this; //allow function chaining... -}; - -Pspm.prototype.get_stack = function(position, alphabet, ssc) { - "use strict"; - var row, stack_ic, alphabet_ic, stack, i, sym; - if (this.alph_length != alphabet.get_size_core()) { - throw new Error("The alphabet size does not match the size of the pspm."); - } - row = this.pspm[position]; - stack_ic = this.get_stack_ic(position, alphabet); - if (ssc) stack_ic -= this.get_error(alphabet); - alphabet_ic = alphabet.get_ic(); - stack = []; - for (i = 0; i < this.alph_length; i++) { - sym = new Symbol(i, row[i]*stack_ic/alphabet_ic, alphabet); - if (sym.get_scale() <= 0) { - continue; - } - stack.push(sym); - } - stack.sort(compare_symbol); - return stack; -}; - -Pspm.prototype.get_stack_ic = function(position, alphabet) { - "use strict"; - var row, H, i; - if (this.alph_length != alphabet.get_size_core()) { - throw new Error("The alphabet size does not match the size fo the pspm."); - } - row = this.pspm[position]; - H = 0; - for (i = 0; i < this.alph_length; i++) { - if (row[i] === 0) { - continue; - } - H -= (row[i] * (Math.log(row[i]) / Math.LN2)); - } - return alphabet.get_ic() - H; -}; - -Pspm.prototype.get_error = function(alphabet) { - "use strict"; - if (this.nsites === 0) { - return 0; - } - return (alphabet.get_size_core()-1) / (2 * Math.LN2 * this.nsites); -}; - -Pspm.prototype.get_motif_length = function() { - "use strict"; - return this.motif_length; -}; - -Pspm.prototype.get_alph_length = function() { - "use strict"; - return this.alph_length; -}; - -Pspm.prototype.get_left_trim = function() { - "use strict"; - return this.ltrim; -}; - -Pspm.prototype.get_right_trim = function() { - "use strict"; - return this.rtrim; -}; - -Pspm.prototype.as_best_match = function(alphabet) { - "use strict"; - var match, odds, best_odds, best_index; - var i, j; - match = ""; - for (i = 0; i < this.motif_length; i++) { - best_index = 0; - best_odds = this.pspm[i][0] / alphabet.get_bg_freq(0); - for (j = 1; j < this.alph_length; j++) { - odds = this.pspm[i][j] / alphabet.get_bg_freq(j); - if (odds > best_odds) { - best_odds = odds; - best_index = j; - } - } - match += alphabet.get_symbol(best_index); - } - return match; -}; - -Pspm.prototype.as_count_matrix = function() { - "use strict"; - var count, count_text, text; - var i, j; - text = ""; - for (i = 0; i < this.motif_length; i++) { - if (i !== 0) { - text += "\n"; - } - for (j = 0; j < this.alph_length; j++) { - if (j !== 0) { - text += " "; - } - count = Math.round(this.nsites * this.pspm[i][j]); - count_text = "" + count; - // pad up to length of 4 - if (count_text.length < 4) { - text += (new Array(5 - count_text.length)).join(" ") + count_text; - } else { - text += count_text; - } - } - } - return text; -}; - -Pspm.prototype.as_probability_matrix = function() { - "use strict"; - var text; - var i, j; - text = ""; - for (i = 0; i < this.motif_length; i++) { - if (i !== 0) { - text += "\n"; - } - for (j = 0; j < this.alph_length; j++) { - if (j !== 0) { - text += " "; - } - text += this.pspm[i][j].toFixed(6); - } - } - return text; -}; - -Pspm.prototype.as_score_matrix = function(alphabet, pseudo) { - "use strict"; - var me, score, out, row, col, score_text; - me = this; - if (typeof this.pssm === "undefined") { - if (!(typeof alphabet === "object" && alphabet != null && alphabet instanceof Alphabet)) { - throw new Error("The alphabet is required to generate the pssm."); - } - if (typeof pseudo === "undefined") { - pseudo = 0.01; - } else if (typeof pseudo !== "number" || pseudo < 0) { - throw new Error("Expected positive number for pseudocount"); - } - score = function(row, col) { - "use strict"; - var p, bg, p2; - p = me.pspm[row][col]; - bg = alphabet.get_bg_freq(col); - p2 = (p * me.nsites + bg * pseudo) / (me.nsites + pseudo); - return (p2 > 0 ? Math.round((Math.log(p2 / bg) / Math.LN2) * 100) : -10000); - }; - } else { - score = function(row, col) { - "use strict"; - return me.pssm[row][col]; - }; - } - out = ""; - for (row = 0; row < this.motif_length; row++) { - for (col = 0; col < this.alph_length; col++) { - if (col !== 0) { - out += " "; - } - score_text = "" + score(row, col); - // pad out to 6 characters - if (score_text.length < 6) { - out += (new Array(7 - score_text.length)).join(" ") + score_text; - } else { - out += score_text; - } - } - out += "\n"; - } - return out; -} - -Pspm.prototype.as_pspm = function() { - "use strict"; - return "letter-probability matrix: alength= " + this.alph_length + - " w= " + this.motif_length + " nsites= " + this.nsites + - " E= " + (typeof this.evalue === "number" ? - this.evalue.toExponential() : this.evalue) + "\n" + - this.as_probability_matrix(); -}; - -Pspm.prototype.as_pssm = function(alphabet, pseudo) { - "use strict"; - return "log-odds matrix: alength= " + this.alph_length + - " w= " + this.motif_length + - " E= " + (typeof this.evalue == "number" ? - this.evalue.toExponential() : this.evalue) + "\n" + - this.as_score_matrix(alphabet, pseudo); -}; - -Pspm.prototype.as_meme = function(options) { - var with_header, with_pspm, with_pssm, version, alphabet, bg_source, pseudocount, strands; - var out, alen, i; - // get the options - if (typeof options !== "object" || options === null) { - options = {}; - } - with_header = (typeof options["with_header"] === "boolean" ? options["with_header"] : false); - with_pspm = (typeof options["with_pspm"] === "boolean" ? options["with_pspm"] : false); - with_pssm = (typeof options["with_pssm"] === "boolean" ? options["with_pssm"] : false); - if (!with_pspm && !with_pssm) with_pspm = true; - if (with_header) { - if (typeof options["version"] === "string" && /^\d+(?:\.\d+){0,2}$/.test(options["version"])) { - version = options["version"]; - } else if (typeof options["version"] === "number") { - version = options["version"].toFixed(0); - } else { - version = "4"; - } - if (typeof options["strands"] === "number" && options["strands"] === 1) { - strands = 1; - } else { - strands = 2; - } - if (typeof options["bg_source"] === "string") { - bg_source = options["bg_source"]; - } else { - bg_source = "unknown source"; - } - if (typeof options["alphabet"] === "object" && options["alphabet"] != null - && options["alphabet"] instanceof Alphabet) { - alphabet = options["alphabet"]; - } else { - throw new Error("The alphabet is required to generate the header."); - } - } - // now create the output - out = ""; - if (with_header) { - out = "MEME version " + version + "\n\n"; - out += alphabet.as_meme() + "\n"; - if (alphabet.has_complement()) { // assume DNA has both strands unless otherwise specified - out += "strands: " + (strands === 1 ? "+" : "+ -") + "\n\n"; - } - out += "Background letter frequencies (from " + bg_source + "):\n"; - alen = alphabet.get_size_core(); - for (i = 0; i < alen; i++) { - if (i !== 0) { - if (i % 9 === 0) { // maximum of nine entries per line - out += "\n"; - } else { - out += " "; - } - } - out += alphabet.get_symbol(i) + " " + alphabet.get_bg_freq(i).toFixed(3); - } - } - out += "\n\n"; - out += "MOTIF " + this.name + (this.alt == null ? "" : " " + this.alt); - if (with_pssm) { - out += "\n\n"; - out += this.as_pssm(options["alphabet"], options["pseudocount"]); - } - if (with_pspm) { - out += "\n\n"; - out += this.as_pspm(); - } - return out; -} - -Pspm.prototype.toString = function() { - "use strict"; - var str, i, row; - str = ""; - for (i = 0; i < this.pspm.length; i++) { - row = this.pspm[i]; - str += row.join("\t") + "\n"; - } - return str; -}; - -function parse_pspm_properties(str) { - "use strict"; - var parts, i, eqpos, before, after, properties, prop, num, num_re; - num_re = /^((?:[+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?)|inf)$/; - parts = trim(str).split(/\s+/); - // split up words containing = - for (i = 0; i < parts.length;) { - eqpos = parts[i].indexOf("="); - if (eqpos != -1) { - before = parts[i].substr(0, eqpos); - after = parts[i].substr(eqpos+1); - if (before.length > 0 && after.length > 0) { - parts.splice(i, 1, before, "=", after); - i += 3; - } else if (before.length > 0) { - parts.splice(i, 1, before, "="); - i += 2; - } else if (after.length > 0) { - parts.splice(i, 1, "=", after); - i += 2; - } else { - parts.splice(i, 1, "="); - i++; - } - } else { - i++; - } - } - properties = {}; - for (i = 0; i < parts.length; i += 3) { - if (parts.length - i < 3) { - throw new Error("Expected PSPM property was incomplete. "+ - "Remaing parts are: " + parts.slice(i).join(" ")); - } - if (parts[i+1] !== "=") { - throw new Error("Expected '=' in PSPM property between key and " + - "value but got " + parts[i+1]); - } - prop = parts[i].toLowerCase(); - num = parts[i+2]; - if (!num_re.test(num)) { - throw new Error("Expected numeric value for PSPM property '" + - prop + "' but got '" + num + "'"); - } - properties[prop] = num; - } - return properties; -} - -function parse_pspm_string(pspm_string) { - "use strict"; - var header_re, lines, first_line, line_num, col_num, alph_length, - motif_length, nsites, evalue, pspm, i, line, match, props, parts, - j, prob; - header_re = /^letter-probability\s+matrix:(.*)$/i; - lines = pspm_string.split(/\n/); - first_line = true; - line_num = 0; - col_num = 0; - alph_length; - motif_length; - nsites; - evalue; - pspm = []; - for (i = 0; i < lines.length; i++) { - line = trim(lines[i]); - if (line.length === 0) { - continue; - } - // check the first line for a header though allow matrices without it - if (first_line) { - first_line = false; - match = header_re.exec(line); - if (match !== null) { - props = parse_pspm_properties(match[1]); - if (props.hasOwnProperty("alength")) { - alph_length = parseFloat(props["alength"]); - if (alph_length != 4 && alph_length != 20) { - throw new Error("PSPM property alength should be 4 or 20" + - " but got " + alph_length); - } - } - if (props.hasOwnProperty("w")) { - motif_length = parseFloat(props["w"]); - if (motif_length % 1 !== 0 || motif_length < 1) { - throw new Error("PSPM property w should be an integer larger " + - "than zero but got " + motif_length); - } - } - if (props.hasOwnProperty("nsites")) { - nsites = parseFloat(props["nsites"]); - if (nsites <= 0) { - throw new Error("PSPM property nsites should be larger than " + - "zero but got " + nsites); - } - } - if (props.hasOwnProperty("e")) { - evalue = props["e"]; - if (evalue < 0) { - throw new Error("PSPM property evalue should be " + - "non-negative but got " + evalue); - } - } - continue; - } - } - pspm[line_num] = []; - col_num = 0; - parts = line.split(/\s+/); - for (j = 0; j < parts.length; j++) { - prob = parseFloat(parts[j]); - if (prob != parts[j] || prob < 0 || prob > 1) { - throw new Error("Expected probability but got '" + parts[j] + "'"); - } - pspm[line_num][col_num] = prob; - col_num++; - } - line_num++; - } - if (typeof motif_length === "number") { - if (pspm.length != motif_length) { - throw new Error("Expected PSPM to have a motif length of " + - motif_length + " but it was actually " + pspm.length); - } - } else { - motif_length = pspm.length; - } - if (typeof alph_length !== "number") { - alph_length = pspm[0].length; - if (alph_length != 4 && alph_length != 20) { - throw new Error("Expected length of first row in the PSPM to be " + - "either 4 or 20 but got " + alph_length); - } - } - for (i = 0; i < pspm.length; i++) { - if (pspm[i].length != alph_length) { - throw new Error("Expected PSPM row " + i + " to have a length of " + - alph_length + " but the length was " + pspm[i].length); - } - } - return {"pspm": pspm, "motif_length": motif_length, - "alph_length": alph_length, "nsites": nsites, "evalue": evalue}; -} -//====================================================================== -// end Pspm object -//====================================================================== - -//====================================================================== -// start Logo object -//====================================================================== - -var Logo = function(alphabet, options) { - "use strict"; - this.alphabet = alphabet; - this.fine_text = ""; - this.x_axis = 1; - this.y_axis = true; - this.xlate_nsyms = 1; - this.xlate_start = null; - this.xlate_end = null; - this.pspm_list = []; - this.pspm_column = []; - this.rows = 0; - this.columns = 0; - if (typeof options === "string") { - // the old method signature had fine_text here so we support that - this.fine_text = options; - } else if (typeof options === "object" && options != null) { - this.fine_text = (typeof options.fine_text === "string" ? options.fine_text : ""); - this.x_axis = (typeof options.x_axis === "boolean" ? (options.x_axis ? 1 : 0) : 1); - if (options.x_axis_hidden != null && options.x_axis_hidden) this.x_axis = -1; - this.y_axis = (typeof options.y_axis === "boolean" ? options.y_axis : true); - this.xlate_nsyms = (typeof options.xlate_nsyms === "number" ? options.xlate_nsyms : this.xlate_nsyms); - this.xlate_start = (typeof options.xlate_start === "number" ? options.xlate_start : this.xlate_start); - this.xlate_end = (typeof options.xlate_end === "number" ? options.xlate_end : this.xlate_end); - } -}; - -Logo.prototype.add_pspm = function(pspm, column) { - "use strict"; - var col; - if (typeof column === "undefined") { - column = 0; - } else if (column < 0) { - throw new Error("Column index out of bounds."); - } - this.pspm_list[this.rows] = pspm; - this.pspm_column[this.rows] = column; - this.rows++; - col = column + pspm.get_motif_length(); - if (col > this.columns) { - this.columns = col; - } -}; - -Logo.prototype.get_columns = function() { - "use strict"; - return this.columns; -}; - -Logo.prototype.get_xlate_nsyms = function() { - "use strict"; - return this.xlate_nsyms; -}; - -Logo.prototype.get_xlate_start = function() { - "use strict"; - return (this.xlate_start != null ? this.xlate_start : 0); -}; - -Logo.prototype.get_xlate_end = function() { - "use strict"; - return (this.xlate_end != null ? this.xlate_end : this.columns * this.xlate_nsyms); -}; - -Logo.prototype.get_xlate_columns = function() { - "use strict"; - return this.get_xlate_end() - this.get_xlate_start(); -}; - -Logo.prototype.get_rows = function() { - "use strict"; - return this.rows; -}; - -Logo.prototype.get_pspm = function(row_index) { - "use strict"; - if (row_index < 0 || row_index >= this.rows) { - throw new Error("INDEX_OUT_OF_BOUNDS"); - } - return this.pspm_list[row_index]; -}; - -Logo.prototype.get_offset = function(row_index) { - "use strict"; - if (row_index < 0 || row_index >= this.rows) { - throw new Error("INDEX_OUT_OF_BOUNDS"); - } - return this.pspm_column[row_index]; -}; - -Logo.prototype._as_eps_data = function(ssc, errbars) { - var i, j, pos, stack_pos, pspm, stack, sym, out; - out = ""; - for (i = 0; i < this.rows; i++) { - out += "\nStartLine\n"; - // Indent - for (j = 0; j < this.pspm_column[i]; j++) { - out += "() startstack\nendstack\n\n"; - } - pspm = this.pspm_list[i]; - if (pspm.get_left_trim() > 0) { - out += "MuteColour\nDrawTrimEdge\n" + pspm.get_left_trim() + " DrawTrimBg\n"; - } - for (pos = 0; pos < pspm.get_motif_length(); pos++) { - if (pos != 0 && pos == pspm.get_left_trim()) { // enable full colour - out += "DrawTrimEdge\nRestoreColour\n"; - } else if (pos == (pspm.get_motif_length() - pspm.get_right_trim())) { - out += "MuteColour\n" + pspm.get_right_trim() + " DrawTrimBg\n"; - } - out += "(" + (pos + 1) + ") startstack\n"; - stack = pspm.get_stack(pos, this.alphabet, ssc); - for (stack_pos = 0; stack_pos < stack.length; stack_pos++) { - sym = stack[stack_pos]; - out += " " + (sym.get_scale() * this.alphabet.get_ic()) + " (" + sym.get_symbol() + ") numchar\n"; - } - if (errbars) { - out += " " + pspm.get_error(this.alphabet) + " Ibeam\n"; - } - out += "endstack\n\n"; - } - if (pspm.get_right_trim() > 0 || pspm.get_left_trim() == pspm.get_motif_length()) { - out += "RestoreColour\n"; - } - out += "EndLine\n"; - } - return out; -}; - -Logo.prototype.as_eps = function(options) { - "use strict"; - if (this.xlate_nsyms != 1) throw new Error("Unsupported setting xlate_nsyms for EPS"); - if (this.xlate_start != null) throw new Error("Unsupported setting xlate_start for EPS"); - if (this.xlate_end != null) throw new Error("Unsupported setting xlate_end for EPS"); - - var LOGOHEIGHT = 7.5; // default height of line in cm - var cm2pts, height, width, now, ssc, errbars; - if (typeof options === "undefined") { - options = {}; - } - cm2pts = 72 / 2.54; - if (typeof options.logo_height == "number") { - height = options.logo_height; - } else { - height = LOGOHEIGHT * this.rows; - } - if (typeof options.logo_width == "number") { - width = options.logo_width; - } else { - width = this.columns + 2; - } - now = new Date(); - ssc = (typeof options.ssc == "boolean" ? options.ssc : false); - errbars = (typeof options.show_error_bar == "boolean" ? options.show_error_bar : ssc); - var values = { - "LOGOHEIGHT": height, - "LOGOWIDTH": width, - "BOUNDINGHEIGHT": Math.round(height * cm2pts), - "BOUNDINGWIDTH": Math.round(width * cm2pts), - "LOGOLINEHEIGHT": (height / this.rows), - "CHARSPERLINE": this.columns, - "BARBITS": this.alphabet.get_ic(), - "LOGOTYPE": (this.alphabet.has_complement() ? "NA" : "AA"), - "CREATIONDATE": now.getDate() + "." + (now.getMonth() + 1) + "." + now.getFullYear() + " " + now.getHours() + ":" + now.getMinutes() + ":" + now.getSeconds(), - "ERRORBARFRACTION": (typeof options.error_bar_fraction == "number" ? options.error_bar_fraction : 1.0), - "TICBITS": (typeof options.ticbits == "number" ? options.ticbits : 1.0), - "TITLE": (typeof options.title == "string" ? options.title : ""), - "FINEPRINT": (typeof options.fineprint == "string" ? options.fineprint : this.fine_text), - "XAXISLABEL": (typeof options.xaxislabel == "string" ? options.xaxislabel : ""), - "YAXISLABEL": (typeof options.yaxislabel == "string" ? options.yaxislabel : "bits"), - "SSC": ssc, - "YAXIS": (typeof options.show_y_axis == "boolean" ? options.show_y_axis : this.y_axis), - "SHOWENDS": (typeof options.show_ends == "boolean" ? options.show_ends : false), - "ERRBAR": errbars, - "OUTLINE": (typeof options.show_outline == "boolean" ? options.show_outline : false), - "NUMBERING": (typeof options.show_numbering == "boolean" ? options.show_numbering : this.x_axis != 0), - "SHOWINGBOX": (typeof options.show_box == "boolean" ? options.show_box : false), - "CREATOR": (typeof options.creator == "string" ? options.creator : "motif_logo.js"), - "FONTSIZE": (typeof options.label_font_size == "number" ? options.label_font_size : 12), - "TITLEFONTSIZE": (typeof options.title_font_size == "number" ? options.title_font_size : 12), - "SMALLFONTSIZE": (typeof options.small_font_size == "number" ? options.small_font_size : 6), - "TOPMARGIN" : (typeof options.top_margin == "number" ? options.top_margin : 0.9), - "BOTTOMMARGIN": (typeof options.bottom_margin == "number" ? options.bottom_margin : 0.9), - "COLORDICT": this.alphabet._as_eps_dict(), - "DATA": this._as_eps_data(ssc, errbars) - }; - // now this requires that the script containing the template has been imported! - return motif_logo_template(values); -}; - -//====================================================================== -// end Logo object -//====================================================================== - -// calculate the exact size (in pixels) of an object drawn on the -// canvas assuming that the background of the canvas is transparent. -function canvas_bounds(ctx, cwidth, cheight) { - "use strict"; - var data, r, c, top_line, bottom_line, left_line, right_line, - txt_width, txt_height; - - // extract the image data - data = ctx.getImageData(0, 0, cwidth, cheight).data; - - // set initial values - top_line = -1; bottom_line = -1; left_line = -1; right_line = -1; - txt_width = 0; txt_height = 0; - - // Find the top-most line with a non-transparent pixel - for (r = 0; r < cheight; r++) { - for (c = 0; c < cwidth; c++) { - if (data[r * cwidth * 4 + c * 4 + 3]) { - top_line = r; - break; - } - } - if (top_line != -1) { - break; - } - } - - // Only bother looking if we found at least one set pixel... - if (top_line != -1) { - - //find the last line with a non-transparent pixel - for (r = cheight-1; r >= top_line; r--) { - for(c = 0; c < cwidth; c++) { - if(data[r * cwidth * 4 + c * 4 + 3]) { - bottom_line = r; - break; - } - } - if (bottom_line != -1) { - break; - } - } - // calculate height - txt_height = bottom_line - top_line + 1; - - // Find the left-most line with a non-transparent pixel - for (c = 0; c < cwidth; c++) { - for (r = top_line; r <= bottom_line; r++) { - if (data[r * cwidth * 4 + c * 4 + 3]) { - left_line = c; - break; - } - } - if (left_line != -1) { - break; - } - } - - //find the right most line with a non-transparent pixel - for (c = cwidth-1; c >= left_line; c--) { - for(r = top_line; r <= bottom_line; r++) { - if(data[r * cwidth * 4 + c * 4 + 3]) { - right_line = c; - break; - } - } - if (right_line != -1) { - break; - } - } - txt_width = right_line - left_line + 1; - } - - //return the bounds - return {bound_top: top_line, bound_bottom: bottom_line, - bound_left: left_line, bound_right: right_line, width: txt_width, - height: txt_height}; -} - -//====================================================================== -// start RasterizedAlphabet -//====================================================================== - -// Rasterize Alphabet -// 1) Measure width of text at default font for all symbols in alphabet -// 2) sort in width ascending -// 3) Drop the top and bottom 10% (designed to ignore outliers like 'W' and 'I') -// 4) Calculate the average as the maximum scaling factor (designed to stop I becoming a rectangular blob). -// 5) Assume scale of zero would result in width of zero, interpolate scale required to make perfect width font -// 6) Draw text onto temp canvas at calculated scale -// 7) Find bounds of drawn text -// 8) Paint on to another canvas at the desired height (but only scaling width to fit if larger). -var RasterizedAlphabet = function(alphabet, logo_scale, font, width) { - "use strict"; - var default_size, safety_pad, canvas, ctx, middle, baseline, widths, sizes, - i, sym, size, tenpercent, avg_width, scale, - target_width, target_height; - //variable prototypes - this.alphabet = alphabet; - this.scale = logo_scale; - this.sym_cache = {}; - this.stack_num_cache = []; - this.scale_num_cache = []; - // size of canvas - default_size = 60; // size of measuring canvas - safety_pad = 20; // pixels to pad around so we don't miss the edges - // create a canvas to do our measuring - canvas = document.createElement("canvas"); - if (!canvas.getContext) throw new Error("No canvas support"); - canvas.width = default_size + 2 * safety_pad; - canvas.height = default_size + 2 * safety_pad; - middle = Math.round(canvas.width / 2); - baseline = Math.round(canvas.height - safety_pad); - ctx = canvas.getContext('2d'); - if (!supports_text(ctx)) throw new Error("Canvas does not support text"); - ctx.font = font; - ctx.textAlign = "center"; - ctx.translate(middle, baseline); - // list of widths - widths = []; - sizes = []; - //now measure each letter in the alphabet - for (i = 0; i < alphabet.get_size_core(); ++i) { - // reset the canvas - ctx.clearRect(0, 0, canvas.width, canvas.height); - ctx.fillStyle = alphabet.get_colour(i); - // draw the test text - ctx.fillText(alphabet.get_symbol(i), 0, 0); - //measure - size = canvas_bounds(ctx, canvas.width, canvas.height); - if (size.width === 0) throw new Error("Invisible symbol!"); - widths.push(size.width); - sizes[i] = size; - } - //sort the widths - widths.sort(function(a,b) {return a - b;}); - //drop 10% of the items off each end - tenpercent = Math.floor(widths.length / 10); - for (i = 0; i < tenpercent; ++i) { - widths.pop(); - widths.shift(); - } - //calculate average width - avg_width = 0; - for (i = 0; i < widths.length; ++i) { - avg_width += widths[i]; - } - avg_width /= widths.length; - // calculate the target width - target_width = width * this.scale * 2; - // calculate scales - for (i = 0; i < alphabet.get_size_core(); ++i) { - sym = alphabet.get_symbol(i); - size = sizes[i]; - // calculate scale - scale = target_width / Math.max(avg_width, size.width); - // estimate scaled height - target_height = size.height * scale; - // create an appropriately sized canvas - canvas = document.createElement("canvas"); - canvas.width = target_width; - canvas.height = target_height + safety_pad * 2; - // calculate the middle - middle = Math.round(canvas.width / 2); - // calculate the baseline - baseline = Math.round(canvas.height - safety_pad); - // get the context and prepare to draw the rasterized text - ctx = canvas.getContext('2d'); - ctx.font = font; - ctx.fillStyle = alphabet.get_colour(i); - ctx.textAlign = "center"; - ctx.translate(middle, baseline); - ctx.save(); - ctx.scale(scale, scale); - // draw the text - ctx.fillText(sym, 0, 0); - ctx.restore(); - this.sym_cache[sym] = {"image": canvas, "size": canvas_bounds(ctx, canvas.width, canvas.height)}; - } -}; - -RasterizedAlphabet.prototype.get_alphabet = function() { - return this.alphabet; -}; - -RasterizedAlphabet.prototype.get_scale = function() { - return this.scale; -}; - -RasterizedAlphabet.prototype.draw_stack_sym = function(ctx, letter, dx, dy, dWidth, dHeight) { - "use strict"; - var entry, image, size; - entry = this.sym_cache[letter]; - image = entry.image; - size = entry.size; - ctx.drawImage(image, 0, size.bound_top -1, image.width, size.height+1, dx, dy, dWidth, dHeight); -}; - -RasterizedAlphabet.prototype.draw_stack_num = function(ctx, font, stack_width, index) { - var image, image_ctx, text_length; - if (index >= this.stack_num_cache.length) { - image = document.createElement("canvas"); - // measure the text - image_ctx = image.getContext('2d'); - image_ctx.save(); - image_ctx.font = font; - text_length = image_ctx.measureText("" + (index + 1)).width; - image_ctx.restore(); - // resize the canvas to fit - image.width = Math.ceil(stack_width); - image.height = Math.ceil(text_length); - // draw the text - image_ctx = image.getContext('2d'); - image_ctx.translate(Math.round(stack_width / 2), 0); - image_ctx.font = font; - image_ctx.textBaseline = "middle"; - image_ctx.textAlign = "right"; - image_ctx.rotate(-(Math.PI / 2)); - image_ctx.fillText("" + (index + 1), 0, 0); - this.stack_num_cache[index] = image; - } else { - image = this.stack_num_cache[index]; - } - ctx.drawImage(image, 0, 0); -} - -RasterizedAlphabet.prototype.draw_scale_num = function(ctx, font, num) { - var image, image_ctx, text_size, m_length; - if (num >= this.scale_num_cache.length) { - image = document.createElement("canvas"); - // measure the text - image_ctx = image.getContext('2d'); - image_ctx.font = font; - text_size = image_ctx.measureText("" + num); - if (text_size.actualBoundingBoxAscent && text_size.actualBoundingBoxDesent) { - // resize the canvas to fit - image.width = Math.ceil(text_size.width); - image.height = Math.ceil(text_size.actualBoundingBoxAscent + text_size.actualBoundingBoxDesent); - // draw the text - image_ctx = image.getContext('2d'); - image_ctx.font = font; - image_ctx.textAlign = "right"; - image_ctx.fillText("" + num, image.width, text_size.actualBoundingBoxAscent); - } else { - // measure width of 'm' to approximate height, we double it later anyway - m_length = image_ctx.measureText("m").width; - // resize the canvas to fit - image.width = Math.ceil(text_size.width); - image.height = Math.ceil(2 * m_length); - // draw the text - image_ctx = image.getContext('2d'); - image_ctx.font = font; - image_ctx.textAlign = "right"; - image_ctx.textBaseline = "middle"; - image_ctx.fillText("" + num, image.width, m_length); - } - this.scale_num_cache[num] = image; - } else { - image = this.scale_num_cache[num]; - } - ctx.drawImage(image, -image.width, -Math.round(image.height / 2)) -} - -//====================================================================== -// end RasterizedAlphabet -//====================================================================== - -//====================================================================== -// start LogoMetrics object -//====================================================================== - -var LogoMetrics = function(ctx, logo_columns, logo_rows, has_names, has_finetext, x_axis, y_axis) { - "use strict"; - var i, row_height; - //variable prototypes - this.pad_top = (has_names ? 5 : 0); - this.pad_left = (y_axis ? 10 : 0); - this.pad_right = (has_finetext ? 15 : 0); - this.pad_bottom = 0; - this.pad_middle = 20; - this.name_height = 14; - this.name_font = "bold " + this.name_height + "px Times, sans-serif"; - this.name_spacer = 0; - this.y_axis = y_axis; - this.y_label = "bits"; - this.y_label_height = 12; - this.y_label_font = "bold " + this.y_label_height + "px Helvetica, sans-serif"; - this.y_label_spacer = 3; - this.y_num_height = 12; - this.y_num_width = 0; - this.y_num_font = "bold " + this.y_num_height + "px Helvetica, sans-serif"; - this.y_tic_width = 5; - this.stack_pad_left = 0; - this.stack_font = "bold 25px Helvetica, sans-serif"; - this.stack_height = 90; - this.stack_width = 26; - this.stacks_pad_right = 5; - this.x_axis = x_axis; - this.x_num_above = 2; - this.x_num_height = 12; - this.x_num_width = 0; - this.x_num_font = "bold " + this.x_num_height + "px Helvetica, sans-serif"; - this.fine_txt_height = 6; - this.fine_txt_above = 2; - this.fine_txt_font = "normal " + this.fine_txt_height + "px Helvetica, sans-serif"; - this.letter_metrics = new Array(); - this.summed_width = 0; - this.summed_height = 0; - //calculate the width of the y axis numbers - ctx.font = this.y_num_font; - for (i = 0; i <= 2; i++) { - this.y_num_width = Math.max(this.y_num_width, ctx.measureText("" + i).width); - } - //calculate the width of the x axis numbers (but they are rotated so it becomes height) - if (x_axis == 1) { - ctx.font = this.x_num_font; - for (i = 1; i <= logo_columns; i++) { - this.x_num_width = Math.max(this.x_num_width, ctx.measureText("" + i).width); - } - } else if (x_axis == 0) { - this.x_num_height = 4; - this.x_num_width = 4; - } else { - this.x_num_height = 0; - this.x_num_width = 0; - } - - //calculate how much vertical space we want to draw this - //first we add the padding at the top and bottom since that's always there - this.summed_height += this.pad_top + this.pad_bottom; - //all except the last row have the same amount of space allocated to them - if (logo_rows > 1) { - row_height = this.stack_height + this.pad_middle; - if (has_names) { - row_height += this.name_height; - //the label is allowed to overlap into the spacer - row_height += Math.max(this.y_num_height/2, this.name_spacer); - //the label is allowed to overlap the space used by the other label - row_height += Math.max(this.y_num_height/2, this.x_num_height + this.x_num_above); - } else { - row_height += this.y_num_height/2; - //the label is allowed to overlap the space used by the other label - row_height += Math.max(this.y_num_height/2, this.x_num_height + this.x_num_above); - } - this.summed_height += row_height * (logo_rows - 1); - } - //the last row has the name and fine text below it but no padding - this.summed_height += this.stack_height + (this.y_axis ? this.y_num_height/2 : 0); - - var fine_txt_total = (has_finetext ? this.fine_txt_height + this.fine_txt_above : 0); - if (has_names) { - this.summed_height += fine_txt_total + this.name_height; - this.summed_height += Math.max((this.y_axis ? this.y_num_height/2 : 0), - this.x_num_height + this.x_num_above + this.name_spacer); - } else { - this.summed_height += Math.max((this.y_axis ? this.y_num_height/2 : 0), - this.x_num_height + this.x_num_above + fine_txt_total); - } - - //calculate how much horizontal space we want to draw this - //first add the padding at the left and right since that's always there - this.summed_width += this.pad_left + this.pad_right; - if (this.y_axis) { - //add on the space for the y-axis label - this.summed_width += this.y_label_height + this.y_label_spacer; - //add on the space for the y-axis - this.summed_width += this.y_num_width + this.y_tic_width; - } - //add on the space for the stacks - this.summed_width += (this.stack_pad_left + this.stack_width) * logo_columns; - //add on the padding after the stacks (an offset from the fine text) - this.summed_width += this.stacks_pad_right; - -}; - -//====================================================================== -// end LogoMetrics object -//====================================================================== - -//found this trick at http://talideon.com/weblog/2005/02/detecting-broken-images-js.cfm -function image_ok(img) { - "use strict"; - // During the onload event, IE correctly identifies any images that - // weren't downloaded as not complete. Others should too. Gecko-based - // browsers act like NS4 in that they report this incorrectly. - if (!img.complete) { - return false; - } - // However, they do have two very useful properties: naturalWidth and - // naturalHeight. These give the true size of the image. If it failed - // to load, either of these should be zero. - if (typeof img.naturalWidth !== "undefined" && img.naturalWidth === 0) { - return false; - } - // No other way of checking: assume it's ok. - return true; -} - -function supports_text(ctx) { - "use strict"; - if (!ctx.fillText) { - return false; - } - if (!ctx.measureText) { - return false; - } - return true; -} - -//draws the scale, returns the width -function draw_scale(ctx, metrics, alphabet_ic, raster) { - "use strict"; - var tic_height, i; - tic_height = metrics.stack_height / alphabet_ic; - ctx.save(); - ctx.translate(metrics.y_label_height, metrics.y_num_height/2); - //draw the axis label - ctx.save(); - ctx.font = metrics.y_label_font; - ctx.translate(0, metrics.stack_height/2); - ctx.rotate(-(Math.PI / 2)); - ctx.textAlign = "center"; - ctx.fillText("bits", 0, 0); - ctx.restore(); - - ctx.translate(metrics.y_label_spacer + metrics.y_num_width, 0); - - //draw the axis tics - ctx.save(); - ctx.translate(0, metrics.stack_height); - for (i = 0; i <= alphabet_ic; i++) { - //draw the number - ctx.save(); - ctx.translate(-1, 0); - raster.draw_scale_num(ctx, metrics.y_num_font, i); - ctx.restore(); - //draw the tic - ctx.fillRect(0, -1, metrics.y_tic_width, 2); - //prepare for next tic - ctx.translate(0, -tic_height); - } - ctx.restore(); - - ctx.fillRect(metrics.y_tic_width - 2, 0, 2, metrics.stack_height) - - ctx.restore(); -} - -function draw_stack_num(ctx, metrics, row_index, raster) { - "use strict"; - ctx.save(); - ctx.translate(0, Math.round(metrics.stack_height + metrics.x_num_above)); - if (metrics.x_axis == 1) { - raster.draw_stack_num(ctx, metrics.x_num_font, metrics.stack_width, row_index); - } else if (metrics.x_axis == 0) { - // draw dots instead of the numbers (good for small logos) - ctx.beginPath(); - var radius = Math.round(metrics.x_num_height / 2); - ctx.arc(Math.round(metrics.stack_width / 2), radius, radius, 0, 2 * Math.PI, false); - ctx.fill(); - } - ctx.restore(); -} - -function draw_stack(ctx, metrics, symbols, raster) { - "use strict"; - var preferred_pad, sym_min, i, sym, sym_height, pad; - preferred_pad = 0; - sym_min = 5; - - ctx.save();//1 - ctx.translate(0, metrics.stack_height); - for (i = 0; i < symbols.length; i++) { - sym = symbols[i]; - sym_height = metrics.stack_height * sym.get_scale(); - - pad = preferred_pad; - if (sym_height - pad < sym_min) { - pad = Math.min(pad, Math.max(0, sym_height - sym_min)); - } - sym_height -= pad; - - //translate to the correct position - ctx.translate(0, -(pad/2 + sym_height)); - - //draw - raster.draw_stack_sym(ctx, sym.get_symbol(), 0, 0, metrics.stack_width, sym_height); - //translate past the padding - ctx.translate(0, -(pad/2)); - } - ctx.restore();//1 -} - -function draw_dashed_line(ctx, pattern, start, x1, y1, x2, y2) { - "use strict"; - var x, y, len, i, dx, dy, tlen, theta, mulx, muly, lx, ly; - dx = x2 - x1; - dy = y2 - y1; - tlen = Math.pow(dx*dx + dy*dy, 0.5); - theta = Math.atan2(dy,dx); - mulx = Math.cos(theta); - muly = Math.sin(theta); - lx = []; - ly = []; - for (i = 0; i < pattern; ++i) { - lx.push(pattern[i] * mulx); - ly.push(pattern[i] * muly); - } - i = start; - x = x1; - y = y1; - len = 0; - ctx.beginPath(); - while (len + pattern[i] < tlen) { - ctx.moveTo(x, y); - x += lx[i]; - y += ly[i]; - ctx.lineTo(x, y); - len += pattern[i]; - i = (i + 1) % pattern.length; - x += lx[i]; - y += ly[i]; - len += pattern[i]; - i = (i + 1) % pattern.length; - } - if (len < tlen) { - ctx.moveTo(x, y); - x += mulx * (tlen - len); - y += muly * (tlen - len); - ctx.lineTo(x, y); - } - ctx.stroke(); -} - -function draw_trim_background(ctx, metrics, left_start, left_end, left_divider, right_start, right_end, right_divider) { - "use strict"; - var left_size = left_end - left_start; - var right_size = right_end - right_start; - var line_x; - - ctx.save();//s8 - ctx.fillStyle = "rgb(240, 240, 240)"; - if (left_size > 0) { - ctx.fillRect(left_start * metrics.stack_width, 0, left_size * metrics.stack_width, metrics.stack_height); - } - if (right_size > 0) { - ctx.fillRect(right_start * metrics.stack_width, 0, right_size * metrics.stack_width, metrics.stack_height); - } - ctx.fillStyle = "rgb(51, 51, 51)"; - if (left_size > 0 && left_divider) { - line_x = (left_end * metrics.stack_width) - 0.5; - draw_dashed_line(ctx, [3], 0, line_x, 0, line_x, metrics.stack_height); - } - if (right_size > 0 && right_divider) { - line_x = (right_start * metrics.stack_width) + 0.5; - draw_dashed_line(ctx, [3], 0, line_x, 0, line_x, metrics.stack_height); - } - ctx.restore();//s8 -} - -function size_logo_on_canvas(logo, canvas, show_names, scale) { - "use strict"; - var draw_name, draw_finetext, metrics; - draw_name = (typeof show_names === "boolean" ? show_names : (logo.get_rows() > 1)); - draw_finetext = (logo.fine_text.length > 0); - if (canvas.width !== 0 && canvas.height !== 0) { - return; - } - metrics = new LogoMetrics(canvas.getContext('2d'), - logo.get_xlate_columns(), logo.get_rows(), draw_name, draw_finetext, logo.x_axis, logo.y_axis); - if (typeof scale == "number") { - //resize the canvas to fit the scaled logo - canvas.width = metrics.summed_width * scale; - canvas.height = metrics.summed_height * scale; - } else { - if (canvas.width === 0 && canvas.height === 0) { - canvas.width = metrics.summed_width; - canvas.height = metrics.summed_height; - } else if (canvas.width === 0) { - canvas.width = metrics.summed_width * (canvas.height / metrics.summed_height); - } else if (canvas.height === 0) { - canvas.height = metrics.summed_height * (canvas.width / metrics.summed_width); - } - } -} - -function draw_logo_on_canvas(logo, canvas, show_names, scale) { - "use strict"; - var i, draw_name, draw_finetext, ctx, metrics, raster, pspm_i, pspm, - offset, col_index, motif_position, ssc; - ssc = false; - draw_name = (typeof show_names === "boolean" ? show_names : (logo.get_rows() > 1)); - draw_finetext = (logo.fine_text.length > 0); - ctx = canvas.getContext('2d'); - //assume that the user wants the canvas scaled equally so calculate what the best width for this image should be - metrics = new LogoMetrics(ctx, logo.get_xlate_columns(), logo.get_rows(), draw_name, draw_finetext, logo.x_axis, logo.y_axis); - if (typeof scale == "number") { - //resize the canvas to fit the scaled logo - canvas.width = metrics.summed_width * scale; - canvas.height = metrics.summed_height * scale; - } else { - if (canvas.width === 0 && canvas.height === 0) { - scale = 1; - canvas.width = metrics.summed_width; - canvas.height = metrics.summed_height; - } else if (canvas.width === 0) { - scale = canvas.height / metrics.summed_height; - canvas.width = metrics.summed_width * scale; - } else if (canvas.height === 0) { - scale = canvas.width / metrics.summed_width; - canvas.height = metrics.summed_height * scale; - } else { - scale = Math.min(canvas.width / metrics.summed_width, canvas.height / metrics.summed_height); - } - } - // cache the raster based on the assumption that we will be drawing a lot - // of logos the same size and alphabet - if (typeof draw_logo_on_canvas.raster_cache === "undefined") { - draw_logo_on_canvas.raster_cache = []; - } - for (i = 0; i < draw_logo_on_canvas.raster_cache.length; i++) { - raster = draw_logo_on_canvas.raster_cache[i]; - if (raster.get_alphabet().equals(logo.alphabet) && - Math.abs(raster.get_scale() - scale) < 0.1) break; - raster = null; - } - if (raster == null) { - raster = new RasterizedAlphabet(logo.alphabet, scale, metrics.stack_font, metrics.stack_width); - draw_logo_on_canvas.raster_cache.push(raster); - } - ctx = canvas.getContext('2d'); - ctx.save();//s1 - ctx.scale(scale, scale); - ctx.save();//s2 - ctx.save();//s7 - //create margin - ctx.translate(Math.round(metrics.pad_left), Math.round(metrics.pad_top)); - for (pspm_i = 0; pspm_i < logo.get_rows(); ++pspm_i) { - pspm = logo.get_pspm(pspm_i); - offset = logo.get_offset(pspm_i); - //optionally draw name if this isn't the last row or is the only row - if (draw_name && (logo.get_rows() == 1 || pspm_i != (logo.get_rows()-1))) { - ctx.save();//s4 - ctx.translate(Math.round(metrics.summed_width/2), Math.round(metrics.name_height)); - ctx.font = metrics.name_font; - ctx.textAlign = "center"; - ctx.fillText(pspm.name, 0, 0); - ctx.restore();//s4 - ctx.translate(0, Math.round(metrics.name_height + - Math.min(0, metrics.name_spacer - metrics.y_num_height/2))); - } - //draw scale - if (logo.y_axis) draw_scale(ctx, metrics, logo.alphabet.get_ic(), raster); - ctx.save();//s5 - //translate across past the scale - if (logo.y_axis) { - ctx.translate(Math.round(metrics.y_label_height + metrics.y_label_spacer + - metrics.y_num_width + metrics.y_tic_width), Math.round(metrics.y_num_height / 2)); - } - //draw the trimming background - if (pspm.get_left_trim() > 0 || pspm.get_right_trim() > 0) { - var left_start = offset * logo.get_xlate_nsyms(); - var left_end = (offset + pspm.get_left_trim()) * logo.get_xlate_nsyms(); - var left_divider = true; - if (left_end < logo.get_xlate_start() || left_start > logo.get_xlate_end()) { - // no overlap - left_start = 0; - left_end = 0; - left_divider = false; - } else { - if (left_start < logo.get_xlate_start()) { - left_start = logo.get_xlate_start(); - } - if (left_end > logo.get_xlate_end()) { - left_end = logo.get_xlate_end(); - left_divider = false; - } - left_start -= logo.get_xlate_start(); - left_end -= logo.get_xlate_start(); - if (left_end < left_start) { - left_start = 0; - left_end = 0; - left_divider = false; - } - } - var right_end = (offset + pspm.get_motif_length()) * logo.get_xlate_nsyms(); - //var right_start = right_end - (pspm.get_left_trim() * logo.get_xlate_nsyms()); - var right_start = right_end - (pspm.get_right_trim() * logo.get_xlate_nsyms()); - var right_divider = true; - if (right_end < logo.get_xlate_start() || right_start > logo.get_xlate_end()) { - // no overlap - right_start = 0; - right_end = 0; - right_divider = false; - } else { - if (right_start < logo.get_xlate_start()) { - right_start = logo.get_xlate_start(); - right_divider = false; - } - if (right_end > logo.get_xlate_end()) { - right_end = logo.get_xlate_end(); - } - right_start -= logo.get_xlate_start(); - right_end -= logo.get_xlate_start(); - if (right_end < right_start) { - right_start = 0; - right_end = 0; - right_divider = false; - } - } - draw_trim_background(ctx, metrics, left_start, left_end, left_divider, right_start, right_end, right_divider); - } - //draw letters - var xlate_col; - for (xlate_col = logo.get_xlate_start(); xlate_col < logo.get_xlate_end(); xlate_col++) { - ctx.translate(metrics.stack_pad_left,0); - col_index = Math.floor(xlate_col / logo.get_xlate_nsyms()); - if (xlate_col % logo.get_xlate_nsyms() == 0) { - if (col_index >= offset && col_index < (offset + pspm.get_motif_length())) { - motif_position = col_index - offset; - draw_stack_num(ctx, metrics, motif_position, raster); - draw_stack(ctx, metrics, pspm.get_stack(motif_position, logo.alphabet, ssc), raster); - } - } else { - if (col_index >= offset && col_index < (offset + pspm.get_motif_length())) { - ctx.save();// s5.1 - ctx.translate(0, Math.round(metrics.stack_height)); - // TODO draw a dot or dash or something to indicate continuity of the motif - ctx.restore(); //s5.1 - } - } - ctx.translate(Math.round(metrics.stack_width), 0); - } - ctx.restore();//s5 - ////optionally draw name if this is the last row but isn't the only row - if (draw_name && (logo.get_rows() != 1 && pspm_i == (logo.get_rows()-1))) { - //translate vertically past the stack and axis's - ctx.translate(0, metrics.y_num_height/2 + metrics.stack_height + - Math.max(metrics.y_num_height/2, metrics.x_num_above + metrics.x_num_width + metrics.name_spacer)); - - ctx.save();//s6 - ctx.translate(metrics.summed_width/2, metrics.name_height); - ctx.font = metrics.name_font; - ctx.textAlign = "center"; - ctx.fillText(pspm.name, 0, 0); - ctx.restore();//s6 - ctx.translate(0, metrics.name_height); - } else { - //translate vertically past the stack and axis's - ctx.translate(0, metrics.y_num_height/2 + metrics.stack_height + - Math.max(metrics.y_num_height/2, metrics.x_num_above + metrics.x_num_width)); - } - //if not the last row then add middle padding - if (pspm_i != (logo.get_rows() -1)) { - ctx.translate(0, metrics.pad_middle); - } - } - ctx.restore();//s7 - if (logo.fine_text.length > 0) { - ctx.translate(metrics.summed_width - metrics.pad_right, metrics.summed_height - metrics.pad_bottom); - ctx.font = metrics.fine_txt_font; - ctx.textAlign = "right"; - ctx.fillText(logo.fine_text, 0,0); - } - ctx.restore();//s2 - ctx.restore();//s1 -} - -function create_canvas(c_width, c_height, c_id, c_title, c_display) { - "use strict"; - var canvas = document.createElement("canvas"); - //check for canvas support before attempting anything - if (!canvas.getContext) { - return null; - } - var ctx = canvas.getContext('2d'); - //check for html5 text drawing support - if (!supports_text(ctx)) { - return null; - } - //size the canvas - canvas.width = c_width; - canvas.height = c_height; - canvas.id = c_id; - canvas.title = c_title; - canvas.style.display = c_display; - return canvas; -} - -function logo_1(alphabet, fine_text, pspm) { - "use strict"; - var logo = new Logo(alphabet, fine_text); - logo.add_pspm(pspm); - return logo; -} - -function logo_2(alphabet, fine_text, target, query, query_offset) { - "use strict"; - var logo = new Logo(alphabet, fine_text); - if (query_offset < 0) { - logo.add_pspm(target, -query_offset); - logo.add_pspm(query); - } else { - logo.add_pspm(target); - logo.add_pspm(query, query_offset); - } - return logo; -} - -/* - * Specifies an alternate source for an image. - * If the image with the image_id specified has - * not loaded then a generated logo will be used - * to replace it. - * - * Note that the image must either have dimensions - * or a scale must be set. - */ -function alternate_logo(logo, image_id, scale) { - "use strict"; - var image = document.getElementById(image_id); - if (!image) { - alert("Can't find specified image id (" + image_id + ")"); - return; - } - //if the image has loaded then there is no reason to use the canvas - if (image_ok(image)) { - return; - } - //the image has failed to load so replace it with a canvas if we can. - var canvas = create_canvas(image.width, image.height, image_id, image.title, image.style.display); - if (canvas === null) { - return; - } - //draw the logo on the canvas - draw_logo_on_canvas(logo, canvas, null, scale); - //replace the image with the canvas - image.parentNode.replaceChild(canvas, image); -} - -/* - * Specifes that the element with the specified id - * should be replaced with a generated logo. - */ -function replace_logo(logo, replace_id, scale, title_txt, display_style) { - "use strict"; - var element = document.getElementById(replace_id); - if (!replace_id) { - alert("Can't find specified id (" + replace_id + ")"); - return; - } - //found the element! - var canvas = create_canvas(50, 120, replace_id, title_txt, display_style); - if (canvas === null) { - return; - } - //draw the logo on the canvas - draw_logo_on_canvas(logo, canvas, null, scale); - //replace the element with the canvas - element.parentNode.replaceChild(canvas, element); -} - -/* - * Fast string trimming implementation found at - * http://blog.stevenlevithan.com/archives/faster-trim-javascript - * - * Note that regex is good at removing leading space but - * bad at removing trailing space as it has to first go through - * the whole string. - */ -function trim (str) { - "use strict"; - var ws, i; - str = str.replace(/^\s\s*/, ''); - ws = /\s/; i = str.length; - while (ws.test(str.charAt(--i))); - return str.slice(0, i + 1); -} -</script> - <script> -var current_motif = 0; -var dreme_alphabet = new Alphabet(data.alphabet, data.control_db.freqs); - -/* - * Create a pspm for the given motif data - */ -function motif_pspm(m) { - return new Pspm(m.pwm, m.id, 0, 0, m.nsites, m.evalue); -} - -/* - * Create a count matrix from the given motif data - */ -function motif_count_matrix(motif) { - return motif_pspm(motif).as_count_matrix(); -} - -/* - * Create a probablity matrix from the given motif data - */ -function motif_prob_matrix(motif) { - return motif_pspm(motif).as_probability_matrix(); -} - -/* - * Create a minimal meme format motif from the given motif data - */ -function motif_minimal_meme(motif) { - return motif_pspm(motif).as_meme({ - "with_header": true, - "with_pspm": true, - "with_pssm": false, - "version": data["version"], - "alphabet": dreme_alphabet, - "strands": (data.options.revcomp ? 2 : 1) - }); -} - -/* - * Fill in a template variable - */ -function set_tvar(template, tvar, value) { - var node; - node = find_child(template, tvar); - if (node === null) { - throw new Error("Template does not contain variable " + tvar); - } - node.innerHTML = ""; - if (typeof value !== "object") { - node.appendChild(document.createTextNode(value)); - } else { - node.appendChild(value); - } -} - -/* - * Make a canvas with the motif logo drawn on it. - */ -function make_logo(motif, height, rc) { - var pspm = new Pspm(motif["pwm"]); - if (rc) pspm = pspm.copy().reverse_complement(dreme_alphabet); - var logo = new Logo(dreme_alphabet); - logo.add_pspm(pspm, 0); - var canvas = document.createElement('canvas'); - canvas.height = height; - canvas.width = 0; - draw_logo_on_canvas(logo, canvas, false); - return canvas; -} - -/* - * Create a button designed to contain a single symbol - */ -function make_sym_btn(symbol, title, action) { - var box, sbox; - box = document.createElement("div"); - box.tabIndex = 0; - box.className = "sym_btn"; - sbox = document.createElement("span"); - if (typeof symbol == "string") { - sbox.appendChild(document.createTextNode(symbol)); - } else { - sbox.appendChild(symbol); - } - box.appendChild(sbox); - box.title = title; - box.addEventListener('click', action, false); - box.addEventListener('keydown', action, false); - return box; -} - -/* - * Create a pair of text spans with different classes. - * This is useful when using CSS to only display one of them. - */ -function text_pair(txt1, cls1, txt2, cls2) { - var container, part1, part2; - container = document.createElement("span"); - part1 = document.createElement("span"); - part1.appendChild(document.createTextNode(txt1)); - part1.className = cls1; - container.appendChild(part1); - part2 = document.createElement("span"); - part2.appendChild(document.createTextNode(txt2)); - part2.className = cls2; - container.appendChild(part2); - return container; -} - -/* - * Make a colourised sequence. - */ -function make_seq(seq) { - var i, j, letter, lbox, sbox; - sbox = document.createElement("span"); - for (i = 0; i < seq.length; i = j) { - letter = seq.charAt(i); - for (j = i+1; j < seq.length; j++) { - if (seq.charAt(j) !== letter) { - break; - } - } - lbox = document.createElement("span"); - lbox.style.color = dreme_alphabet.get_colour(dreme_alphabet.get_index(letter)); - lbox.appendChild(document.createTextNode(seq.substring(i, j))); - sbox.appendChild(lbox); - } - return sbox; -} - -/* - * Create a description element taking into account the newlines in the source text. - */ -function make_description(text) { - var i, j, lines, p; - var container = document.createElement("div"); - var paragraphs = text.split(/\n\n+/); - for (i = 0; i < paragraphs.length; i++) { - lines = paragraphs[i].split(/\n/); - p = document.createElement("p"); - p.appendChild(document.createTextNode(lines[0])); - for (j = 1; j < lines.length; j++) { - p.appendChild(document.createElement("br")); - p.appendChild(document.createTextNode(lines[j])); - } - container.appendChild(p); - } - return container; -} - -/* - * Make the table header for the discovered motifs. - */ -function make_motif_header() { - var row = document.createElement("tr"); - add_text_header_cell(row, "", "", "motif_ordinal"); - add_text_header_cell(row, "Motif", "pop_motifs_word", "motif_word"); - add_text_header_cell(row, "Logo", "pop_motifs_logo", "motif_logo"); - if (data.options.revcomp) { - add_text_header_cell(row, "RC Logo", "pop_motifs_rc_logo", "motif_logo"); - } - add_text_header_cell(row, "E-value", "pop_motifs_evalue", "motif_evalue"); - add_text_header_cell(row, "Unerased E-value", "pop_motifs_uevalue", "motif_evalue"); - add_text_header_cell(row, "More", "pop_more", "motif_more"); - add_text_header_cell(row, "Submit/Download", "pop_submit_dl", "motif_submit"); - row.className = "more"; - return row; -} - -/* - * Make a compact motif summary row for the discovered motifs. - */ -function make_motif_row(tbody, ordinal, motif) { - var row = document.createElement("tr"); - add_text_cell(row, "" + ordinal + ".", "motif_ordinal"); - add_text_cell(row, motif["id"], "motif_word"); - add_cell(row, make_logo(motif, 50, false), "motif_logo"); - if (data.options.revcomp) { - add_cell(row, make_logo(motif, 50, true), "motif_logo"); - } - add_text_cell(row, motif["evalue"], "motif_evalue"); - add_text_cell(row, motif["unerased_evalue"], "motif_evalue"); - add_cell(row, make_sym_btn(text_pair("\u21A7", "less", "\u21A5", "more"), "Show more information.", function(e) { toggle_class(tbody, "collapsed"); }, "\u21A5", ""), "motif_more"); - add_cell(row, make_sym_btn("\u21E2", "Submit the motif to another MEME Suite program or download it.", function(e) { action_show_outpop(e, ordinal); }), "motif_submit"); - return row; -} - -/* - * Make a sortable table of enriched matching rows. - */ -function make_motif_words(motif) { - var row, i, match; - var table = document.createElement("table"); - var thead = document.createElement("thead"); - row = document.createElement("tr"); - add_text_header_cell(row, "Word", "pop_match_word", "match_word", function(e) {sort_table(this, compare_words);}); - add_text_header_cell(row, "Positives", "pop_match_pos", "match_count", function(e) {sort_table(this, compare_counts);}); - add_text_header_cell(row, "Negatives", "pop_match_neg", "match_count", function(e) {sort_table(this, compare_counts);}); - add_text_header_cell(row, "P-value", "pop_match_pval", "match_evalue", function(e) {sort_table(this, compare_evalues);}); - add_text_header_cell(row, "E-value", "pop_match_eval", "match_evalue", function(e) {sort_table(this, compare_evalues);}); - thead.appendChild(row); - table.appendChild(thead); - var tbody = document.createElement("tbody"); - for (i = 0; i < motif.matches.length; i++) { - match = motif.matches[i]; - row = document.createElement("tr"); - add_cell(row, make_seq(match.seq), "match_word"); - add_text_cell(row, match.p + " / " + data.sequence_db.count, "match_count"); - add_text_cell(row, match.n + " / " + data.control_db.count, "match_count"); - add_text_cell(row, match.pvalue, "match_evalue"); - add_text_cell(row, match.evalue, "match_evalue"); - tbody.appendChild(row); - } - table.appendChild(tbody); - return table; -} - -/* - * Make an expanded view of a discovered motif. - */ -function make_motif_exp(tbody, ordinal, motif) { - "use strict"; - var box, pspm, logo_box; - box = $("tmpl_motif_expanded").cloneNode(true); - toggle_class(box, "template", false); - box.id = ""; - find_child(box, "tvar_logo").appendChild(make_logo(motif, 150, false)); - if (data.options.revcomp) { - find_child(box, "tvar_rclogo").appendChild(make_logo(motif, 150, true)); - } - set_tvar(box, "tvar_p", motif["p"]); - set_tvar(box, "tvar_p_total", data.sequence_db.count); - set_tvar(box, "tvar_n", motif["n"]); - set_tvar(box, "tvar_n_total", data.control_db.count); - set_tvar(box, "tvar_pvalue", motif["pvalue"]); - set_tvar(box, "tvar_evalue", motif["evalue"]); - set_tvar(box, "tvar_uevalue", motif["unerased_evalue"]); - set_tvar(box, "tvar_words", make_motif_words(motif)); - var cell = document.createElement("td"); - cell.colSpan = 8; - cell.appendChild(box); - var row = document.createElement("tr"); - row.className = "more"; - row.appendChild(cell); - return row; -} - -/* - * Convert a string containing a scientific number into the log of that number - * without having an intermediate representation of the number. - * This is intended to avoid underflow problems with the tiny evalues that - * MEME and DREME can create. - */ -function sci2log(scinum) { - "use strict"; - var ev_re, match, sig, exp; - ev_re = /^(.*)e(.*)$/; - if (match = ev_re.exec(scinum)) { - sig = parseFloat(match[1]); - exp = parseInt(match[2]); - return Math.log(sig) + (exp * Math.log(10)); - } - return 0; -} - -/* - * Create a table of discovered motifs. A fresh table body is used for each - * motif to make hiding/showing rows with css easier. - */ -function make_motifs() { - "use strict"; - var i, row, tbody, motif, ordinal; - // make the motifs table - var container = $("motifs"); - container.innerHTML = ""; // clear content - var table = document.createElement("table"); - // add a header that is always shown - var thead = document.createElement("thead"); - thead.appendChild(make_motif_header()); - table.appendChild(thead); - for (i = 0; i < data.motifs.length; i++) { - ordinal = i + 1; - motif = data.motifs[i]; - tbody = document.createElement("tbody"); - tbody.className = "collapsed"; - tbody.appendChild(make_motif_row(tbody, ordinal, motif)); - tbody.appendChild(make_motif_exp(tbody, ordinal, motif)); - // create a following header for every row except the last one - if ((i + 1) < data.motifs.length) tbody.appendChild(make_motif_header()); - table.appendChild(tbody); - } - container.appendChild(table); -} - -/* - * Create a table showing all the alphabet symbols, their names and frequencies. - */ -function make_alpha_bg(alph, freqs) { - function colour_symbol(index) { - var span = document.createElement("span"); - span.appendChild(document.createTextNode(alph.get_symbol(index))); - span.style.color = alph.get_colour(index); - span.className = "alpha_symbol"; - return span; - } - var table, thead, tbody, row, th, span, i; - // create table - table = document.createElement("table"); - table.className = "inputs"; - // create header - thead = document.createElement("thead"); - table.appendChild(thead); - row = thead.insertRow(thead.rows.length); - if (alph.has_complement()) { - add_text_header_cell(row, "Name", "pop_alph_name"); - add_text_header_cell(row, "Bg.", "pop_alph_control"); - add_text_header_cell(row, ""); - add_text_header_cell(row, ""); - add_text_header_cell(row, ""); - add_text_header_cell(row, "Bg.", "pop_alph_control"); - add_text_header_cell(row, "Name", "pop_alph_name"); - } else { - add_text_header_cell(row, ""); - add_text_header_cell(row, "Name", "pop_alph_name"); - add_text_header_cell(row, "Bg.", "pop_alph_control"); - } - // add alphabet entries - tbody = document.createElement("tbody"); - table.appendChild(tbody); - if (alph.has_complement()) { - for (i = 0; i < alph.get_size_core(); i++) { - var c = alph.get_complement(i); - if (i > c) continue; - row = tbody.insertRow(tbody.rows.length); - add_text_cell(row, alph.get_name(i)); - add_text_cell(row, "" + freqs[i].toFixed(3)); - add_cell(row, colour_symbol(i)); - add_text_cell(row, "~"); - add_cell(row, colour_symbol(c)); - add_text_cell(row, "" + freqs[c].toFixed(3)); - add_text_cell(row, alph.get_name(c)); - } - } else { - for (i = 0; i < alph.get_size_core(); i++) { - row = tbody.insertRow(tbody.rows.length); - add_cell(row, colour_symbol(i)); - add_text_cell(row, alph.get_name(i)); - add_text_cell(row, "" + freqs[i].toFixed(3)); - } - } - return table; -} - -/* - * Updates the format download text in the popup. - * This is called when either the format or current motif changes. - */ -function update_outpop_format(index) { - var motif = data.motifs[index]; - var fn = [motif_count_matrix, motif_prob_matrix, motif_minimal_meme]; - var suffix = ["_counts.txt", "_freqs.txt", ".meme"]; - var format = parseInt($("text_format").value); - var text = fn[format](motif); - prepare_download(text, "text/plain", motif.id + suffix[format], $("outpop_text_dl")); - $("outpop_text").value = text; -} - -/* - * Updates the motif logos and format download text in the popup. - * This is called whenever the current motif changes. - */ -function update_outpop_motif(index) { - "use strict"; - var motifs, motif, pspm, logo, canvas, num; - motifs = data["motifs"]; - if (index < 0 || index >= motifs.length) {return;} - current_motif = index; - motif = motifs[index]; - pspm = new Pspm(motif["pwm"]); - logo = new Logo(dreme_alphabet, ""); - logo.add_pspm(pspm, 0); - canvas = $("outpop_logo"); - canvas.width = canvas.width; // clear canvas - draw_logo_on_canvas(logo, canvas, false); - canvas = $("outpop_logo_rc"); - canvas.width = canvas.width; // clear rc canvas - if (data.options.revcomp) { - pspm.reverse_complement(dreme_alphabet); - logo = new Logo(dreme_alphabet, ""); - logo.add_pspm(pspm, 0); - draw_logo_on_canvas(logo, canvas, false); - } - num = $("outpop_num"); - num.innerHTML = ""; - num.appendChild(document.createTextNode("" + (index + 1))); - update_outpop_format(index); -} - - -/* - * Initialise and display the download popup. - */ -function action_show_outpop(e, ordinal) { - "use strict"; - function init() { - "use strict"; - var close_btn, next_btn, prev_btn, cancel_btn, do_btn; - var tab1, tab2, tab3; - var pnl1, pnl2, pnl3; - var format_list; - var tbl_submit, inputs, i, default_prog; - close_btn = $("outpop_close"); - close_btn.addEventListener("click", action_hide_outpop, false); - close_btn.addEventListener("keydown", action_hide_outpop, false); - next_btn = $("outpop_next"); - next_btn.addEventListener("click", action_outpop_next, false); - next_btn.addEventListener("keydown", action_outpop_next, false); - prev_btn = $("outpop_prev"); - prev_btn.addEventListener("click", action_outpop_prev, false); - prev_btn.addEventListener("keydown", action_outpop_prev, false); - cancel_btn = $("outpop_cancel"); - cancel_btn.addEventListener("click", action_hide_outpop, false); - do_btn = $("outpop_do"); - do_btn.addEventListener("click", action_outpop_submit, false); - tab1 = $("outpop_tab_1"); - tab1.tabIndex = 0; - tab1.addEventListener("click", action_outpop_tab, false); - tab1.addEventListener("keydown", action_outpop_tab, false); - tab2 = $("outpop_tab_2"); - tab2.tabIndex = 0; - tab2.addEventListener("click", action_outpop_tab, false); - tab2.addEventListener("keydown", action_outpop_tab, false); - tab3 = $("outpop_tab_3"); - tab3.tabIndex = 0; - tab3.addEventListener("click", action_outpop_tab, false); - tab3.addEventListener("keydown", action_outpop_tab, false); - pnl1 = $("outpop_pnl_1"); - pnl2 = $("outpop_pnl_2"); - pnl3 = $("outpop_pnl_3"); - toggle_class(tab1, "activeTab", true); - toggle_class(tab2, "activeTab", false); - toggle_class(tab3, "activeTab", false); - pnl1.style.display = "block"; - pnl2.style.display = "none"; - pnl3.style.display = "none"; - format_list = $("text_format"); - format_list.addEventListener("change", action_outpop_format, false); - // setup program selection - tbl_submit = $("programs"); - // when not dna, hide the inputs for programs that require dna motifs - toggle_class(tbl_submit, "alphabet_dna", dreme_alphabet.has_complement());//TODO FIXME alphabet_dna is a bad name for a field when allowing custom alphabets - // add a click listener for the radio buttons - inputs = tbl_submit.querySelectorAll("input[type='radio']"); - for (i = 0; i < inputs.length; i++) { - inputs[i].addEventListener("click", action_outpop_program, false); - } - // ensure that a default program option is selected for DNA and Protein - default_prog = document.getElementById(dreme_alphabet.has_complement() ? "submit_tomtom" : "submit_fimo"); - default_prog.checked = true; - action_outpop_program.call(default_prog); - // disable reverse-complement when not DNA - $("logo_rc_option").disabled = !dreme_alphabet.has_complement(); - // set errorbars on when ssc is on - $("logo_ssc").addEventListener("change", action_outpop_ssc, false); - } - // store the focused element - action_hide_outpop.last_active = document.activeElement; - if (!e) e = window.event; - if (e.type === "keydown") { - if (e.keyCode !== 13 && e.keyCode !== 32) { - return; - } - // stop a submit or something like that - e.preventDefault(); - } - // hide the help popup - help_popup(); - // on first load initilize the popup - if (!action_show_outpop.ready) { - init(); - action_show_outpop.ready = true; - } - update_outpop_motif(ordinal - 1); - // display the download popup - $("grey_out_page").style.display = "block"; - $("download").style.display = "block"; - $("outpop_close").focus(); -} - -/* - * Hide the download popup. - */ -function action_hide_outpop(e) { - if (!e) e = window.event; - if (e.type === "keydown") { - if (e.keyCode !== 13 && e.keyCode !== 32) { - return; - } - // stop a submit or something like that - e.preventDefault(); - } - $("download").style.display = "none"; - $("grey_out_page").style.display = "none"; - if (typeof action_hide_outpop.last_active !== "undefined") { - action_hide_outpop.last_active.focus(); - } -} - -/* - * Show the next motif in the download popup. - */ -function action_outpop_next(e) { - if (!e) e = window.event; - if (e.type === "keydown") { - if (e.keyCode !== 13 && e.keyCode !== 32) { - return; - } - // stop a submit or something like that - e.preventDefault(); - } - update_outpop_motif(current_motif + 1); -} - -/* - * Show the previous motif in the download popup. - */ -function action_outpop_prev(e) { - if (!e) e = window.event; - if (e.type === "keydown") { - if (e.keyCode !== 13 && e.keyCode !== 32) { - return; - } - // stop a submit or something like that - e.preventDefault(); - } - update_outpop_motif(current_motif - 1); -} - -/* - * Highlight the selected row in the program list. - */ -function action_outpop_program() { - "use strict"; - var table, tr, rows, i; - tr = find_parent_tag(this, "TR"); - table = find_parent_tag(tr, "TABLE"); - rows = table.querySelectorAll("tr"); - for (i = 0; i < rows.length; i++) { - toggle_class(rows[i], "selected", rows[i] === tr); - } -} - -/* - * Enable error bars when small sample correction is enabled. - */ -function action_outpop_ssc() { - "use strict"; - $("logo_err").value = $("logo_ssc").value; -} - -/* - * Submit the motif to the selected program. - */ -function action_outpop_submit(e) { - "use strict"; - var form, input, program, motifs; - // find out which program is selected - var radios, i; - radios = document.getElementsByName("program"); - program = "fimo"; // default to fimo, since it works with all alphabet types - for (i = 0; i < radios.length; i++) { - if (radios[i].checked) program = radios[i].value; - } - - motifs = motif_minimal_meme(data.motifs[current_motif]); - form = document.createElement("form"); - form.setAttribute("method", "post"); - form.setAttribute("action", site_url + "/tools/" + program); - - input = document.createElement("input"); - input.setAttribute("type", "hidden"); - input.setAttribute("name", "motifs_embed"); - input.setAttribute("value", motifs); - form.appendChild(input); - - document.body.appendChild(form); - form.submit(); - document.body.removeChild(form); -} - -/* - * Download the format text. - * Wire the link containing the data URI text to a download button so it looks - * the same as the server submit stuff. - */ -function action_outpop_download_motif(e) { - $("outpop_text_dl").click(); -} - -/* - * Download the motif logo. - * The EPS format can be calculated locally in Javascript - */ -function action_outpop_download_logo(e) { - "use strict"; - var pspm, logo, eps; - var logo_rc, logo_ssc, logo_width, logo_height; - var motif = data.motifs[current_motif]; - if ($("logo_format").value == "0") { // EPS - logo_rc = ($("logo_rc").value == "1"); - logo_ssc = ($("logo_ssc").value == "1"); - logo_width = parseFloat($("logo_width").value); - if (isNaN(logo_width) || !isFinite(logo_width) || logo_width <= 0) logo_width = null; - logo_height = parseFloat($("logo_height").value); - if (isNaN(logo_height) || !isFinite(logo_height) || logo_height <= 0) logo_height = null; - // create a PSPM from the motif - pspm = motif_pspm(motif); - if (logo_rc) pspm.reverse_complement(dreme_alphabet); - logo = new Logo(dreme_alphabet); - logo.add_pspm(pspm, 0); - eps = logo.as_eps({"ssc": logo_ssc, "logo_width": logo_width, "logo_height": logo_height}); - prepare_download(eps, "application/postscript", motif.id + ".eps"); - } else { - $("logo_motifs").value = motif_minimal_meme(motif); - $("logo_form").submit(); - } -} - -/* - * Change the selected tab in the download popup. - */ -function action_outpop_tab(e) { - "use strict"; - var tab1, tab2, tab3, pnl1, pnl2, pnl3, do_btn; - if (!e) e = window.event; - if (e.type === "keydown") { - if (e.keyCode !== 13 && e.keyCode !== 32) { - return; - } - // stop a submit or something like that - e.preventDefault(); - } - tab1 = $("outpop_tab_1"); - tab2 = $("outpop_tab_2"); - tab3 = $("outpop_tab_3"); - pnl1 = $("outpop_pnl_1"); - pnl2 = $("outpop_pnl_2"); - pnl3 = $("outpop_pnl_3"); - do_btn = $("outpop_do"); - - toggle_class(tab1, "activeTab", (this === tab1)); - toggle_class(tab2, "activeTab", (this === tab2)); - toggle_class(tab3, "activeTab", (this === tab3)); - pnl1.style.display = ((this === tab1) ? "block" : "none"); - pnl2.style.display = ((this === tab2) ? "block" : "none"); - pnl3.style.display = ((this === tab3) ? "block" : "none"); - do_btn.value = ((this === tab1) ? "Submit" : "Download"); - do_btn.removeEventListener("click", action_outpop_submit, false); - do_btn.removeEventListener("click", action_outpop_download_logo, false); - do_btn.removeEventListener("click", action_outpop_download_motif, false); - if (this === tab1) { - do_btn.addEventListener("click", action_outpop_submit, false); - } else if (this === tab2) { - do_btn.addEventListener("click", action_outpop_download_motif, false); - } else { - do_btn.addEventListener("click", action_outpop_download_logo, false); - } -} - -/* - * Update the text in the download format popup. - */ -function action_outpop_format() { - update_outpop_format(current_motif); -} - -/* - * Find all text nodes in the given container. - */ -function text_nodes(container) { - var textNodes = []; - var stack = [container]; - // depth first search to maintain ordering when flattened - while (stack.length > 0) { - var node = stack.pop(); - if (node.nodeType == Node.TEXT_NODE) { - textNodes.push(node); - } else { - for (var i = node.childNodes.length-1; i >= 0; i--) { - stack.push(node.childNodes[i]); - } - } - } - return textNodes; -} - -/* - * Get the text out of a specific text node. - */ -function node_text(node) { - if (node === undefined) { - return ''; - } else if (node.textContent) { - return node.textContent; - } else if (node.innerText) { - return node.innerText; - } else { - return ''; - } -} - -/* - * Get the text contained within the element. - */ -function elem_text(elem, separator) { - if (separator === undefined) separator = ''; - return text_nodes(elem).map(node_text).join(separator); -} - -/* - * Sort all rows in the first table body based on the column of the given element and the comparison function. - * The sort is not very fast and is intended for small tables only. - */ -function sort_table(colEle, compare_function) { - //find the parent of colEle that is either a td or th - var i, j; - var cell = colEle; - while (true) { - if (cell == null) return; - if (cell.nodeType == Node.ELEMENT_NODE && - (cell.tagName.toLowerCase() == "td" || cell.tagName.toLowerCase() == "th")) { - break; - } - cell = cell.parentNode; - } - //find the parent of cell that is a tr - var row = cell; - while (true) { - if (row == null) return; - if (row.nodeType == Node.ELEMENT_NODE && row.tagName.toLowerCase() == "tr") { - break; - } - row = row.parentNode; - } - //find the parent of row that is a table - var table = row; - while (true) { - if (table == null) return; - if (table.nodeType == Node.ELEMENT_NODE && table.tagName.toLowerCase() == "table") { - break; - } - table = table.parentNode; - } - var column_index = cell.cellIndex; - // do a bubble sort, because the tables are so small it doesn't matter - var change; - var trs = table.tBodies[0].getElementsByTagName('tr'); - var already_sorted = true; - var reverse = false; - while (true) { - do { - change = false; - for (i = 0; i < trs.length -1; i++) { - var v1 = elem_text(trs[i].cells[column_index]); - var v2 = elem_text(trs[i+1].cells[column_index]); - if (reverse) { - var tmp = v1; - v1 = v2; - v2 = tmp; - } - if (compare_function(v1, v2) > 0) { - exchange(trs[i], trs[i+1], table); - change = true; - already_sorted = false; - trs = table.tBodies[0].getElementsByTagName('tr'); - } - } - } while (change); - if (reverse) break;// we've sorted twice so exit - if (!already_sorted) break;// sort did something so exit - // when it's sorted one way already then sort the opposite way - reverse = true; - } - // put arrows on the headers - var headers = table.tHead.getElementsByTagName('tr'); - for (i = 0; i < headers.length; i++) { - for (j = 0; j < headers[i].cells.length; j++) { - var cell = headers[i].cells[j]; - var arrows = cell.getElementsByClassName("sort_arrow"); - var arrow; - if (arrows.length == 0) { - arrow = document.createElement("span"); - arrow.className = "sort_arrow"; - cell.insertBefore(arrow, cell.firstChild); - } else { - arrow = arrows[0]; - } - arrow.innerHTML = ""; - if (j == column_index) { - arrow.appendChild(document.createTextNode(reverse ? "\u25B2" : "\u25BC")); - } - } - } -} - -/* - * Swap two rows in a table. - */ -function exchange(oRowI, oRowJ, oTable) { - var i = oRowI.rowIndex; - var j = oRowJ.rowIndex; - if (i == j+1) { - oTable.tBodies[0].insertBefore(oRowI, oRowJ); - } if (j == i+1) { - oTable.tBodies[0].insertBefore(oRowJ, oRowI); - } else { - var tmpNode = oTable.tBodies[0].replaceChild(oRowI, oRowJ); - if(typeof(oRowI) != "undefined") { - oTable.tBodies[0].insertBefore(tmpNode, oRowI); - } else { - oTable.appendChild(tmpNode); - } - } -} - -/* - * Compare two E-values which may be very small. - */ -function compare_evalues(v1, v2) { - var e1 = sci2log(v1); - var e2 = sci2log(v2); - if (e1 < e2) return -1; - else if (e1 > e2) return 1; - return 0; -} - -/* - * Compare two counts. - */ -function compare_counts(v1, v2) { - var re = /(\d+)\s*\/\s*\d+/; - var m1 = re.exec(v1); - var m2 = re.exec(v2); - if (m1 == null && m2 == null) return 0; - if (m1 == null) return -1; - if (m2 == null) return 1; - return parseInt(m2[1]) - parseInt(m1[1]); -} - -/* - * Compare two sequence words. - */ -function compare_words(v1, v2) { - return v1.localeCompare(v2); -} - - -</script> - <style> -/* The following is the content of meme.css */ -body { background-color:white; font-size: 12px; font-family: Verdana, Arial, Helvetica, sans-serif;} - -div.help { - display: inline-block; - margin: 0px; - padding: 0px; - width: 12px; - height: 13px; - cursor: pointer; - background-image: url(data:image/gif;base64,R0lGODlhDAANAIABANR0AP///yH5BAEAAAEALAAAAAAMAA0AAAIdhI8Xy22MIFgv1DttrrJ7mlGNNo4c+aFg6SQuUAAAOw==); -} - -div.help:hover { - background-image: url(data:image/gif;base64,R0lGODlhDAANAKEAANR0AP///9R0ANR0ACH+EUNyZWF0ZWQgd2l0aCBHSU1QACH5BAEAAAIALAAAAAAMAA0AAAIdDGynCe3PgoxONntvwqz2/z2K2ImjR0KhmSIZUgAAOw==); -} - -p.spaced { line-height: 1.8em;} - -span.citation { font-family: "Book Antiqua", "Palatino Linotype", serif; color: #004a4d;} - -p.pad { padding-left: 30px; padding-top: 5px; padding-bottom: 10px;} - -td.jump { font-size: 13px; color: #ffffff; background-color: #00666a; - font-family: Georgia, "Times New Roman", Times, serif;} - -a.jump { margin: 15px 0 0; font-style: normal; font-variant: small-caps; - font-weight: bolder; font-family: Georgia, "Times New Roman", Times, serif;} - -h2.mainh {font-size: 1.5em; font-style: normal; margin: 15px 0 0; - font-variant: small-caps; font-family: Georgia, "Times New Roman", Times, serif;} - -h2.line {border-bottom: 1px solid #CCCCCC; font-size: 1.5em; font-style: normal; - margin: 15px 0 0; padding-bottom: 3px; font-variant: small-caps; - font-family: Georgia, "Times New Roman", Times, serif;} - -h4 {border-bottom: 1px solid #CCCCCC; font-size: 1.2em; font-style: normal; - margin: 10px 0 0; padding-bottom: 3px; font-family: Georgia, "Times New Roman", Times, serif;} - -h5 {margin: 0px} - -a.help { font-size: 9px; font-style: normal; text-transform: uppercase; - font-family: Georgia, "Times New Roman", Times, serif;} - -div.pad { padding-left: 30px; padding-top: 5px; padding-bottom: 10px;} - -div.pad1 { margin: 10px 5px;} - -div.pad2 { margin: 25px 5px 5px;} -h2.pad2 { padding: 25px 5px 5px;} - -div.pad3 { padding: 5px 0px 10px 30px;} - -div.box { border: 2px solid #CCCCCC; padding:10px; overflow: hidden;} - -div.bar { border-left: 7px solid #00666a; padding:5px; margin-top:25px; } - -div.subsection {margin:25px 0px;} - -img {border:0px none;} - -th.majorth {text-align:left;} -th.minorth {font-weight:normal; text-align:left; width:8em; padding: 3px 0px;} -th.actionth {font-weight:normal; text-align:left;} - -.explain h5 {font-size:1em; margin-left: 1em;} - -div.doc {margin-left: 2em; margin-bottom: 3em;} - -th.trainingset { - border-bottom: thin dashed black; - font-weight:normal; - padding:0px 10px; -} -div.pop_content { - position:absolute; - z-index:50; - width:300px; - padding: 5px; - background: #E4ECEC; - font-size: 12px; - font-family: Arial; - border-style: double; - border-width: 3px; - border-color: #AA2244; - display:none; -} - -div.pop_content > *:first-child { - margin-top: 0px; -} - -div.pop_content h1, div.pop_content h2, div.pop_content h3, div.pop_content h4, -div.pop_content h5, div.pop_content h6, div.pop_content p { - margin: 0px; -} - -div.pop_content p + h1, div.pop_content p + h2, div.pop_content p + h3, -div.pop_content p + h4, div.pop_content p + h5, div.pop_content p + h6 { - margin-top: 5px; -} - -div.pop_content p + p { - margin-top: 5px; -} - -div.pop_content > *:last-child { - margin-bottom: 0px; -} - -div.pop_content div.pop_close { - /* old definition */ - float:right; - bottom: 0; -} - -div.pop_content span.pop_close, div.pop_content span.pop_back { - display: inline-block; - border: 2px outset #661429; - background-color: #CCC; - padding-left: 1px; - padding-right: 1px; - padding-top: 0px; - padding-bottom: 0px; - cursor: pointer; - color: #AA2244; /*#661429;*/ - font-weight: bold; -} - -div.pop_content span.pop_close:active, div.pop_content span.pop_back:active { - border-style: inset; -} - -div.pop_content span.pop_close { - float:right; - /*border: 2px outset #AA002B;*/ - /*color: #AA2244;*/ -} - -div.pop_content:not(.nested) .nested_only { - display: none; -} - -div.pop_back_sec { - margin-bottom: 5px; -} - -div.pop_close_sec { - margin-top: 5px; -} - -table.hide_advanced tr.advanced { - display: none; -} -span.show_more { - display: none; -} -table.hide_advanced span.show_more { - display: inline; -} -table.hide_advanced span.show_less { - display: none; -} - - -/***************************************************************************** - * Program logo styling - ****************************************************************************/ -div.prog_logo { - border-bottom: 0.25em solid #0f5f60; - height: 4.5em; - width: 24em; - display:inline-block; -} -div.prog_logo img { - float:left; - width: 4em; - border-style: none; - margin-right: 0.2em; -} -div.prog_logo h1, div.prog_logo h1:hover, div.prog_logo h1:active, div.prog_logo h1:visited { - margin:0; - padding:0; - font-family: Arial, Helvetica, sans-serif; - font-size: 3.2em; - line-height: 1em; - vertical-align: top; - display: block; - color: #026666; - letter-spacing: -0.06em; - text-shadow: 0.04em 0.06em 0.05em #666; -} -div.prog_logo h2, div.prog_logo h2:hover, div.prog_logo h2:active, div.prog_logo h2:visited { - display: block; - margin:0; - padding:0; - font-family: Helvetica, sans-serif; - font-size: 0.9em; - line-height: 1em; - letter-spacing: -0.06em; - color: black; -} - -div.big.prog_logo { - font-size: 18px; -} - -</style> - <style> -/* dreme output specific css */ -div.header { - position: relative; - overflow: hidden; - margin-top: 15px; - margin-bottom: 5px; - margin-right: 3px; - margin-left: 3px; -} -div.header > h2 { - font-size: 1.5em; - font-style: normal; - margin: 0; - font-variant: small-caps; - font-family: Georgia, "Times New Roman", Times, serif; -} -div.header > span { - position: absolute; - right: 0; - bottom: 0; -} - -div.template { - position: absolute; - z-index: 1; - left: 0; - top: 0; - visibility: hidden; -} - -div.sym_btn { - display:inline-block; - text-decoration: underline; - cursor: pointer; - font-size: 20px; - line-height:20px; - text-align: center; - width: 20px; - height: 20px; - color: blue; -} -div.sym_btn:hover { - color: white; - background-color: blue; -} - -div.sym_btn.positioned { - position: absolute; - top: 0px; -} - -div.box + div.box { - margin-top: 5px; -} - -th.motif_ordinal { - -} -td.motif_ordinal { - text-align: right; - padding-right: 10px; - font-weight: bold; - font-size: large; -} -th.motif_word { - padding-right: 10px; -} -td.motif_word { - font-size:15px; - font-family: 'Courier New', Courier, monospace; - padding-right: 10px; -} -th.motif_logo { - padding-right: 10px; -} -td.motif_logo { - padding-right: 10px; -} -th.motif_evalue { - text-align:right; - padding-right: 10px; -} -td.motif_evalue { - text-align: right; - white-space: nowrap; - padding-right: 20px; -} -th.motif_more { - padding: 0 5px; -} -td.motif_more { - text-align: center; - padding: 0 5px; -} -th.motif_submit { - padding: 0 5px; -} -td.motif_submit { - text-align: center; - padding: 0 5px; -} -th.match_word { - padding-right: 10px; -} -td.match_word { - padding-right: 10px; - font-weight: bold; - font-size: large; - font-family: 'Courier New', Courier, monospace; -} -th.match_evalue, th.match_count { - text-align: right; - padding-right: 10px; -} -td.match_evalue, td.match_count { - text-align: right; - white-space: nowrap; - padding-right: 20px; -} - -div.tabArea { - font-size: 80%; - font-weight: bold; -} - -.norc div.tabArea { - display: none; -} - -span.tab, span.tab:visited { - cursor: pointer; - color: #888; - background-color: #ddd; - border: 2px solid #ccc; - padding: 2px 1em; - text-decoration: none; -} -span.tab.middle { - border-left-width: 0px; -} -div.tabArea.base span.tab { - border-top-width: 0px; -} -div.tabArea.top span.tab { - border-bottom-width: 0px; -} - -span.tab:hover { - background-color: #bbb; - border-color: #bbb; - color: #666; -} -span.tab.activeTab, span.tab.activeTab:hover, span.tab.activeTab:visited { - background-color: white; - color: black; - cursor: default; -} -div.tabMain { - border: 2px solid #ccc; - background-color: white; - padding: 10px; -} -div.tabMain.base { - margin-top: 5px; - display: inline-block; - max-width: 98%; -} - -div.tabMain.top { - margin-bottom: 5px; -} - -div.grey_background { - position:fixed; - z-index: 8; - background-color: #000; - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; - opacity: 0.5; - left: 0; - top: 0; - width: 100%; - height: 100%; -} - -div.popup_wrapper { - position:fixed; - z-index:9; - width:100%; - height:0; - top:50%; - left:0; -} - -div.popup { - width: 600px; - z-index:9; - margin-left: auto; - margin-right: auto; - padding: 5px; - background-color: #FFF; - border-style: double; - border-width: 5px; - border-color: #00666a; - position:relative; -} -div.close { - cursor: pointer; - border: 1px solid black; - width:15px; - height:15px; - line-height:15px; /* this causes vertical centering */ - text-align:center; - background-color:#FFF; - color:#000; - font-size:15px; - font-family:monospace; -} - -div.close:hover { - color:#FFF; - background-color:#000; -} - -div.navnum { - width:100%; - height:20px; - line-height:20px; - text-align:center; - font-size:medium; -} - -div.navarrow { - font-size: 30px; - text-decoration:none; - cursor: pointer; - -moz-user-select: none; - -webkit-user-select: none; - -ms-user-select: none; -} - -div.navarrow > span.inactive { - display: inline; -} -div.navarrow > span.active { - display: none; -} - -div.navarrow:hover > span.active { - display: inline; -} -div.navarrow:hover > span.inactive { - display: none; -} - -table.programs { - width: 100%; -} - -table.programs tr { - background-color: #EFE; -} - -table.programs tr.selected { - background-color: #262; - color: #FFF; -} - -table.programs tr.dna_only { - display: none; -} - -table.programs.alphabet_dna tr.dna_only { - display: table-row; -} - -table.inputs { - margin-top: 20px; - border-collapse:collapse; -} -table.inputs * td, table.inputs * th { - padding-left: 15px; - padding-right: 15px; - padding-top: 1px; - padding-bottom: 1px; -} - -/* program settings */ -span.strand_none, span.strand_given, span.strand_both { - display: none; -} -td.none span.strand_none, td.given span.strand_given, td.both span.strand_both { - display: inline; -} - -/* show the expanded motif only when the collapsed one is hidden */ -tbody *.less, tbody.collapsed *.more { - display: none; -} - -tbody.collapsed *.less { - display: inline; -} - -</style> - </head> - <body data-scrollpad="true"> - <!-- --> - <div id="grey_out_page" class="grey_background" style="display:none;"> - </div> - - <!-- Help popups --> - <div class="pop_content" id="pop_"> - <p>Help poup.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - - <div class="pop_content" id="pop_motifs_word"> - <p> - The name of the motif uses the IUPAC codes for nucleotides which has - a different letter to represent each of the 15 possible combinations. - </p> - <p> - The name is itself a representation of the motif though the position - weight matrix is not directly equalivant as it is generated from the - sites found that matched the letters given in the name. - </p> - <p> - <a id="doc_alphabets_url" href="#"> - Read more about the MEME suite's use of the IUPAC alphabets. - </a> - <script>$("doc_alphabets_url").href = site_url + "/doc/alphabets.html";</script> - </p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - <div class="pop_content" id="pop_motifs_logo"> - <p>The logo of the motif.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - <div class="pop_content" id="pop_motifs_rc_logo"> - <p>The logo of the reverse complement motif.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - <div class="pop_content" id="pop_motifs_evalue"> - <p>The E-value is the enrichment p-value times the number of candidate - motifs tested.</p> - <p>The enrichment p-value is calculated using Fisher's Exact Test for - enrichment of the motif in the positive sequences.</p> - <p>Note that the counts used in Fisher's Exact Test are made after - erasing sites that match previously found motifs.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - <div class="pop_content" id="pop_motifs_uevalue"> - <p>The E-value of the motif calculated without erasing the sites of - previously found motifs.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - <div class="pop_content" id="pop_more"> - <p>Show more information on the motif.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - <div class="pop_content" id="pop_submit_dl"> - <p>Submit your motif to another MEME Suite program or download your motif.</p> - <h5>Supported Programs</h5> - <dl> - <dt>Tomtom</dt> - <dd>Tomtom is a tool for searching for similar known motifs. - </dd> - <dt>MAST</dt> - <dd>MAST is a tool for searching biological sequence databases for - sequences that contain one or more of a group of known motifs. - </dd> - <dt>FIMO</dt> - <dd>FIMO is a tool for searching biological sequence databases for - sequences that contain one or more known motifs. - </dd> - <dt>GOMO</dt> - <dd>GOMO is a tool for identifying possible roles (Gene Ontology - terms) for DNA binding motifs. - </dd> - <dt>SpaMo</dt> - <dd>SpaMo is a tool for inferring possible transcription factor - complexes by finding motifs with enriched spacings. - </dd> - </dl> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - <div class="pop_content" id="pop_motif_positives"> - <p># positive sequences matching the motif / # positive sequences.</p> - <p>Note these counts are made after erasing sites that match previously - found motifs.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - <div class="pop_content" id="pop_motif_negatives"> - <p># negative sequences matching the motif / # negative sequences.</p> - <p>Note these counts are made after erasing sites that match previously - found motifs.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - <div class="pop_content" id="pop_motif_pvalue"> - <p>The p-value of Fisher's Exact Test for enrichment of the motif in - the positive sequences.</p> - <p>Note that the counts used in Fisher's Exact Test are made after - erasing sites that match previously found motifs.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - <div class="pop_content" id="pop_motif_evalue"> - <p>The E-value is the motif p-value times the number of candidate motifs - tested.</p> - <p>Note that the p-value was calculated with counts made after - erasing sites that match previously found motifs.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - <div class="pop_content" id="pop_motif_uevalue"> - <p>The E-value of the motif calculated without erasing the sites of - previously found motifs.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - <div class="pop_content" id="pop_match_word"> - <p>All words matching the motif whose uncorrected p-value is less than - <span id="help_add_pv_thresh"></span>.</p> - <script>$("help_add_pv_thresh").innerHTML = data.options.add_pv_thresh;</script> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - <div class="pop_content" id="pop_match_pos"> - <p># positive sequences with matches to the word / # positive sequences.</p> - <p>Note these counts are made after erasing sites that match previously - found motifs.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - <div class="pop_content" id="pop_match_neg"> - <p># negative sequences with matches to the word / # negative sequences.</p> - <p>Note these counts are made after erasing sites that match previously - found motifs.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - <div class="pop_content" id="pop_match_pval"> - <p>The p-value of Fisher's Exact Test for enrichment of the word in - the positive sequences.</p> - <p>Note that the counts used in Fisher's Exact Test are made after - erasing sites that match previously found motifs.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - <div class="pop_content" id="pop_match_eval"> - <p>The word p-value times the number of candidates tested.</p> - <p>Note that the p-value was calculated with counts made after - erasing sites that match previously found motifs.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - - <div class="pop_content" id="pop_seq_source"> - <p>The sequence file used by DREME to find the motifs.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - <div class="pop_content" id="pop_seq_alph"> - <p>The alphabet of the sequences.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - <div class="pop_content" id="pop_seq_count"> - <p>The count of the sequences.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - - <div class="pop_content" id="pop_alph_name"> - <p>The name of the alphabet symbol.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - - <div class="pop_content" id="pop_alph_control"> - <p>The frequency of the alphabet symbol in the control dataset.</p> - <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> - </div> - - <!-- templates --> - - <div class="template box expanded_motif" id="tmpl_motif_expanded"> - <div> - <span class="tvar_logo"></span> - <span class="tvar_rclogo"></span> - </div> - <h4>Details</h4> - <table class="details"> - <thead> - <tr> - <th class="match_count">Positives <div class="help" data-topic="pop_motif_positives"></div></th> - <th class="match_count">Negatives <div class="help" data-topic="pop_motif_negatives"></div></th> - <th class="match_evalue">P-value <div class="help" data-topic="pop_motif_pvalue"></div></th> - <th class="match_evalue">E-value <div class="help" data-topic="pop_motif_evalue"></div></th> - <th class="match_evalue">Unerased E-value <div class="help" data-topic="pop_motif_uevalue"></div></th> - </tr> - </thead> - <tbody> - <tr> - <td class="match_count"> - <span class="tvar_p"></span> / <span class="tvar_p_total"></span> - </td> - <td class="match_count"> - <span class="tvar_n"></span> / <span class="tvar_n_total"></span> - </td> - <td class="tvar_pvalue match_evalue"></td> - <td class="tvar_evalue match_evalue"></td> - <td class="tvar_uevalue match_evalue"></td> - </tr> - </tbody> - </table> - <h4>Enriched Matching Words</h4> - <div class="tvar_words"></div> - </div> - - - <div class="popup_wrapper"> - <div class="popup" style="display:none; top: -150px;" id="download"> - <div> - <div style="float:right; "> - <div id="outpop_close" class="close" tabindex="0">x</div> - </div> - <h2 class="mainh" style="margin:0; padding:0;">Submit or Download</h2> - <div style="clear:both"></div> - </div> - <div style="height:100px"> - <div style="float:right; width: 30px;"> - <div id="outpop_prev" class="navarrow" tabindex="0"> - <span class="inactive">⇧</span><span class="active">⬆</span> - </div> - <div id="outpop_num" class="navnum"></div> - <div id="outpop_next" class="navarrow" tabindex="0"> - <span class="inactive">⇩</span><span class="active">⬇</span> - </div> - </div> - <div id="logo_box" style="height: 100px; margin-right: 40px;"> - <canvas id="outpop_logo" height="100" width="250"></canvas> - <canvas id="outpop_logo_rc" height="100" width="250"></canvas> - </div> - </div> - <div> - <!-- tabs start --> - <div class="tabArea top"> - <span id="outpop_tab_1" class="tab">Submit Motif</span><span - id="outpop_tab_2" class="tab middle">Download Motif</span><span - id="outpop_tab_3" class="tab middle">Download Logo</span> - </div> - <div class="tabMain top"> - <!-- Submit to another program --> - <div id="outpop_pnl_1"> - <h4 class="compact">Submit to program</h4> - <table id="programs" class="programs"> - <tr class="dna_only"> - <td><input type="radio" name="program" value="tomtom" id="submit_tomtom"></td> - <td><label for="submit_tomtom">Tomtom</label></td> - <td><label for="submit_tomtom">Find similar motifs in - published libraries or a library you supply.</label></td> - </tr> - <tr> - <td><input type="radio" name="program" value="fimo" id="submit_fimo"></td> - <td><label for="submit_fimo">FIMO</label></td> - <td><label for="submit_fimo">Find motif occurrences in - sequence data.</label></td> - </tr> - <tr> - <td><input type="radio" name="program" value="mast" id="submit_mast"></td> - <td><label for="submit_mast">MAST</label></td> - <td><label for="submit_mast">Rank sequences by affinity to - groups of motifs.</label></td> - </tr> - <tr class="dna_only"> - <td><input type="radio" name="program" value="gomo" id="submit_gomo"></td> - <td><label for="submit_gomo">GOMo</label></td> - <td><label for="submit_gomo">Identify possible roles (Gene - Ontology terms) for motifs.</label></td> - </tr> - <tr class="dna_only"> - <td><input type="radio" name="program" value="spamo" id="submit_spamo"></td> - <td><label for="submit_spamo">SpaMo</label></td> - <td><label for="submit_spamo">Find other motifs that are - enriched at specific close spacings which might imply the existance of a complex.</label></td> - </tr> - </table> - </div> - <!-- download text format --> - <div id="outpop_pnl_2"> - <div> - <label for="text_format">Format:</label> - <select id="text_format"> - <option value="0">Count Matrix</option> - <option value="1">Probability Matrix</option> - <option value="2">Minimal MEME</option> - </select> - </div> - <textarea id="outpop_text" name="content" - style="width:99%; white-space: pre; word-wrap: normal; overflow-x: scroll;" - rows="8" readonly="readonly" wrap="off"></textarea> - <a id="outpop_text_dl" download="meme.txt" href=""></a> - </div> - <!-- download logo format --> - <div id="outpop_pnl_3"> - <form id="logo_form" method="post" action=""> - <script>$("logo_form").action = site_url + "/utilities/generate_logo";</script> - <input type="hidden" name="program" value="DREME"/> - <input type="hidden" id="logo_motifs" name="motifs" value=""/> - <table> - <tr> - <td><label for="logo_format">Format:</label></td> - <td> - <select id="logo_format" name="png"> - <option value="1">PNG (for web)</option> - <option value="0">EPS (for publication)</option> - </select> - </td> - </tr> - <tr> - <td><label for="logo_rc">Orientation:</label></td> - <td> - <select id="logo_rc" name="rc1"> - <option value="0">Normal</option> - <option value="1" id="logo_rc_option">Reverse Complement</option> - </select> - </td> - </tr> - <tr> - <td><label for="logo_ssc">Small Sample Correction:</label></td> - <td> - <input type="hidden" id="logo_err" name="errbars" value="0"/> - <select id="logo_ssc" name="ssc"> - <option value="0">Off</option> - <option value="1">On</option> - </select> - </td> - </tr> - <tr> - <td><label for="logo_width">Width:</label></td> - <td> - <input type="text" id="logo_width" size="4" placeholder="default" name="width"/> cm - </td> - </tr> - <tr> - <td><label for="logo_height">Height:</label></td> - <td> - <input type="text" id="logo_height" size="4" placeholder="default" name="height"/> cm - </td> - </tr> - </table> - </form> - </div> - <!-- Buttons --> - <div> - <div style="float:left;"> - <input type="button" id="outpop_do" value="Submit" /> - </div> - <div style="float:right;"> - <input id="outpop_cancel" type="button" value="Cancel" /> - </div> - <div style="clear:both;"></div> - </div> - </div> - </div> - </div> - </div> - - - - <!-- Page starts here --> - <div id="top" class="pad1"> - <div class="prog_logo big"> - <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAAAd0SU1FB9wLGwYBMoyhiwgAACAASURBVHja7Z13fFRV9sC/503JpIeaKFVREBQVEEFFQVcUuyDouuraFoVV17IrayPjDP4U3XXXhrpiXxuKKF1dV8WCiEgXRUAQlJIYAilMf+f3x3szmVSSkICyOR/eh8wr9717z7mn3XPOhRZogRbYLQiQJiJGy1D8D0LHjh1/XrZsmQK9gU3Ap0mE0QL7KTx411136Z///GdV1ZhpmvrYY4+pqsZUVceNG6dAz5Zh2j/hnpKSEtM0TVVVrfq/qmosFtMxY8Yo8CPQHejucDjyfm0dbZFp1WGaxmJ3ppSWSiQUIhQKIWJxehGhpKSE1LQ0uvfowQHZ2exYt65D8dq1qzUaXR2LxTYCP7UM4a8MVFWA9mY0+nLhmjV63LHH6vMvvKATJkzQfn366CtPPKEDjjtOV61apeeedZZqMKgaCKju2KFmYaFqJKJaWqqqqoACR/9a+u5sQT+IiD77zDPbKCnR00aOZPHSpcydO5fLf/972rdvTzgcZsEnnzDmqquYPmsW/PxzxbMOB4NPOokRZ5+tB3XrJsAUYKmqOkQkVuVVKUBGDRbGz/vSvPlfBHcVDpB7XP/+Gz9/5x1mzJ/P1i1buPbaa1m/fj1du3alW5curPvqqxobCoVCpKSkIO3a1Wc89bCuBy51OZwu1RgiBqGYGf1uw09/Bd5t4QDNT+wKfPXoxIl9jzm6gkt/OmsWn3/4oRIMyrfLlzPuzjvp27cvHTt2ZNGXX+K/7baaW8zJITM1lflz5wL8ZtWqVWm9evXaVcv7Q2cN6hM68tAuR2MIhirFpUEef+MdBFK1RQQ0v6g/MC9PLxk5Uq+/7joIBECSJmwwKKqKR4RTTjyR0885h2effZaNa9Ywa9YstKQkoQzGwSwuJhwIwK5ddO3a9b+9evWqjQPoSf16qUOQles2gYLL5WDaBwu5dtSw8L/eeKdFB2huaJWTo0NOOMF8wOs1qiG/QhfghtGj+dMNN4DblhJlZVBaWg35AIYI7NgBbjcbNmwwjz766I+WLl16OfCDfUs3YB3AAdke6d7tYNR2Jv6wuZA2rbIwxbFPxfD/jBn4t7vv5uUnnzRsTNelEEIoBKWl1qH1YM7hMAXffWcsWbBgMLAB+AgoAtYC5SJCp86dUTPG89M/ACASi1mDH4u2+AH2Bvzhpps+p3Xrmi+mp2Oa5h613y4nh1WLFuHxeHTq1KmDVbWVqjJjxozU4cOH88rsj1FXKteMOh3D4eQ/ny/hjnwfn32zyWUYxtAWK6D54YW1X355WbcePSr32elk1EUX8cYbb1gzvvG+BEzA2b49msQ1RARVZe7cuTzzjwl079qB6R8s4PhThjF58mQADjroIDZs2CAtBLAXFMEaTwaDe4R8ALKzEbcbVUVVE4hP/t/lctGnTx9+c8op3HvffQm9YubMmZx77rlic2Rzbw7I/5oreNzJgwapqqI7dqA7d1pHSUnyVG5Uw0MGD6agoCCB7IQ+kcQFIpEIkydPZszYsQmuoaqEw2H95JNPdOHChTHgervJT4DTWzhA08OjwGWT7r8/u3xXhckei8W47c47obwcMjMtsy9OEHUojdhI/M2oUXwwb16dIqKqJVFaWkJmZlal60OGDJk7b968M1SVsWPH8uSTTxYC7WmBvQIbV6xcGQK0aM0a3bRsmW5fu1b1559NLSzUakdBgXXYawC7A0CXLVtW7fzMmTOrnTNNU03T1OXLl5u1ia4WaA4lQbXVmDFjcoFcIHfJ0qUXqKqaBQXVCMC0kZ+MtNogEAjoli1bar0ef/bee++tiXDMFszsQ+jbt+/r1111leqOHZWJIBBQ7913azgc1qaAeABCVUKqQgBvAO8BL7RgZu9xhd6nnnpqNLpzp8559VXVkhL9ZOZM/X79+j1Bdm1sP2KaZix+rqioSBctWqSqejPw2KhRo+IPxjp06KC0rOg2p82AkE8O4zkbiAJ6ySWXVJLRjUW2qmqrVq30+eefr3RrFWYQf4+pqjpq1Khq7zYMY4/0g5agxppgPCnARcC1GPRFSUF5gAn0VNVz69vMkiVLWLNmDRdeeGGt93Tu3JmNGzfu1slkGAZbt24lNze30jWHw4Fpmo3GYwv7SIY7GYKD8UA/INteQFaKEL7iqBNPPPHYhjTXp08f+vTpU+O1rVu38sc//pE5c+ZgmiaGUbtLJu5HqMNdfYXT6VwdjUY/b+EAdXm9DMNlmmYrAA/I6SKe6ao/JM38v2Pw52oPrgV9Seu06RugTzT62ZogNzeXbdu2ISIYhpFmmmagxRNYC7Gbptlnw5Il29Z/9dW2H1ev3jpddQPwQ79+/f5k32NNsSpStdeSXonZ99JLL+0RAkWEG2+8samUU7Zt2xb3KKppmptbREAd43Vwly5fdDniCLS42DoRDILb3fnRiRPzLzzrrIdVlX9MeoKCw36GSMUIpaWlJVh0UVHRHiPt4YcfbhqKruxyFiDUIsfrhpWAfjprlpplZVZUb1UHTyBgRfnGD1Xt0KlTvR0++xIcDodecMEFCvxDVXv/79nrM2lnzuAanUWdnV8InzocDu104IGqO3aY+vPPWqOrt7BQdds2jcRijTLzmsg5VO93RCyCNa+88kotKCgosTnC6f8rIkD/PGcsQ044AYAZL9XOgkdfdlnxibEYuzZvjkpOjrN1q1Yc1Llz4p4Lzz+fcePH21qBidMwGDhwIA8++CAn2O1XZcWjR4/mmmuuoX///k2ruIjw9ttvc/755+9enjudAGIYBu3atctUVXr16vXOqlWrOovIpv169pszeX/yP/9Z+0xOPqLRymy+yvHp7Nl61tChetbQoTpt6tRaF2x+qSLh6quvTvw9adIkE3hrw4YNjv3WDNSZDEZ5/6Hl9zhvGjsWzKZbOykH0tu2Tdjie9H9XCmYpCHPjR49mqeffjqZi5iq+jQwVkTM/c4MVCUfcM564y6u+8ufmxRRV1xxxb6xWUUSR0Ofa2clqdgSzOTVV181otHoNTNnzjxjv9MBzBl0EeUUNeD9e2Dkfc/z53xPnUGeN4wezcFHHlmvwX1j1iwAJk6cuNf7tmLFit16CavCww8/jMPhSHZ+sWDBAi688EL97W9/O0tVPSIS2m9EgDmda8XgSRRFKvqjigooQh85h+Xx819BaxO2nQ/ODGAjrA5A9WyeTA4kg1y2UCnO75cOJ510Eh9//HGN10aOHKmLFi2a98MPP5y834gAEYaikIx8+7wAhpr8oabnpgMvA5/Av4C+1Y5bWMRoIJUXBg0apL8G5KsqH3/8cY0iUFWZOnWqnHfeeUNUtcPeJoBUwFPHkdoYbqQ+BBiitYVMWYs57iqnYskv0trEoGlzjXGMX7du3R3RaNMlcDz55JN1c7VGKrFVg1DjiE++duutt6phGAtV1dhbBHBW6+zM0iM6tSkccFTPwv6HH1o44KiehUd0ap34PahPr0Kga4MJ4CjOUWgjUgvxKIiDc8yZpMVPReEkrZ/uk2hz69atr7344ot2i3sOY8aMqRXJt99+e40yf9q0aU2iRHbs2FEGDhx4wPr1689sbiXwcDEck3My044ePWKo4dRwRjQUILPtgZRt34rDeTCxWJSs1rk8PmUOKSkeCYWCDSR5OiXQpLYggLCCS8TCv0CmmBWELtDNThPeKZBdzzdtuPrqqyU1NVXPPPNMsrKyqs26hkJtil12dnaN7HvEiBEN1kPatGnD9OnTOe+88yqdnzRpkoiIpzk5wMnZGWkrhxxz+HG3XHRqqsPplPKyMlxZ7dkVCODMaEtZeRlpOe3419S5dOt8ANFYrDHy/5i4wocgKH9Xg0MFvkiewVolqNKexu+p5TFIq+/7fve733Wcm5PzStzbJyK43e4mHbjbbrutmgyvmmdQX+jatSu1ia4tW7asbS4O0Mntcn5wxx9GaUlJiQQiiivFQKNhHAaEy8pwuj1kt8njqTfepXvXA+nToyvzvlzZCK2HYxGsf8oKPNxunE5U3+Kv6uBdBI8qHlEOB76sLiBQA04GfPV840/dIPDEV1/dd5lhXP0TLAmrzveIyKlnnXV3z549uSknp/Qf27dnDh06lGHDhu2RLG+M4ygOmzZt4swzz+SCCy6o8f7PPvtsS3MRwPI22Zn61LT3JRwoQw0noIg4UP0Wp8uNwzAQEbp3PZDB/Xqxs2xXwzs8B6dGcNvs3BST2+V0ogAynI/N6SwTYYCCC8FTnQEkwNEwqYNDwbgZCoAPROSBL6CLMXv2rctmz85eC5suX7Yss3fv5lmMi0QiqGo1ziMiZGdns2LFCjp37kynTp3w+/01EoqtDJY0FwEEI6FAzgF5OQw6vi/ZuZ2qsDTFYRj4n5pKSXmAwcc0cqBCHC0ODrFlf1TdLK6CqWUKA5IxvhwkDCfsoSY3AHhCLQKIZ+x4gNgy0KOgpP9RR5kh1QNVVZrafEx28lRF7M6dO+vFXbZt2zYzLiKbRQfof2QvBg/sh5HZlrJdAcp2BSgPBO0jRFnAUvaGDuhNWKVR+XhacQiwQkJsq9RRk9fFVgvjKCgHUTjY/j0TCNOApItnraacWAUgNgI9kr4n8Hu4HejxCVwhIufbkT9ah07RoD5PmTIFwzBqVCDrS2hjxozh0ksvzW1WP4DGPTGqlO/4GTEMMGMJRBticGiXA4hEYxAO1J17V7sCmJpkq70vw6shsrwWV6fadPGFQkSg+6dW9a7dQtuK7glgSAXxuA3IFbgnaQhmPvroo2kvvviiTJkyhfnz51ebsa+++mqD+nzRRRdVUxAbsu6hqvztb3/ToqKi9LfeessNuJqFAFJcTsx4UqXhsIY8o03i7x+3FfH1uk10ymvbKOTbLP4uxEaFWb3CVtw5ZP9f0yw37OttU6mkI9QK7SALONh+7geFTp9bhHBI8jsdkGkTQeDyyy+XRy6++MCJQ4aQ4jJwuxy4nQYOw2DqM4/w6KOPNsi/EJ/p4XCYYDCIiDBz5sz6IF9FhKysLFHVZ4YPH74DiDQLAfxnwTI8bhcA6QceCmrCrh1JyFGcDgebC7ZbMe+N0XohB0BNtkuUFdUNapYqrBTlWnawIPnRKm8z+sHO+rzTsPP3HfCdAcUKrRwWAcTZglj0WNmpNV+15OgLYMLYU/nsoYP4+w0D6NPzIFYu/YqbLDEhDZ3NW7duZf369agq55xzTr0IZ+TIkfTs2fMqEflns4qAXcEQD7000+pQeBehcMTqY0paJXZkGILDYbDw63UYTkcjGQGFMrJ6oUXjZEKEOEHOZbJcTsy+1wW018revtKvbGKqr3SzxYgA6tiNFxFg1nhy+x4coaA0g+8Lc1mxqSsOw8CMmYrAIYcc8pWIMGHCBD744IN4mjGzZ8+u9UM6d+5Mz5496yP7TWDh+PHj5c0337z5m2++eS75YnNYAUuBYcUlZRTtLKNtNjhTMyAWhkAJVCm57zAMPl60ktRUD4FG+Nu1jjUEYxQlVe51A22A4hDsTIEihdxwPXUAJ7QywWXP9gKgvQluhSyjMmEkOqmzOBqTawpLiKalf+WcumQkaZ7VRCMRwsEyycnKCq9bt+4e4G2v1wswbs2aNfcfcsghnH322XsU26CqFBQUGHl5eZMsCca/apSDTQxnAEsNw+Bfb7yDw+nAiIYs5ljDfguC4HQ5oQEeOX2LTsDRtgqwraHjIrDhBNgKfA+kOmFIPblNOhADchXuAGKm1auOSRbJarGqh6PT6YPJuTj4dvgDrPv7zJNp3+pHwsEQS77bqNlpLkrLylxVfBEP9OvXL7t169bFzzzzTKMJIO4YysvLU9216wWgNRDYGwQAdrFkj8dj6WmGUaupVx4MIohCDXK8ts45SMewuJdq40usaoUdbzRABDgU3hZrrwBxWs/GrdJLgamAQ+dyACnI1PlDNslZW5Z/tvxC98at82MSLg+nOwkhEvnHy+8QicYEeDP5JSUlJSXFxcVnXH311Yfcd999DepTfJFpxIgRiAgbFi+Oh8gJtWnCzQBvJ3ynBdvrObkaKPs18aDRAIRrfcVHLc9nWRYoOTbCU0LWgpJD4Zn+VoiBiIGDCA+tWt/5xElPnb/11uzhOfD6tNUb1sy654XZcx+c8v5MPPpM4Q0l5yb67k36tnyuwcsaYN2bb7652lbidzvjwUpIFZFvZ8yY8U9AFi1bJpgmpw4e7Hn8iSfa7y0C2BFXmMLRmGUFZOVZXKBKR9I8KbYzr/khDVphKYJxKGggAXSsgWhjapmBAfueoKTQ86ftbd4cNvZv342KPtj3b/4FC4C/AOfbxygC/BGYjJerKymY+dyNn6fwsR1g8eLFh4kFNdr+yev9IsLAgQMBnjFN8xawah8RCjH12Wfd2dnZf9pbBHCl9U1JXj61TfHUrEZX4tpTiMJRgEcrMPiuzbu7NcDqSDYHDCzF0p0w5WBtaSDd3fGKDwdc1/rO464bt+kZbmRrjY35yQMW4+VBNNH0kYnr3sS5/r17917bt29fzjzzzER0kmmaiAiHdu/OgL59WfzBB0QikUqv+L/HHoNWrcjOztY/33jjnap6dnNbAYmPq8S2DAcYTUdvWuGTq7PAnzmdozEpM4azNsmMe99G5nr791H1fGerJCL4RKCvEzpbcSd8Y99jOohFx7cfNf/JS9Yu5C4b+V5yUcZWoiA/d+NjCV4mIVxGPjvwVzJJ7yGfUvxMXLly5aH2uRduvfXW30+bNo1Vq1bN9Hg8Zxd8842069TJKoAdDlf65uVLl743b/bsUwcff7zx1xtvVBE5CpjV7ARAJbepQGlBHaK+gSqA4BZLoIeBGnOAzHcRCeJVAy9wElbd3jgU1TyhdwuH2Q+8HYMrndaagClgKBTbDao4gtnzTlr93YZ/sslm688AF+InM2l2tyKfAEIaPo7HyybCDALgrwzEzTx8pPR6rJesYlXyN1z+97///fKMjAyXx+OJANF2HTo4CNSaFX76I5Mn6+Djj+emcePkhWnTzli6ePH/NbcIALghMcBij7DhqHGkXbYTyOPxXFw/9sJVGveKhqkWSWK+TT8JsdJGfk1UmdKYDomle84Pw4VRCKj1uyPQmQo38I8pMe75eGqSVePnanxJyAfwUYyfVOAa+3enj679aMW9H99bFLwn+Ln6NWKapq66flWNxFlWVhZpqNiipIQ+3bufoKr/anYCcDqdyypZ+6oEgoGqwbuEI1Fuu/J8cjLTFOhUrw4ZpCS5X6uy/KEYzEfoJdVV/Y72gMQX0x0NHIc0gc3HQ2SQlXi5zrAcLO74esMxML8//LsBQ/U1+TyOFx3yxJCH7njjjpM9Lo+ISIZhGPVhjY7vvv66Tg722cKF4HKBKrfecIOKyEnNTgAulyvJTWmha9eW7xEUl9NRKcwpHImi2mCTrDboIVW2hEl65veSNCkUFoiFyH71fGc/S5dMNBKxiSgSg28bOVSfIUxC+fCREY+s59GKHIZ6Qu+1dRealq0FBectWLBAAXr26SM9DjnksCVLlvTdGzoAYhgEy3bgycgmvU0eGijhgHatq/mw60fsu9ccpGK5tyZiidp/L7bPXwakaP11ALcJHye1G8WS/+4YBBs1QD4U+Bo45U/+PzXK9e5yuSq6XD3aWIEZp40cKSUbNyrl5fLa5Mn06dMnrVk5gL0Vm+XtKy4EEVLSMkGEDZsLKsKi7aybmy85m2CwYWOoDSeUDvbfZQthmgF3S8NCvdVIcqfO5oznT2POfxww5Xj4jn0Dg6KRSJyd0uGgg2q8qbSs7IzNP/0ksViMjPR0Jk+e3LwcQERmqypqmrTueDCoJpb+K0W0CIgKu4JNU91E6yYE077+qgGt1FoXkPrQ0nJwhaBrhUqxsN/duLIBTz+YyL6DBWaSuR0Oh2vMZDZEPuzQu3eJqmYempe3CXikua2ADBGxAkOo0AUioSrmSkome6sWssI2+0vi9nz8w7IWWG7eWmGXpVekAz/Cyr5geCD2M5hL+IWAmiaFRUU1LiCZqiERWSYiAaDL3jADUVW6dcy1RlmsSOBoMgGoWg6iRkYFST3PKbDQ0tYHUF0/UIEsl4XcOtcRBCKTuMYNWg6aB/IK9Iv9UghARKo5gqrg46SsrKz2e8MVXAnHoJDexqbS5HAMgWBZk7J7Tfo/mfdErb46arLt6/MuAzmojPSVU7i4OwT7gsyDfr+oqlyqWrHbWS1QUlJSvldcwTWlMZmmSVp2a3YW7UiSylEUSE9NaeIPoFwAFdJFCRh7mAp/LLo5j9e+DZAxEPgDHFP6S0G8y+UCtxsxDFrl5OAwjB9i9UwwbRYCSE1NTVFV0jzuauxZq85XO7Pz+Rkf4XanEA7Xf1JJ7d66dUQZpk7mohyCtQCkdbUT3s1YCItag7YB9wg4KvhLmvnDkmoR2/L/jfo+21wi4OGYaeqNvzuLmGnaYeL2QDprZlE/7yhtsC9Aa+7RQkyOM0awNp4cqyYxo3osQPJvtxN+U/fbytdD/zN/aciPm9zxgwZyuuYiAAUkGAoTLN2BiAFlRVbwlMOdUFhcTme1Ldb2WBE6h4XG+RRW0gOcGAYcYfdXbeSLwncmPG/fuxsZNHj3PNXLoc2K6b9wYigSupwbGNug527nZrxMx8uBe4sAKsynnUVWSFgSbYgITofBh4u+xu1qvBTanQEvlf9ok6R6isKiGBzeiJjCuuD4ZhvIfN7DyTtRjT6vj+gk7iJGvrUEXQdBtsPL53qvrsbHefjYvNcJoE3nQzFj8awgC11tsjO57OzB/PDTNis82jSJRmON4TMOcXNCXaZbTQShMMMJJw5M8utT+e+KJmJEGvBF/ya/0rJz04Gf05hIevq49C4dHuwgOkEnTr94+pXG3UYxXsprQH4PrEDQITEz1mGvKoGVNP9YLCGI4/hwuxw899qHiQCRcCRK6a5Ag6phYWn4DkyOISnAIXFtFjlqkpcsEW1q+MgDI3tXlIOOV1o+A3im0uRQbuGeKtE8Xt6ASkEoG/BhpeH6MPEyGS95+GqJAtpTeIiNm9kssk3ye3ftfT3wb5SX8PIZJrOZwL3cxFCUTvh5FqB/Xv8ruZNcHDyBn6K9SgAJuW6HhyngcDj3SN5rZQO+ZtYRpZc4yNDqzy5OQj6KpS9QOd4PDCbhY2MVNjwNHyOqEMQBeNmAcjF+PsdysZ6FFR3cfJDKSyu2rTDwsxYvxUC7Nultvp7749z/e+ubt7hv6H3xYNO3T+t2WtclY5fcszeVwKpmScULDQc7Nm+o17NL4IAaiUoxRHfLHQ6KZ2mQTlShVy3WY827bFRFvsWGR9Rw3xZ8dMXP53h5Dx8BlEnNrvr7+R5hjv0NrVCuL7qtqMexHY+VNFcaqvoR+UTxcf7EoRPz97YVUAnh5TsqZ25Z6wG1Y3ARdPsSvozC+Fq8iy8ma/k1EolB3wSq04hRS9yfNOVChDKKfD7GT64d5CE1yOamLBjQm3y+sAniIfJR8vnD+Nnjh8pd0gc/zqlfTxXqSH5tdgIQh5NYknPHNGO07nCQlRHkMFizcUul+7+EEQrLgWMEMudXDuOOY62Iiiz002tBRq5URnQ8O2JHLZ/q+XRPRaKfnfg5iXyOAYIog2v4rqvx8h7eSvpG48BHCD8D8NolboQr8PM0afyH/yP7uSXP6cjDR6qIPLbPCKDs581ktM2rpIkbTjfZGWm4nE4Wrfo+ce30aPQ0gdelIk1suLPCfKvNDGxXTfGciaHKwBruj5kwt5bmfmoSVuAlHcGNn1uQJI+cl1S8BPDzND5Ow5fIB2gKOAkvgo8X8LIVH4KXdVf2uVLI54p94QhKhP6nt26PiGHrAla9gFgsyvUXDSMQDNOv18EJVt5F9US1F2xs5LqB3+7GE5ii06tk95aSJkJ2LSKiqkNnrcIcAy48sWZTsKGzshyYZn/gNXjJJp8XUVrjs4paNDn4OBl4CC9ulP72uW54KUCYXdejzWYFHNyhPSJimYGGEzSGQ6Ns27KJtq1y2BUKgcbo0eVAAqEwrbMyMIp3uqtYbS7g8M/BcVwVbV8FEUUx6KIx+gIfJC5mcCbQVuIpRy5q3WHTgMIoXNKPKra0lwwUL5L0XqsYXVHco4iSDfyIn8cT8t0K8boLL0OB2cBDwN0Im5uV1fqI70S1KencbncdbzYC2Fq0w1oRVAVPBlq+nSlzP+LIzq1p1+aYRKZQLFEfUCv7kSvs80tdcC8VSRyIEFOTXRikq5WVcYr5Jh8aF6Dm2xgoN2Hlo/5HlFOD82kLdsx9FehnvW5HFXOvLVao9yuAQRTFQRQoRVmAUGqXoC0CnHgZh9IJpTtesvDxNF6eQ/Hhr+Id9HIYVuyBAEvwsU/jCZptLSAQClcIanEQDEdZvbmYEjMlYRq63W6m/OdzAqEwRTvLksmgIMlec8bssiwJ2Mk6YGVivV8ZKS477l7JQ+hjhyGEENAwTir0it33WSgGvkH4FlhVMr4kHViG8D1CayAHP53x0wc/vfHRFZgBPAisw0suEKiG/HwUK5l0FfD1HiE/n3FNgahm4QDJAaEgEA3iSXFxxx9GgghqmoghqEKq221XXDLi4rnIztm7LE4ADhgO/DfR4qWY5vREHJGqcChwhU5nKvCICh5bh1ibrAQohBywsR7sNEZS8GeWL+sTVT1fRKYnIWAW8Cx+W977GW4j/jzgRdTOcfAyFzgN2IKvCU1AaRrcNRcHGNOtY57l7bM9gPEUIVEzyTsIwXAET4qb1tnpcc3RNGGjWCHcaiPy5K9qswbssvCi/E2Fb9XgAtFEINKcKq7gsEKjQpAqId9C+NkIHrxMJZ8rbcLZBrwOvIcQxcst+DgDHw58VTyNzQVeO9MI4E+cz1+rW0PNzgFEhB8LiiqigtQEhxuJhSElA8JWZdBIOMzFw04gEAqT17YV5s/FCEwOw/1uuFEgw9L36Bi1qm58DqBvISqsUOhvl4lVxMrSTSDf0hVMtf6PU44a0wAADOxJREFUn3I2qcD18YqtJ1js3Y/gs7dq86JNMuO9OFBS8e+GcL38AZiAz/ae3sIgfVD/DVwo98veNwMPaJNTMdMjAUhrXaurWFUZecoATNMkBl96rLy7Fyo8v2Q54KoEgQ1HxeRf8ZTqeLl4iXMEQTD5UiN8KyDFy+gOuAVGD6SGlbOmYcmLbUSk2cUeXE3UsgehG16OrOJFrIrVc/FxAF4EL7dKpqwTkUzJl6v3jR+g0lqAQLicJKldjWNErcgh0wFb+kFU4Lvk5VyF3E+pZEerUPtSrQg7RXAA6wrnkgrc1h9ea0YzrJ9tBu6yZ36sidotx8cylP/aJibkEyJ5BTSfyfiIb2t/JcpoRXfh5SGEW+pyPze7J9CMRSzEh8vt11X+lnhmcHFJGbtgmwkLbYTPxpbX9hMnpVvr2xb2f2IpymqtzUOovI6DHRRzZHgbT/SHvze7/PUlqZy+Jk528NMOr+3UEYL4WJbk2ppuE8Ig4EH8dMfaMfRW/Gys61uanQBKCjYj8WqhalZUDgXEcLD42/VEojEem/IuLpcz8aUGbLft7PipzCgk0seN64iqEJUaOI/d/Eo5n1K5nED/2v3/vzaovnI5nmKdoGWMYxTwHj5a4eVRfLyOb/fBLM1OAK7UNKLhoB2IZev0CfvOwdpNW4nFYjgEypTCATbCTYvdB5NYhgGc+kVyAoda8Xw1sIAdmKxkfwMf99j6Raatb/TAYCxw76Aeg/6CnzTyeRz4x742AxOQ2ToPrSNGPVEvwDA40TTzAeZDZwP+A/TQCnkPMESS6wka/KhKTLWyG1FMJhvDKWV/BCUdtXZCE6QNPl57/MvHp8/fNH+aPaAd8FV4TfeZK7hCyzdxuOrOVkn1uGmdlU7fguDOhTBArLp58Uze5AQfF3AmtoUg5bxDGisQjrb3CUSEsLIXAjL2FfjZBTyLl+s0omNV9XC5XT5iIifjJYqvYTjdK9vGWYtCUWKRcC1EAqaVMpYr8K5ABxvzPyu8lMQFDIE+iXZ/S7kq/1TTrk5v7Rs03TiXH9jfQXno5d++/FdLg+YW8nkJu0DnL44A4gpf8eYNSKisxpKx9se8FN/JS+FHE07TuPPHeqrs2zwrGijJ3HsT4d9qEkL5gihj+F8AofCSIy+ZLSJiHGCkImTga7jes3cIQBwI0LZL90T5uNQUN0n1+uJOI6ddSvI7gcEDYEnMEgfrDNh16ZVMuOyaymvqci7l4uCPAscS5UQZYVXr+kWCFw/5XNpErT2Bl3mQKA/bqHLre4cAnCnWHLZdww7D4PE33sPpMDBVCYYjyRtHLVc49RirkDMu+DkTplx/Mb5VnVmFn8+q0ddZlMl5LDdGNCiGf19o8UHgVbw82ARtTQBOAejVvtdCfAxvHAHk4yOfmXjrXTO/8X7BlIxEQfUtQ4sItg9y5KGdMU0zTsWLIzDk2KSghmPAPOxe5n9+KFvxVY///xUqcTEaUBl9N0QQA/j6uq+vNk1zTuMkSYU78SWEQpQZ+PlwT74rNTVVO7RvzUWnHR93BliewMxcKN2G4XDwwLzpDOvQhz7du7Jm4xZ6z/n46xNUj64WljWeS1Bi3NOMbtx9AfHFoyYA0zQLDcNot2ciwM+l+LgZYSNeFC+X4G1qEWFxggm5r+PY6CAtxY0gvDx7Hk+53RdUQ76X36HsqIz8+Zn7iTkn5DeByPJiNhb5NesAPtbZixkLgbHkN5VHTatSLa/O+RhPiguny8VmkUiVGTKSGC7uSQ5qXDQK3K79hgsIfcnn/AZwjYer/P4C355NUqfdkA+pISJWWY6fI8hnIjALP5820htklYhRZYO7gKtWnMorfMp5pwwkGI4kfAVJbP8iYDJBKuLJ+eIWYCZEOmCtE/z6wccK8rmMpP0V6pjpU/BxUdLvl/FZNY/2nAD8NdfUxcsg8ilE6IFyCV5W4KvfDluVIFwOqZmwcyuSYmA4LKI9uEP76hWtLLb/AlBi+Ym/NICnQB8FvRKMf+5nFv3h9UD+DnxJSnp+EwWb7NYM9PEpftqhBBC6AB3twMbdTPgqhWAMB5QUgOEg3eXh6TffQ0Qo2F6FlsZzMcrLdrybsOVQB+gLIK+CXAuOt2BA4X6Ffj9nkV9rsgp4ObkS8r1kIPRtqtcb9fzIAPA8ynm28vJinaJNhEAwnCAGQwwrLkuVVzM/AXFgqtIxtyLML3RuaBjCYwl1IepciCttEX89+Wt6z/kdyELo+2UT59b9UnSBTnWoTq/ZiBe8DEK5CB9L9i4BWNxgJX7uxctHwH/JR/FyYhJbOiX+ZyQa5dQB1qbQhsNBSeFPliQIlFVgT8HjdlG0s8yOCMZEWWR/1TpWn5rJc08fyf0fLGHFsC/gmOftJw8mn6f2G+RbBH2pHcxRVel7Fz/xfX4PQTkFfxPkFO6RJ9DHEPy8gHAqMA8vx9lX1sRr0LicTuZ9ZW1yoKaJM8WDqsmM7C+4qei8Srs0/LClEIfDIGVGynsIp+HmFe5eOJVpvkugJAbGRXDsU/ZglaL0wZ8U+frrVwQVH0uRiiLUSVCSxAmm4cff1K937sGH/9f2JBaTz834eZ58lgNHqipOO9RLVUnNbGU5AtOzeOfdJXhS3PHVPwxDCF4TRLbLQGLi5a4VCrumoOEfIethkDH2bFhUbdOFX+aMdgC/QdmF8AJWfkFOPcLCT8FLb3yVts9bYre5EpLkfjwFLZ9DgG74G7913p7HA/hpRT7r8PIwPrLx8qg8IDbRWmG7ajggFkVRHA4rUbRjbmvmZixma7diPE95UId+ESyb1xVCr8Gx38PCiRC8CU6M4OXf+DjmVzKjY8B7NpK6JbHzOVh7FK/Cz4QanvwUrVjqTngKrXE9osq9t5DPQIQVifI0+4wALCLoRj4R8jkaMEzsDaPsAD1JyYRdxYm9/qKeGMHLggzddjzlgRCPx94lFnr8jyAvQb/vYeEEcE7Ce2w7YAE+OjdgBrpQ2iEU1icmrllZe+UxOrMScoUsfElRSz6ieHkT7L4KP9Rg++cA3yRi/5tEBHiTskkra58K5FCRVJFVp+3px0U+EZQRsQGxQ9Z/UnCa3RErGFSE7Fg6ZZlBUtJcXLJtCAK0ykq3zcZYAI5dAgvvwBF7lbuOPQblM6TyTty78ZTFgHeAMfALthYsS6ojXlYB1wMz8KGChBQFL2vw0ZX8JP+Ml09QzsHfdMiPc4D7azFNFDgQiODjbnuAb0bwxNGKcritqMzBzyybCFbHesZSnfMrPLYhwrgEWpmZzB+0mq7rc3FJ5eVrd9qNzwWdb9/K1cMGk7F9O7ABfz02dsznLWA7wiZ8jVsT30dE8CPQCS9DUd4ARuoOvfH292/X+96574JEZpFVfHKUbYI3eXSz7IadrrQR3BqlE0IaVkxeCJ+dj5/PowijgFyUE4AhrlmuAZGzI+fesXkkgrI6awcHl+XwwAFvcvyMXmwpLOZ3ZwyC9Na4gsXc88xbRA+68TPOes4gs+hKrMIQB9jf9yjCw/iS4vy8ZAPHAq/gox2/ZogrdF6+xcdhtnjItJXHTsBIfM2X0+DcjRw7ogbNcztwpR2eHEM5AR834KUz8APCBZEhkb84J7pY/4dtFLp2MiDSn+ScTDNeNNL2GEZvimA8mPeymVW0EFiDErMVIAOftRN3Jflp+c4v+NUjP1lX8HEYXhaggM8eLC/rsfYoajYCkEZSbW+U9ggG8B5KCTADP5fhZYkUSh5l5LXrlMXBgVx+Ez0JgqXMT/+G0vcCDO53OKkeD2ZaNs+lvc62B0rR0bHbtJ1+AzjxMy1pZjyFtd9uJjAK+BTffpPoUZNIU1tHUGAw/hr9A/vYD1DZVhW8HIdyDfkoyunaVt+lLRRHykihE0TDoCZhiWCq0io7g03fLufLo8ro9+khvNd9GeHW0ZsQXsbHX2wl9HK7ysZMhEvw8R/2d7C8gr9JKIp7xQvd9J24C2UGWLlrKeoiKjFu2zycmGny3oIVnH1aX/xZr3PnllGoKve2mUrqI6ndAuMCG7Ayf0pQyvGTQQs0KzRHUOgw/CyPk9ag8p5cuv0UAhKh+KfvibYx+XDV19y5ZRTRcIiH8mbieMZJcHRwNMpbKCUoHVqQ/2slAB+D8CKe+z0XuF9wU2IGOCCYzbK0DSw8ooRdrYJsWlWEAu+3W4G37CLMo00Q0hA+x4/gb+aKWi3QrBwAfKiIFOKEHms74ED4MHsF3QMHkvdjNtt3lmkwFObbnVujTy59d6drvnOjpmm0Vp9EC/zKCMAGx2ZHzAyHYmXbC2JXLTgilrOmNHZc58xYaSDMP16cPsN4zXHk+sHbMsO7wl1wM67Jc+pboJmsgPrBAlXNKy8uIJN0XA7LMxiOmfGNnQpLS8tIeO/2cb28FmiBFmiBFmiBFmiBFmiBFmiBFmiB/wH4f+jryq6sRdUDAAAAAElFTkSuQmCC" alt="DREME Logo"/> - <h1>DREME</h1> - <h2>Discriminative Regular Expression Motif Elicitation</h2> - </div> - <p class="spaced"> - For further information on how to interpret these results or to get a - copy of the MEME software please access - <a href="http://meme.nbcr.net/">http://meme.nbcr.net</a>. - </p> - <p> - If you use DREME in your research please cite the following paper:<br /> - <span class="citation"> - Timothy L. Bailey, "DREME: Motif discovery in transcription factor ChIP-seq data", <i>Bioinformatics</i>, <b>27</b>(12):1653-1659, 2011. - <a href="http://bioinformatics.oxfordjournals.org/content/27/12/1653">[full text]</a> - </span> - </p> - </div> - <!-- navigation --> - <div class="pad2"> - <a class="jump" href="#motifs_sec">Discovered Motifs</a> - | - <a class="jump" href="#inputs_sec">Inputs & Settings</a> - | - <a class="jump" href="#info_sec">Program information</a> - </div> - <!-- alert the user when their browser is not up to the task --> - <noscript><h1 style="color:red">Javascript is required to view these results!</h1></noscript> - <h1 id="html5_warning" style="color:red; display:none;">Your browser does not support canvas!</h1> - <script> - if (!window.HTMLCanvasElement) $("html5_warning").style.display = "block"; - </script> - <!-- description --> - <div id="description_section" style="display:none"> - <div id="description" class="header"> - <h2>Description</h2> - </div> - <div id="description_text" class="box"> - </div> - </div> - <script> - if (data.description) { - $("description_text").innerHTML = ""; - $("description_text").appendChild(make_description(data.description)); - $("description_section").style.display = "block"; - } - </script> - <!-- motifs --> - <div id="motifs_sec" class="header"> - <h2>Discovered Motifs</h2> - <span><a href="#inputs_sec">Next</a> <a href="#">Top</a></span> - </div> - <div id="motifs" class="box"> - <p>No motifs were discovered!</p> - </div> - <script>make_motifs();</script> - <!-- inputs and settings --> - <div id="inputs_sec" class="header"> - <h2>Inputs & Settings</h2> - <span><a href="#motifs_sec">Previous</a> <a href="#info_sec">Next</a> <a href="#">Top</a></span> - </div> - <div class="box"> - <h4>Sequences</h4> - <table id="seq_info" class="inputs"> - <tr><th>Source <div class="help" data-topic="pop_seq_source"></div></th> - <th>Alphabet <div class="help" data-topic="pop_seq_alph"></div></th> - <th>Sequence Count <div class="help" data-topic="pop_seq_count"></div></th> - </tr> - <tr> - <td id="ins_seq_source"></td> - <td id="ins_seq_alphabet"></td> - <td id="ins_seq_count"></td> - </tr> - </table> - <script> - { - var db = data.sequence_db; - $("ins_seq_source").innerHTML = db.file; - $("ins_seq_alphabet").innerHTML = dreme_alphabet.get_alphabet_name(); - $("ins_seq_count").innerHTML = db.count; - } - </script> - <h4>Control Sequences</h4> - <table id="seq_info" class="inputs"> - <tr><th>Source <div class="help" data-topic="pop_seq_source"></div></th> - <th>Sequence Count <div class="help" data-topic="pop_seq_count"></div></th> - </tr> - <tr> - <td id="ins_cseq_source"></td> - <td id="ins_cseq_count"></td> - </tr> - </table> - <script> - { - var db = data.control_db; - if (db.from == "shuffled") { - $("ins_cseq_source").innerHTML = "Shuffled Sequences"; - } else { - $("ins_cseq_source").innerHTML = db.file; - } - $("ins_cseq_count").innerHTML = db.count; - } - </script> - <h4>Background</h4> - <span id="alpha_bg"></span> - <script> - { - $("alpha_bg").appendChild(make_alpha_bg(dreme_alphabet, data.control_db.freqs)); - } - </script> - <h4>Other Settings</h4> - <table id="tbl_settings" class="inputs hide_advanced"> - <tr> - <th>Strand Handling</th> - <td id="opt_strand"> - <span class="strand_none">This alphabet only has one strand</span> - <span class="strand_given">Only the given strand is processed</span> - <span class="strand_both">Both the given and reverse complement strands are processed</span> - </td> - </tr> - <tr><th># REs to Generalize</th><td id="opt_ngen"></td></tr> - <tr><th>Shuffle Seed</th><td id="opt_seed"></td></tr> - <tr><th>E-value Threshold</th><td id="opt_stop_evalue"></td></tr> - <tr><th>Max Motif Count</th><td id="opt_stop_count"></td></tr> - <tr><th>Max Run Time</th><td id="opt_stop_time"></td></tr> - </table> - <script> - { - $("opt_strand").className = (dreme_alphabet.has_complement() ? (data.options.revcomp ? "both" : "given") : "none"); - $("opt_ngen").innerHTML = data.options.ngen; - $("opt_seed").innerHTML = data.options.seed; - $("opt_stop_evalue").innerHTML = data.options.stop.evalue; - $("opt_stop_count").innerHTML = (typeof data.options.stop.count == "number" ? data.options.stop.count : "No maximum motif count."); - $("opt_stop_time").innerHTML = (typeof data.options.stop.time == "number" ? data.options.stop.time + " seconds." : "No maximum running time."); - } - </script> - </div> - <!-- list information on this program --> - <div id="info_sec" class="bar" style="position:relative"> - <div style="position: absolute; right: 0;"><a href="#inputs_sec">Previous</a> <a href="#">Top</a></div> - <div class="subsection"> - <h5 id="version">DREME version</h5> - <span id="ins_version"></span> - (Release date: <span id="ins_release"></span>)<br> - </div> - <script> - $("ins_version").innerHTML = data["version"]; - $("ins_release").innerHTML = data["release"]; - </script> - <div class="subsection"> - <h5 id="reference">Reference</h5> - <span class="citation"> - Timothy L. Bailey, "DREME: Motif discovery in transcription factor ChIP-seq data", <i>Bioinformatics</i>, <b>27</b>(12):1653-1659, 2011. - <a href="http://bioinformatics.oxfordjournals.org/content/27/12/1653">[full text]</a> - </span> - </div> - <div class="subsection"> - <h5 id="command">Command line</h5> - <textarea id="cmd" rows="3" style="width:100%;" readonly="readonly"> - </textarea> - <script>$("cmd").value = data["cmd"].join(" ");</script> - </div> - </div> - - </body> -</html>
--- a/test-data/dreme2.txt Wed Apr 25 12:12:47 2018 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,68 +0,0 @@ -# DREME 4.12.0 -# command: dreme -oc dreme_out_adv -rna -norc -p dreme_test_sites.fa -e 0.00001 -mink 4 -maxk 10 -# positives: 1000 from dreme_test_sites.fa (Thu Apr 19 19:09:45 CEST 2018) -# negatives: 1000 from shuffled positives -# host: ThinkPad-T450s -# when: Tue Apr 24 18:44:36 CEST 2018 - -MEME version 4.12.0 - -ALPHABET "RNA" RNA-LIKE -A "Adenine" CC0000 -C "Cytosine" 0000CC -G "Guanine" FFB300 -U "Uracil" 008000 -N "Any base" = ACGU -X = ACGU -. = ACGU -V "Not U" = ACG -H "Not G" = ACU -D "Not C" = AGU -B "Not A" = CGU -M "Amino" = AC -R "Purine" = AG -W "Weak" = AU -S "Strong" = CG -Y "Pyrimidine" = CU -K "Keto" = GU -T = U -END ALPHABET - -Background letter frequencies (from dataset): -A 0.221 C 0.245 G 0.221 U 0.312 - - -MOTIF UUYUCY DREME-1 - -# Word Pos Neg P-value E-value -# BEST UUYUCY 387 210 2.6e-018 3.3e-013 -# UUUUCC 147 75 1.8e-007 2.2e-002 -# UUUUCU 155 94 2.2e-005 2.8e+000 -# UUCUCU 94 51 1.3e-004 1.7e+001 -# UUCUCC 75 42 1.1e-003 1.4e+002 - -letter-probability matrix: alength= 4 w= 6 nsites= 459 E= 3.3e-013 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.294118 0.000000 0.705882 -0.000000 0.000000 0.000000 1.000000 -0.000000 1.000000 0.000000 0.000000 -0.000000 0.474946 0.000000 0.525054 - - -MOTIF YAGG DREME-2 - -# Word Pos Neg P-value E-value -# BEST YAGG 600 416 1.1e-016 1.4e-011 -# CAGG 441 304 1.5e-010 1.8e-005 -# UAGG 232 165 1.1e-004 1.3e+001 - -letter-probability matrix: alength= 4 w= 4 nsites= 793 E= 1.4e-011 -0.000000 0.692308 0.000000 0.307692 -1.000000 0.000000 0.000000 0.000000 -0.000000 0.000000 1.000000 0.000000 -0.000000 0.000000 1.000000 0.000000 - - -# Stopping reason: E-value threshold exceeded -# Running time: 18.17 seconds
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/dreme_fimo_input_1.xml Thu May 17 14:11:00 2018 -0400 @@ -0,0 +1,99 @@ +<dreme version="4.12.0" release="Tue Jun 27 16:22:50 2017 -0700"> + <model> + <command_line>dreme -oc dreme_out -norc -p input.fa</command_line> + <positives name="input" count="1000" file="input.fa" last_mod_date="Wed May 02 16:37:00 CEST 2018" /> + <negatives name="shuffled positive sequences" count="1000" from="shuffled"/> + <alphabet name="DNA" like="dna"> + <letter id="A" symbol="A" complement="T" name="Adenine" colour="CC0000"/> + <letter id="C" symbol="C" complement="G" name="Cytosine" colour="0000CC"/> + <letter id="G" symbol="G" complement="C" name="Guanine" colour="FFB300"/> + <letter id="T" symbol="T" aliases="U" complement="A" name="Thymine" colour="008000"/> + <letter id="N" symbol="N" aliases="X." equals="ACGT" name="Any base"/> + <letter id="V" symbol="V" equals="ACG" name="Not T"/> + <letter id="H" symbol="H" equals="ACT" name="Not G"/> + <letter id="D" symbol="D" equals="AGT" name="Not C"/> + <letter id="B" symbol="B" equals="CGT" name="Not A"/> + <letter id="M" symbol="M" equals="AC" name="Amino"/> + <letter id="R" symbol="R" equals="AG" name="Purine"/> + <letter id="W" symbol="W" equals="AT" name="Weak"/> + <letter id="S" symbol="S" equals="CG" name="Strong"/> + <letter id="Y" symbol="Y" equals="CT" name="Pyrimidine"/> + <letter id="K" symbol="K" equals="GT" name="Keto"/> + </alphabet> + <strands>given</strands> + <background A="0.294" C="0.209" G="0.164" T="0.333" from="dataset"/> + <stop evalue="0.05"/> + <ngen>100</ngen> + <add_pv_thresh>0.01</add_pv_thresh> + <seed>1</seed> + <host>ThinkPad-T450s</host> + <when>Wed May 02 16:45:34 CEST 2018</when> + </model> + <motifs> + <motif id="m01" alt="DREME-1" seq="ACTAAYH" length="7" nsites="405" p="371" n="75" pvalue="9.7e-061" evalue="4.9e-056" unerased_evalue="4.9e-056"> + <pos A="1.000000" C="0.000000" G="0.000000" T="0.000000"/> + <pos A="0.000000" C="1.000000" G="0.000000" T="0.000000"/> + <pos A="0.000000" C="0.000000" G="0.000000" T="1.000000"/> + <pos A="1.000000" C="0.000000" G="0.000000" T="0.000000"/> + <pos A="1.000000" C="0.000000" G="0.000000" T="0.000000"/> + <pos A="0.000000" C="0.600000" G="0.000000" T="0.400000"/> + <pos A="0.471605" C="0.244444" G="0.000000" T="0.283951"/> + <match seq="ACTAACA" p="108" n="10" pvalue="2.6e-023" evalue="1.3e-018"/> + <match seq="ACTAACC" p="62" n="7" pvalue="9.5e-013" evalue="4.8e-008"/> + <match seq="ACTAATA" p="77" n="18" pvalue="1.5e-010" evalue="7.4e-006"/> + <match seq="ACTAACT" p="62" n="16" pvalue="4.4e-008" evalue="2.2e-003"/> + <match seq="ACTAATC" p="35" n="8" pvalue="1.7e-005" evalue="8.8e-001"/> + <match seq="ACTAATT" p="48" n="20" pvalue="3.7e-004" evalue="1.9e+001"/> + </motif> + <motif id="m02" alt="DREME-2" seq="YTAACA" length="6" nsites="197" p="170" n="59" pvalue="1.8e-015" evalue="9.0e-011" unerased_evalue="6.8e-031"> + <pos A="0.000000" C="0.365482" G="0.000000" T="0.634518"/> + <pos A="0.000000" C="0.000000" G="0.000000" T="1.000000"/> + <pos A="1.000000" C="0.000000" G="0.000000" T="0.000000"/> + <pos A="1.000000" C="0.000000" G="0.000000" T="0.000000"/> + <pos A="0.000000" C="1.000000" G="0.000000" T="0.000000"/> + <pos A="1.000000" C="0.000000" G="0.000000" T="0.000000"/> + <match seq="TTAACA" p="118" n="38" pvalue="8.6e-012" evalue="4.3e-007"/> + <match seq="CTAACA" p="63" n="21" pvalue="1.6e-006" evalue="7.8e-002"/> + </motif> + <motif id="m03" alt="DREME-3" seq="TCTGT" length="5" nsites="220" p="208" n="101" pvalue="1.9e-011" evalue="9.2e-007" unerased_evalue="4.4e-007"> + <pos A="0.000000" C="0.000000" G="0.000000" T="1.000000"/> + <pos A="0.000000" C="1.000000" G="0.000000" T="0.000000"/> + <pos A="0.000000" C="0.000000" G="0.000000" T="1.000000"/> + <pos A="0.000000" C="0.000000" G="1.000000" T="0.000000"/> + <pos A="0.000000" C="0.000000" G="0.000000" T="1.000000"/> + <match seq="TCTGT" p="208" n="101" pvalue="1.9e-011" evalue="9.2e-007"/> + </motif> + <motif id="m04" alt="DREME-4" seq="SCCAGG" length="6" nsites="58" p="58" n="14" pvalue="5.0e-008" evalue="2.4e-003" unerased_evalue="1.5e-003"> + <pos A="0.000000" C="0.620690" G="0.379310" T="0.000000"/> + <pos A="0.000000" C="1.000000" G="0.000000" T="0.000000"/> + <pos A="0.000000" C="1.000000" G="0.000000" T="0.000000"/> + <pos A="1.000000" C="0.000000" G="0.000000" T="0.000000"/> + <pos A="0.000000" C="0.000000" G="1.000000" T="0.000000"/> + <pos A="0.000000" C="0.000000" G="1.000000" T="0.000000"/> + <match seq="CCCAGG" p="36" n="9" pvalue="2.7e-005" evalue="1.3e+000"/> + <match seq="GCCAGG" p="22" n="5" pvalue="7.1e-004" evalue="3.4e+001"/> + </motif> + <motif id="m05" alt="DREME-5" seq="CCAGCAY" length="7" nsites="27" p="27" n="1" pvalue="9.2e-008" evalue="4.4e-003" unerased_evalue="2.3e-003"> + <pos A="0.000000" C="1.000000" G="0.000000" T="0.000000"/> + <pos A="0.000000" C="1.000000" G="0.000000" T="0.000000"/> + <pos A="1.000000" C="0.000000" G="0.000000" T="0.000000"/> + <pos A="0.000000" C="0.000000" G="1.000000" T="0.000000"/> + <pos A="0.000000" C="1.000000" G="0.000000" T="0.000000"/> + <pos A="1.000000" C="0.000000" G="0.000000" T="0.000000"/> + <pos A="0.000000" C="0.518519" G="0.000000" T="0.481481"/> + <match seq="CCAGCAC" p="14" n="0" pvalue="5.8e-005" evalue="2.8e+000"/> + <match seq="CCAGCAT" p="13" n="1" pvalue="8.9e-004" evalue="4.3e+001"/> + </motif> + <motif id="m06" alt="DREME-6" seq="GMATGT" length="6" nsites="60" p="59" n="18" pvalue="9.9e-007" evalue="4.8e-002" unerased_evalue="4.8e-002"> + <pos A="0.000000" C="0.000000" G="1.000000" T="0.000000"/> + <pos A="0.533333" C="0.466667" G="0.000000" T="0.000000"/> + <pos A="1.000000" C="0.000000" G="0.000000" T="0.000000"/> + <pos A="0.000000" C="0.000000" G="0.000000" T="1.000000"/> + <pos A="0.000000" C="0.000000" G="1.000000" T="0.000000"/> + <pos A="0.000000" C="0.000000" G="0.000000" T="1.000000"/> + <match seq="GCATGT" p="28" n="8" pvalue="5.4e-004" evalue="2.6e+001"/> + <match seq="GAATGT" p="32" n="11" pvalue="8.6e-004" evalue="4.1e+001"/> + </motif> + </motifs> + <run_time cpu="30.86" real="30.97" stop="evalue"/> +</dreme>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/dreme_output_test1.html Thu May 17 14:11:00 2018 -0400 @@ -0,0 +1,6198 @@ +<!DOCTYPE HTML> +<html> + <head> + <meta charset="UTF-8"> + <title>DREME</title> + <script> + // @JSON_VAR data + var data = { + "program": "dreme", + "version": "4.12.0", + "release": "Tue Jun 27 16:22:50 2017 -0700", + "cmd": [ + "dreme", "-o", "./dreme_test1_out", "-p", "dreme_test_sites.fa", + "-norc", "-rna", "-s", "1" + ], + "options": { + "revcomp": false, + "ngen": 100, + "add_pv_thresh": 0.01, + "seed": 1, + "stop": { + "evalue": "0.05" + } + }, + "alphabet": { + "name": "RNA", + "like": "rna", + "ncore": 4, + "symbols": [ + { + "symbol": "A", + "name": "Adenine", + "colour": "CC0000" + }, { + "symbol": "C", + "name": "Cytosine", + "colour": "0000CC" + }, { + "symbol": "G", + "name": "Guanine", + "colour": "FFB300" + }, { + "symbol": "U", + "aliases": "T", + "name": "Uracil", + "colour": "008000" + }, { + "symbol": "N", + "aliases": "X.", + "name": "Any base", + "equals": "ACGU" + }, { + "symbol": "V", + "name": "Not U", + "equals": "ACG" + }, { + "symbol": "H", + "name": "Not G", + "equals": "ACU" + }, { + "symbol": "D", + "name": "Not C", + "equals": "AGU" + }, { + "symbol": "B", + "name": "Not A", + "equals": "CGU" + }, { + "symbol": "M", + "name": "Amino", + "equals": "AC" + }, { + "symbol": "R", + "name": "Purine", + "equals": "AG" + }, { + "symbol": "W", + "name": "Weak", + "equals": "AU" + }, { + "symbol": "S", + "name": "Strong", + "equals": "CG" + }, { + "symbol": "Y", + "name": "Pyrimidine", + "equals": "CU" + }, { + "symbol": "K", + "name": "Keto", + "equals": "GU" + } + ] + }, + "background": { + "freqs": [0.221, 0.245, 0.221, 0.312] + }, + "sequence_db": { + "name": "dreme test sites", + "file": "dreme_test_sites.fa", + "lmod": "Thu Apr 26 15:09:03 CEST 2018", + "count": 1000 + }, + "control_db": { + "name": "shuffled positive sequences", + "from": "shuffled", + "count": 1000, + "freqs": [0.221, 0.245, 0.221, 0.312] + }, + "motifs": [ + { + "db": 0, + "id": "UUYUCY", + "alt": "DREME-1", + "len": 6, + "nsites": 459, + "evalue": "1.2e-013", + "p": 387, + "n": 210, + "pvalue": "2.6e-018", + "unerased_evalue": "1.2e-013", + "pwm": [ + [0.000000, 0.000000, 0.000000, 1.000000], + [0.000000, 0.000000, 0.000000, 1.000000], + [0.000000, 0.294118, 0.000000, 0.705882], + [0.000000, 0.000000, 0.000000, 1.000000], + [0.000000, 1.000000, 0.000000, 0.000000], + [0.000000, 0.474946, 0.000000, 0.525054] + ], + "matches": [ + { + "seq": "UUUUCC", + "p": 147, + "n": 75, + "pvalue": "1.8e-007", + "evalue": "8.1e-003" + }, { + "seq": "UUUUCU", + "p": 155, + "n": 94, + "pvalue": "2.2e-005", + "evalue": "1.0e+000" + }, { + "seq": "UUCUCU", + "p": 94, + "n": 51, + "pvalue": "1.3e-004", + "evalue": "6.1e+000" + }, { + "seq": "UUCUCC", + "p": 75, + "n": 42, + "pvalue": "1.1e-003", + "evalue": "5.0e+001" + } + ] + }, { + "db": 0, + "id": "YAGG", + "alt": "DREME-2", + "len": 4, + "nsites": 793, + "evalue": "5.1e-012", + "p": 600, + "n": 416, + "pvalue": "1.1e-016", + "unerased_evalue": "2.4e-012", + "pwm": [ + [0.000000, 0.692308, 0.000000, 0.307692], + [1.000000, 0.000000, 0.000000, 0.000000], + [0.000000, 0.000000, 1.000000, 0.000000], + [0.000000, 0.000000, 1.000000, 0.000000] + ], + "matches": [ + { + "seq": "CAGG", + "p": 441, + "n": 304, + "pvalue": "1.5e-010", + "evalue": "6.6e-006" + }, { + "seq": "UAGG", + "p": 232, + "n": 165, + "pvalue": "1.1e-004", + "evalue": "4.7e+000" + } + ] + }, { + "db": 0, + "id": "GAAGAW", + "alt": "DREME-3", + "len": 6, + "nsites": 89, + "evalue": "3.4e-005", + "p": 81, + "n": 22, + "pvalue": "8.2e-010", + "unerased_evalue": "3.5e-004", + "pwm": [ + [0.000000, 0.000000, 1.000000, 0.000000], + [1.000000, 0.000000, 0.000000, 0.000000], + [1.000000, 0.000000, 0.000000, 0.000000], + [0.000000, 0.000000, 1.000000, 0.000000], + [1.000000, 0.000000, 0.000000, 0.000000], + [0.494382, 0.000000, 0.000000, 0.505618] + ], + "matches": [ + { + "seq": "GAAGAU", + "p": 45, + "n": 7, + "pvalue": "2.4e-008", + "evalue": "9.9e-004" + }, { + "seq": "GAAGAA", + "p": 40, + "n": 16, + "pvalue": "7.9e-004", + "evalue": "3.3e+001" + } + ] + }, { + "db": 0, + "id": "SMUGGA", + "alt": "DREME-4", + "len": 6, + "nsites": 119, + "evalue": "3.7e-003", + "p": 110, + "n": 47, + "pvalue": "9.1e-008", + "unerased_evalue": "2.6e-005", + "pwm": [ + [0.000000, 0.529412, 0.470588, 0.000000], + [0.428571, 0.571429, 0.000000, 0.000000], + [0.000000, 0.000000, 0.000000, 1.000000], + [0.000000, 0.000000, 1.000000, 0.000000], + [0.000000, 0.000000, 1.000000, 0.000000], + [1.000000, 0.000000, 0.000000, 0.000000] + ], + "matches": [ + { + "seq": "GAUGGA", + "p": 22, + "n": 6, + "pvalue": "1.7e-003", + "evalue": "7.1e+001" + }, { + "seq": "GCUGGA", + "p": 33, + "n": 14, + "pvalue": "3.6e-003", + "evalue": "1.5e+002" + }, { + "seq": "CCUGGA", + "p": 32, + "n": 15, + "pvalue": "8.6e-003", + "evalue": "3.5e+002" + }, { + "seq": "CAUGGA", + "p": 29, + "n": 13, + "pvalue": "9.1e-003", + "evalue": "3.7e+002" + } + ] + } + ], + "runtime": { + "host": "ThinkPad-T450s", + "when": "Thu May 03 13:22:29 CEST 2018", + "cpu": 13.95, + "real": 13.95, + "stop": "evalue" + } + }; + </script> + <script> +var site_url = "http://meme-suite.org"; +</script> + <script> + +/* + * $ + * + * Shorthand function for getElementById + */ +function $(el) { + return document.getElementById(el); +} + + +/* + * See http://stackoverflow.com/a/5450113/66387 + * Does string multiplication like the perl x operator. + */ +function string_mult(pattern, count) { + if (count < 1) return ''; + var result = ''; + while (count > 1) { + if (count & 1) result += pattern; + count >>= 1, pattern += pattern; + } + return result + pattern; +} + +/* + * See http://stackoverflow.com/questions/814613/how-to-read-get-data-from-a-url-using-javascript + * Slightly modified with information from + * https://developer.mozilla.org/en/DOM/window.location + */ +function parse_params() { + "use strict"; + var search, queryStart, queryEnd, query, params, nvPairs, i, nv, n, v; + search = window.location.search; + queryStart = search.indexOf("?") + 1; + queryEnd = search.indexOf("#") + 1 || search.length + 1; + query = search.slice(queryStart, queryEnd - 1); + + if (query === search || query === "") return {}; + + params = {}; + nvPairs = query.replace(/\+/g, " ").split("&"); + + for (i = 0; i < nvPairs.length; i++) { + nv = nvPairs[i].split("="); + n = decodeURIComponent(nv[0]); + v = decodeURIComponent(nv[1]); + // allow a name to be used multiple times + // storing each value in the array + if (!(n in params)) { + params[n] = []; + } + params[n].push(nv.length === 2 ? v : null); + } + return params; +} + +/* + * coords + * + * Calculates the x and y offset of an element. + * From http://www.quirksmode.org/js/findpos.html + * with alterations to take into account scrolling regions + */ +function coords(elem) { + var myX = myY = 0; + if (elem.getBoundingClientRect) { + var rect; + rect = elem.getBoundingClientRect(); + myX = rect.left + ((typeof window.pageXOffset !== "undefined") ? + window.pageXOffset : document.body.scrollLeft); + myY = rect.top + ((typeof window.pageYOffset !== "undefined") ? + window.pageYOffset : document.body.scrollTop); + } else { + // this fall back doesn't properly handle absolutely positioned elements + // inside a scrollable box + var node; + if (elem.offsetParent) { + // subtract all scrolling + node = elem; + do { + myX -= node.scrollLeft ? node.scrollLeft : 0; + myY -= node.scrollTop ? node.scrollTop : 0; + } while (node = node.parentNode); + // this will include the page scrolling (which is unwanted) so add it back on + myX += (typeof window.pageXOffset !== "undefined") ? window.pageXOffset : document.body.scrollLeft; + myY += (typeof window.pageYOffset !== "undefined") ? window.pageYOffset : document.body.scrollTop; + // sum up offsets + node = elem; + do { + myX += node.offsetLeft; + myY += node.offsetTop; + } while (node = node.offsetParent); + } + } + return [myX, myY]; +} + +/* + * position_popup + * + * Positions a popup relative to an anchor element. + * + * The avaliable positions are: + * 0 - Centered below the anchor. + */ +function position_popup(anchor, popup, position) { + "use strict"; + var a_x, a_y, a_w, a_h, p_x, p_y, p_w, p_h; + var a_xy, spacer, margin, scrollbar, page_w; + // define constants + spacer = 5; + margin = 15; + scrollbar = 15; + // define the positions and widths + a_xy = coords(anchor); + a_x = a_xy[0]; + a_y = a_xy[1]; + a_w = anchor.offsetWidth; + a_h = anchor.offsetHeight; + p_w = popup.offsetWidth; + p_h = popup.offsetHeight; + page_w = null; + if (window.innerWidth) { + page_w = window.innerWidth; + } else if (document.body) { + page_w = document.body.clientWidth; + } + // check the position type is defined + if (typeof position !== "number") { + position = 0; + } + // calculate the popup position + switch (position) { + case 1: + p_x = a_x + a_w + spacer; + p_y = a_y + (a_h / 2) - (p_h / 2); + break; + case 0: + default: + p_x = a_x + (a_w / 2) - (p_w / 2); + p_y = a_y + a_h + spacer; + break; + } + // constrain the popup position + if (p_x < margin) { + p_x = margin; + } else if (page_w != null && (p_x + p_w) > (page_w - margin - scrollbar)) { + p_x = page_w - margin - scrollbar - p_w; + } + if (p_y < margin) { + p_y = margin; + } + // position the popup + popup.style.left = p_x + "px"; + popup.style.top = p_y + "px"; +} + +function lookup_help_popup(popup_id) { + var _body, pop, info; + pop = document.getElementById(popup_id); + if (pop == null) { + _body = document.getElementsByTagName("body")[0]; + pop = document.createElement("div"); + pop.className = "pop_content"; + pop.id = popup_id; + pop.style.backgroundColor = "#FFC"; + pop.style.borderColor = "black"; + info = document.createElement("p"); + info.style.fontWeight = "bold"; + info.appendChild(document.createTextNode("Error: No popup for topic \"" + popup_id + "\".")); + pop.appendChild(info); + // this might cause problems with the menu, but as this only happens + // when something is already wrong I don't think that's too much of a problem + _body.insertBefore(pop, _body.firstChild); + } + if (document.getElementsByTagName('body')[0].hasAttribute("data-autobtns")) { + if (!/\bauto_buttons\b/.test(pop.className)) { + pop.className += " auto_buttons"; + var back_btn_sec = document.createElement("div"); + back_btn_sec.className = "nested_only pop_back_sec"; + var back_btn = document.createElement("span"); + back_btn.className = "pop_back"; + back_btn.appendChild(document.createTextNode("<< back")); + back_btn.addEventListener("click", function(e) { + help_return(); + }, false); + back_btn_sec.appendChild(back_btn); + pop.insertBefore(back_btn_sec, pop.firstChild); + var close_btn_sec = document.createElement("div"); + close_btn_sec.className = "pop_close_sec"; + var close_btn = document.createElement("span"); + close_btn.className = "pop_close"; + close_btn.appendChild(document.createTextNode("close")); + close_btn.addEventListener("click", function(e) { + help_popup(); + }, false); + close_btn_sec.appendChild(close_btn); + pop.appendChild(close_btn_sec); + } + } + return pop; +} + +/* + * help_popup + * + * Moves around help pop-ups so they appear + * below an activator. + */ +function help_popup(activator, popup_id) { + "use strict"; + var pop; + // set default values + if (typeof help_popup.popup === "undefined") { + help_popup.popup = []; + } + if (typeof help_popup.activator === "undefined") { + help_popup.activator = null; + } + var last_pop = (help_popup.popup.length > 0 ? help_popup.popup[help_popup.popup.length - 1] : null); + if (typeof(activator) == "undefined") { // no activator so hide + if (last_pop != null) { + last_pop.style.display = 'none'; + help_popup.popup = []; + } + return; + } + pop = lookup_help_popup(popup_id); + if (pop == last_pop) { + if (activator == help_popup.activator) { + //hide popup (as we've already shown it for the current help button) + last_pop.style.display = 'none'; + help_popup.popup = []; + return; // toggling complete! + } + } else if (last_pop != null) { + //activating different popup so hide current one + last_pop.style.display = 'none'; + } + help_popup.popup = [pop]; + help_popup.activator = activator; + toggle_class(pop, "nested", false); + //must make the popup visible to measure it or it has zero width + pop.style.display = 'block'; + position_popup(activator, pop); +} + +/* + * help_refine + * + * Intended for links within a help popup. Stores a stack of state so + * you can go back. + */ +function help_refine(popup_id) { + if (help_popup.popup == null || help_popup.popup.length == 0 || help_popup.activator == null) { + throw new Error("Can not refine a help popup when one is not shown!"); + } + var pop = lookup_help_popup(popup_id); + var last_pop = help_popup.popup[help_popup.popup.length - 1]; + if (pop == last_pop) return; // slightly odd, but no real cause for alarm + help_popup.popup.push(pop); + toggle_class(pop, "nested", true); + last_pop.style.display = "none"; + //must make the popup visible to measure it or it has zero width + pop.style.display = "block"; + position_popup(help_popup.activator, pop); +} + +/* + * help_return + * + * Intended for links within a help popup. Stores a stack of state so + * you can go back. + */ +function help_return() { + if (help_popup.popup == null || help_popup.popup.length == 0 || help_popup.activator == null) { + throw new Error("Can not return to a earlier help popup when one is not shown!"); + } + var last_pop = help_popup.popup.pop(); + last_pop.style.display = "none"; + var pop = (help_popup.popup.length > 0 ? help_popup.popup[help_popup.popup.length - 1] : null); + if (pop != null) { + toggle_class(pop, "nested", help_popup.popup.length > 1); + pop.style.display = "block"; + position_popup(help_popup.activator, pop); + } else { + help_popup.activator = null; + } +} + +/* + * update_scroll_pad + * + * Creates padding at the bottom of the page to allow + * scrolling of anything into view. + */ +function update_scroll_pad() { + var page, pad; + page = (document.compatMode === "CSS1Compat") ? document.documentElement : document.body; + pad = $("scrollpad"); + if (pad === null) { + pad = document.createElement("div"); + pad.id = 'scrollpad'; + document.getElementsByTagName('body')[0].appendChild(pad); + } + pad.style.height = Math.abs(page.clientHeight - 100) + "px"; +} + +function substitute_classes(node, remove, add) { + "use strict"; + var list, all, i, cls, classes; + list = node.className.split(/\s+/); + all = {}; + for (i = 0; i < list.length; i++) { + if (list[i].length > 0) all[list[i]] = true; + } + for (i = 0; i < remove.length; i++) { + if (all.hasOwnProperty(remove[i])) { + delete all[remove[i]]; + } + } + for (i = 0; i < add.length; i++) { + all[add[i]] = true; + } + classes = ""; + for (cls in all) { + classes += cls + " "; + } + node.className = classes; +} + +/* + * toggle_class + * + * Adds or removes a class from the node. If the parameter 'enabled' is not + * passed then the existence of the class will be toggled, otherwise it will be + * included if enabled is true. + */ +function toggle_class(node, cls, enabled) { + var classes = node.className; + var list = classes.replace(/^\s+/, '').replace(/\s+$/, '').split(/\s+/); + var found = false; + for (var i = 0; i < list.length; i++) { + if (list[i] == cls) { + list.splice(i, 1); + i--; + found = true; + } + } + if (typeof enabled == "undefined") { + if (!found) list.push(cls); + } else { + if (enabled) list.push(cls); + } + node.className = list.join(" "); +} + +/* + * find_child + * + * Searches child nodes in depth first order and returns the first it finds + * with the className specified. + * TODO replace with querySelector + */ +function find_child(node, className) { + var pattern; + if (node == null || typeof node !== "object") { + return null; + } + if (typeof className === "string") { + pattern = new RegExp("\\b" + className + "\\b"); + } else { + pattern = className; + } + if (node.nodeType == Node.ELEMENT_NODE && + pattern.test(node.className)) { + return node; + } else { + var result = null; + for (var i = 0; i < node.childNodes.length; i++) { + result = find_child(node.childNodes[i], pattern); + if (result != null) break; + } + return result; + } +} + +/* + * find_parent + * + * Searches parent nodes outwards from the node and returns the first it finds + * with the className specified. + */ +function find_parent(node, className) { + var pattern; + pattern = new RegExp("\\b" + className + "\\b"); + do { + if (node.nodeType == Node.ELEMENT_NODE && + pattern.test(node.className)) { + return node; + } + } while (node = node.parentNode); + return null; +} + +/* + * find_parent_tag + * + * Searches parent nodes outwards from the node and returns the first it finds + * with the tag name specified. HTML tags should be specified in upper case. + */ +function find_parent_tag(node, tag_name) { + do { + if (node.nodeType == Node.ELEMENT_NODE && node.tagName == tag_name) { + return node; + } + } while (node = node.parentNode); + return null; +} + +/* + * __toggle_help + * + * Uses the 'topic' property of the this object to + * toggle display of a help topic. + * + * This function is not intended to be called directly. + */ +function __toggle_help(e) { + if (!e) e = window.event; + if (e.type === "keydown") { + if (e.keyCode !== 13 && e.keyCode !== 32) { + return; + } + // stop a submit or something like that + e.preventDefault(); + } + + help_popup(this, this.getAttribute("data-topic")); +} + +function setup_help_button(button) { + "use strict"; + var topic; + if (button.hasAttribute("data-topic")) { + topic = button.getAttribute("data-topic"); + if (document.getElementById(topic) != null) { + button.tabIndex = "0"; // make keyboard selectable + button.addEventListener("click", function() { + help_popup(button, topic); + }, false); + button.addEventListener("keydown", function(e) { + // toggle only on Enter or Spacebar, let other keys do their thing + if (e.keyCode !== 13 && e.keyCode !== 32) return; + // stop a submit or something like that + e.preventDefault(); + help_popup(button, topic); + }, false); + } else { + button.style.visibility = "hidden"; + } + } + button.className += " active"; +} + +/* + * help_button + * + * Makes a help button for the passed topic. + */ +function help_button(topic) { + var btn = document.createElement("div"); + btn.className = "help"; + btn.setAttribute("data-topic", topic); + setup_help_button(btn); + return btn; +} + +/* + * prepare_download + * + * Sets the attributes of a link to setup a file download using the given content. + * If no link is provided then create one and click it. + */ +function prepare_download(content, mimetype, filename, link) { + "use strict"; + // if no link is provided then create one and click it + var click_link = false; + if (!link) { + link = document.createElement("a"); + click_link = true; + } + try { + // Use a BLOB to convert the text into a data URL. + // We could do this manually with a base 64 conversion. + // This will only be supported on modern browsers, + // hence the try block. + var blob = new Blob([content], {type: mimetype}); + var reader = new FileReader(); + reader.onloadend = function() { + // If we're lucky the browser will also support the download + // attribute which will let us suggest a file name to save the link. + // Otherwise it is likely that the filename will be unintelligible. + link.setAttribute("download", filename); + link.href = reader.result; + if (click_link) { + // must add the link to click it + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + } + } + reader.readAsDataURL(blob); + } catch (error) { + if (console && console.log) console.log(error); + // probably an old browser + link.href = ""; + link.visible = false; + } +} + +/* + * add_cell + * + * Add a cell to the table row. + */ +function add_cell(row, node, cls, click_action) { + var cell = row.insertCell(row.cells.length); + if (node) cell.appendChild(node); + if (cls && cls !== "") cell.className = cls; + if (click_action) cell.addEventListener("click", click_action, false); +} + +/* + * add_header_cell + * + * Add a header cell to the table row. + */ +function add_header_cell(row, node, help_topic, cls, colspan) { + var th = document.createElement("th"); + if (node) th.appendChild(node); + if (help_topic && help_topic !== "") th.appendChild(help_button(help_topic)); + if (cls && cls !== "") th.className = cls; + if (typeof colspan == "number" && colspan > 1) th.colSpan = colspan; + row.appendChild(th); +} + +/* + * add_text_cell + * + * Add a text cell to the table row. + */ +function add_text_cell(row, text, cls, action) { + var node = null; + if (typeof(text) != 'undefined') node = document.createTextNode(text); + add_cell(row, node, cls, action); +} + +/* + * add_text_header_cell + * + * Add a text header cell to the table row. + */ +function add_text_header_cell(row, text, help_topic, cls, action, colspan) { + var node = null; + if (typeof(text) != 'undefined') { + var nbsp = (help_topic ? "\u00A0" : ""); + var str = "" + text; + var parts = str.split(/\n/); + if (parts.length === 1) { + if (action) { + node = document.createElement("span"); + node.appendChild(document.createTextNode(str + nbsp)); + } else { + node = document.createTextNode(str + nbsp); + } + } else { + node = document.createElement("span"); + for (var i = 0; i < parts.length; i++) { + if (i !== 0) { + node.appendChild(document.createElement("br")); + } + node.appendChild(document.createTextNode(parts[i])); + } + } + if (action) { + node.addEventListener("click", action, false); + node.style.cursor = "pointer"; + } + } + add_header_cell(row, node, help_topic, cls, colspan); +} + +function setup_help() { + "use strict"; + var help_buttons, i; + help_buttons = document.querySelectorAll(".help:not(.active)"); + for (i = 0; i < help_buttons.length; i++) { + setup_help_button(help_buttons[i]); + } +} + +function setup_scrollpad() { + "use strict"; + if (document.getElementsByTagName('body')[0].hasAttribute("data-scrollpad") && document.getElementById("scrollpad") == null) { + window.addEventListener("resize", update_scroll_pad, false); + update_scroll_pad(); + } +} + +// anon function to avoid polluting global scope +(function() { + "use strict"; + window.addEventListener("load", function load(evt) { + window.removeEventListener("load", load, false); + setup_help(); + setup_scrollpad(); + }, false); +})(); + +/* + * make_link + * + * Creates a text node and if a URL is specified it surrounds it with a link. + * If the URL doesn't begin with "http://" it automatically adds it, as + * relative links don't make much sense in this context. + */ +function make_link(text, url) { + var textNode = null; + var link = null; + if (typeof text !== "undefined" && text !== null) textNode = document.createTextNode(text); + if (typeof url === "string") { + if (url.indexOf("//") == -1) { + url = "http://" + url; + } + link = document.createElement('a'); + link.href = url; + if (textNode) link.appendChild(textNode); + return link; + } + return textNode; +} +</script> + <script> +function motif_logo_template(inputs) { + function _input(name) { + if (typeof inputs[name] === "undefined") { + throw new Error("Missing template variable: " + name); + } + return inputs[name]; + } + return ( +"%!PS-Adobe-3.0 EPSF-3.0\n" + +"%%Title: Sequence Logo : " + _input("TITLE") + "\n" + +"%%Creator: " + _input("CREATOR") + "\n" + +"%%CreationDate: " + _input("CREATIONDATE") + "\n" + +"%%BoundingBox: 0 0 " + _input("BOUNDINGWIDTH") + " " + _input("BOUNDINGHEIGHT") + " \n" + +"%%Pages: 0\n" + +"%%DocumentFonts: \n" + +"%%EndComments\n" + +"\n" + +"% ---- CONSTANTS ----\n" + +"\/cmfactor 72 2.54 div def % defines points -> cm conversion\n" + +"\/cm {cmfactor mul} bind def % defines centimeters\n" + +"\n" + +"% ---- VARIABLES ----\n" + +"\n" + +"% NA = Nucleic Acid, AA = Amino Acid\n" + +"\/logoType (" + _input("LOGOTYPE") + ") def \n" + +"\n" + +"\/logoTitle (" + _input("TITLE") + ") def\n" + +"\n" + +"% Dimensions in cm\n" + +"\/logoWidth " + _input("LOGOWIDTH") + " cm def\n" + +"\/logoHeight " + _input("LOGOLINEHEIGHT") + " cm def\n" + +"\/totalHeight " + _input("LOGOHEIGHT") + " cm def\n" + +"\n" + +"\/yaxis " + _input("YAXIS") + " def\n" + +"\/yaxisLabel (" + _input("YAXISLABEL") + ") def\n" + +"\/yaxisBits " + _input("BARBITS") + " def % bits\n" + +"\/yaxisTicBits " + _input("TICBITS") + " def\n" + +"\n" + +"\/xaxis " + _input("NUMBERING") + " def\n" + +"\/xaxisLabel (" + _input("XAXISLABEL") + ") def\n" + +"\/showEnds (" + _input("SHOWENDS") + ") def \n" + +"\n" + +"\/showFineprint true def\n" + +"\/fineprint (" + _input("FINEPRINT") + ") def\n" + +"\n" + +"\/charsPerLine " + _input("CHARSPERLINE") + " def\n" + +"\n" + +"\/showingBox " + _input("SHOWINGBOX") + " def \n" + +"\/shrinking false def % true falses\n" + +"\/shrink 1.0 def\n" + +"\/outline " + _input("OUTLINE") + " def\n" + +"\n" + +"\/IbeamFraction " + _input("ERRORBARFRACTION") + " def\n" + +"\/IbeamGray 0.50 def\n" + +"\/IbeamLineWidth 0.5 def\n" + +"\n" + +"\/fontsize " + _input("FONTSIZE") + " def\n" + +"\/titleFontsize " + _input("TITLEFONTSIZE") + " def\n" + +"\/smallFontsize " + _input("SMALLFONTSIZE") + " def\n" + +"\n" + +"\/topMargin " + _input("TOPMARGIN") + " cm def\n" + +"\/bottomMargin " + _input("BOTTOMMARGIN") + " cm def\n" + +"\n" + +"\/defaultColor [0 0 0] def \n" + +"\n" + +_input("COLORDICT") + "\n" + +"\n" + +"\/colorDict fullColourDict def\n" + +"\n" + +"% ---- DERIVED PARAMETERS ----\n" + +"\n" + +"\/leftMargin\n" + +" fontsize 3.5 mul\n" + +"\n" + +"def \n" + +"\n" + +"\/rightMargin \n" + +" %Add extra room if showing ends\n" + +" showEnds (false) eq { fontsize}{fontsize 1.5 mul} ifelse\n" + +"def\n" + +"\n" + +"\/yaxisHeight \n" + +" logoHeight \n" + +" bottomMargin sub \n" + +" topMargin sub\n" + +"def\n" + +"\n" + +"\/ticWidth fontsize 2 div def\n" + +"\n" + +"\/pointsPerBit yaxisHeight yaxisBits div def\n" + +"\n" + +"\/stackMargin 1 def\n" + +"\n" + +"% Do not add space aroung characters if characters are boxed\n" + +"\/charRightMargin \n" + +" showingBox { 0.0 } {stackMargin} ifelse\n" + +"def\n" + +"\n" + +"\/charTopMargin \n" + +" showingBox { 0.0 } {stackMargin} ifelse\n" + +"def\n" + +"\n" + +"\/charWidth\n" + +" logoWidth\n" + +" leftMargin sub\n" + +" rightMargin sub\n" + +" charsPerLine div\n" + +" charRightMargin sub\n" + +"def\n" + +"\n" + +"\/charWidth4 charWidth 4 div def\n" + +"\/charWidth2 charWidth 2 div def\n" + +"\n" + +"\/stackWidth \n" + +" charWidth charRightMargin add\n" + +"def\n" + +" \n" + +"\/numberFontsize \n" + +" fontsize charWidth lt {fontsize}{charWidth} ifelse\n" + +"def\n" + +"\n" + +"% movements to place 5'\/N and 3'\/C symbols\n" + +"\/leftEndDeltaX fontsize neg def\n" + +"\/leftEndDeltaY fontsize 1.5 mul neg def\n" + +"\/rightEndDeltaX fontsize 0.25 mul def\n" + +"\/rightEndDeltaY leftEndDeltaY def\n" + +"\n" + +"% Outline width is proporional to charWidth, \n" + +"% but no less that 1 point\n" + +"\/outlinewidth \n" + +" charWidth 32 div dup 1 gt {}{pop 1} ifelse\n" + +"def\n" + +"\n" + +"\n" + +"% ---- PROCEDURES ----\n" + +"\n" + +"\/StartLogo { \n" + +" % Save state\n" + +" save \n" + +" gsave \n" + +"\n" + +" % Print Logo Title, top center \n" + +" gsave \n" + +" SetStringFont\n" + +"\n" + +" logoWidth 2 div\n" + +" logoTitle\n" + +" stringwidth pop 2 div sub\n" + +" totalHeight\n" + +" titleFontsize sub\n" + +" moveto\n" + +"\n" + +" logoTitle\n" + +" show\n" + +" grestore\n" + +"\n" + +" % Print X-axis label, bottom center\n" + +" gsave\n" + +" SetStringFont\n" + +"\n" + +" logoWidth 2 div\n" + +" xaxisLabel\n" + +" stringwidth pop 2 div sub\n" + +" 0\n" + +" titleFontsize 3 div\n" + +" add\n" + +" moveto\n" + +"\n" + +" xaxisLabel\n" + +" show\n" + +" grestore\n" + +"\n" + +" % Show Fine Print\n" + +" showFineprint {\n" + +" gsave\n" + +" SetSmallFont\n" + +" logoWidth\n" + +" fineprint stringwidth pop sub\n" + +" smallFontsize sub\n" + +" smallFontsize 3 div\n" + +" moveto\n" + +" \n" + +" fineprint show\n" + +" grestore\n" + +" } if\n" + +"\n" + +" % Move to lower left corner of last line, first stack\n" + +" leftMargin bottomMargin translate\n" + +"\n" + +" % Move above first line ready for StartLine \n" + +" 0 totalHeight translate\n" + +"\n" + +" SetLogoFont\n" + +"} bind def\n" + +"\n" + +"\/EndLogo { \n" + +" grestore \n" + +" showpage \n" + +" restore \n" + +"} bind def\n" + +"\n" + +"\n" + +"\/StartLine { \n" + +" % move down to the bottom of the line:\n" + +" 0 logoHeight neg translate\n" + +" \n" + +" gsave \n" + +" yaxis { MakeYaxis } if\n" + +" xaxis { showEnds (true) eq {ShowLeftEnd} if } if\n" + +"} bind def\n" + +"\n" + +"\/EndLine{ \n" + +" xaxis { showEnds (true) eq {ShowRightEnd} if } if\n" + +" grestore \n" + +"} bind def\n" + +"\n" + +"\n" + +"\/MakeYaxis {\n" + +" gsave \n" + +" stackMargin neg 0 translate\n" + +" ShowYaxisBar\n" + +" ShowYaxisLabel\n" + +" grestore\n" + +"} bind def\n" + +"\n" + +"\n" + +"\/ShowYaxisBar { \n" + +" gsave \n" + +" SetStringFont\n" + +"\n" + +" \/str 10 string def % string to hold number \n" + +" \/smallgap stackMargin 2 div def\n" + +"\n" + +" % Draw first tic and bar\n" + +" gsave \n" + +" ticWidth neg 0 moveto \n" + +" ticWidth 0 rlineto \n" + +" 0 yaxisHeight rlineto\n" + +" stroke\n" + +" grestore\n" + +"\n" + +" \n" + +" % Draw the tics\n" + +" % initial increment limit proc for\n" + +" 0 yaxisTicBits yaxisBits abs %cvi\n" + +" {\/loopnumber exch def\n" + +"\n" + +" % convert the number coming from the loop to a string\n" + +" % and find its width\n" + +" loopnumber 10 str cvrs\n" + +" \/stringnumber exch def % string representing the number\n" + +"\n" + +" stringnumber stringwidth pop\n" + +" \/numberwidth exch def % width of number to show\n" + +"\n" + +" \/halfnumberheight\n" + +" stringnumber CharBoxHeight 2 div\n" + +" def\n" + +"\n" + +" numberwidth % move back width of number\n" + +" neg loopnumber pointsPerBit mul % shift on y axis\n" + +" halfnumberheight sub % down half the digit\n" + +"\n" + +" moveto % move back the width of the string\n" + +"\n" + +" ticWidth neg smallgap sub % Move back a bit more \n" + +" 0 rmoveto % move back the width of the tic \n" + +"\n" + +" stringnumber show\n" + +" smallgap 0 rmoveto % Make a small gap \n" + +"\n" + +" % now show the tic mark\n" + +" 0 halfnumberheight rmoveto % shift up again\n" + +" ticWidth 0 rlineto\n" + +" stroke\n" + +" } for\n" + +" grestore\n" + +"} bind def\n" + +"\n" + +"\/ShowYaxisLabel {\n" + +" gsave\n" + +" SetStringFont\n" + +"\n" + +" % How far we move left depends on the size of\n" + +" % the tic labels.\n" + +" \/str 10 string def % string to hold number \n" + +" yaxisBits yaxisTicBits div cvi yaxisTicBits mul \n" + +" str cvs stringwidth pop\n" + +" ticWidth 1.5 mul add neg \n" + +"\n" + +"\n" + +" yaxisHeight\n" + +" yaxisLabel stringwidth pop\n" + +" sub 2 div\n" + +"\n" + +" translate\n" + +" 90 rotate\n" + +" 0 0 moveto\n" + +" yaxisLabel show\n" + +" grestore\n" + +"} bind def\n" + +"\n" + +"\n" + +"\/StartStack { % <stackNumber> startstack\n" + +" xaxis {MakeNumber}{pop} ifelse\n" + +" gsave\n" + +"} bind def\n" + +"\n" + +"\/EndStack {\n" + +" grestore\n" + +" stackWidth 0 translate\n" + +"} bind def\n" + +"\n" + +"\n" + +"% Draw a character whose height is proportional to symbol bits\n" + +"\/MakeSymbol{ % charbits character MakeSymbol\n" + +" gsave\n" + +" \/char exch def\n" + +" \/bits exch def\n" + +"\n" + +" \/bitsHeight \n" + +" bits pointsPerBit mul \n" + +" def\n" + +"\n" + +" \/charHeight \n" + +" bitsHeight charTopMargin sub\n" + +" dup \n" + +" 0.0 gt {}{pop 0.0} ifelse % if neg replace with zero \n" + +" def \n" + +" \n" + +" charHeight 0.0 gt {\n" + +" char SetColor\n" + +" charWidth charHeight char ShowChar\n" + +"\n" + +" showingBox { % Unfilled box\n" + +" 0 0 charWidth charHeight false ShowBox\n" + +" } if\n" + +"\n" + +"\n" + +" } if\n" + +"\n" + +" grestore\n" + +"\n" + +" 0 bitsHeight translate \n" + +"} bind def\n" + +"\n" + +"\n" + +"\/ShowChar { % <width> <height> <char> ShowChar\n" + +" gsave\n" + +" \/tc exch def % The character\n" + +" \/ysize exch def % the y size of the character\n" + +" \/xsize exch def % the x size of the character\n" + +"\n" + +" \/xmulfactor 1 def \n" + +" \/ymulfactor 1 def\n" + +" \/limmulfactor 0.01 def\n" + +" \/drawable true def\n" + +"\n" + +" \n" + +" % if ysize is negative, make everything upside down!\n" + +" ysize 0 lt {\n" + +" % put ysize normal in this orientation\n" + +" \/ysize ysize abs def\n" + +" xsize ysize translate\n" + +" 180 rotate\n" + +" } if\n" + +"\n" + +" shrinking {\n" + +" xsize 1 shrink sub 2 div mul\n" + +" ysize 1 shrink sub 2 div mul translate \n" + +"\n" + +" shrink shrink scale\n" + +" } if\n" + +"\n" + +" % Calculate the font scaling factors\n" + +" % Loop twice to catch small correction due to first scaling\n" + +" 2 {\n" + +" gsave\n" + +" xmulfactor ymulfactor scale\n" + +" \n" + +" ysize % desired size of character in points\n" + +" tc CharBoxHeight \n" + +" dup 0.0 ne {\n" + +" div % factor by which to scale up the character\n" + +" \/ymulfactor exch def\n" + +" } % end if\n" + +" {pop pop}\n" + +" ifelse\n" + +"\n" + +" xsize % desired size of character in points\n" + +" tc CharBoxWidth \n" + +" dup 0.0 ne {\n" + +" div % factor by which to scale up the character\n" + +" \/xmulfactor exch def\n" + +" } % end if\n" + +" {pop pop}\n" + +" ifelse\n" + +" grestore\n" + +" % if the multiplication factors get too small we need to avoid a crash\n" + +" xmulfactor limmulfactor lt {\n" + +" \/xmulfactor 1 def\n" + +" \/drawable false def\n" + +" } if\n" + +" ymulfactor limmulfactor lt {\n" + +" \/ymulfactor 1 def\n" + +" \/drawable false def\n" + +" } if\n" + +" } repeat\n" + +"\n" + +" % Adjust horizontal position if the symbol is an I\n" + +" tc (I) eq {\n" + +" charWidth 2 div % half of requested character width\n" + +" tc CharBoxWidth 2 div % half of the actual character\n" + +" sub 0 translate\n" + +" % Avoid x scaling for I \n" + +" \/xmulfactor 1 def \n" + +" } if\n" + +"\n" + +"\n" + +" % ---- Finally, draw the character\n" + +" drawable { \n" + +" newpath\n" + +" xmulfactor ymulfactor scale\n" + +"\n" + +" % Move lower left corner of character to start point\n" + +" tc CharBox pop pop % llx lly : Lower left corner\n" + +" exch neg exch neg\n" + +" moveto\n" + +"\n" + +" outline { % outline characters:\n" + +" outlinewidth setlinewidth\n" + +" tc true charpath\n" + +" gsave 1 setgray fill grestore\n" + +" clip stroke\n" + +" } { % regular characters\n" + +" tc show\n" + +" } ifelse\n" + +" } if\n" + +"\n" + +" grestore\n" + +"} bind def\n" + +"\n" + +"\n" + +"\/ShowBox { % x1 y1 x2 y2 filled ShowBox\n" + +" gsave\n" + +" \/filled exch def \n" + +" \/y2 exch def\n" + +" \/x2 exch def\n" + +" \/y1 exch def\n" + +" \/x1 exch def\n" + +" newpath\n" + +" x1 y1 moveto\n" + +" x2 y1 lineto\n" + +" x2 y2 lineto\n" + +" x1 y2 lineto\n" + +" closepath\n" + +"\n" + +" clip\n" + +" \n" + +" filled {\n" + +" fill\n" + +" }{ \n" + +" 0 setgray stroke \n" + +" } ifelse\n" + +"\n" + +" grestore\n" + +"} bind def\n" + +"\n" + +"\n" + +"\/MakeNumber { % number MakeNumber\n" + +" gsave\n" + +" SetNumberFont\n" + +" stackWidth 0 translate\n" + +" 90 rotate % rotate so the number fits\n" + +" dup stringwidth pop % find the length of the number\n" + +" neg % prepare for move\n" + +" stackMargin sub % Move back a bit\n" + +" charWidth (0) CharBoxHeight % height of numbers\n" + +" sub 2 div %\n" + +" moveto % move back to provide space\n" + +" show\n" + +" grestore\n" + +"} bind def\n" + +"\n" + +"\n" + +"\/Ibeam{ % heightInBits Ibeam\n" + +" gsave\n" + +" % Make an Ibeam of twice the given height in bits\n" + +" \/height exch pointsPerBit mul def \n" + +" \/heightDRAW height IbeamFraction mul def\n" + +"\n" + +" IbeamLineWidth setlinewidth\n" + +" IbeamGray setgray \n" + +"\n" + +" charWidth2 height neg translate\n" + +" ShowIbar\n" + +" newpath\n" + +" 0 0 moveto\n" + +" 0 heightDRAW rlineto\n" + +" stroke\n" + +" newpath\n" + +" 0 height moveto\n" + +" 0 height rmoveto\n" + +" currentpoint translate\n" + +" ShowIbar\n" + +" newpath\n" + +" 0 0 moveto\n" + +" 0 heightDRAW neg rlineto\n" + +" currentpoint translate\n" + +" stroke\n" + +" grestore\n" + +"} bind def\n" + +"\n" + +"\n" + +"\/ShowIbar { % make a horizontal bar\n" + +" gsave\n" + +" newpath\n" + +" charWidth4 neg 0 moveto\n" + +" charWidth4 0 lineto\n" + +" stroke\n" + +" grestore\n" + +"} bind def\n" + +"\n" + +"\n" + +"\/ShowLeftEnd {\n" + +" gsave\n" + +" SetStringFont\n" + +" leftEndDeltaX leftEndDeltaY moveto\n" + +" logoType (NA) eq {(5) show ShowPrime} if\n" + +" logoType (AA) eq {(N) show} if\n" + +" grestore\n" + +"} bind def\n" + +"\n" + +"\n" + +"\/ShowRightEnd { \n" + +" gsave\n" + +" SetStringFont\n" + +" rightEndDeltaX rightEndDeltaY moveto\n" + +" logoType (NA) eq {(3) show ShowPrime} if\n" + +" logoType (AA) eq {(C) show} if\n" + +" grestore\n" + +"} bind def\n" + +"\n" + +"\n" + +"\/ShowPrime {\n" + +" gsave\n" + +" SetPrimeFont\n" + +" (\\242) show \n" + +" grestore\n" + +"} bind def\n" + +"\n" + +" \n" + +"\/SetColor{ % <char> SetColor\n" + +" dup colorDict exch known {\n" + +" colorDict exch get aload pop setrgbcolor\n" + +" } {\n" + +" pop\n" + +" defaultColor aload pop setrgbcolor\n" + +" } ifelse \n" + +"} bind def\n" + +"\n" + +"% define fonts\n" + +"\/SetTitleFont {\/Times-Bold findfont titleFontsize scalefont setfont} bind def\n" + +"\/SetLogoFont {\/Helvetica-Bold findfont charWidth scalefont setfont} bind def\n" + +"\/SetStringFont{\/Helvetica-Bold findfont fontsize scalefont setfont} bind def\n" + +"\/SetPrimeFont {\/Symbol findfont fontsize scalefont setfont} bind def\n" + +"\/SetSmallFont {\/Helvetica findfont smallFontsize scalefont setfont} bind def\n" + +"\n" + +"\/SetNumberFont {\n" + +" \/Helvetica-Bold findfont \n" + +" numberFontsize\n" + +" scalefont\n" + +" setfont\n" + +"} bind def\n" + +"\n" + +"%Take a single character and return the bounding box\n" + +"\/CharBox { % <char> CharBox <lx> <ly> <ux> <uy>\n" + +" gsave\n" + +" newpath\n" + +" 0 0 moveto\n" + +" % take the character off the stack and use it here:\n" + +" true charpath \n" + +" flattenpath \n" + +" pathbbox % compute bounding box of 1 pt. char => lx ly ux uy\n" + +" % the path is here, but toss it away ...\n" + +" grestore\n" + +"} bind def\n" + +"\n" + +"\n" + +"% The height of a characters bounding box\n" + +"\/CharBoxHeight { % <char> CharBoxHeight <num>\n" + +" CharBox\n" + +" exch pop sub neg exch pop\n" + +"} bind def\n" + +"\n" + +"\n" + +"% The width of a characters bounding box\n" + +"\/CharBoxWidth { % <char> CharBoxHeight <num>\n" + +" CharBox\n" + +" pop exch pop sub neg \n" + +"} bind def\n" + +"\n" + +"% Set the colour scheme to be faded to indicate trimming\n" + +"\/MuteColour {\n" + +" \/colorDict mutedColourDict def\n" + +"} def\n" + +"\n" + +"% Restore the colour scheme to the normal colours\n" + +"\/RestoreColour {\n" + +" \/colorDict fullColourDict def\n" + +"} def\n" + +"\n" + +"% Draw the background for a trimmed section\n" + +"% takes the number of columns as a parameter\n" + +"\/DrawTrimBg { % <num> DrawTrimBox\n" + +" \/col exch def\n" + +" \n" + +" \/boxwidth \n" + +" col stackWidth mul \n" + +" def\n" + +" \n" + +" gsave\n" + +" 0.97 setgray\n" + +"\n" + +" newpath\n" + +" 0 0 moveto\n" + +" boxwidth 0 rlineto\n" + +" 0 yaxisHeight rlineto\n" + +" 0 yaxisHeight lineto\n" + +" closepath\n" + +" \n" + +" fill\n" + +" grestore\n" + +"} def\n" + +"\n" + +"\/DrawTrimEdge {\n" + +" gsave\n" + +" 0.2 setgray\n" + +" [2] 0 setdash\n" + +"\n" + +" newpath\n" + +" 0 0 moveto\n" + +" 0 yaxisHeight lineto\n" + +" \n" + +" stroke\n" + +"\n" + +"} def\n" + +"\n" + +"\n" + +"% Deprecated names\n" + +"\/startstack {StartStack} bind def\n" + +"\/endstack {EndStack} bind def\n" + +"\/makenumber {MakeNumber} bind def\n" + +"\/numchar { MakeSymbol } bind def\n" + +"\n" + +"%%EndProlog\n" + +"\n" + +"%%Page: 1 1\n" + +"StartLogo\n" + +"\n" + +_input("DATA") + "\n" + +"\n" + +"EndLogo\n" + +"\n" + +"%%EOF\n" + ); +}</script> + <script> +//====================================================================== +// start Alphabet object +//====================================================================== +var Alphabet = function(alphabet, background) { + "use strict"; + var i, j, sym, aliases, complement, comp_e_sym, ambigs, generate_background; + generate_background = (background == null); + if (generate_background) { + background = []; + for (i = 0; i < alphabet.ncore; i++) background[i] = 1.0 / alphabet.ncore; + } else if (alphabet.ncore != background.length) { + throw new Error("The background length does not match the alphabet length."); + } + this.name = alphabet.name; + this.like = (alphabet.like != null ? alphabet.like.toUpperCase() : null); + this.ncore = alphabet.ncore; + this.symbols = alphabet.symbols; + this.background = background; + this.genbg = generate_background; + this.encode = {}; + this.encode2core = {}; + this.complement = {}; + // check if all symbols are same case + var seen_uc = false; + var seen_lc = false; + var check_case = function (syms) { + var s, sym; + if (typeof syms === "string") { + for (s = 0; s < syms.length; s++) { + sym = syms.charAt(s); + if (sym >= 'a' && sym <= 'z') seen_lc = true; + else if (sym >= 'A' && sym <= 'Z') seen_uc = true; + } + } + }; + for (i = 0; i < this.symbols.length; i++) { + check_case(this.symbols[i].symbol); + check_case(this.symbols[i].aliases); + } + // now map symbols to indexes + var update_array = function(array, syms, index) { + var s, sym; + if (typeof syms === "string") { + for (s = 0; s < syms.length; s++) { + sym = syms.charAt(s); + array[sym] = index; + // when only a single case is used, then encode as case insensitive + if (seen_uc != seen_lc) { + if (sym >= 'a' && sym <= 'z') { + array[sym.toUpperCase()] = index; + } else if (sym >= 'A' && sym <= 'Z') { + array[sym.toLowerCase()] = index; + } + } + } + } + } + // map core symbols to index + for (i = 0; i < this.ncore; i++) { + update_array(this.encode2core, this.symbols[i].symbol, i); + update_array(this.encode, this.symbols[i].symbol, i); + update_array(this.encode2core, this.symbols[i].aliases, i); + update_array(this.encode, this.symbols[i].aliases, i); + } + // map ambigous symbols to index + ambigs = {}; + for (i = this.ncore; i < this.symbols.length; i++) { + update_array(this.encode, this.symbols[i].symbol, i); + update_array(this.encode, this.symbols[i].aliases, i); + ambigs[this.symbols[i].equals] = i; + } + // determine complements + for (i = 0; i < this.ncore; i++) { + complement = this.symbols[i].complement; + if (typeof complement === "string") { + this.complement[i] = this.encode2core[complement]; + } + } + next_symbol: + for (i = this.ncore; i < this.symbols.length; i++) { + complement = ""; + for (j = 0; j < this.symbols[i].equals.length; j++) { + comp_e_sym = this.complement[this.encode2core[this.symbols[i].equals.charAt(j)]]; + if (typeof comp_e_sym !== "number") continue next_symbol; + complement += this.symbols[comp_e_sym].symbol; + } + complement = complement.split("").sort().join(""); + if (typeof ambigs[complement] === "number") { + this.complement[i] = ambigs[complement]; + } + } + // determine case insensitivity + this.case_insensitive = true; + if (seen_uc == seen_lc) { + // when there is a mixture of cases it probably won't + // be case insensitive but we still need to check + loop: + for (i = 0; i < this.symbols.length; i++) { + sym = this.symbols[i].symbol; + if (sym >= 'A' && sym <= 'Z') { + if (this.encode[sym.toLowerCase()] != i) { + this.case_insensitive = false; + break loop; + } + } else if (sym >= 'a' && sym <= 'z') { + if (this.encode[sym.toUpperCase()] != i) { + this.case_insensitive = false; + break loop; + } + } + aliases = this.symbols[i].aliases; + if (aliases != null) { + for (j = 0; j < aliases.length; j++) { + sym = aliases.charAt(j); + if (sym >= 'A' && sym <= 'Z') { + if (this.encode[sym.toLowerCase()] != i) { + this.case_insensitive = false; + break loop; + } + } else if (sym >= 'a' && sym <= 'z') { + if (this.encode[sym.toUpperCase()] != i) { + this.case_insensitive = false; + break loop; + } + } + } + } + } + } + // normalise aliases to remove the prime symbol and eliminate + // the alternate cases when the alphabet is case insensitive + var seen, out; + for (i = 0; i < this.symbols.length; i++) { + sym = this.symbols[i].symbol; + aliases = this.symbols[i].aliases; + if (typeof aliases != "string") aliases = ""; + seen = {}; + out = []; + if (this.case_insensitive) { + sym = sym.toUpperCase(); + aliases = aliases.toUpperCase(); + } + seen[sym] = true; + for (j = 0; j < aliases.length; j++) { + if (!seen[aliases.charAt(j)]) { + seen[aliases.charAt(j)] = true; + out.push(aliases.charAt(j)); + } + } + this.symbols[i].aliases = out.sort().join(""); + } +}; +// return the name of the alphabet +Alphabet.prototype.get_alphabet_name = function() { + return this.name; +}; +// return if the alphabet can be complemented +Alphabet.prototype.has_complement = function() { + return (typeof this.symbols[0].complement === "string"); +}; +// return true if an uppercase letter has the same meaning as the lowercase form +Alphabet.prototype.is_case_insensitive = function() { + return this.case_insensitive; +}; +// return the information content of an alphabet letter +Alphabet.prototype.get_ic = function() { + return Math.log(this.ncore) / Math.LN2; +}; +// return the count of the core alphabet symbols +Alphabet.prototype.get_size_core = function() { + return this.ncore; +}; +// return the count of all alphabet symbols +Alphabet.prototype.get_size_full = function() { + return this.symbols.length; +}; +// return the symbol for the given alphabet index +Alphabet.prototype.get_symbol = function(alph_index) { + "use strict"; + if (alph_index < 0 || alph_index >= this.symbols.length) { + throw new Error("Alphabet index out of bounds"); + } + return this.symbols[alph_index].symbol; +}; +// return the aliases for the given alphabet index +Alphabet.prototype.get_aliases = function(alph_index) { + "use strict"; + if (alph_index < 0 || alph_index >= this.symbols.length) { + throw new Error("Alphabet index out of bounds"); + } + var sym_obj = this.symbols[alph_index]; + return (sym_obj.aliases != null ? sym_obj.aliases : ""); +}; +// return the name for the given alphabet index +Alphabet.prototype.get_name = function(alph_index) { + "use strict"; + var sym; + if (alph_index < 0 || alph_index >= this.symbols.length) { + throw new Error("Alphabet index out of bounds"); + } + sym = this.symbols[alph_index]; + return (typeof sym.name === "string" ? sym.name : sym.symbol); +}; +// return the alphabet it is like or null +Alphabet.prototype.get_like = function() { + "use strict"; + return this.like; +}; +// return the index of the complement for the given alphabet index +Alphabet.prototype.get_complement = function(alph_index) { + var comp_e_sym = this.complement[alph_index]; + if (typeof comp_e_sym === "number") { + return comp_e_sym; + } else { + return -1; + } +}; +// return a string containing the core symbols +Alphabet.prototype.get_symbols = function() { + "use strict"; + var i, core_symbols; + core_symbols = ""; + for (i = 0; i < this.ncore; i++) { + core_symbols += this.symbols[i].symbol; + } + return core_symbols; +}; +// return if the background was not a uniform generated background +Alphabet.prototype.has_bg = function() { + "use strict"; + return !this.genbg; +}; +// get the background frequency for the index +Alphabet.prototype.get_bg_freq = function(alph_index) { + "use strict"; + var freq, i, symbols; + if (alph_index >= 0) { + if (alph_index < this.ncore) { + return this.background[alph_index]; + } else if (alph_index < this.symbols.length) { + freq = 0; + symbols = this.symbols[alph_index].equals; + for (i = 0; i < symbols.length; i++) { + freq += this.background[this.encode2core[symbols.charAt(i)]]; + } + return freq; + } + } + throw new Error("The alphabet index is out of range."); +}; +// get the colour of the index +Alphabet.prototype.get_colour = function(alph_index) { + "use strict"; + if (alph_index < 0 || alph_index >= this.symbols.length) { + throw new Error("BAD_ALPHABET_INDEX"); + } + if (typeof this.symbols[alph_index].colour != "string") { + return "black"; + } + return "#" + this.symbols[alph_index].colour; +}; +// get the rgb componets of the colour at the index +Alphabet.prototype.get_rgb = function(alph_index) { + "use strict"; + if (alph_index < 0 || alph_index >= this.symbols.length) { + throw new Error("BAD_ALPHABET_INDEX"); + } + if (typeof this.symbols[alph_index].colour != "string") { + return {"red": 0, "green": 0, "blue": 0}; + } + var colour = this.symbols[alph_index].colour; + var red = parseInt(colour.substr(0, 2), 16) / 255; + var green = parseInt(colour.substr(2, 2), 16) / 255; + var blue = parseInt(colour.substr(4, 2), 16) / 255; + return {"red": red, "green": green, "blue": blue}; +}; +// convert a symbol into the index +Alphabet.prototype.get_index = function(letter) { + "use strict"; + var alph_index; + alph_index = this.encode[letter]; + if (typeof alph_index === "undefined") { + return -1; + } + return alph_index; +}; +// convert a symbol into the list of core indexes that it equals +Alphabet.prototype.get_indexes = function(letter) { + "use strict"; + var alph_index, comprise_str, i, comprise_list; + alph_index = this.encode[letter]; + if (typeof alph_index === "undefined") { + throw new Error("Unknown letter"); + } + comprise_str = this.symbols[alph_index].equals; + comprise_list = []; + if (typeof comprise_str == "string") { + for (i = 0; i < comprise_str.length; i++) { + comprise_list.push(this.encode2core[comprise_str.charAt(i)]); + } + } else { + comprise_list.push(alph_index); + } + return comprise_list; +}; +// check if a symbol is the primary way of representing the symbol in the alphabet +Alphabet.prototype.is_prime_symbol = function(letter) { + var alph_index; + alph_index = this.encode[letter]; + if (alph_index == null) return false; + if (this.is_case_insensitive()) { + return (this.symbols[alph_index].symbol.toUpperCase() == letter.toUpperCase()); + } else { + return (this.symbols[alph_index].symbol == letter); + } +}; +// compare 2 alphabets +Alphabet.prototype.equals = function(other) { + "use strict"; + var i, sym1, sym2; + // first check that it's actually an alphabet object + if (!(typeof other === "object" && other != null && other instanceof Alphabet)) { + return false; + } + // second shortcircuit if it's the same object + if (this === other) return true; + // compare + if (this.name !== other.name) return false; + if (this.ncore !== other.ncore) return false; + if (this.symbols.length !== other.symbols.length) return false; + for (i = 0; i < this.symbols.length; i++) { + sym1 = this.symbols[i]; + sym2 = other.symbols[i]; + if (sym1.symbol !== sym2.symbol) return false; + if (sym1.aliases !== sym2.aliases) return false; + if (sym1.name !== sym2.name) return false; + if (typeof sym1.colour !== typeof sym2.colour || + (typeof sym1.colour === "string" && typeof sym2.colour === "string" && + parseInt(sym1.colour, 16) != parseInt(sym2.colour, 16))) { + return false; + } + if (sym1.complement !== sym2.complement) return false; + if (sym1.equals !== sym2.equals) return false; + } + return true; +}; +Alphabet.prototype.check_core_subset = function(super_alph) { + var complement_same = true; + var seen_set = {}; + var sub_i, sub_symbol, super_i, super_symbol; + for (sub_i = 0; sub_i < this.ncore; sub_i++) { + sub_symbol = this.symbols[sub_i]; + super_i = super_alph.encode[sub_symbol.symbol]; + if (super_i == null) return 0; + super_symbol = super_alph.symbols[super_i]; + if (seen_set[super_i]) return 0; + seen_set[super_i] = true; + // check complement + if (sub_symbol.complement != null && super_symbol.complement != null) { + if (super_alph.encode[sub_symbol.complement] != super_alph.encode[super_symbol.complement]) { + complement_same = false; + } + } else if (sub_symbol.complement != null || super_symbol.complement != null) { + complement_same = false; + } + } + return (complement_same ? 1 : -1); +}; +// convert a sequence to its reverse complement +Alphabet.prototype.invcomp_seq = function(seq) { + "use strict"; + var syms, i, e_sym, comp_e_sym; + if (!this.has_complement()) throw new Error("Alphabet must be complementable"); + syms = seq.split(""); + for (i = 0; i < syms.length; i++) { + e_sym = this.encode[syms[i]]; + if (typeof e_sym === "undefined") { + e_sym = this.ncore; // wildcard + } + comp_e_sym = this.complement[e_sym]; + if (typeof comp_e_sym === "undefined") { + comp_e_sym = e_sym; // not complementable + } + syms[i] = this.symbols[comp_e_sym].symbol; + } + return syms.reverse().join(""); +}; +// convert the alphabet to the text version +Alphabet.prototype.as_text = function() { + "use strict"; + function name_as_text(name) { + var i, c, out; + out = "\""; + for (i = 0; i < name.length; i++) { + c = name.charAt(i); + if (c == "\"") { + out += "\\\""; + } else if (c == "/") { + out += "\\/"; + } else if (c == "\\") { + out += "\\\\"; + } else { + out += c; + } + } + out += "\""; + return out; + } + function symbol_as_text(sym) { + var out; + out = sym.symbol; + if (typeof sym.name === "string" && sym.name != sym.symbol) { + out += " " + name_as_text(sym.name); + } + if (typeof sym.colour === "string") { + out += " " + sym.colour; + } + return out; + } + var out, i, j, c, sym; + out = ""; + // output core symbols with 2 way complements + for (i = 0; i < this.ncore; i++) { + c = this.complement[i]; + if (typeof c === "number" && i < c && this.complement[c] === i) { + out += symbol_as_text(this.symbols[i]) + " ~ " + symbol_as_text(this.symbols[c]) + "\n"; + } + } + // output core symbols with no complement + for (i = 0; i < this.ncore; i++) { + if (typeof this.complement[i] === "undefined") { + out += symbol_as_text(this.symbols[i]) + "\n"; + } + } + // output ambiguous symbols that have comprising characters + for (i = this.ncore; i < this.symbols.length; i++) { + if (this.symbols[i].equals.length == 0) break; + out += symbol_as_text(this.symbols[i]) + " = " + this.symbols[i].equals + "\n"; + if (typeof this.symbols[i].aliases === "string") { + for (j = 0; j < this.symbols[i].aliases.length; j++) { + if (this.symbols[i].aliases.charAt(j) == this.symbols[i].symbol) continue; + out += this.symbols[i].aliases.charAt(j) + " = " + this.symbols[i].equals + "\n"; + } + } + } + // output aliases of core symbols + for (i = 0; i < this.ncore; i++) { + if (typeof this.symbols[i].aliases === "string") { + for (j = 0; j < this.symbols[i].aliases.length; j++) { + if (this.symbols[i].aliases.charAt(j) == this.symbols[i].symbol) continue; + out += this.symbols[i].aliases.charAt(j) + " = " + this.symbols[i].symbol + "\n"; + } + } + } + // output gap symbols + i = this.symbols.length - 1; + if (this.symbols[i].equals.length == 0) { + out += symbol_as_text(this.symbols[i]) + " =\n"; + if (typeof this.symbols[i].aliases === "string") { + for (j = 0; j < this.symbols[i].aliases.length; j++) { + if (this.symbols[i].aliases.charAt(j) == this.symbols[i].symbol) continue; + out += this.symbols[i].aliases.charAt(j) + " =\n"; + } + } + } + return out; +}; +// output the alphabet as it appears in minimal MEME format +Alphabet.prototype.as_meme = function() { + "use strict"; + function name_as_text(name) { + var i, c, out; + out = "\""; + for (i = 0; i < name.length; i++) { + c = name.charAt(i); + if (c == "\"") { + out += "\\\""; + } else if (c == "/") { + out += "\\/"; + } else if (c == "\\") { + out += "\\\\"; + } else { + out += c; + } + } + out += "\""; + return out; + } + if (this.equals(AlphStd.DNA)) { + return "ALPHABET= ACGT\n"; + } else if (this.equals(AlphStd.PROTEIN)) { + return "ALPHABET= ACDEFGHIKLMNPQRSTVWY\n"; + } else { + return "ALPHABET" + + (this.name != null ? " " + name_as_text(this.name) : "") + + (this.like != null ? " " + this.like + "-LIKE" : "") + "\n" + + this.as_text() + "END ALPHABET\n"; + } +}; + +// Returns a table showing all the letters in the alphabet +Alphabet.prototype.as_table = function() { + "use strict"; + var i, j, row, th, td, aliases, equals, sym; + var table = document.createElement("table"); + // create the core symbol header + row = table.insertRow(table.rows.length); + th = document.createElement("th"); + th.appendChild(document.createTextNode("Symbol(s)")); + row.appendChild(th); + th = document.createElement("th"); + th.appendChild(document.createTextNode("Name")); + row.appendChild(th); + th = document.createElement("th"); + if (this.has_complement()) { + th.appendChild(document.createTextNode("Complement")); + } + row.appendChild(th); + // list the core symbols + for (i = 0; i < this.ncore; i++) { + row = table.insertRow(table.rows.length); + td = document.createElement("td"); + if (this.symbols[i].colour != null) { + td.style.color = '#' + this.symbols[i].colour; + } + td.appendChild(document.createTextNode(this.symbols[i].symbol)); + aliases = this.get_aliases(i); + if (aliases.length > 0) { + td.appendChild(document.createTextNode(' ' + aliases.split('').join(' '))); + } + row.appendChild(td); + td = document.createElement("td"); + if (this.symbols[i].name != null) { + td.appendChild(document.createTextNode(this.symbols[i].name)); + } + row.appendChild(td); + td = document.createElement("td"); + if (this.symbols[i].complement != null) { + td.style.color = this.get_colour(this.get_index(this.symbols[i].complement)); + td.appendChild(document.createTextNode(this.symbols[i].complement)); + } + row.appendChild(td); + } + // create the ambiguous symbol header + row = table.insertRow(table.rows.length); + th = document.createElement("th"); + th.appendChild(document.createTextNode("Symbol(s)")); + row.appendChild(th); + th = document.createElement("th"); + th.appendChild(document.createTextNode("Name")); + row.appendChild(th); + th = document.createElement("th"); + th.appendChild(document.createTextNode("Matches")); + row.appendChild(th); + // list the ambiguous symbols + for (i = this.ncore; i < this.symbols.length; i++) { + row = table.insertRow(table.rows.length); + td = document.createElement("td"); + if (this.symbols[i].colour != null) { + td.style.color = '#' + this.symbols[i].colour; + } + td.appendChild(document.createTextNode(this.symbols[i].symbol)); + aliases = this.get_aliases(i); + if (aliases.length > 0) { + td.appendChild(document.createTextNode(' ' + aliases.split('').join(' '))); + } + row.appendChild(td); + td = document.createElement("td"); + if (this.symbols[i].name != null) { + td.appendChild(document.createTextNode(this.symbols[i].name)); + } + row.appendChild(td); + td = document.createElement("td"); + equals = this.symbols[i].equals.split(''); + for (j = 0; j < equals.length; j++) { + if (j != 0) td.appendChild(document.createTextNode(' ')); + sym = document.createElement("span"); + sym.style.color = this.get_colour(this.get_index(equals[j])); + sym.appendChild(document.createTextNode(equals[j])); + td.appendChild(sym); + } + row.appendChild(td); + } + return table; +}; + +// returns a dictionary of the colours for EPS +Alphabet.prototype._as_eps_dict = function() { + "use strict"; + var i, sym, rgb; + var out = "/fullColourDict <<\n"; + for (i = 0; i < this.ncore; i++) { + sym = this.get_symbol(i); + sym = sym.replace(/\\/g, "\\\\"); + sym = sym.replace(/\(/g, "\\("); + sym = sym.replace(/\)/g, "\\)"); + rgb = this.get_rgb(i); + out += " (" + sym + ") [" + rgb.red.toFixed(4) + " " + rgb.green.toFixed(4) + " " + rgb.blue.toFixed(4) + "]\n"; + } + out += ">> def\n"; + out += "/mutedColourDict <<\n"; + for (i = 0; i < this.ncore; i++) { + sym = this.get_symbol(i); + sym = sym.replace(/\\/g, "\\\\"); + sym = sym.replace(/\(/g, "\\("); + sym = sym.replace(/\)/g, "\\)"); + rgb = Alphabet.lighten_colour(this.get_rgb(i)); + out += " (" + sym + ") [" + rgb.red.toFixed(4) + " " + rgb.green.toFixed(4) + " " + rgb.blue.toFixed(4) + "]\n"; + } + out += ">> def\n"; + return out; +}; + +// return the alphabet name or a list of primary symbols +Alphabet.prototype.toString = function() { + "use strict"; + if (this.name != null) { + return this.name; + } else { + return this.get_symbols(); + } +}; + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Helper functions +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +// Convert a colour specified in RGB colourspace values into LAB colourspace +Alphabet.rgb2lab = function(rgb) { + "use strict"; + var xyzHelper, labHelper; + // XYZ helper + xyzHelper = function(value) { + if (value > 0.0445) { + value = (value + 0.055) / 1.055; + value = Math.pow(value, 2.4); + } else { + value /= 12.92; + } + value *= 100; + return value; + }; + // lab helper + labHelper = function(value) { + if (value > 0.008856) { + value = Math.pow(value, 1.0 / 3.0); + } else { + value = (7.787 * value) + (16.0 / 116.0); + } + return value; + }; + // convert into XYZ colourspace + var c1, c2, c3; + if (typeof rgb == "number") { + c1 = xyzHelper(((rgb >> 16) & 0xFF) / 255.0); + c2 = xyzHelper(((rgb >> 8) & 0xFF) / 255.0); + c3 = xyzHelper((rgb & 0xFF) / 255.0); + } else { + c1 = xyzHelper(rgb.red); + c2 = xyzHelper(rgb.green); + c3 = xyzHelper(rgb.blue); + } + var x = (c1 * 0.4124) + (c2 * 0.3576) + (c3 * 0.1805); + var y = (c1 * 0.2126) + (c2 * 0.7152) + (c3 * 0.0722); + var z = (c1 * 0.0193) + (c2 * 0.1192) + (c3 * 0.9505); + // convert into Lab colourspace + c1 = labHelper(x / 95.047); + c2 = labHelper(y / 100.0); + c3 = labHelper(z / 108.883); + var l = (116.0 * c2) - 16; + var a = 500.0 * (c1 - c2); + var b = 200.0 * (c2 - c3); + return {"l": l, "a": a, "b": b}; +}; + +// Convert a colour specified in HSV colourspace into RGB colourspace +Alphabet.hsv2rgb = function(hue, sat, value, output_object) { + // achromatic (grey) + var r = value; + var g = value; + var b = value; + if (sat != 0) { + var h = hue / 60.0; + var i = Math.floor(h); + var f = h - i; + var p = value * (1.0 - sat); + var q = value * (1.0 - (sat * f)); + var t = value * (1.0 - (sat * (1.0 - f))); + if (i == 0) { + r = value; + g = t; + b = p; + } else if (i == 1) { + r = q; + g = value; + b = p; + } else if (i == 2) { + r = p; + g = value; + b = t; + } else if (i == 3) { + r = p; + g = q; + b = value; + } else if (i == 4) { + r = t; + g = p; + b = value; + } else { + r = value; + g = p; + b = q; + } + } + if (output_object) { + return {"red": r, "green": g, "blue": b}; + } else { + return (Math.floor(r * 255) << 15) | (Math.floor(g * 255) << 8) | (Math.floor(b * 255)); + } +}; + +// Calculate a distance score between two colours in LAB colourspace +Alphabet.lab_dist = function(lab1, lab2) { + var c1 = Math.sqrt((lab1.l * lab1.l) + (lab1.a * lab1.a)); + var c2 = Math.sqrt((lab2.l * lab2.l) + (lab2.a * lab2.a)); + var dc = c1 - c2; + var dl = lab1.l - lab2.l; + var da = lab1.a - lab2.a; + var db = lab1.b - lab2.b; + // we don't want NaN due to rounding errors so fudge things a bit... + var dh = 0; + var dh_squared = (da * da) + (db * db) - (dc * dc); + if (dh_squared > 0) { + dh = Math.sqrt(dh_squared); + } + var first = dl; + var second = dc / (1.0 + (0.045 * c1)); + var third = dh / (1.0 + (0.015 * c1)); + return Math.sqrt((first * first) + (second * second) + (third * third)); +}; + +// convert an RGB value into a HSL value +Alphabet.rgb2hsl = function(rgb) { + "use strict"; + var min, max, delta, h, s, l, r, g, b; + if (typeof rgb == "number") { + r = ((rgb >> 16) & 0xFF) / 255.0; + g = ((rgb >> 8) & 0xFF) / 255.0; + b = (rgb & 0xFF) / 255.0; + } else { + r = rgb.red; + g = rgb.green; + b = rgb.blue; + } + min = Math.min(r, g, b); + max = Math.max(r, g, b); + delta = max - min; + l = min + (delta / 2); + if (max == min) { + h = 0; // achromatic (grayscale) + s = 0; + } else { + if (l > 0.5) { + s = delta / (2 - max - min); + } else { + s = delta / (max + min); + } + if (max == r) { + h = (g - b) / delta; + if (g < b) h += 6; + } else if (max == g) { + h = ((b - r) / delta) + 2; + } else { + h = ((r - g) / delta) + 4; + } + h /= 6; + } + return {"h": h, "s": s, "l": l}; +}; + +// convert a HSL value into an RGB value +Alphabet.hsl2rgb = function(hsl, output_object) { + "use strict"; + function _hue(p, q, t) { + "use strict"; + if (t < 0) t += 1; + else if (t > 1) t -= 1; + if (t < (1.0 / 6.0)) { + return p + ((q - p) * 6.0 * t); + } else if (t < 0.5) { + return q; + } else if (t < (2.0 / 3.0)) { + return p + ((q - p) * ((2.0 / 3.0) - t) * 6.0); + } else { + return p; + } + } + var r, g, b, p, q; + if (hsl.s == 0) { + // achromatic (grayscale) + r = hsl.l; + g = hsl.l; + b = hsl.l; + } else { + if (hsl.l < 0.5) { + q = hsl.l * (1 + hsl.s); + } else { + q = hsl.l + hsl.s - (hsl.l * hsl.s); + } + p = (2 * hsl.l) - q; + r = _hue(p, q, hsl.h + (1.0 / 3.0)); + g = _hue(p, q, hsl.h); + b = _hue(p, q, hsl.h - (1.0 / 3.0)); + } + if (output_object) { + return {"red": r, "green": g, "blue": b}; + } else { + return (Math.floor(r * 255) << 15) | (Math.floor(g * 255) << 8) | (Math.floor(b * 255)); + } +}; + +Alphabet.lighten_colour = function(rgb) { + "use strict"; + var hsl = Alphabet.rgb2hsl(rgb); + hsl.l += (1.0 - hsl.l) * 2 / 3; + return Alphabet.hsl2rgb(hsl, typeof rgb != "number"); +}; + +//====================================================================== +// end Alphabet object +//====================================================================== + +//====================================================================== +// start StandardAlphabet object +//====================================================================== + +// an extension of the alphabet object to support some additional fields +// only present in standard alphabets. +var StandardAlphabet = function(enum_code, enum_name, alphabet_data) { + Alphabet.apply(this, [alphabet_data]); + this.enum_code = enum_code; + this.enum_name = enum_name; +}; +StandardAlphabet.prototype = Alphabet.prototype; +StandardAlphabet.prototype.constructor = StandardAlphabet; + +// A unique code for this standard alphabet. +// This code will be a power of 2 to enable creation of bitsets for +// a selection of standard alphabets. +StandardAlphabet.prototype.get_code = function() { + return this.enum_code; +}; + +// A unique name for this standard alphabet. +// this name will be all upper case and the same as the property that +// refers to this alphabet in the AlphStd collection. +StandardAlphabet.prototype.get_enum = function() { + return this.enum_name; +}; + +//====================================================================== +// end StandardAlphabet object +//====================================================================== + +// A collection of standard alphabets. +var AlphStd = { + RNA: new StandardAlphabet(1, "RNA", { + "name": "RNA", + "like": "RNA", + "ncore": 4, + "symbols": [ + {"symbol": "A", "name": "Adenine", "colour": "CC0000"}, + {"symbol": "C", "name": "Cytosine", "colour": "0000CC"}, + {"symbol": "G", "name": "Guanine", "colour": "FFB300"}, + {"symbol": "U", "name": "Uracil", "colour": "008000", + "aliases": "T"}, + {"symbol": "N", "name": "Any base", "equals": "ACGU", "aliases": "X."}, + {"symbol": "V", "name": "Not U", "equals": "ACG"}, + {"symbol": "H", "name": "Not G", "equals": "ACU"}, + {"symbol": "D", "name": "Not C", "equals": "AGU"}, + {"symbol": "B", "name": "Not A", "equals": "CGU"}, + {"symbol": "M", "name": "Amino", "equals": "AC"}, + {"symbol": "R", "name": "Purine", "equals": "AG"}, + {"symbol": "W", "name": "Weak", "equals": "AU"}, + {"symbol": "S", "name": "Strong", "equals": "CG"}, + {"symbol": "Y", "name": "Pyrimidine", "equals": "CU"}, + {"symbol": "K", "name": "Keto", "equals": "GU"} + ] + }), + DNA: new StandardAlphabet(2, "DNA", { + "name": "DNA", + "like": "DNA", + "ncore": 4, + "symbols": [ + {"symbol": "A", "name": "Adenine", "colour": "CC0000", "complement": "T"}, + {"symbol": "C", "name": "Cytosine", "colour": "0000CC", "complement": "G"}, + {"symbol": "G", "name": "Guanine", "colour": "FFB300", "complement": "C"}, + {"symbol": "T", "name": "Thymine", "colour": "008000", "complement": "A", + "aliases": "U"}, + {"symbol": "N", "name": "Any base", "equals": "ACGT", "aliases": "X."}, + {"symbol": "V", "name": "Not T", "equals": "ACG"}, + {"symbol": "H", "name": "Not G", "equals": "ACT"}, + {"symbol": "D", "name": "Not C", "equals": "AGT"}, + {"symbol": "B", "name": "Not A", "equals": "CGT"}, + {"symbol": "M", "name": "Amino", "equals": "AC"}, + {"symbol": "R", "name": "Purine", "equals": "AG"}, + {"symbol": "W", "name": "Weak", "equals": "AT"}, + {"symbol": "S", "name": "Strong", "equals": "CG"}, + {"symbol": "Y", "name": "Pyrimidine", "equals": "CT"}, + {"symbol": "K", "name": "Keto", "equals": "GT"} + ] + }), + PROTEIN: new StandardAlphabet(4, "PROTEIN", { + "name": "Protein", + "like": "PROTEIN", + "ncore": 20, + "symbols": [ + {"symbol": "A", "name": "Alanine", "colour": "0000CC"}, + {"symbol": "C", "name": "Cysteine", "colour": "0000CC"}, + {"symbol": "D", "name": "Aspartic acid", "colour": "FF00FF"}, + {"symbol": "E", "name": "Glutamic acid", "colour": "FF00FF"}, + {"symbol": "F", "name": "Phenylalanine", "colour": "0000CC"}, + {"symbol": "G", "name": "Glycine", "colour": "FFB300"}, + {"symbol": "H", "name": "Histidine", "colour": "FFCCCC"}, + {"symbol": "I", "name": "Isoleucine", "colour": "0000CC"}, + {"symbol": "K", "name": "Lysine", "colour": "CC0000"}, + {"symbol": "L", "name": "Leucine", "colour": "0000CC"}, + {"symbol": "M", "name": "Methionine", "colour": "0000CC"}, + {"symbol": "N", "name": "Asparagine", "colour": "008000"}, + {"symbol": "P", "name": "Proline", "colour": "FFFF00"}, + {"symbol": "Q", "name": "Glutamine", "colour": "008000"}, + {"symbol": "R", "name": "Arginine", "colour": "CC0000"}, + {"symbol": "S", "name": "Serine", "colour": "008000"}, + {"symbol": "T", "name": "Threonine", "colour": "008000"}, + {"symbol": "V", "name": "Valine", "colour": "0000CC"}, + {"symbol": "W", "name": "Tryptophan", "colour": "0000CC"}, + {"symbol": "Y", "name": "Tyrosine", "colour": "33E6CC"}, + {"symbol": "X", "name": "Any amino acid", "equals": "ACDEFGHIKLMNPQRSTVWY", "aliases": "*."}, + {"symbol": "B", "name": "Asparagine or Aspartic acid", "equals": "DN"}, + {"symbol": "Z", "name": "Glutamine or Glutamic acid", "equals": "EQ"}, + {"symbol": "J", "name": "Leucine or Isoleucine", "equals": "IL"} + ] + }) +}; + +//====================================================================== +// start Symbol object +//====================================================================== +var Symbol = function(alph_index, scale, alphabet) { + "use strict"; + //variable prototype + this.symbol = alphabet.get_symbol(alph_index); + this.scale = scale; + this.colour = alphabet.get_colour(alph_index); +}; + +Symbol.prototype.get_symbol = function() { + "use strict"; + return this.symbol; +}; + +Symbol.prototype.get_scale = function() { + "use strict"; + return this.scale; +}; + +Symbol.prototype.get_colour = function() { + "use strict"; + return this.colour; +}; + +Symbol.prototype.toString = function() { + "use strict"; + return this.symbol + " " + (Math.round(this.scale*1000)/10) + "%"; +}; + +function compare_symbol(sym1, sym2) { + "use strict"; + if (sym1.get_scale() < sym2.get_scale()) { + return -1; + } else if (sym1.get_scale() > sym2.get_scale()) { + return 1; + } else { + return 0; + } +} +//====================================================================== +// end Symbol object +//====================================================================== + +//====================================================================== +// start Pspm object +//====================================================================== +var Pspm = function(matrix, name, ltrim, rtrim, nsites, evalue, pssm, alt) { + "use strict"; + var row, col, data, row_sum, delta, evalue_re; + if (typeof name !== "string") { + name = ""; + } + this.name = name; + //construct + if (matrix instanceof Pspm) { + // copy constructor + this.alph_length = matrix.alph_length; + this.motif_length = matrix.motif_length; + this.name = matrix.name; + this.alt = matrix.alt; + this.nsites = matrix.nsites; + this.evalue = matrix.evalue; + this.ltrim = matrix.ltrim; + this.rtrim = matrix.rtrim; + this.pspm = []; + for (row = 0; row < matrix.motif_length; row++) { + this.pspm[row] = []; + for (col = 0; col < matrix.alph_length; col++) { + this.pspm[row][col] = matrix.pspm[row][col]; + } + } + if (matrix.pssm != null) { + this.pssm = []; + for (row = 0; row < matrix.motif_length; row++) { + this.pspm[row] = []; + for (col = 0; col < matrix.alph_length; col++) { + this.pssm[row][col] = matrix.pssm[row][col]; + } + } + } + } else { + // check parameters + if (ltrim == null) { + ltrim = 0; + } else if (typeof ltrim !== "number" || ltrim % 1 !== 0 || ltrim < 0) { + throw new Error("ltrim must be a non-negative integer, got: " + ltrim); + } + if (rtrim == null) { + rtrim = 0; + } else if (typeof rtrim !== "number" || rtrim % 1 !== 0 || rtrim < 0) { + throw new Error("rtrim must be a non-negative integer, got: " + rtrim); + } + if (nsites != null) { + if (typeof nsites !== "number" || nsites < 0) { + throw new Error("nsites must be a positive number, got: " + nsites); + } else if (nsites == 0) { + nsites = null; + } + } + if (evalue != null) { + if (typeof evalue === "number") { + if (evalue < 0) { + throw new Error("evalue must be a non-negative number, got: " + evalue); + } + } else if (typeof evalue === "string") { + evalue_re = /^((?:[+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?)|inf)$/; + if (!evalue_re.test(evalue)) { + throw new Error("evalue must be a non-negative number, got: " + evalue); + } + } else { + throw new Error("evalue must be a non-negative number, got: " + evalue); + } + } + // set properties + this.name = name; + this.alt = alt; + this.nsites = nsites; + this.evalue = evalue; + this.ltrim = ltrim; + this.rtrim = rtrim; + if (typeof matrix === "string") { + // string constructor + data = parse_pspm_string(matrix); + this.alph_length = data["alph_length"]; + this.motif_length = data["motif_length"]; + this.pspm = data["pspm"]; + if (this.evalue == null) { + if (data["evalue"] != null) { + this.evalue = data["evalue"]; + } else { + this.evalue = 0; + } + } + if (this.nsites == null) { + if (typeof data["nsites"] === "number") { + this.nsites = data["nsites"]; + } else { + this.nsites = 20; + } + } + } else { + // assume pspm is a nested array + this.motif_length = matrix.length; + this.alph_length = (matrix.length > 0 ? matrix[0].length : 0); + if (this.nsites == null) { + this.nsites = 20; + } + if (this.evalue == null) { + this.evalue = 0; + } + this.pspm = []; + // copy pspm and check + for (row = 0; row < this.motif_length; row++) { + if (this.alph_length != matrix[row].length) { + throw new Error("COLUMN_MISMATCH"); + } + this.pspm[row] = []; + row_sum = 0; + for (col = 0; col < this.alph_length; col++) { + this.pspm[row][col] = matrix[row][col]; + row_sum += this.pspm[row][col]; + } + delta = 0.1; + if (isNaN(row_sum) || (row_sum > 1 && (row_sum - 1) > delta) || + (row_sum < 1 && (1 - row_sum) > delta)) { + throw new Error("INVALID_SUM"); + } + } + // copy pssm + if (pssm != null) { + this.pssm = []; + for (row = 0; row < this.motif_length; row++) { + this.pssm[row] = []; + for (col = 0; col < this.alph_length; col++) { + this.pssm[row][col] = pssm[row][col]; + } + } + } + } + } +}; + +Pspm.prototype.copy = function() { + "use strict"; + return new Pspm(this); +}; + +Pspm.prototype.reverse = function() { + "use strict"; + var x, y, temp, temp_trim; + //reverse + x = 0; + y = this.motif_length-1; + while (x < y) { + temp = this.pspm[x]; + this.pspm[x] = this.pspm[y]; + this.pspm[y] = temp; + x++; + y--; + } + // reverse pssm (if defined) + if (typeof this.pssm !== "undefined") { + //reverse + x = 0; + y = this.motif_length-1; + while (x < y) { + temp = this.pssm[x]; + this.pspm[x] = this.pssm[y]; + this.pssm[y] = temp; + x++; + y--; + } + } + //swap triming + temp_trim = this.ltrim; + this.ltrim = this.rtrim; + this.rtrim = temp_trim; + return this; //allow function chaining... +}; + +Pspm.prototype.reverse_complement = function(alphabet) { + "use strict"; + var x, y, temp, i, row, c, temp_trim; + if (this.alph_length != alphabet.get_size_core()) { + throw new Error("The alphabet size does not match the size of the pspm."); + } + if (!alphabet.has_complement()) { + throw new Error("The specified alphabet can not be complemented."); + } + // reverse motif + this.reverse(); + //complement + for (x = 0; x < this.motif_length; x++) { + row = this.pspm[x]; + for (i = 0; i < row.length; i++) { + c = alphabet.get_complement(i); + if (c < i) continue; + temp = row[i]; + row[i] = row[c]; + row[c] = temp; + } + } + // complement pssm (if defined) + if (typeof this.pssm !== "undefined") { + //complement + for (x = 0; x < this.motif_length; x++) { + row = this.pssm[x]; + for (i = 0; i < row.length; i++) { + c = alphabet.get_complement(i); + if (c < i) continue; + temp = row[i]; + row[i] = row[c]; + row[c] = temp; + } + } + } + return this; //allow function chaining... +}; + +Pspm.prototype.get_stack = function(position, alphabet, ssc) { + "use strict"; + var row, stack_ic, alphabet_ic, stack, i, sym; + if (this.alph_length != alphabet.get_size_core()) { + throw new Error("The alphabet size does not match the size of the pspm."); + } + row = this.pspm[position]; + stack_ic = this.get_stack_ic(position, alphabet); + if (ssc) stack_ic -= this.get_error(alphabet); + alphabet_ic = alphabet.get_ic(); + stack = []; + for (i = 0; i < this.alph_length; i++) { + sym = new Symbol(i, row[i]*stack_ic/alphabet_ic, alphabet); + if (sym.get_scale() <= 0) { + continue; + } + stack.push(sym); + } + stack.sort(compare_symbol); + return stack; +}; + +Pspm.prototype.get_stack_ic = function(position, alphabet) { + "use strict"; + var row, H, i; + if (this.alph_length != alphabet.get_size_core()) { + throw new Error("The alphabet size does not match the size fo the pspm."); + } + row = this.pspm[position]; + H = 0; + for (i = 0; i < this.alph_length; i++) { + if (row[i] === 0) { + continue; + } + H -= (row[i] * (Math.log(row[i]) / Math.LN2)); + } + return alphabet.get_ic() - H; +}; + +Pspm.prototype.get_error = function(alphabet) { + "use strict"; + if (this.nsites === 0) { + return 0; + } + return (alphabet.get_size_core()-1) / (2 * Math.LN2 * this.nsites); +}; + +Pspm.prototype.get_motif_length = function() { + "use strict"; + return this.motif_length; +}; + +Pspm.prototype.get_alph_length = function() { + "use strict"; + return this.alph_length; +}; + +Pspm.prototype.get_left_trim = function() { + "use strict"; + return this.ltrim; +}; + +Pspm.prototype.get_right_trim = function() { + "use strict"; + return this.rtrim; +}; + +Pspm.prototype.as_best_match = function(alphabet) { + "use strict"; + var match, odds, best_odds, best_index; + var i, j; + match = ""; + for (i = 0; i < this.motif_length; i++) { + best_index = 0; + best_odds = this.pspm[i][0] / alphabet.get_bg_freq(0); + for (j = 1; j < this.alph_length; j++) { + odds = this.pspm[i][j] / alphabet.get_bg_freq(j); + if (odds > best_odds) { + best_odds = odds; + best_index = j; + } + } + match += alphabet.get_symbol(best_index); + } + return match; +}; + +Pspm.prototype.as_count_matrix = function() { + "use strict"; + var count, count_text, text; + var i, j; + text = ""; + for (i = 0; i < this.motif_length; i++) { + if (i !== 0) { + text += "\n"; + } + for (j = 0; j < this.alph_length; j++) { + if (j !== 0) { + text += " "; + } + count = Math.round(this.nsites * this.pspm[i][j]); + count_text = "" + count; + // pad up to length of 4 + if (count_text.length < 4) { + text += (new Array(5 - count_text.length)).join(" ") + count_text; + } else { + text += count_text; + } + } + } + return text; +}; + +Pspm.prototype.as_probability_matrix = function() { + "use strict"; + var text; + var i, j; + text = ""; + for (i = 0; i < this.motif_length; i++) { + if (i !== 0) { + text += "\n"; + } + for (j = 0; j < this.alph_length; j++) { + if (j !== 0) { + text += " "; + } + text += this.pspm[i][j].toFixed(6); + } + } + return text; +}; + +Pspm.prototype.as_score_matrix = function(alphabet, pseudo) { + "use strict"; + var me, score, out, row, col, score_text; + me = this; + if (typeof this.pssm === "undefined") { + if (!(typeof alphabet === "object" && alphabet != null && alphabet instanceof Alphabet)) { + throw new Error("The alphabet is required to generate the pssm."); + } + if (typeof pseudo === "undefined") { + pseudo = 0.01; + } else if (typeof pseudo !== "number" || pseudo < 0) { + throw new Error("Expected positive number for pseudocount"); + } + score = function(row, col) { + "use strict"; + var p, bg, p2; + p = me.pspm[row][col]; + bg = alphabet.get_bg_freq(col); + p2 = (p * me.nsites + bg * pseudo) / (me.nsites + pseudo); + return (p2 > 0 ? Math.round((Math.log(p2 / bg) / Math.LN2) * 100) : -10000); + }; + } else { + score = function(row, col) { + "use strict"; + return me.pssm[row][col]; + }; + } + out = ""; + for (row = 0; row < this.motif_length; row++) { + for (col = 0; col < this.alph_length; col++) { + if (col !== 0) { + out += " "; + } + score_text = "" + score(row, col); + // pad out to 6 characters + if (score_text.length < 6) { + out += (new Array(7 - score_text.length)).join(" ") + score_text; + } else { + out += score_text; + } + } + out += "\n"; + } + return out; +} + +Pspm.prototype.as_pspm = function() { + "use strict"; + return "letter-probability matrix: alength= " + this.alph_length + + " w= " + this.motif_length + " nsites= " + this.nsites + + " E= " + (typeof this.evalue === "number" ? + this.evalue.toExponential() : this.evalue) + "\n" + + this.as_probability_matrix(); +}; + +Pspm.prototype.as_pssm = function(alphabet, pseudo) { + "use strict"; + return "log-odds matrix: alength= " + this.alph_length + + " w= " + this.motif_length + + " E= " + (typeof this.evalue == "number" ? + this.evalue.toExponential() : this.evalue) + "\n" + + this.as_score_matrix(alphabet, pseudo); +}; + +Pspm.prototype.as_meme = function(options) { + var with_header, with_pspm, with_pssm, version, alphabet, bg_source, pseudocount, strands; + var out, alen, i; + // get the options + if (typeof options !== "object" || options === null) { + options = {}; + } + with_header = (typeof options["with_header"] === "boolean" ? options["with_header"] : false); + with_pspm = (typeof options["with_pspm"] === "boolean" ? options["with_pspm"] : false); + with_pssm = (typeof options["with_pssm"] === "boolean" ? options["with_pssm"] : false); + if (!with_pspm && !with_pssm) with_pspm = true; + if (with_header) { + if (typeof options["version"] === "string" && /^\d+(?:\.\d+){0,2}$/.test(options["version"])) { + version = options["version"]; + } else if (typeof options["version"] === "number") { + version = options["version"].toFixed(0); + } else { + version = "4"; + } + if (typeof options["strands"] === "number" && options["strands"] === 1) { + strands = 1; + } else { + strands = 2; + } + if (typeof options["bg_source"] === "string") { + bg_source = options["bg_source"]; + } else { + bg_source = "unknown source"; + } + if (typeof options["alphabet"] === "object" && options["alphabet"] != null + && options["alphabet"] instanceof Alphabet) { + alphabet = options["alphabet"]; + } else { + throw new Error("The alphabet is required to generate the header."); + } + } + // now create the output + out = ""; + if (with_header) { + out = "MEME version " + version + "\n\n"; + out += alphabet.as_meme() + "\n"; + if (alphabet.has_complement()) { // assume DNA has both strands unless otherwise specified + out += "strands: " + (strands === 1 ? "+" : "+ -") + "\n\n"; + } + out += "Background letter frequencies (from " + bg_source + "):\n"; + alen = alphabet.get_size_core(); + for (i = 0; i < alen; i++) { + if (i !== 0) { + if (i % 9 === 0) { // maximum of nine entries per line + out += "\n"; + } else { + out += " "; + } + } + out += alphabet.get_symbol(i) + " " + alphabet.get_bg_freq(i).toFixed(3); + } + } + out += "\n\n"; + out += "MOTIF " + this.name + (this.alt == null ? "" : " " + this.alt); + if (with_pssm) { + out += "\n\n"; + out += this.as_pssm(options["alphabet"], options["pseudocount"]); + } + if (with_pspm) { + out += "\n\n"; + out += this.as_pspm(); + } + return out; +} + +Pspm.prototype.toString = function() { + "use strict"; + var str, i, row; + str = ""; + for (i = 0; i < this.pspm.length; i++) { + row = this.pspm[i]; + str += row.join("\t") + "\n"; + } + return str; +}; + +function parse_pspm_properties(str) { + "use strict"; + var parts, i, eqpos, before, after, properties, prop, num, num_re; + num_re = /^((?:[+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?)|inf)$/; + parts = trim(str).split(/\s+/); + // split up words containing = + for (i = 0; i < parts.length;) { + eqpos = parts[i].indexOf("="); + if (eqpos != -1) { + before = parts[i].substr(0, eqpos); + after = parts[i].substr(eqpos+1); + if (before.length > 0 && after.length > 0) { + parts.splice(i, 1, before, "=", after); + i += 3; + } else if (before.length > 0) { + parts.splice(i, 1, before, "="); + i += 2; + } else if (after.length > 0) { + parts.splice(i, 1, "=", after); + i += 2; + } else { + parts.splice(i, 1, "="); + i++; + } + } else { + i++; + } + } + properties = {}; + for (i = 0; i < parts.length; i += 3) { + if (parts.length - i < 3) { + throw new Error("Expected PSPM property was incomplete. "+ + "Remaing parts are: " + parts.slice(i).join(" ")); + } + if (parts[i+1] !== "=") { + throw new Error("Expected '=' in PSPM property between key and " + + "value but got " + parts[i+1]); + } + prop = parts[i].toLowerCase(); + num = parts[i+2]; + if (!num_re.test(num)) { + throw new Error("Expected numeric value for PSPM property '" + + prop + "' but got '" + num + "'"); + } + properties[prop] = num; + } + return properties; +} + +function parse_pspm_string(pspm_string) { + "use strict"; + var header_re, lines, first_line, line_num, col_num, alph_length, + motif_length, nsites, evalue, pspm, i, line, match, props, parts, + j, prob; + header_re = /^letter-probability\s+matrix:(.*)$/i; + lines = pspm_string.split(/\n/); + first_line = true; + line_num = 0; + col_num = 0; + alph_length; + motif_length; + nsites; + evalue; + pspm = []; + for (i = 0; i < lines.length; i++) { + line = trim(lines[i]); + if (line.length === 0) { + continue; + } + // check the first line for a header though allow matrices without it + if (first_line) { + first_line = false; + match = header_re.exec(line); + if (match !== null) { + props = parse_pspm_properties(match[1]); + if (props.hasOwnProperty("alength")) { + alph_length = parseFloat(props["alength"]); + if (alph_length != 4 && alph_length != 20) { + throw new Error("PSPM property alength should be 4 or 20" + + " but got " + alph_length); + } + } + if (props.hasOwnProperty("w")) { + motif_length = parseFloat(props["w"]); + if (motif_length % 1 !== 0 || motif_length < 1) { + throw new Error("PSPM property w should be an integer larger " + + "than zero but got " + motif_length); + } + } + if (props.hasOwnProperty("nsites")) { + nsites = parseFloat(props["nsites"]); + if (nsites <= 0) { + throw new Error("PSPM property nsites should be larger than " + + "zero but got " + nsites); + } + } + if (props.hasOwnProperty("e")) { + evalue = props["e"]; + if (evalue < 0) { + throw new Error("PSPM property evalue should be " + + "non-negative but got " + evalue); + } + } + continue; + } + } + pspm[line_num] = []; + col_num = 0; + parts = line.split(/\s+/); + for (j = 0; j < parts.length; j++) { + prob = parseFloat(parts[j]); + if (prob != parts[j] || prob < 0 || prob > 1) { + throw new Error("Expected probability but got '" + parts[j] + "'"); + } + pspm[line_num][col_num] = prob; + col_num++; + } + line_num++; + } + if (typeof motif_length === "number") { + if (pspm.length != motif_length) { + throw new Error("Expected PSPM to have a motif length of " + + motif_length + " but it was actually " + pspm.length); + } + } else { + motif_length = pspm.length; + } + if (typeof alph_length !== "number") { + alph_length = pspm[0].length; + if (alph_length != 4 && alph_length != 20) { + throw new Error("Expected length of first row in the PSPM to be " + + "either 4 or 20 but got " + alph_length); + } + } + for (i = 0; i < pspm.length; i++) { + if (pspm[i].length != alph_length) { + throw new Error("Expected PSPM row " + i + " to have a length of " + + alph_length + " but the length was " + pspm[i].length); + } + } + return {"pspm": pspm, "motif_length": motif_length, + "alph_length": alph_length, "nsites": nsites, "evalue": evalue}; +} +//====================================================================== +// end Pspm object +//====================================================================== + +//====================================================================== +// start Logo object +//====================================================================== + +var Logo = function(alphabet, options) { + "use strict"; + this.alphabet = alphabet; + this.fine_text = ""; + this.x_axis = 1; + this.y_axis = true; + this.xlate_nsyms = 1; + this.xlate_start = null; + this.xlate_end = null; + this.pspm_list = []; + this.pspm_column = []; + this.rows = 0; + this.columns = 0; + if (typeof options === "string") { + // the old method signature had fine_text here so we support that + this.fine_text = options; + } else if (typeof options === "object" && options != null) { + this.fine_text = (typeof options.fine_text === "string" ? options.fine_text : ""); + this.x_axis = (typeof options.x_axis === "boolean" ? (options.x_axis ? 1 : 0) : 1); + if (options.x_axis_hidden != null && options.x_axis_hidden) this.x_axis = -1; + this.y_axis = (typeof options.y_axis === "boolean" ? options.y_axis : true); + this.xlate_nsyms = (typeof options.xlate_nsyms === "number" ? options.xlate_nsyms : this.xlate_nsyms); + this.xlate_start = (typeof options.xlate_start === "number" ? options.xlate_start : this.xlate_start); + this.xlate_end = (typeof options.xlate_end === "number" ? options.xlate_end : this.xlate_end); + } +}; + +Logo.prototype.add_pspm = function(pspm, column) { + "use strict"; + var col; + if (typeof column === "undefined") { + column = 0; + } else if (column < 0) { + throw new Error("Column index out of bounds."); + } + this.pspm_list[this.rows] = pspm; + this.pspm_column[this.rows] = column; + this.rows++; + col = column + pspm.get_motif_length(); + if (col > this.columns) { + this.columns = col; + } +}; + +Logo.prototype.get_columns = function() { + "use strict"; + return this.columns; +}; + +Logo.prototype.get_xlate_nsyms = function() { + "use strict"; + return this.xlate_nsyms; +}; + +Logo.prototype.get_xlate_start = function() { + "use strict"; + return (this.xlate_start != null ? this.xlate_start : 0); +}; + +Logo.prototype.get_xlate_end = function() { + "use strict"; + return (this.xlate_end != null ? this.xlate_end : this.columns * this.xlate_nsyms); +}; + +Logo.prototype.get_xlate_columns = function() { + "use strict"; + return this.get_xlate_end() - this.get_xlate_start(); +}; + +Logo.prototype.get_rows = function() { + "use strict"; + return this.rows; +}; + +Logo.prototype.get_pspm = function(row_index) { + "use strict"; + if (row_index < 0 || row_index >= this.rows) { + throw new Error("INDEX_OUT_OF_BOUNDS"); + } + return this.pspm_list[row_index]; +}; + +Logo.prototype.get_offset = function(row_index) { + "use strict"; + if (row_index < 0 || row_index >= this.rows) { + throw new Error("INDEX_OUT_OF_BOUNDS"); + } + return this.pspm_column[row_index]; +}; + +Logo.prototype._as_eps_data = function(ssc, errbars) { + var i, j, pos, stack_pos, pspm, stack, sym, out; + out = ""; + for (i = 0; i < this.rows; i++) { + out += "\nStartLine\n"; + // Indent + for (j = 0; j < this.pspm_column[i]; j++) { + out += "() startstack\nendstack\n\n"; + } + pspm = this.pspm_list[i]; + if (pspm.get_left_trim() > 0) { + out += "MuteColour\nDrawTrimEdge\n" + pspm.get_left_trim() + " DrawTrimBg\n"; + } + for (pos = 0; pos < pspm.get_motif_length(); pos++) { + if (pos != 0 && pos == pspm.get_left_trim()) { // enable full colour + out += "DrawTrimEdge\nRestoreColour\n"; + } else if (pos == (pspm.get_motif_length() - pspm.get_right_trim())) { + out += "MuteColour\n" + pspm.get_right_trim() + " DrawTrimBg\n"; + } + out += "(" + (pos + 1) + ") startstack\n"; + stack = pspm.get_stack(pos, this.alphabet, ssc); + for (stack_pos = 0; stack_pos < stack.length; stack_pos++) { + sym = stack[stack_pos]; + out += " " + (sym.get_scale() * this.alphabet.get_ic()) + " (" + sym.get_symbol() + ") numchar\n"; + } + if (errbars) { + out += " " + pspm.get_error(this.alphabet) + " Ibeam\n"; + } + out += "endstack\n\n"; + } + if (pspm.get_right_trim() > 0 || pspm.get_left_trim() == pspm.get_motif_length()) { + out += "RestoreColour\n"; + } + out += "EndLine\n"; + } + return out; +}; + +Logo.prototype.as_eps = function(options) { + "use strict"; + if (this.xlate_nsyms != 1) throw new Error("Unsupported setting xlate_nsyms for EPS"); + if (this.xlate_start != null) throw new Error("Unsupported setting xlate_start for EPS"); + if (this.xlate_end != null) throw new Error("Unsupported setting xlate_end for EPS"); + + var LOGOHEIGHT = 7.5; // default height of line in cm + var cm2pts, height, width, now, ssc, errbars; + if (typeof options === "undefined") { + options = {}; + } + cm2pts = 72 / 2.54; + if (typeof options.logo_height == "number") { + height = options.logo_height; + } else { + height = LOGOHEIGHT * this.rows; + } + if (typeof options.logo_width == "number") { + width = options.logo_width; + } else { + width = this.columns + 2; + } + now = new Date(); + ssc = (typeof options.ssc == "boolean" ? options.ssc : false); + errbars = (typeof options.show_error_bar == "boolean" ? options.show_error_bar : ssc); + var values = { + "LOGOHEIGHT": height, + "LOGOWIDTH": width, + "BOUNDINGHEIGHT": Math.round(height * cm2pts), + "BOUNDINGWIDTH": Math.round(width * cm2pts), + "LOGOLINEHEIGHT": (height / this.rows), + "CHARSPERLINE": this.columns, + "BARBITS": this.alphabet.get_ic(), + "LOGOTYPE": (this.alphabet.has_complement() ? "NA" : "AA"), + "CREATIONDATE": now.getDate() + "." + (now.getMonth() + 1) + "." + now.getFullYear() + " " + now.getHours() + ":" + now.getMinutes() + ":" + now.getSeconds(), + "ERRORBARFRACTION": (typeof options.error_bar_fraction == "number" ? options.error_bar_fraction : 1.0), + "TICBITS": (typeof options.ticbits == "number" ? options.ticbits : 1.0), + "TITLE": (typeof options.title == "string" ? options.title : ""), + "FINEPRINT": (typeof options.fineprint == "string" ? options.fineprint : this.fine_text), + "XAXISLABEL": (typeof options.xaxislabel == "string" ? options.xaxislabel : ""), + "YAXISLABEL": (typeof options.yaxislabel == "string" ? options.yaxislabel : "bits"), + "SSC": ssc, + "YAXIS": (typeof options.show_y_axis == "boolean" ? options.show_y_axis : this.y_axis), + "SHOWENDS": (typeof options.show_ends == "boolean" ? options.show_ends : false), + "ERRBAR": errbars, + "OUTLINE": (typeof options.show_outline == "boolean" ? options.show_outline : false), + "NUMBERING": (typeof options.show_numbering == "boolean" ? options.show_numbering : this.x_axis != 0), + "SHOWINGBOX": (typeof options.show_box == "boolean" ? options.show_box : false), + "CREATOR": (typeof options.creator == "string" ? options.creator : "motif_logo.js"), + "FONTSIZE": (typeof options.label_font_size == "number" ? options.label_font_size : 12), + "TITLEFONTSIZE": (typeof options.title_font_size == "number" ? options.title_font_size : 12), + "SMALLFONTSIZE": (typeof options.small_font_size == "number" ? options.small_font_size : 6), + "TOPMARGIN" : (typeof options.top_margin == "number" ? options.top_margin : 0.9), + "BOTTOMMARGIN": (typeof options.bottom_margin == "number" ? options.bottom_margin : 0.9), + "COLORDICT": this.alphabet._as_eps_dict(), + "DATA": this._as_eps_data(ssc, errbars) + }; + // now this requires that the script containing the template has been imported! + return motif_logo_template(values); +}; + +//====================================================================== +// end Logo object +//====================================================================== + +// calculate the exact size (in pixels) of an object drawn on the +// canvas assuming that the background of the canvas is transparent. +function canvas_bounds(ctx, cwidth, cheight) { + "use strict"; + var data, r, c, top_line, bottom_line, left_line, right_line, + txt_width, txt_height; + + // extract the image data + data = ctx.getImageData(0, 0, cwidth, cheight).data; + + // set initial values + top_line = -1; bottom_line = -1; left_line = -1; right_line = -1; + txt_width = 0; txt_height = 0; + + // Find the top-most line with a non-transparent pixel + for (r = 0; r < cheight; r++) { + for (c = 0; c < cwidth; c++) { + if (data[r * cwidth * 4 + c * 4 + 3]) { + top_line = r; + break; + } + } + if (top_line != -1) { + break; + } + } + + // Only bother looking if we found at least one set pixel... + if (top_line != -1) { + + //find the last line with a non-transparent pixel + for (r = cheight-1; r >= top_line; r--) { + for(c = 0; c < cwidth; c++) { + if(data[r * cwidth * 4 + c * 4 + 3]) { + bottom_line = r; + break; + } + } + if (bottom_line != -1) { + break; + } + } + // calculate height + txt_height = bottom_line - top_line + 1; + + // Find the left-most line with a non-transparent pixel + for (c = 0; c < cwidth; c++) { + for (r = top_line; r <= bottom_line; r++) { + if (data[r * cwidth * 4 + c * 4 + 3]) { + left_line = c; + break; + } + } + if (left_line != -1) { + break; + } + } + + //find the right most line with a non-transparent pixel + for (c = cwidth-1; c >= left_line; c--) { + for(r = top_line; r <= bottom_line; r++) { + if(data[r * cwidth * 4 + c * 4 + 3]) { + right_line = c; + break; + } + } + if (right_line != -1) { + break; + } + } + txt_width = right_line - left_line + 1; + } + + //return the bounds + return {bound_top: top_line, bound_bottom: bottom_line, + bound_left: left_line, bound_right: right_line, width: txt_width, + height: txt_height}; +} + +//====================================================================== +// start RasterizedAlphabet +//====================================================================== + +// Rasterize Alphabet +// 1) Measure width of text at default font for all symbols in alphabet +// 2) sort in width ascending +// 3) Drop the top and bottom 10% (designed to ignore outliers like 'W' and 'I') +// 4) Calculate the average as the maximum scaling factor (designed to stop I becoming a rectangular blob). +// 5) Assume scale of zero would result in width of zero, interpolate scale required to make perfect width font +// 6) Draw text onto temp canvas at calculated scale +// 7) Find bounds of drawn text +// 8) Paint on to another canvas at the desired height (but only scaling width to fit if larger). +var RasterizedAlphabet = function(alphabet, logo_scale, font, width) { + "use strict"; + var default_size, safety_pad, canvas, ctx, middle, baseline, widths, sizes, + i, sym, size, tenpercent, avg_width, scale, + target_width, target_height; + //variable prototypes + this.alphabet = alphabet; + this.scale = logo_scale; + this.sym_cache = {}; + this.stack_num_cache = []; + this.scale_num_cache = []; + // size of canvas + default_size = 60; // size of measuring canvas + safety_pad = 20; // pixels to pad around so we don't miss the edges + // create a canvas to do our measuring + canvas = document.createElement("canvas"); + if (!canvas.getContext) throw new Error("No canvas support"); + canvas.width = default_size + 2 * safety_pad; + canvas.height = default_size + 2 * safety_pad; + middle = Math.round(canvas.width / 2); + baseline = Math.round(canvas.height - safety_pad); + ctx = canvas.getContext('2d'); + if (!supports_text(ctx)) throw new Error("Canvas does not support text"); + ctx.font = font; + ctx.textAlign = "center"; + ctx.translate(middle, baseline); + // list of widths + widths = []; + sizes = []; + //now measure each letter in the alphabet + for (i = 0; i < alphabet.get_size_core(); ++i) { + // reset the canvas + ctx.clearRect(0, 0, canvas.width, canvas.height); + ctx.fillStyle = alphabet.get_colour(i); + // draw the test text + ctx.fillText(alphabet.get_symbol(i), 0, 0); + //measure + size = canvas_bounds(ctx, canvas.width, canvas.height); + if (size.width === 0) throw new Error("Invisible symbol!"); + widths.push(size.width); + sizes[i] = size; + } + //sort the widths + widths.sort(function(a,b) {return a - b;}); + //drop 10% of the items off each end + tenpercent = Math.floor(widths.length / 10); + for (i = 0; i < tenpercent; ++i) { + widths.pop(); + widths.shift(); + } + //calculate average width + avg_width = 0; + for (i = 0; i < widths.length; ++i) { + avg_width += widths[i]; + } + avg_width /= widths.length; + // calculate the target width + target_width = width * this.scale * 2; + // calculate scales + for (i = 0; i < alphabet.get_size_core(); ++i) { + sym = alphabet.get_symbol(i); + size = sizes[i]; + // calculate scale + scale = target_width / Math.max(avg_width, size.width); + // estimate scaled height + target_height = size.height * scale; + // create an appropriately sized canvas + canvas = document.createElement("canvas"); + canvas.width = target_width; + canvas.height = target_height + safety_pad * 2; + // calculate the middle + middle = Math.round(canvas.width / 2); + // calculate the baseline + baseline = Math.round(canvas.height - safety_pad); + // get the context and prepare to draw the rasterized text + ctx = canvas.getContext('2d'); + ctx.font = font; + ctx.fillStyle = alphabet.get_colour(i); + ctx.textAlign = "center"; + ctx.translate(middle, baseline); + ctx.save(); + ctx.scale(scale, scale); + // draw the text + ctx.fillText(sym, 0, 0); + ctx.restore(); + this.sym_cache[sym] = {"image": canvas, "size": canvas_bounds(ctx, canvas.width, canvas.height)}; + } +}; + +RasterizedAlphabet.prototype.get_alphabet = function() { + return this.alphabet; +}; + +RasterizedAlphabet.prototype.get_scale = function() { + return this.scale; +}; + +RasterizedAlphabet.prototype.draw_stack_sym = function(ctx, letter, dx, dy, dWidth, dHeight) { + "use strict"; + var entry, image, size; + entry = this.sym_cache[letter]; + image = entry.image; + size = entry.size; + ctx.drawImage(image, 0, size.bound_top -1, image.width, size.height+1, dx, dy, dWidth, dHeight); +}; + +RasterizedAlphabet.prototype.draw_stack_num = function(ctx, font, stack_width, index) { + var image, image_ctx, text_length; + if (index >= this.stack_num_cache.length) { + image = document.createElement("canvas"); + // measure the text + image_ctx = image.getContext('2d'); + image_ctx.save(); + image_ctx.font = font; + text_length = image_ctx.measureText("" + (index + 1)).width; + image_ctx.restore(); + // resize the canvas to fit + image.width = Math.ceil(stack_width); + image.height = Math.ceil(text_length); + // draw the text + image_ctx = image.getContext('2d'); + image_ctx.translate(Math.round(stack_width / 2), 0); + image_ctx.font = font; + image_ctx.textBaseline = "middle"; + image_ctx.textAlign = "right"; + image_ctx.rotate(-(Math.PI / 2)); + image_ctx.fillText("" + (index + 1), 0, 0); + this.stack_num_cache[index] = image; + } else { + image = this.stack_num_cache[index]; + } + ctx.drawImage(image, 0, 0); +} + +RasterizedAlphabet.prototype.draw_scale_num = function(ctx, font, num) { + var image, image_ctx, text_size, m_length; + if (num >= this.scale_num_cache.length) { + image = document.createElement("canvas"); + // measure the text + image_ctx = image.getContext('2d'); + image_ctx.font = font; + text_size = image_ctx.measureText("" + num); + if (text_size.actualBoundingBoxAscent && text_size.actualBoundingBoxDesent) { + // resize the canvas to fit + image.width = Math.ceil(text_size.width); + image.height = Math.ceil(text_size.actualBoundingBoxAscent + text_size.actualBoundingBoxDesent); + // draw the text + image_ctx = image.getContext('2d'); + image_ctx.font = font; + image_ctx.textAlign = "right"; + image_ctx.fillText("" + num, image.width, text_size.actualBoundingBoxAscent); + } else { + // measure width of 'm' to approximate height, we double it later anyway + m_length = image_ctx.measureText("m").width; + // resize the canvas to fit + image.width = Math.ceil(text_size.width); + image.height = Math.ceil(2 * m_length); + // draw the text + image_ctx = image.getContext('2d'); + image_ctx.font = font; + image_ctx.textAlign = "right"; + image_ctx.textBaseline = "middle"; + image_ctx.fillText("" + num, image.width, m_length); + } + this.scale_num_cache[num] = image; + } else { + image = this.scale_num_cache[num]; + } + ctx.drawImage(image, -image.width, -Math.round(image.height / 2)) +} + +//====================================================================== +// end RasterizedAlphabet +//====================================================================== + +//====================================================================== +// start LogoMetrics object +//====================================================================== + +var LogoMetrics = function(ctx, logo_columns, logo_rows, has_names, has_finetext, x_axis, y_axis) { + "use strict"; + var i, row_height; + //variable prototypes + this.pad_top = (has_names ? 5 : 0); + this.pad_left = (y_axis ? 10 : 0); + this.pad_right = (has_finetext ? 15 : 0); + this.pad_bottom = 0; + this.pad_middle = 20; + this.name_height = 14; + this.name_font = "bold " + this.name_height + "px Times, sans-serif"; + this.name_spacer = 0; + this.y_axis = y_axis; + this.y_label = "bits"; + this.y_label_height = 12; + this.y_label_font = "bold " + this.y_label_height + "px Helvetica, sans-serif"; + this.y_label_spacer = 3; + this.y_num_height = 12; + this.y_num_width = 0; + this.y_num_font = "bold " + this.y_num_height + "px Helvetica, sans-serif"; + this.y_tic_width = 5; + this.stack_pad_left = 0; + this.stack_font = "bold 25px Helvetica, sans-serif"; + this.stack_height = 90; + this.stack_width = 26; + this.stacks_pad_right = 5; + this.x_axis = x_axis; + this.x_num_above = 2; + this.x_num_height = 12; + this.x_num_width = 0; + this.x_num_font = "bold " + this.x_num_height + "px Helvetica, sans-serif"; + this.fine_txt_height = 6; + this.fine_txt_above = 2; + this.fine_txt_font = "normal " + this.fine_txt_height + "px Helvetica, sans-serif"; + this.letter_metrics = new Array(); + this.summed_width = 0; + this.summed_height = 0; + //calculate the width of the y axis numbers + ctx.font = this.y_num_font; + for (i = 0; i <= 2; i++) { + this.y_num_width = Math.max(this.y_num_width, ctx.measureText("" + i).width); + } + //calculate the width of the x axis numbers (but they are rotated so it becomes height) + if (x_axis == 1) { + ctx.font = this.x_num_font; + for (i = 1; i <= logo_columns; i++) { + this.x_num_width = Math.max(this.x_num_width, ctx.measureText("" + i).width); + } + } else if (x_axis == 0) { + this.x_num_height = 4; + this.x_num_width = 4; + } else { + this.x_num_height = 0; + this.x_num_width = 0; + } + + //calculate how much vertical space we want to draw this + //first we add the padding at the top and bottom since that's always there + this.summed_height += this.pad_top + this.pad_bottom; + //all except the last row have the same amount of space allocated to them + if (logo_rows > 1) { + row_height = this.stack_height + this.pad_middle; + if (has_names) { + row_height += this.name_height; + //the label is allowed to overlap into the spacer + row_height += Math.max(this.y_num_height/2, this.name_spacer); + //the label is allowed to overlap the space used by the other label + row_height += Math.max(this.y_num_height/2, this.x_num_height + this.x_num_above); + } else { + row_height += this.y_num_height/2; + //the label is allowed to overlap the space used by the other label + row_height += Math.max(this.y_num_height/2, this.x_num_height + this.x_num_above); + } + this.summed_height += row_height * (logo_rows - 1); + } + //the last row has the name and fine text below it but no padding + this.summed_height += this.stack_height + (this.y_axis ? this.y_num_height/2 : 0); + + var fine_txt_total = (has_finetext ? this.fine_txt_height + this.fine_txt_above : 0); + if (has_names) { + this.summed_height += fine_txt_total + this.name_height; + this.summed_height += Math.max((this.y_axis ? this.y_num_height/2 : 0), + this.x_num_height + this.x_num_above + this.name_spacer); + } else { + this.summed_height += Math.max((this.y_axis ? this.y_num_height/2 : 0), + this.x_num_height + this.x_num_above + fine_txt_total); + } + + //calculate how much horizontal space we want to draw this + //first add the padding at the left and right since that's always there + this.summed_width += this.pad_left + this.pad_right; + if (this.y_axis) { + //add on the space for the y-axis label + this.summed_width += this.y_label_height + this.y_label_spacer; + //add on the space for the y-axis + this.summed_width += this.y_num_width + this.y_tic_width; + } + //add on the space for the stacks + this.summed_width += (this.stack_pad_left + this.stack_width) * logo_columns; + //add on the padding after the stacks (an offset from the fine text) + this.summed_width += this.stacks_pad_right; + +}; + +//====================================================================== +// end LogoMetrics object +//====================================================================== + +//found this trick at http://talideon.com/weblog/2005/02/detecting-broken-images-js.cfm +function image_ok(img) { + "use strict"; + // During the onload event, IE correctly identifies any images that + // weren't downloaded as not complete. Others should too. Gecko-based + // browsers act like NS4 in that they report this incorrectly. + if (!img.complete) { + return false; + } + // However, they do have two very useful properties: naturalWidth and + // naturalHeight. These give the true size of the image. If it failed + // to load, either of these should be zero. + if (typeof img.naturalWidth !== "undefined" && img.naturalWidth === 0) { + return false; + } + // No other way of checking: assume it's ok. + return true; +} + +function supports_text(ctx) { + "use strict"; + if (!ctx.fillText) { + return false; + } + if (!ctx.measureText) { + return false; + } + return true; +} + +//draws the scale, returns the width +function draw_scale(ctx, metrics, alphabet_ic, raster) { + "use strict"; + var tic_height, i; + tic_height = metrics.stack_height / alphabet_ic; + ctx.save(); + ctx.translate(metrics.y_label_height, metrics.y_num_height/2); + //draw the axis label + ctx.save(); + ctx.font = metrics.y_label_font; + ctx.translate(0, metrics.stack_height/2); + ctx.rotate(-(Math.PI / 2)); + ctx.textAlign = "center"; + ctx.fillText("bits", 0, 0); + ctx.restore(); + + ctx.translate(metrics.y_label_spacer + metrics.y_num_width, 0); + + //draw the axis tics + ctx.save(); + ctx.translate(0, metrics.stack_height); + for (i = 0; i <= alphabet_ic; i++) { + //draw the number + ctx.save(); + ctx.translate(-1, 0); + raster.draw_scale_num(ctx, metrics.y_num_font, i); + ctx.restore(); + //draw the tic + ctx.fillRect(0, -1, metrics.y_tic_width, 2); + //prepare for next tic + ctx.translate(0, -tic_height); + } + ctx.restore(); + + ctx.fillRect(metrics.y_tic_width - 2, 0, 2, metrics.stack_height) + + ctx.restore(); +} + +function draw_stack_num(ctx, metrics, row_index, raster) { + "use strict"; + ctx.save(); + ctx.translate(0, Math.round(metrics.stack_height + metrics.x_num_above)); + if (metrics.x_axis == 1) { + raster.draw_stack_num(ctx, metrics.x_num_font, metrics.stack_width, row_index); + } else if (metrics.x_axis == 0) { + // draw dots instead of the numbers (good for small logos) + ctx.beginPath(); + var radius = Math.round(metrics.x_num_height / 2); + ctx.arc(Math.round(metrics.stack_width / 2), radius, radius, 0, 2 * Math.PI, false); + ctx.fill(); + } + ctx.restore(); +} + +function draw_stack(ctx, metrics, symbols, raster) { + "use strict"; + var preferred_pad, sym_min, i, sym, sym_height, pad; + preferred_pad = 0; + sym_min = 5; + + ctx.save();//1 + ctx.translate(0, metrics.stack_height); + for (i = 0; i < symbols.length; i++) { + sym = symbols[i]; + sym_height = metrics.stack_height * sym.get_scale(); + + pad = preferred_pad; + if (sym_height - pad < sym_min) { + pad = Math.min(pad, Math.max(0, sym_height - sym_min)); + } + sym_height -= pad; + + //translate to the correct position + ctx.translate(0, -(pad/2 + sym_height)); + + //draw + raster.draw_stack_sym(ctx, sym.get_symbol(), 0, 0, metrics.stack_width, sym_height); + //translate past the padding + ctx.translate(0, -(pad/2)); + } + ctx.restore();//1 +} + +function draw_dashed_line(ctx, pattern, start, x1, y1, x2, y2) { + "use strict"; + var x, y, len, i, dx, dy, tlen, theta, mulx, muly, lx, ly; + dx = x2 - x1; + dy = y2 - y1; + tlen = Math.pow(dx*dx + dy*dy, 0.5); + theta = Math.atan2(dy,dx); + mulx = Math.cos(theta); + muly = Math.sin(theta); + lx = []; + ly = []; + for (i = 0; i < pattern; ++i) { + lx.push(pattern[i] * mulx); + ly.push(pattern[i] * muly); + } + i = start; + x = x1; + y = y1; + len = 0; + ctx.beginPath(); + while (len + pattern[i] < tlen) { + ctx.moveTo(x, y); + x += lx[i]; + y += ly[i]; + ctx.lineTo(x, y); + len += pattern[i]; + i = (i + 1) % pattern.length; + x += lx[i]; + y += ly[i]; + len += pattern[i]; + i = (i + 1) % pattern.length; + } + if (len < tlen) { + ctx.moveTo(x, y); + x += mulx * (tlen - len); + y += muly * (tlen - len); + ctx.lineTo(x, y); + } + ctx.stroke(); +} + +function draw_trim_background(ctx, metrics, left_start, left_end, left_divider, right_start, right_end, right_divider) { + "use strict"; + var left_size = left_end - left_start; + var right_size = right_end - right_start; + var line_x; + + ctx.save();//s8 + ctx.fillStyle = "rgb(240, 240, 240)"; + if (left_size > 0) { + ctx.fillRect(left_start * metrics.stack_width, 0, left_size * metrics.stack_width, metrics.stack_height); + } + if (right_size > 0) { + ctx.fillRect(right_start * metrics.stack_width, 0, right_size * metrics.stack_width, metrics.stack_height); + } + ctx.fillStyle = "rgb(51, 51, 51)"; + if (left_size > 0 && left_divider) { + line_x = (left_end * metrics.stack_width) - 0.5; + draw_dashed_line(ctx, [3], 0, line_x, 0, line_x, metrics.stack_height); + } + if (right_size > 0 && right_divider) { + line_x = (right_start * metrics.stack_width) + 0.5; + draw_dashed_line(ctx, [3], 0, line_x, 0, line_x, metrics.stack_height); + } + ctx.restore();//s8 +} + +function size_logo_on_canvas(logo, canvas, show_names, scale) { + "use strict"; + var draw_name, draw_finetext, metrics; + draw_name = (typeof show_names === "boolean" ? show_names : (logo.get_rows() > 1)); + draw_finetext = (logo.fine_text.length > 0); + if (canvas.width !== 0 && canvas.height !== 0) { + return; + } + metrics = new LogoMetrics(canvas.getContext('2d'), + logo.get_xlate_columns(), logo.get_rows(), draw_name, draw_finetext, logo.x_axis, logo.y_axis); + if (typeof scale == "number") { + //resize the canvas to fit the scaled logo + canvas.width = metrics.summed_width * scale; + canvas.height = metrics.summed_height * scale; + } else { + if (canvas.width === 0 && canvas.height === 0) { + canvas.width = metrics.summed_width; + canvas.height = metrics.summed_height; + } else if (canvas.width === 0) { + canvas.width = metrics.summed_width * (canvas.height / metrics.summed_height); + } else if (canvas.height === 0) { + canvas.height = metrics.summed_height * (canvas.width / metrics.summed_width); + } + } +} + +function draw_logo_on_canvas(logo, canvas, show_names, scale) { + "use strict"; + var i, draw_name, draw_finetext, ctx, metrics, raster, pspm_i, pspm, + offset, col_index, motif_position, ssc; + ssc = false; + draw_name = (typeof show_names === "boolean" ? show_names : (logo.get_rows() > 1)); + draw_finetext = (logo.fine_text.length > 0); + ctx = canvas.getContext('2d'); + //assume that the user wants the canvas scaled equally so calculate what the best width for this image should be + metrics = new LogoMetrics(ctx, logo.get_xlate_columns(), logo.get_rows(), draw_name, draw_finetext, logo.x_axis, logo.y_axis); + if (typeof scale == "number") { + //resize the canvas to fit the scaled logo + canvas.width = metrics.summed_width * scale; + canvas.height = metrics.summed_height * scale; + } else { + if (canvas.width === 0 && canvas.height === 0) { + scale = 1; + canvas.width = metrics.summed_width; + canvas.height = metrics.summed_height; + } else if (canvas.width === 0) { + scale = canvas.height / metrics.summed_height; + canvas.width = metrics.summed_width * scale; + } else if (canvas.height === 0) { + scale = canvas.width / metrics.summed_width; + canvas.height = metrics.summed_height * scale; + } else { + scale = Math.min(canvas.width / metrics.summed_width, canvas.height / metrics.summed_height); + } + } + // cache the raster based on the assumption that we will be drawing a lot + // of logos the same size and alphabet + if (typeof draw_logo_on_canvas.raster_cache === "undefined") { + draw_logo_on_canvas.raster_cache = []; + } + for (i = 0; i < draw_logo_on_canvas.raster_cache.length; i++) { + raster = draw_logo_on_canvas.raster_cache[i]; + if (raster.get_alphabet().equals(logo.alphabet) && + Math.abs(raster.get_scale() - scale) < 0.1) break; + raster = null; + } + if (raster == null) { + raster = new RasterizedAlphabet(logo.alphabet, scale, metrics.stack_font, metrics.stack_width); + draw_logo_on_canvas.raster_cache.push(raster); + } + ctx = canvas.getContext('2d'); + ctx.save();//s1 + ctx.scale(scale, scale); + ctx.save();//s2 + ctx.save();//s7 + //create margin + ctx.translate(Math.round(metrics.pad_left), Math.round(metrics.pad_top)); + for (pspm_i = 0; pspm_i < logo.get_rows(); ++pspm_i) { + pspm = logo.get_pspm(pspm_i); + offset = logo.get_offset(pspm_i); + //optionally draw name if this isn't the last row or is the only row + if (draw_name && (logo.get_rows() == 1 || pspm_i != (logo.get_rows()-1))) { + ctx.save();//s4 + ctx.translate(Math.round(metrics.summed_width/2), Math.round(metrics.name_height)); + ctx.font = metrics.name_font; + ctx.textAlign = "center"; + ctx.fillText(pspm.name, 0, 0); + ctx.restore();//s4 + ctx.translate(0, Math.round(metrics.name_height + + Math.min(0, metrics.name_spacer - metrics.y_num_height/2))); + } + //draw scale + if (logo.y_axis) draw_scale(ctx, metrics, logo.alphabet.get_ic(), raster); + ctx.save();//s5 + //translate across past the scale + if (logo.y_axis) { + ctx.translate(Math.round(metrics.y_label_height + metrics.y_label_spacer + + metrics.y_num_width + metrics.y_tic_width), Math.round(metrics.y_num_height / 2)); + } + //draw the trimming background + if (pspm.get_left_trim() > 0 || pspm.get_right_trim() > 0) { + var left_start = offset * logo.get_xlate_nsyms(); + var left_end = (offset + pspm.get_left_trim()) * logo.get_xlate_nsyms(); + var left_divider = true; + if (left_end < logo.get_xlate_start() || left_start > logo.get_xlate_end()) { + // no overlap + left_start = 0; + left_end = 0; + left_divider = false; + } else { + if (left_start < logo.get_xlate_start()) { + left_start = logo.get_xlate_start(); + } + if (left_end > logo.get_xlate_end()) { + left_end = logo.get_xlate_end(); + left_divider = false; + } + left_start -= logo.get_xlate_start(); + left_end -= logo.get_xlate_start(); + if (left_end < left_start) { + left_start = 0; + left_end = 0; + left_divider = false; + } + } + var right_end = (offset + pspm.get_motif_length()) * logo.get_xlate_nsyms(); + //var right_start = right_end - (pspm.get_left_trim() * logo.get_xlate_nsyms()); + var right_start = right_end - (pspm.get_right_trim() * logo.get_xlate_nsyms()); + var right_divider = true; + if (right_end < logo.get_xlate_start() || right_start > logo.get_xlate_end()) { + // no overlap + right_start = 0; + right_end = 0; + right_divider = false; + } else { + if (right_start < logo.get_xlate_start()) { + right_start = logo.get_xlate_start(); + right_divider = false; + } + if (right_end > logo.get_xlate_end()) { + right_end = logo.get_xlate_end(); + } + right_start -= logo.get_xlate_start(); + right_end -= logo.get_xlate_start(); + if (right_end < right_start) { + right_start = 0; + right_end = 0; + right_divider = false; + } + } + draw_trim_background(ctx, metrics, left_start, left_end, left_divider, right_start, right_end, right_divider); + } + //draw letters + var xlate_col; + for (xlate_col = logo.get_xlate_start(); xlate_col < logo.get_xlate_end(); xlate_col++) { + ctx.translate(metrics.stack_pad_left,0); + col_index = Math.floor(xlate_col / logo.get_xlate_nsyms()); + if (xlate_col % logo.get_xlate_nsyms() == 0) { + if (col_index >= offset && col_index < (offset + pspm.get_motif_length())) { + motif_position = col_index - offset; + draw_stack_num(ctx, metrics, motif_position, raster); + draw_stack(ctx, metrics, pspm.get_stack(motif_position, logo.alphabet, ssc), raster); + } + } else { + if (col_index >= offset && col_index < (offset + pspm.get_motif_length())) { + ctx.save();// s5.1 + ctx.translate(0, Math.round(metrics.stack_height)); + // TODO draw a dot or dash or something to indicate continuity of the motif + ctx.restore(); //s5.1 + } + } + ctx.translate(Math.round(metrics.stack_width), 0); + } + ctx.restore();//s5 + ////optionally draw name if this is the last row but isn't the only row + if (draw_name && (logo.get_rows() != 1 && pspm_i == (logo.get_rows()-1))) { + //translate vertically past the stack and axis's + ctx.translate(0, metrics.y_num_height/2 + metrics.stack_height + + Math.max(metrics.y_num_height/2, metrics.x_num_above + metrics.x_num_width + metrics.name_spacer)); + + ctx.save();//s6 + ctx.translate(metrics.summed_width/2, metrics.name_height); + ctx.font = metrics.name_font; + ctx.textAlign = "center"; + ctx.fillText(pspm.name, 0, 0); + ctx.restore();//s6 + ctx.translate(0, metrics.name_height); + } else { + //translate vertically past the stack and axis's + ctx.translate(0, metrics.y_num_height/2 + metrics.stack_height + + Math.max(metrics.y_num_height/2, metrics.x_num_above + metrics.x_num_width)); + } + //if not the last row then add middle padding + if (pspm_i != (logo.get_rows() -1)) { + ctx.translate(0, metrics.pad_middle); + } + } + ctx.restore();//s7 + if (logo.fine_text.length > 0) { + ctx.translate(metrics.summed_width - metrics.pad_right, metrics.summed_height - metrics.pad_bottom); + ctx.font = metrics.fine_txt_font; + ctx.textAlign = "right"; + ctx.fillText(logo.fine_text, 0,0); + } + ctx.restore();//s2 + ctx.restore();//s1 +} + +function create_canvas(c_width, c_height, c_id, c_title, c_display) { + "use strict"; + var canvas = document.createElement("canvas"); + //check for canvas support before attempting anything + if (!canvas.getContext) { + return null; + } + var ctx = canvas.getContext('2d'); + //check for html5 text drawing support + if (!supports_text(ctx)) { + return null; + } + //size the canvas + canvas.width = c_width; + canvas.height = c_height; + canvas.id = c_id; + canvas.title = c_title; + canvas.style.display = c_display; + return canvas; +} + +function logo_1(alphabet, fine_text, pspm) { + "use strict"; + var logo = new Logo(alphabet, fine_text); + logo.add_pspm(pspm); + return logo; +} + +function logo_2(alphabet, fine_text, target, query, query_offset) { + "use strict"; + var logo = new Logo(alphabet, fine_text); + if (query_offset < 0) { + logo.add_pspm(target, -query_offset); + logo.add_pspm(query); + } else { + logo.add_pspm(target); + logo.add_pspm(query, query_offset); + } + return logo; +} + +/* + * Specifies an alternate source for an image. + * If the image with the image_id specified has + * not loaded then a generated logo will be used + * to replace it. + * + * Note that the image must either have dimensions + * or a scale must be set. + */ +function alternate_logo(logo, image_id, scale) { + "use strict"; + var image = document.getElementById(image_id); + if (!image) { + alert("Can't find specified image id (" + image_id + ")"); + return; + } + //if the image has loaded then there is no reason to use the canvas + if (image_ok(image)) { + return; + } + //the image has failed to load so replace it with a canvas if we can. + var canvas = create_canvas(image.width, image.height, image_id, image.title, image.style.display); + if (canvas === null) { + return; + } + //draw the logo on the canvas + draw_logo_on_canvas(logo, canvas, null, scale); + //replace the image with the canvas + image.parentNode.replaceChild(canvas, image); +} + +/* + * Specifes that the element with the specified id + * should be replaced with a generated logo. + */ +function replace_logo(logo, replace_id, scale, title_txt, display_style) { + "use strict"; + var element = document.getElementById(replace_id); + if (!replace_id) { + alert("Can't find specified id (" + replace_id + ")"); + return; + } + //found the element! + var canvas = create_canvas(50, 120, replace_id, title_txt, display_style); + if (canvas === null) { + return; + } + //draw the logo on the canvas + draw_logo_on_canvas(logo, canvas, null, scale); + //replace the element with the canvas + element.parentNode.replaceChild(canvas, element); +} + +/* + * Fast string trimming implementation found at + * http://blog.stevenlevithan.com/archives/faster-trim-javascript + * + * Note that regex is good at removing leading space but + * bad at removing trailing space as it has to first go through + * the whole string. + */ +function trim (str) { + "use strict"; + var ws, i; + str = str.replace(/^\s\s*/, ''); + ws = /\s/; i = str.length; + while (ws.test(str.charAt(--i))); + return str.slice(0, i + 1); +} +</script> + <script> +var current_motif = 0; +var dreme_alphabet = new Alphabet(data.alphabet, data.control_db.freqs); + +/* + * Create a pspm for the given motif data + */ +function motif_pspm(m) { + return new Pspm(m.pwm, m.id, 0, 0, m.nsites, m.evalue); +} + +/* + * Create a count matrix from the given motif data + */ +function motif_count_matrix(motif) { + return motif_pspm(motif).as_count_matrix(); +} + +/* + * Create a probablity matrix from the given motif data + */ +function motif_prob_matrix(motif) { + return motif_pspm(motif).as_probability_matrix(); +} + +/* + * Create a minimal meme format motif from the given motif data + */ +function motif_minimal_meme(motif) { + return motif_pspm(motif).as_meme({ + "with_header": true, + "with_pspm": true, + "with_pssm": false, + "version": data["version"], + "alphabet": dreme_alphabet, + "strands": (data.options.revcomp ? 2 : 1) + }); +} + +/* + * Fill in a template variable + */ +function set_tvar(template, tvar, value) { + var node; + node = find_child(template, tvar); + if (node === null) { + throw new Error("Template does not contain variable " + tvar); + } + node.innerHTML = ""; + if (typeof value !== "object") { + node.appendChild(document.createTextNode(value)); + } else { + node.appendChild(value); + } +} + +/* + * Make a canvas with the motif logo drawn on it. + */ +function make_logo(motif, height, rc) { + var pspm = new Pspm(motif["pwm"]); + if (rc) pspm = pspm.copy().reverse_complement(dreme_alphabet); + var logo = new Logo(dreme_alphabet); + logo.add_pspm(pspm, 0); + var canvas = document.createElement('canvas'); + canvas.height = height; + canvas.width = 0; + draw_logo_on_canvas(logo, canvas, false); + return canvas; +} + +/* + * Create a button designed to contain a single symbol + */ +function make_sym_btn(symbol, title, action) { + var box, sbox; + box = document.createElement("div"); + box.tabIndex = 0; + box.className = "sym_btn"; + sbox = document.createElement("span"); + if (typeof symbol == "string") { + sbox.appendChild(document.createTextNode(symbol)); + } else { + sbox.appendChild(symbol); + } + box.appendChild(sbox); + box.title = title; + box.addEventListener('click', action, false); + box.addEventListener('keydown', action, false); + return box; +} + +/* + * Create a pair of text spans with different classes. + * This is useful when using CSS to only display one of them. + */ +function text_pair(txt1, cls1, txt2, cls2) { + var container, part1, part2; + container = document.createElement("span"); + part1 = document.createElement("span"); + part1.appendChild(document.createTextNode(txt1)); + part1.className = cls1; + container.appendChild(part1); + part2 = document.createElement("span"); + part2.appendChild(document.createTextNode(txt2)); + part2.className = cls2; + container.appendChild(part2); + return container; +} + +/* + * Make a colourised sequence. + */ +function make_seq(seq) { + var i, j, letter, lbox, sbox; + sbox = document.createElement("span"); + for (i = 0; i < seq.length; i = j) { + letter = seq.charAt(i); + for (j = i+1; j < seq.length; j++) { + if (seq.charAt(j) !== letter) { + break; + } + } + lbox = document.createElement("span"); + lbox.style.color = dreme_alphabet.get_colour(dreme_alphabet.get_index(letter)); + lbox.appendChild(document.createTextNode(seq.substring(i, j))); + sbox.appendChild(lbox); + } + return sbox; +} + +/* + * Create a description element taking into account the newlines in the source text. + */ +function make_description(text) { + var i, j, lines, p; + var container = document.createElement("div"); + var paragraphs = text.split(/\n\n+/); + for (i = 0; i < paragraphs.length; i++) { + lines = paragraphs[i].split(/\n/); + p = document.createElement("p"); + p.appendChild(document.createTextNode(lines[0])); + for (j = 1; j < lines.length; j++) { + p.appendChild(document.createElement("br")); + p.appendChild(document.createTextNode(lines[j])); + } + container.appendChild(p); + } + return container; +} + +/* + * Make the table header for the discovered motifs. + */ +function make_motif_header() { + var row = document.createElement("tr"); + add_text_header_cell(row, "", "", "motif_ordinal"); + add_text_header_cell(row, "Motif", "pop_motifs_word", "motif_word"); + add_text_header_cell(row, "Logo", "pop_motifs_logo", "motif_logo"); + if (data.options.revcomp) { + add_text_header_cell(row, "RC Logo", "pop_motifs_rc_logo", "motif_logo"); + } + add_text_header_cell(row, "E-value", "pop_motifs_evalue", "motif_evalue"); + add_text_header_cell(row, "Unerased E-value", "pop_motifs_uevalue", "motif_evalue"); + add_text_header_cell(row, "More", "pop_more", "motif_more"); + add_text_header_cell(row, "Submit/Download", "pop_submit_dl", "motif_submit"); + row.className = "more"; + return row; +} + +/* + * Make a compact motif summary row for the discovered motifs. + */ +function make_motif_row(tbody, ordinal, motif) { + var row = document.createElement("tr"); + add_text_cell(row, "" + ordinal + ".", "motif_ordinal"); + add_text_cell(row, motif["id"], "motif_word"); + add_cell(row, make_logo(motif, 50, false), "motif_logo"); + if (data.options.revcomp) { + add_cell(row, make_logo(motif, 50, true), "motif_logo"); + } + add_text_cell(row, motif["evalue"], "motif_evalue"); + add_text_cell(row, motif["unerased_evalue"], "motif_evalue"); + add_cell(row, make_sym_btn(text_pair("\u21A7", "less", "\u21A5", "more"), "Show more information.", function(e) { toggle_class(tbody, "collapsed"); }, "\u21A5", ""), "motif_more"); + add_cell(row, make_sym_btn("\u21E2", "Submit the motif to another MEME Suite program or download it.", function(e) { action_show_outpop(e, ordinal); }), "motif_submit"); + return row; +} + +/* + * Make a sortable table of enriched matching rows. + */ +function make_motif_words(motif) { + var row, i, match; + var table = document.createElement("table"); + var thead = document.createElement("thead"); + row = document.createElement("tr"); + add_text_header_cell(row, "Word", "pop_match_word", "match_word", function(e) {sort_table(this, compare_words);}); + add_text_header_cell(row, "Positives", "pop_match_pos", "match_count", function(e) {sort_table(this, compare_counts);}); + add_text_header_cell(row, "Negatives", "pop_match_neg", "match_count", function(e) {sort_table(this, compare_counts);}); + add_text_header_cell(row, "P-value", "pop_match_pval", "match_evalue", function(e) {sort_table(this, compare_evalues);}); + add_text_header_cell(row, "E-value", "pop_match_eval", "match_evalue", function(e) {sort_table(this, compare_evalues);}); + thead.appendChild(row); + table.appendChild(thead); + var tbody = document.createElement("tbody"); + for (i = 0; i < motif.matches.length; i++) { + match = motif.matches[i]; + row = document.createElement("tr"); + add_cell(row, make_seq(match.seq), "match_word"); + add_text_cell(row, match.p + " / " + data.sequence_db.count, "match_count"); + add_text_cell(row, match.n + " / " + data.control_db.count, "match_count"); + add_text_cell(row, match.pvalue, "match_evalue"); + add_text_cell(row, match.evalue, "match_evalue"); + tbody.appendChild(row); + } + table.appendChild(tbody); + return table; +} + +/* + * Make an expanded view of a discovered motif. + */ +function make_motif_exp(tbody, ordinal, motif) { + "use strict"; + var box, pspm, logo_box; + box = $("tmpl_motif_expanded").cloneNode(true); + toggle_class(box, "template", false); + box.id = ""; + find_child(box, "tvar_logo").appendChild(make_logo(motif, 150, false)); + if (data.options.revcomp) { + find_child(box, "tvar_rclogo").appendChild(make_logo(motif, 150, true)); + } + set_tvar(box, "tvar_p", motif["p"]); + set_tvar(box, "tvar_p_total", data.sequence_db.count); + set_tvar(box, "tvar_n", motif["n"]); + set_tvar(box, "tvar_n_total", data.control_db.count); + set_tvar(box, "tvar_pvalue", motif["pvalue"]); + set_tvar(box, "tvar_evalue", motif["evalue"]); + set_tvar(box, "tvar_uevalue", motif["unerased_evalue"]); + set_tvar(box, "tvar_words", make_motif_words(motif)); + var cell = document.createElement("td"); + cell.colSpan = 8; + cell.appendChild(box); + var row = document.createElement("tr"); + row.className = "more"; + row.appendChild(cell); + return row; +} + +/* + * Convert a string containing a scientific number into the log of that number + * without having an intermediate representation of the number. + * This is intended to avoid underflow problems with the tiny evalues that + * MEME and DREME can create. + */ +function sci2log(scinum) { + "use strict"; + var ev_re, match, sig, exp; + ev_re = /^(.*)e(.*)$/; + if (match = ev_re.exec(scinum)) { + sig = parseFloat(match[1]); + exp = parseInt(match[2]); + return Math.log(sig) + (exp * Math.log(10)); + } + return 0; +} + +/* + * Create a table of discovered motifs. A fresh table body is used for each + * motif to make hiding/showing rows with css easier. + */ +function make_motifs() { + "use strict"; + var i, row, tbody, motif, ordinal; + // make the motifs table + var container = $("motifs"); + container.innerHTML = ""; // clear content + var table = document.createElement("table"); + // add a header that is always shown + var thead = document.createElement("thead"); + thead.appendChild(make_motif_header()); + table.appendChild(thead); + for (i = 0; i < data.motifs.length; i++) { + ordinal = i + 1; + motif = data.motifs[i]; + tbody = document.createElement("tbody"); + tbody.className = "collapsed"; + tbody.appendChild(make_motif_row(tbody, ordinal, motif)); + tbody.appendChild(make_motif_exp(tbody, ordinal, motif)); + // create a following header for every row except the last one + if ((i + 1) < data.motifs.length) tbody.appendChild(make_motif_header()); + table.appendChild(tbody); + } + container.appendChild(table); +} + +/* + * Create a table showing all the alphabet symbols, their names and frequencies. + */ +function make_alpha_bg(alph, freqs) { + function colour_symbol(index) { + var span = document.createElement("span"); + span.appendChild(document.createTextNode(alph.get_symbol(index))); + span.style.color = alph.get_colour(index); + span.className = "alpha_symbol"; + return span; + } + var table, thead, tbody, row, th, span, i; + // create table + table = document.createElement("table"); + table.className = "inputs"; + // create header + thead = document.createElement("thead"); + table.appendChild(thead); + row = thead.insertRow(thead.rows.length); + if (alph.has_complement()) { + add_text_header_cell(row, "Name", "pop_alph_name"); + add_text_header_cell(row, "Bg.", "pop_alph_control"); + add_text_header_cell(row, ""); + add_text_header_cell(row, ""); + add_text_header_cell(row, ""); + add_text_header_cell(row, "Bg.", "pop_alph_control"); + add_text_header_cell(row, "Name", "pop_alph_name"); + } else { + add_text_header_cell(row, ""); + add_text_header_cell(row, "Name", "pop_alph_name"); + add_text_header_cell(row, "Bg.", "pop_alph_control"); + } + // add alphabet entries + tbody = document.createElement("tbody"); + table.appendChild(tbody); + if (alph.has_complement()) { + for (i = 0; i < alph.get_size_core(); i++) { + var c = alph.get_complement(i); + if (i > c) continue; + row = tbody.insertRow(tbody.rows.length); + add_text_cell(row, alph.get_name(i)); + add_text_cell(row, "" + freqs[i].toFixed(3)); + add_cell(row, colour_symbol(i)); + add_text_cell(row, "~"); + add_cell(row, colour_symbol(c)); + add_text_cell(row, "" + freqs[c].toFixed(3)); + add_text_cell(row, alph.get_name(c)); + } + } else { + for (i = 0; i < alph.get_size_core(); i++) { + row = tbody.insertRow(tbody.rows.length); + add_cell(row, colour_symbol(i)); + add_text_cell(row, alph.get_name(i)); + add_text_cell(row, "" + freqs[i].toFixed(3)); + } + } + return table; +} + +/* + * Updates the format download text in the popup. + * This is called when either the format or current motif changes. + */ +function update_outpop_format(index) { + var motif = data.motifs[index]; + var fn = [motif_count_matrix, motif_prob_matrix, motif_minimal_meme]; + var suffix = ["_counts.txt", "_freqs.txt", ".meme"]; + var format = parseInt($("text_format").value); + var text = fn[format](motif); + prepare_download(text, "text/plain", motif.id + suffix[format], $("outpop_text_dl")); + $("outpop_text").value = text; +} + +/* + * Updates the motif logos and format download text in the popup. + * This is called whenever the current motif changes. + */ +function update_outpop_motif(index) { + "use strict"; + var motifs, motif, pspm, logo, canvas, num; + motifs = data["motifs"]; + if (index < 0 || index >= motifs.length) {return;} + current_motif = index; + motif = motifs[index]; + pspm = new Pspm(motif["pwm"]); + logo = new Logo(dreme_alphabet, ""); + logo.add_pspm(pspm, 0); + canvas = $("outpop_logo"); + canvas.width = canvas.width; // clear canvas + draw_logo_on_canvas(logo, canvas, false); + canvas = $("outpop_logo_rc"); + canvas.width = canvas.width; // clear rc canvas + if (data.options.revcomp) { + pspm.reverse_complement(dreme_alphabet); + logo = new Logo(dreme_alphabet, ""); + logo.add_pspm(pspm, 0); + draw_logo_on_canvas(logo, canvas, false); + } + num = $("outpop_num"); + num.innerHTML = ""; + num.appendChild(document.createTextNode("" + (index + 1))); + update_outpop_format(index); +} + + +/* + * Initialise and display the download popup. + */ +function action_show_outpop(e, ordinal) { + "use strict"; + function init() { + "use strict"; + var close_btn, next_btn, prev_btn, cancel_btn, do_btn; + var tab1, tab2, tab3; + var pnl1, pnl2, pnl3; + var format_list; + var tbl_submit, inputs, i, default_prog; + close_btn = $("outpop_close"); + close_btn.addEventListener("click", action_hide_outpop, false); + close_btn.addEventListener("keydown", action_hide_outpop, false); + next_btn = $("outpop_next"); + next_btn.addEventListener("click", action_outpop_next, false); + next_btn.addEventListener("keydown", action_outpop_next, false); + prev_btn = $("outpop_prev"); + prev_btn.addEventListener("click", action_outpop_prev, false); + prev_btn.addEventListener("keydown", action_outpop_prev, false); + cancel_btn = $("outpop_cancel"); + cancel_btn.addEventListener("click", action_hide_outpop, false); + do_btn = $("outpop_do"); + do_btn.addEventListener("click", action_outpop_submit, false); + tab1 = $("outpop_tab_1"); + tab1.tabIndex = 0; + tab1.addEventListener("click", action_outpop_tab, false); + tab1.addEventListener("keydown", action_outpop_tab, false); + tab2 = $("outpop_tab_2"); + tab2.tabIndex = 0; + tab2.addEventListener("click", action_outpop_tab, false); + tab2.addEventListener("keydown", action_outpop_tab, false); + tab3 = $("outpop_tab_3"); + tab3.tabIndex = 0; + tab3.addEventListener("click", action_outpop_tab, false); + tab3.addEventListener("keydown", action_outpop_tab, false); + pnl1 = $("outpop_pnl_1"); + pnl2 = $("outpop_pnl_2"); + pnl3 = $("outpop_pnl_3"); + toggle_class(tab1, "activeTab", true); + toggle_class(tab2, "activeTab", false); + toggle_class(tab3, "activeTab", false); + pnl1.style.display = "block"; + pnl2.style.display = "none"; + pnl3.style.display = "none"; + format_list = $("text_format"); + format_list.addEventListener("change", action_outpop_format, false); + // setup program selection + tbl_submit = $("programs"); + // when not dna, hide the inputs for programs that require dna motifs + toggle_class(tbl_submit, "alphabet_dna", dreme_alphabet.has_complement());//TODO FIXME alphabet_dna is a bad name for a field when allowing custom alphabets + // add a click listener for the radio buttons + inputs = tbl_submit.querySelectorAll("input[type='radio']"); + for (i = 0; i < inputs.length; i++) { + inputs[i].addEventListener("click", action_outpop_program, false); + } + // ensure that a default program option is selected for DNA and Protein + default_prog = document.getElementById(dreme_alphabet.has_complement() ? "submit_tomtom" : "submit_fimo"); + default_prog.checked = true; + action_outpop_program.call(default_prog); + // disable reverse-complement when not DNA + $("logo_rc_option").disabled = !dreme_alphabet.has_complement(); + // set errorbars on when ssc is on + $("logo_ssc").addEventListener("change", action_outpop_ssc, false); + } + // store the focused element + action_hide_outpop.last_active = document.activeElement; + if (!e) e = window.event; + if (e.type === "keydown") { + if (e.keyCode !== 13 && e.keyCode !== 32) { + return; + } + // stop a submit or something like that + e.preventDefault(); + } + // hide the help popup + help_popup(); + // on first load initilize the popup + if (!action_show_outpop.ready) { + init(); + action_show_outpop.ready = true; + } + update_outpop_motif(ordinal - 1); + // display the download popup + $("grey_out_page").style.display = "block"; + $("download").style.display = "block"; + $("outpop_close").focus(); +} + +/* + * Hide the download popup. + */ +function action_hide_outpop(e) { + if (!e) e = window.event; + if (e.type === "keydown") { + if (e.keyCode !== 13 && e.keyCode !== 32) { + return; + } + // stop a submit or something like that + e.preventDefault(); + } + $("download").style.display = "none"; + $("grey_out_page").style.display = "none"; + if (typeof action_hide_outpop.last_active !== "undefined") { + action_hide_outpop.last_active.focus(); + } +} + +/* + * Show the next motif in the download popup. + */ +function action_outpop_next(e) { + if (!e) e = window.event; + if (e.type === "keydown") { + if (e.keyCode !== 13 && e.keyCode !== 32) { + return; + } + // stop a submit or something like that + e.preventDefault(); + } + update_outpop_motif(current_motif + 1); +} + +/* + * Show the previous motif in the download popup. + */ +function action_outpop_prev(e) { + if (!e) e = window.event; + if (e.type === "keydown") { + if (e.keyCode !== 13 && e.keyCode !== 32) { + return; + } + // stop a submit or something like that + e.preventDefault(); + } + update_outpop_motif(current_motif - 1); +} + +/* + * Highlight the selected row in the program list. + */ +function action_outpop_program() { + "use strict"; + var table, tr, rows, i; + tr = find_parent_tag(this, "TR"); + table = find_parent_tag(tr, "TABLE"); + rows = table.querySelectorAll("tr"); + for (i = 0; i < rows.length; i++) { + toggle_class(rows[i], "selected", rows[i] === tr); + } +} + +/* + * Enable error bars when small sample correction is enabled. + */ +function action_outpop_ssc() { + "use strict"; + $("logo_err").value = $("logo_ssc").value; +} + +/* + * Submit the motif to the selected program. + */ +function action_outpop_submit(e) { + "use strict"; + var form, input, program, motifs; + // find out which program is selected + var radios, i; + radios = document.getElementsByName("program"); + program = "fimo"; // default to fimo, since it works with all alphabet types + for (i = 0; i < radios.length; i++) { + if (radios[i].checked) program = radios[i].value; + } + + motifs = motif_minimal_meme(data.motifs[current_motif]); + form = document.createElement("form"); + form.setAttribute("method", "post"); + form.setAttribute("action", site_url + "/tools/" + program); + + input = document.createElement("input"); + input.setAttribute("type", "hidden"); + input.setAttribute("name", "motifs_embed"); + input.setAttribute("value", motifs); + form.appendChild(input); + + document.body.appendChild(form); + form.submit(); + document.body.removeChild(form); +} + +/* + * Download the format text. + * Wire the link containing the data URI text to a download button so it looks + * the same as the server submit stuff. + */ +function action_outpop_download_motif(e) { + $("outpop_text_dl").click(); +} + +/* + * Download the motif logo. + * The EPS format can be calculated locally in Javascript + */ +function action_outpop_download_logo(e) { + "use strict"; + var pspm, logo, eps; + var logo_rc, logo_ssc, logo_width, logo_height; + var motif = data.motifs[current_motif]; + if ($("logo_format").value == "0") { // EPS + logo_rc = ($("logo_rc").value == "1"); + logo_ssc = ($("logo_ssc").value == "1"); + logo_width = parseFloat($("logo_width").value); + if (isNaN(logo_width) || !isFinite(logo_width) || logo_width <= 0) logo_width = null; + logo_height = parseFloat($("logo_height").value); + if (isNaN(logo_height) || !isFinite(logo_height) || logo_height <= 0) logo_height = null; + // create a PSPM from the motif + pspm = motif_pspm(motif); + if (logo_rc) pspm.reverse_complement(dreme_alphabet); + logo = new Logo(dreme_alphabet); + logo.add_pspm(pspm, 0); + eps = logo.as_eps({"ssc": logo_ssc, "logo_width": logo_width, "logo_height": logo_height}); + prepare_download(eps, "application/postscript", motif.id + ".eps"); + } else { + $("logo_motifs").value = motif_minimal_meme(motif); + $("logo_form").submit(); + } +} + +/* + * Change the selected tab in the download popup. + */ +function action_outpop_tab(e) { + "use strict"; + var tab1, tab2, tab3, pnl1, pnl2, pnl3, do_btn; + if (!e) e = window.event; + if (e.type === "keydown") { + if (e.keyCode !== 13 && e.keyCode !== 32) { + return; + } + // stop a submit or something like that + e.preventDefault(); + } + tab1 = $("outpop_tab_1"); + tab2 = $("outpop_tab_2"); + tab3 = $("outpop_tab_3"); + pnl1 = $("outpop_pnl_1"); + pnl2 = $("outpop_pnl_2"); + pnl3 = $("outpop_pnl_3"); + do_btn = $("outpop_do"); + + toggle_class(tab1, "activeTab", (this === tab1)); + toggle_class(tab2, "activeTab", (this === tab2)); + toggle_class(tab3, "activeTab", (this === tab3)); + pnl1.style.display = ((this === tab1) ? "block" : "none"); + pnl2.style.display = ((this === tab2) ? "block" : "none"); + pnl3.style.display = ((this === tab3) ? "block" : "none"); + do_btn.value = ((this === tab1) ? "Submit" : "Download"); + do_btn.removeEventListener("click", action_outpop_submit, false); + do_btn.removeEventListener("click", action_outpop_download_logo, false); + do_btn.removeEventListener("click", action_outpop_download_motif, false); + if (this === tab1) { + do_btn.addEventListener("click", action_outpop_submit, false); + } else if (this === tab2) { + do_btn.addEventListener("click", action_outpop_download_motif, false); + } else { + do_btn.addEventListener("click", action_outpop_download_logo, false); + } +} + +/* + * Update the text in the download format popup. + */ +function action_outpop_format() { + update_outpop_format(current_motif); +} + +/* + * Find all text nodes in the given container. + */ +function text_nodes(container) { + var textNodes = []; + var stack = [container]; + // depth first search to maintain ordering when flattened + while (stack.length > 0) { + var node = stack.pop(); + if (node.nodeType == Node.TEXT_NODE) { + textNodes.push(node); + } else { + for (var i = node.childNodes.length-1; i >= 0; i--) { + stack.push(node.childNodes[i]); + } + } + } + return textNodes; +} + +/* + * Get the text out of a specific text node. + */ +function node_text(node) { + if (node === undefined) { + return ''; + } else if (node.textContent) { + return node.textContent; + } else if (node.innerText) { + return node.innerText; + } else { + return ''; + } +} + +/* + * Get the text contained within the element. + */ +function elem_text(elem, separator) { + if (separator === undefined) separator = ''; + return text_nodes(elem).map(node_text).join(separator); +} + +/* + * Sort all rows in the first table body based on the column of the given element and the comparison function. + * The sort is not very fast and is intended for small tables only. + */ +function sort_table(colEle, compare_function) { + //find the parent of colEle that is either a td or th + var i, j; + var cell = colEle; + while (true) { + if (cell == null) return; + if (cell.nodeType == Node.ELEMENT_NODE && + (cell.tagName.toLowerCase() == "td" || cell.tagName.toLowerCase() == "th")) { + break; + } + cell = cell.parentNode; + } + //find the parent of cell that is a tr + var row = cell; + while (true) { + if (row == null) return; + if (row.nodeType == Node.ELEMENT_NODE && row.tagName.toLowerCase() == "tr") { + break; + } + row = row.parentNode; + } + //find the parent of row that is a table + var table = row; + while (true) { + if (table == null) return; + if (table.nodeType == Node.ELEMENT_NODE && table.tagName.toLowerCase() == "table") { + break; + } + table = table.parentNode; + } + var column_index = cell.cellIndex; + // do a bubble sort, because the tables are so small it doesn't matter + var change; + var trs = table.tBodies[0].getElementsByTagName('tr'); + var already_sorted = true; + var reverse = false; + while (true) { + do { + change = false; + for (i = 0; i < trs.length -1; i++) { + var v1 = elem_text(trs[i].cells[column_index]); + var v2 = elem_text(trs[i+1].cells[column_index]); + if (reverse) { + var tmp = v1; + v1 = v2; + v2 = tmp; + } + if (compare_function(v1, v2) > 0) { + exchange(trs[i], trs[i+1], table); + change = true; + already_sorted = false; + trs = table.tBodies[0].getElementsByTagName('tr'); + } + } + } while (change); + if (reverse) break;// we've sorted twice so exit + if (!already_sorted) break;// sort did something so exit + // when it's sorted one way already then sort the opposite way + reverse = true; + } + // put arrows on the headers + var headers = table.tHead.getElementsByTagName('tr'); + for (i = 0; i < headers.length; i++) { + for (j = 0; j < headers[i].cells.length; j++) { + var cell = headers[i].cells[j]; + var arrows = cell.getElementsByClassName("sort_arrow"); + var arrow; + if (arrows.length == 0) { + arrow = document.createElement("span"); + arrow.className = "sort_arrow"; + cell.insertBefore(arrow, cell.firstChild); + } else { + arrow = arrows[0]; + } + arrow.innerHTML = ""; + if (j == column_index) { + arrow.appendChild(document.createTextNode(reverse ? "\u25B2" : "\u25BC")); + } + } + } +} + +/* + * Swap two rows in a table. + */ +function exchange(oRowI, oRowJ, oTable) { + var i = oRowI.rowIndex; + var j = oRowJ.rowIndex; + if (i == j+1) { + oTable.tBodies[0].insertBefore(oRowI, oRowJ); + } if (j == i+1) { + oTable.tBodies[0].insertBefore(oRowJ, oRowI); + } else { + var tmpNode = oTable.tBodies[0].replaceChild(oRowI, oRowJ); + if(typeof(oRowI) != "undefined") { + oTable.tBodies[0].insertBefore(tmpNode, oRowI); + } else { + oTable.appendChild(tmpNode); + } + } +} + +/* + * Compare two E-values which may be very small. + */ +function compare_evalues(v1, v2) { + var e1 = sci2log(v1); + var e2 = sci2log(v2); + if (e1 < e2) return -1; + else if (e1 > e2) return 1; + return 0; +} + +/* + * Compare two counts. + */ +function compare_counts(v1, v2) { + var re = /(\d+)\s*\/\s*\d+/; + var m1 = re.exec(v1); + var m2 = re.exec(v2); + if (m1 == null && m2 == null) return 0; + if (m1 == null) return -1; + if (m2 == null) return 1; + return parseInt(m2[1]) - parseInt(m1[1]); +} + +/* + * Compare two sequence words. + */ +function compare_words(v1, v2) { + return v1.localeCompare(v2); +} + + +</script> + <style> +/* The following is the content of meme.css */ +body { background-color:white; font-size: 12px; font-family: Verdana, Arial, Helvetica, sans-serif;} + +div.help { + display: inline-block; + margin: 0px; + padding: 0px; + width: 12px; + height: 13px; + cursor: pointer; + background-image: url(data:image/gif;base64,R0lGODlhDAANAIABANR0AP///yH5BAEAAAEALAAAAAAMAA0AAAIdhI8Xy22MIFgv1DttrrJ7mlGNNo4c+aFg6SQuUAAAOw==); +} + +div.help:hover { + background-image: url(data:image/gif;base64,R0lGODlhDAANAKEAANR0AP///9R0ANR0ACH+EUNyZWF0ZWQgd2l0aCBHSU1QACH5BAEAAAIALAAAAAAMAA0AAAIdDGynCe3PgoxONntvwqz2/z2K2ImjR0KhmSIZUgAAOw==); +} + +p.spaced { line-height: 1.8em;} + +span.citation { font-family: "Book Antiqua", "Palatino Linotype", serif; color: #004a4d;} + +p.pad { padding-left: 30px; padding-top: 5px; padding-bottom: 10px;} + +td.jump { font-size: 13px; color: #ffffff; background-color: #00666a; + font-family: Georgia, "Times New Roman", Times, serif;} + +a.jump { margin: 15px 0 0; font-style: normal; font-variant: small-caps; + font-weight: bolder; font-family: Georgia, "Times New Roman", Times, serif;} + +h2.mainh {font-size: 1.5em; font-style: normal; margin: 15px 0 0; + font-variant: small-caps; font-family: Georgia, "Times New Roman", Times, serif;} + +h2.line {border-bottom: 1px solid #CCCCCC; font-size: 1.5em; font-style: normal; + margin: 15px 0 0; padding-bottom: 3px; font-variant: small-caps; + font-family: Georgia, "Times New Roman", Times, serif;} + +h4 {border-bottom: 1px solid #CCCCCC; font-size: 1.2em; font-style: normal; + margin: 10px 0 0; padding-bottom: 3px; font-family: Georgia, "Times New Roman", Times, serif;} + +h5 {margin: 0px} + +a.help { font-size: 9px; font-style: normal; text-transform: uppercase; + font-family: Georgia, "Times New Roman", Times, serif;} + +div.pad { padding-left: 30px; padding-top: 5px; padding-bottom: 10px;} + +div.pad1 { margin: 10px 5px;} + +div.pad2 { margin: 25px 5px 5px;} +h2.pad2 { padding: 25px 5px 5px;} + +div.pad3 { padding: 5px 0px 10px 30px;} + +div.box { border: 2px solid #CCCCCC; padding:10px; overflow: hidden;} + +div.bar { border-left: 7px solid #00666a; padding:5px; margin-top:25px; } + +div.subsection {margin:25px 0px;} + +img {border:0px none;} + +th.majorth {text-align:left;} +th.minorth {font-weight:normal; text-align:left; width:8em; padding: 3px 0px;} +th.actionth {font-weight:normal; text-align:left;} + +.explain h5 {font-size:1em; margin-left: 1em;} + +div.doc {margin-left: 2em; margin-bottom: 3em;} + +th.trainingset { + border-bottom: thin dashed black; + font-weight:normal; + padding:0px 10px; +} +div.pop_content { + position:absolute; + z-index:50; + width:300px; + padding: 5px; + background: #E4ECEC; + font-size: 12px; + font-family: Arial; + border-style: double; + border-width: 3px; + border-color: #AA2244; + display:none; +} + +div.pop_content > *:first-child { + margin-top: 0px; +} + +div.pop_content h1, div.pop_content h2, div.pop_content h3, div.pop_content h4, +div.pop_content h5, div.pop_content h6, div.pop_content p { + margin: 0px; +} + +div.pop_content p + h1, div.pop_content p + h2, div.pop_content p + h3, +div.pop_content p + h4, div.pop_content p + h5, div.pop_content p + h6 { + margin-top: 5px; +} + +div.pop_content p + p { + margin-top: 5px; +} + +div.pop_content > *:last-child { + margin-bottom: 0px; +} + +div.pop_content div.pop_close { + /* old definition */ + float:right; + bottom: 0; +} + +div.pop_content span.pop_close, div.pop_content span.pop_back { + display: inline-block; + border: 2px outset #661429; + background-color: #CCC; + padding-left: 1px; + padding-right: 1px; + padding-top: 0px; + padding-bottom: 0px; + cursor: pointer; + color: #AA2244; /*#661429;*/ + font-weight: bold; +} + +div.pop_content span.pop_close:active, div.pop_content span.pop_back:active { + border-style: inset; +} + +div.pop_content span.pop_close { + float:right; + /*border: 2px outset #AA002B;*/ + /*color: #AA2244;*/ +} + +div.pop_content:not(.nested) .nested_only { + display: none; +} + +div.pop_back_sec { + margin-bottom: 5px; +} + +div.pop_close_sec { + margin-top: 5px; +} + +table.hide_advanced tr.advanced { + display: none; +} +span.show_more { + display: none; +} +table.hide_advanced span.show_more { + display: inline; +} +table.hide_advanced span.show_less { + display: none; +} + + +/***************************************************************************** + * Program logo styling + ****************************************************************************/ +div.prog_logo { + border-bottom: 0.25em solid #0f5f60; + height: 4.5em; + width: 24em; + display:inline-block; +} +div.prog_logo img { + float:left; + width: 4em; + border-style: none; + margin-right: 0.2em; +} +div.prog_logo h1, div.prog_logo h1:hover, div.prog_logo h1:active, div.prog_logo h1:visited { + margin:0; + padding:0; + font-family: Arial, Helvetica, sans-serif; + font-size: 3.2em; + line-height: 1em; + vertical-align: top; + display: block; + color: #026666; + letter-spacing: -0.06em; + text-shadow: 0.04em 0.06em 0.05em #666; +} +div.prog_logo h2, div.prog_logo h2:hover, div.prog_logo h2:active, div.prog_logo h2:visited { + display: block; + margin:0; + padding:0; + font-family: Helvetica, sans-serif; + font-size: 0.9em; + line-height: 1em; + letter-spacing: -0.06em; + color: black; +} + +div.big.prog_logo { + font-size: 18px; +} + +</style> + <style> +/* dreme output specific css */ +div.header { + position: relative; + overflow: hidden; + margin-top: 15px; + margin-bottom: 5px; + margin-right: 3px; + margin-left: 3px; +} +div.header > h2 { + font-size: 1.5em; + font-style: normal; + margin: 0; + font-variant: small-caps; + font-family: Georgia, "Times New Roman", Times, serif; +} +div.header > span { + position: absolute; + right: 0; + bottom: 0; +} + +div.template { + position: absolute; + z-index: 1; + left: 0; + top: 0; + visibility: hidden; +} + +div.sym_btn { + display:inline-block; + text-decoration: underline; + cursor: pointer; + font-size: 20px; + line-height:20px; + text-align: center; + width: 20px; + height: 20px; + color: blue; +} +div.sym_btn:hover { + color: white; + background-color: blue; +} + +div.sym_btn.positioned { + position: absolute; + top: 0px; +} + +div.box + div.box { + margin-top: 5px; +} + +th.motif_ordinal { + +} +td.motif_ordinal { + text-align: right; + padding-right: 10px; + font-weight: bold; + font-size: large; +} +th.motif_word { + padding-right: 10px; +} +td.motif_word { + font-size:15px; + font-family: 'Courier New', Courier, monospace; + padding-right: 10px; +} +th.motif_logo { + padding-right: 10px; +} +td.motif_logo { + padding-right: 10px; +} +th.motif_evalue { + text-align:right; + padding-right: 10px; +} +td.motif_evalue { + text-align: right; + white-space: nowrap; + padding-right: 20px; +} +th.motif_more { + padding: 0 5px; +} +td.motif_more { + text-align: center; + padding: 0 5px; +} +th.motif_submit { + padding: 0 5px; +} +td.motif_submit { + text-align: center; + padding: 0 5px; +} +th.match_word { + padding-right: 10px; +} +td.match_word { + padding-right: 10px; + font-weight: bold; + font-size: large; + font-family: 'Courier New', Courier, monospace; +} +th.match_evalue, th.match_count { + text-align: right; + padding-right: 10px; +} +td.match_evalue, td.match_count { + text-align: right; + white-space: nowrap; + padding-right: 20px; +} + +div.tabArea { + font-size: 80%; + font-weight: bold; +} + +.norc div.tabArea { + display: none; +} + +span.tab, span.tab:visited { + cursor: pointer; + color: #888; + background-color: #ddd; + border: 2px solid #ccc; + padding: 2px 1em; + text-decoration: none; +} +span.tab.middle { + border-left-width: 0px; +} +div.tabArea.base span.tab { + border-top-width: 0px; +} +div.tabArea.top span.tab { + border-bottom-width: 0px; +} + +span.tab:hover { + background-color: #bbb; + border-color: #bbb; + color: #666; +} +span.tab.activeTab, span.tab.activeTab:hover, span.tab.activeTab:visited { + background-color: white; + color: black; + cursor: default; +} +div.tabMain { + border: 2px solid #ccc; + background-color: white; + padding: 10px; +} +div.tabMain.base { + margin-top: 5px; + display: inline-block; + max-width: 98%; +} + +div.tabMain.top { + margin-bottom: 5px; +} + +div.grey_background { + position:fixed; + z-index: 8; + background-color: #000; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + opacity: 0.5; + left: 0; + top: 0; + width: 100%; + height: 100%; +} + +div.popup_wrapper { + position:fixed; + z-index:9; + width:100%; + height:0; + top:50%; + left:0; +} + +div.popup { + width: 600px; + z-index:9; + margin-left: auto; + margin-right: auto; + padding: 5px; + background-color: #FFF; + border-style: double; + border-width: 5px; + border-color: #00666a; + position:relative; +} +div.close { + cursor: pointer; + border: 1px solid black; + width:15px; + height:15px; + line-height:15px; /* this causes vertical centering */ + text-align:center; + background-color:#FFF; + color:#000; + font-size:15px; + font-family:monospace; +} + +div.close:hover { + color:#FFF; + background-color:#000; +} + +div.navnum { + width:100%; + height:20px; + line-height:20px; + text-align:center; + font-size:medium; +} + +div.navarrow { + font-size: 30px; + text-decoration:none; + cursor: pointer; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; +} + +div.navarrow > span.inactive { + display: inline; +} +div.navarrow > span.active { + display: none; +} + +div.navarrow:hover > span.active { + display: inline; +} +div.navarrow:hover > span.inactive { + display: none; +} + +table.programs { + width: 100%; +} + +table.programs tr { + background-color: #EFE; +} + +table.programs tr.selected { + background-color: #262; + color: #FFF; +} + +table.programs tr.dna_only { + display: none; +} + +table.programs.alphabet_dna tr.dna_only { + display: table-row; +} + +table.inputs { + margin-top: 20px; + border-collapse:collapse; +} +table.inputs * td, table.inputs * th { + padding-left: 15px; + padding-right: 15px; + padding-top: 1px; + padding-bottom: 1px; +} + +/* program settings */ +span.strand_none, span.strand_given, span.strand_both { + display: none; +} +td.none span.strand_none, td.given span.strand_given, td.both span.strand_both { + display: inline; +} + +/* show the expanded motif only when the collapsed one is hidden */ +tbody *.less, tbody.collapsed *.more { + display: none; +} + +tbody.collapsed *.less { + display: inline; +} + +</style> + </head> + <body data-scrollpad="true"> + <!-- --> + <div id="grey_out_page" class="grey_background" style="display:none;"> + </div> + + <!-- Help popups --> + <div class="pop_content" id="pop_"> + <p>Help poup.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + + <div class="pop_content" id="pop_motifs_word"> + <p> + The name of the motif uses the IUPAC codes for nucleotides which has + a different letter to represent each of the 15 possible combinations. + </p> + <p> + The name is itself a representation of the motif though the position + weight matrix is not directly equalivant as it is generated from the + sites found that matched the letters given in the name. + </p> + <p> + <a id="doc_alphabets_url" href="#"> + Read more about the MEME suite's use of the IUPAC alphabets. + </a> + <script>$("doc_alphabets_url").href = site_url + "/doc/alphabets.html";</script> + </p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_motifs_logo"> + <p>The logo of the motif.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_motifs_rc_logo"> + <p>The logo of the reverse complement motif.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_motifs_evalue"> + <p>The E-value is the enrichment p-value times the number of candidate + motifs tested.</p> + <p>The enrichment p-value is calculated using Fisher's Exact Test for + enrichment of the motif in the positive sequences.</p> + <p>Note that the counts used in Fisher's Exact Test are made after + erasing sites that match previously found motifs.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_motifs_uevalue"> + <p>The E-value of the motif calculated without erasing the sites of + previously found motifs.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_more"> + <p>Show more information on the motif.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_submit_dl"> + <p>Submit your motif to another MEME Suite program or download your motif.</p> + <h5>Supported Programs</h5> + <dl> + <dt>Tomtom</dt> + <dd>Tomtom is a tool for searching for similar known motifs. + </dd> + <dt>MAST</dt> + <dd>MAST is a tool for searching biological sequence databases for + sequences that contain one or more of a group of known motifs. + </dd> + <dt>FIMO</dt> + <dd>FIMO is a tool for searching biological sequence databases for + sequences that contain one or more known motifs. + </dd> + <dt>GOMO</dt> + <dd>GOMO is a tool for identifying possible roles (Gene Ontology + terms) for DNA binding motifs. + </dd> + <dt>SpaMo</dt> + <dd>SpaMo is a tool for inferring possible transcription factor + complexes by finding motifs with enriched spacings. + </dd> + </dl> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_motif_positives"> + <p># positive sequences matching the motif / # positive sequences.</p> + <p>Note these counts are made after erasing sites that match previously + found motifs.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_motif_negatives"> + <p># negative sequences matching the motif / # negative sequences.</p> + <p>Note these counts are made after erasing sites that match previously + found motifs.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_motif_pvalue"> + <p>The p-value of Fisher's Exact Test for enrichment of the motif in + the positive sequences.</p> + <p>Note that the counts used in Fisher's Exact Test are made after + erasing sites that match previously found motifs.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_motif_evalue"> + <p>The E-value is the motif p-value times the number of candidate motifs + tested.</p> + <p>Note that the p-value was calculated with counts made after + erasing sites that match previously found motifs.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_motif_uevalue"> + <p>The E-value of the motif calculated without erasing the sites of + previously found motifs.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_match_word"> + <p>All words matching the motif whose uncorrected p-value is less than + <span id="help_add_pv_thresh"></span>.</p> + <script>$("help_add_pv_thresh").innerHTML = data.options.add_pv_thresh;</script> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_match_pos"> + <p># positive sequences with matches to the word / # positive sequences.</p> + <p>Note these counts are made after erasing sites that match previously + found motifs.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_match_neg"> + <p># negative sequences with matches to the word / # negative sequences.</p> + <p>Note these counts are made after erasing sites that match previously + found motifs.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_match_pval"> + <p>The p-value of Fisher's Exact Test for enrichment of the word in + the positive sequences.</p> + <p>Note that the counts used in Fisher's Exact Test are made after + erasing sites that match previously found motifs.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_match_eval"> + <p>The word p-value times the number of candidates tested.</p> + <p>Note that the p-value was calculated with counts made after + erasing sites that match previously found motifs.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + + <div class="pop_content" id="pop_seq_source"> + <p>The sequence file used by DREME to find the motifs.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_seq_alph"> + <p>The alphabet of the sequences.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_seq_count"> + <p>The count of the sequences.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + + <div class="pop_content" id="pop_alph_name"> + <p>The name of the alphabet symbol.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + + <div class="pop_content" id="pop_alph_control"> + <p>The frequency of the alphabet symbol in the control dataset.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + + <!-- templates --> + + <div class="template box expanded_motif" id="tmpl_motif_expanded"> + <div> + <span class="tvar_logo"></span> + <span class="tvar_rclogo"></span> + </div> + <h4>Details</h4> + <table class="details"> + <thead> + <tr> + <th class="match_count">Positives <div class="help" data-topic="pop_motif_positives"></div></th> + <th class="match_count">Negatives <div class="help" data-topic="pop_motif_negatives"></div></th> + <th class="match_evalue">P-value <div class="help" data-topic="pop_motif_pvalue"></div></th> + <th class="match_evalue">E-value <div class="help" data-topic="pop_motif_evalue"></div></th> + <th class="match_evalue">Unerased E-value <div class="help" data-topic="pop_motif_uevalue"></div></th> + </tr> + </thead> + <tbody> + <tr> + <td class="match_count"> + <span class="tvar_p"></span> / <span class="tvar_p_total"></span> + </td> + <td class="match_count"> + <span class="tvar_n"></span> / <span class="tvar_n_total"></span> + </td> + <td class="tvar_pvalue match_evalue"></td> + <td class="tvar_evalue match_evalue"></td> + <td class="tvar_uevalue match_evalue"></td> + </tr> + </tbody> + </table> + <h4>Enriched Matching Words</h4> + <div class="tvar_words"></div> + </div> + + + <div class="popup_wrapper"> + <div class="popup" style="display:none; top: -150px;" id="download"> + <div> + <div style="float:right; "> + <div id="outpop_close" class="close" tabindex="0">x</div> + </div> + <h2 class="mainh" style="margin:0; padding:0;">Submit or Download</h2> + <div style="clear:both"></div> + </div> + <div style="height:100px"> + <div style="float:right; width: 30px;"> + <div id="outpop_prev" class="navarrow" tabindex="0"> + <span class="inactive">⇧</span><span class="active">⬆</span> + </div> + <div id="outpop_num" class="navnum"></div> + <div id="outpop_next" class="navarrow" tabindex="0"> + <span class="inactive">⇩</span><span class="active">⬇</span> + </div> + </div> + <div id="logo_box" style="height: 100px; margin-right: 40px;"> + <canvas id="outpop_logo" height="100" width="250"></canvas> + <canvas id="outpop_logo_rc" height="100" width="250"></canvas> + </div> + </div> + <div> + <!-- tabs start --> + <div class="tabArea top"> + <span id="outpop_tab_1" class="tab">Submit Motif</span><span + id="outpop_tab_2" class="tab middle">Download Motif</span><span + id="outpop_tab_3" class="tab middle">Download Logo</span> + </div> + <div class="tabMain top"> + <!-- Submit to another program --> + <div id="outpop_pnl_1"> + <h4 class="compact">Submit to program</h4> + <table id="programs" class="programs"> + <tr class="dna_only"> + <td><input type="radio" name="program" value="tomtom" id="submit_tomtom"></td> + <td><label for="submit_tomtom">Tomtom</label></td> + <td><label for="submit_tomtom">Find similar motifs in + published libraries or a library you supply.</label></td> + </tr> + <tr> + <td><input type="radio" name="program" value="fimo" id="submit_fimo"></td> + <td><label for="submit_fimo">FIMO</label></td> + <td><label for="submit_fimo">Find motif occurrences in + sequence data.</label></td> + </tr> + <tr> + <td><input type="radio" name="program" value="mast" id="submit_mast"></td> + <td><label for="submit_mast">MAST</label></td> + <td><label for="submit_mast">Rank sequences by affinity to + groups of motifs.</label></td> + </tr> + <tr class="dna_only"> + <td><input type="radio" name="program" value="gomo" id="submit_gomo"></td> + <td><label for="submit_gomo">GOMo</label></td> + <td><label for="submit_gomo">Identify possible roles (Gene + Ontology terms) for motifs.</label></td> + </tr> + <tr class="dna_only"> + <td><input type="radio" name="program" value="spamo" id="submit_spamo"></td> + <td><label for="submit_spamo">SpaMo</label></td> + <td><label for="submit_spamo">Find other motifs that are + enriched at specific close spacings which might imply the existance of a complex.</label></td> + </tr> + </table> + </div> + <!-- download text format --> + <div id="outpop_pnl_2"> + <div> + <label for="text_format">Format:</label> + <select id="text_format"> + <option value="0">Count Matrix</option> + <option value="1">Probability Matrix</option> + <option value="2">Minimal MEME</option> + </select> + </div> + <textarea id="outpop_text" name="content" + style="width:99%; white-space: pre; word-wrap: normal; overflow-x: scroll;" + rows="8" readonly="readonly" wrap="off"></textarea> + <a id="outpop_text_dl" download="meme.txt" href=""></a> + </div> + <!-- download logo format --> + <div id="outpop_pnl_3"> + <form id="logo_form" method="post" action=""> + <script>$("logo_form").action = site_url + "/utilities/generate_logo";</script> + <input type="hidden" name="program" value="DREME"/> + <input type="hidden" id="logo_motifs" name="motifs" value=""/> + <table> + <tr> + <td><label for="logo_format">Format:</label></td> + <td> + <select id="logo_format" name="png"> + <option value="1">PNG (for web)</option> + <option value="0">EPS (for publication)</option> + </select> + </td> + </tr> + <tr> + <td><label for="logo_rc">Orientation:</label></td> + <td> + <select id="logo_rc" name="rc1"> + <option value="0">Normal</option> + <option value="1" id="logo_rc_option">Reverse Complement</option> + </select> + </td> + </tr> + <tr> + <td><label for="logo_ssc">Small Sample Correction:</label></td> + <td> + <input type="hidden" id="logo_err" name="errbars" value="0"/> + <select id="logo_ssc" name="ssc"> + <option value="0">Off</option> + <option value="1">On</option> + </select> + </td> + </tr> + <tr> + <td><label for="logo_width">Width:</label></td> + <td> + <input type="text" id="logo_width" size="4" placeholder="default" name="width"/> cm + </td> + </tr> + <tr> + <td><label for="logo_height">Height:</label></td> + <td> + <input type="text" id="logo_height" size="4" placeholder="default" name="height"/> cm + </td> + </tr> + </table> + </form> + </div> + <!-- Buttons --> + <div> + <div style="float:left;"> + <input type="button" id="outpop_do" value="Submit" /> + </div> + <div style="float:right;"> + <input id="outpop_cancel" type="button" value="Cancel" /> + </div> + <div style="clear:both;"></div> + </div> + </div> + </div> + </div> + </div> + + + + <!-- Page starts here --> + <div id="top" class="pad1"> + <div class="prog_logo big"> + <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAAAd0SU1FB9wLGwYBMoyhiwgAACAASURBVHja7Z13fFRV9sC/503JpIeaKFVREBQVEEFFQVcUuyDouuraFoVV17IrayPjDP4U3XXXhrpiXxuKKF1dV8WCiEgXRUAQlJIYAilMf+f3x3szmVSSkICyOR/eh8wr9717z7mn3XPOhRZogRbYLQiQJiJGy1D8D0LHjh1/XrZsmQK9gU3Ap0mE0QL7KTx411136Z///GdV1ZhpmvrYY4+pqsZUVceNG6dAz5Zh2j/hnpKSEtM0TVVVrfq/qmosFtMxY8Yo8CPQHejucDjyfm0dbZFp1WGaxmJ3ppSWSiQUIhQKIWJxehGhpKSE1LQ0uvfowQHZ2exYt65D8dq1qzUaXR2LxTYCP7UM4a8MVFWA9mY0+nLhmjV63LHH6vMvvKATJkzQfn366CtPPKEDjjtOV61apeeedZZqMKgaCKju2KFmYaFqJKJaWqqqqoACR/9a+u5sQT+IiD77zDPbKCnR00aOZPHSpcydO5fLf/972rdvTzgcZsEnnzDmqquYPmsW/PxzxbMOB4NPOokRZ5+tB3XrJsAUYKmqOkQkVuVVKUBGDRbGz/vSvPlfBHcVDpB7XP/+Gz9/5x1mzJ/P1i1buPbaa1m/fj1du3alW5curPvqqxobCoVCpKSkIO3a1Wc89bCuBy51OZwu1RgiBqGYGf1uw09/Bd5t4QDNT+wKfPXoxIl9jzm6gkt/OmsWn3/4oRIMyrfLlzPuzjvp27cvHTt2ZNGXX+K/7baaW8zJITM1lflz5wL8ZtWqVWm9evXaVcv7Q2cN6hM68tAuR2MIhirFpUEef+MdBFK1RQQ0v6g/MC9PLxk5Uq+/7joIBECSJmwwKKqKR4RTTjyR0885h2effZaNa9Ywa9YstKQkoQzGwSwuJhwIwK5ddO3a9b+9evWqjQPoSf16qUOQles2gYLL5WDaBwu5dtSw8L/eeKdFB2huaJWTo0NOOMF8wOs1qiG/QhfghtGj+dMNN4DblhJlZVBaWg35AIYI7NgBbjcbNmwwjz766I+WLl16OfCDfUs3YB3AAdke6d7tYNR2Jv6wuZA2rbIwxbFPxfD/jBn4t7vv5uUnnzRsTNelEEIoBKWl1qH1YM7hMAXffWcsWbBgMLAB+AgoAtYC5SJCp86dUTPG89M/ACASi1mDH4u2+AH2Bvzhpps+p3Xrmi+mp2Oa5h613y4nh1WLFuHxeHTq1KmDVbWVqjJjxozU4cOH88rsj1FXKteMOh3D4eQ/ny/hjnwfn32zyWUYxtAWK6D54YW1X355WbcePSr32elk1EUX8cYbb1gzvvG+BEzA2b49msQ1RARVZe7cuTzzjwl079qB6R8s4PhThjF58mQADjroIDZs2CAtBLAXFMEaTwaDe4R8ALKzEbcbVUVVE4hP/t/lctGnTx9+c8op3HvffQm9YubMmZx77rlic2Rzbw7I/5oreNzJgwapqqI7dqA7d1pHSUnyVG5Uw0MGD6agoCCB7IQ+kcQFIpEIkydPZszYsQmuoaqEw2H95JNPdOHChTHgervJT4DTWzhA08OjwGWT7r8/u3xXhckei8W47c47obwcMjMtsy9OEHUojdhI/M2oUXwwb16dIqKqJVFaWkJmZlal60OGDJk7b968M1SVsWPH8uSTTxYC7WmBvQIbV6xcGQK0aM0a3bRsmW5fu1b1559NLSzUakdBgXXYawC7A0CXLVtW7fzMmTOrnTNNU03T1OXLl5u1ia4WaA4lQbXVmDFjcoFcIHfJ0qUXqKqaBQXVCMC0kZ+MtNogEAjoli1bar0ef/bee++tiXDMFszsQ+jbt+/r1111leqOHZWJIBBQ7913azgc1qaAeABCVUKqQgBvAO8BL7RgZu9xhd6nnnpqNLpzp8559VXVkhL9ZOZM/X79+j1Bdm1sP2KaZix+rqioSBctWqSqejPw2KhRo+IPxjp06KC0rOg2p82AkE8O4zkbiAJ6ySWXVJLRjUW2qmqrVq30+eefr3RrFWYQf4+pqjpq1Khq7zYMY4/0g5agxppgPCnARcC1GPRFSUF5gAn0VNVz69vMkiVLWLNmDRdeeGGt93Tu3JmNGzfu1slkGAZbt24lNze30jWHw4Fpmo3GYwv7SIY7GYKD8UA/INteQFaKEL7iqBNPPPHYhjTXp08f+vTpU+O1rVu38sc//pE5c+ZgmiaGUbtLJu5HqMNdfYXT6VwdjUY/b+EAdXm9DMNlmmYrAA/I6SKe6ao/JM38v2Pw52oPrgV9Seu06RugTzT62ZogNzeXbdu2ISIYhpFmmmagxRNYC7Gbptlnw5Il29Z/9dW2H1ev3jpddQPwQ79+/f5k32NNsSpStdeSXonZ99JLL+0RAkWEG2+8samUU7Zt2xb3KKppmptbREAd43Vwly5fdDniCLS42DoRDILb3fnRiRPzLzzrrIdVlX9MeoKCw36GSMUIpaWlJVh0UVHRHiPt4YcfbhqKruxyFiDUIsfrhpWAfjprlpplZVZUb1UHTyBgRfnGD1Xt0KlTvR0++xIcDodecMEFCvxDVXv/79nrM2lnzuAanUWdnV8InzocDu104IGqO3aY+vPPWqOrt7BQdds2jcRijTLzmsg5VO93RCyCNa+88kotKCgosTnC6f8rIkD/PGcsQ044AYAZL9XOgkdfdlnxibEYuzZvjkpOjrN1q1Yc1Llz4p4Lzz+fcePH21qBidMwGDhwIA8++CAn2O1XZcWjR4/mmmuuoX///k2ruIjw9ttvc/755+9enjudAGIYBu3atctUVXr16vXOqlWrOovIpv169pszeX/yP/9Z+0xOPqLRymy+yvHp7Nl61tChetbQoTpt6tRaF2x+qSLh6quvTvw9adIkE3hrw4YNjv3WDNSZDEZ5/6Hl9zhvGjsWzKZbOykH0tu2Tdjie9H9XCmYpCHPjR49mqeffjqZi5iq+jQwVkTM/c4MVCUfcM564y6u+8ufmxRRV1xxxb6xWUUSR0Ofa2clqdgSzOTVV181otHoNTNnzjxjv9MBzBl0EeUUNeD9e2Dkfc/z53xPnUGeN4wezcFHHlmvwX1j1iwAJk6cuNf7tmLFit16CavCww8/jMPhSHZ+sWDBAi688EL97W9/O0tVPSIS2m9EgDmda8XgSRRFKvqjigooQh85h+Xx819BaxO2nQ/ODGAjrA5A9WyeTA4kg1y2UCnO75cOJ510Eh9//HGN10aOHKmLFi2a98MPP5y834gAEYaikIx8+7wAhpr8oabnpgMvA5/Av4C+1Y5bWMRoIJUXBg0apL8G5KsqH3/8cY0iUFWZOnWqnHfeeUNUtcPeJoBUwFPHkdoYbqQ+BBiitYVMWYs57iqnYskv0trEoGlzjXGMX7du3R3RaNMlcDz55JN1c7VGKrFVg1DjiE++duutt6phGAtV1dhbBHBW6+zM0iM6tSkccFTPwv6HH1o44KiehUd0ap34PahPr0Kga4MJ4CjOUWgjUgvxKIiDc8yZpMVPReEkrZ/uk2hz69atr7344ot2i3sOY8aMqRXJt99+e40yf9q0aU2iRHbs2FEGDhx4wPr1689sbiXwcDEck3My044ePWKo4dRwRjQUILPtgZRt34rDeTCxWJSs1rk8PmUOKSkeCYWCDSR5OiXQpLYggLCCS8TCv0CmmBWELtDNThPeKZBdzzdtuPrqqyU1NVXPPPNMsrKyqs26hkJtil12dnaN7HvEiBEN1kPatGnD9OnTOe+88yqdnzRpkoiIpzk5wMnZGWkrhxxz+HG3XHRqqsPplPKyMlxZ7dkVCODMaEtZeRlpOe3419S5dOt8ANFYrDHy/5i4wocgKH9Xg0MFvkiewVolqNKexu+p5TFIq+/7fve733Wcm5PzStzbJyK43e4mHbjbbrutmgyvmmdQX+jatSu1ia4tW7asbS4O0Mntcn5wxx9GaUlJiQQiiivFQKNhHAaEy8pwuj1kt8njqTfepXvXA+nToyvzvlzZCK2HYxGsf8oKPNxunE5U3+Kv6uBdBI8qHlEOB76sLiBQA04GfPV840/dIPDEV1/dd5lhXP0TLAmrzveIyKlnnXV3z549uSknp/Qf27dnDh06lGHDhu2RLG+M4ygOmzZt4swzz+SCCy6o8f7PPvtsS3MRwPI22Zn61LT3JRwoQw0noIg4UP0Wp8uNwzAQEbp3PZDB/Xqxs2xXwzs8B6dGcNvs3BST2+V0ogAynI/N6SwTYYCCC8FTnQEkwNEwqYNDwbgZCoAPROSBL6CLMXv2rctmz85eC5suX7Yss3fv5lmMi0QiqGo1ziMiZGdns2LFCjp37kynTp3w+/01EoqtDJY0FwEEI6FAzgF5OQw6vi/ZuZ2qsDTFYRj4n5pKSXmAwcc0cqBCHC0ODrFlf1TdLK6CqWUKA5IxvhwkDCfsoSY3AHhCLQKIZ+x4gNgy0KOgpP9RR5kh1QNVVZrafEx28lRF7M6dO+vFXbZt2zYzLiKbRQfof2QvBg/sh5HZlrJdAcp2BSgPBO0jRFnAUvaGDuhNWKVR+XhacQiwQkJsq9RRk9fFVgvjKCgHUTjY/j0TCNOApItnraacWAUgNgI9kr4n8Hu4HejxCVwhIufbkT9ah07RoD5PmTIFwzBqVCDrS2hjxozh0ksvzW1WP4DGPTGqlO/4GTEMMGMJRBticGiXA4hEYxAO1J17V7sCmJpkq70vw6shsrwWV6fadPGFQkSg+6dW9a7dQtuK7glgSAXxuA3IFbgnaQhmPvroo2kvvviiTJkyhfnz51ebsa+++mqD+nzRRRdVUxAbsu6hqvztb3/ToqKi9LfeessNuJqFAFJcTsx4UqXhsIY8o03i7x+3FfH1uk10ymvbKOTbLP4uxEaFWb3CVtw5ZP9f0yw37OttU6mkI9QK7SALONh+7geFTp9bhHBI8jsdkGkTQeDyyy+XRy6++MCJQ4aQ4jJwuxy4nQYOw2DqM4/w6KOPNsi/EJ/p4XCYYDCIiDBz5sz6IF9FhKysLFHVZ4YPH74DiDQLAfxnwTI8bhcA6QceCmrCrh1JyFGcDgebC7ZbMe+N0XohB0BNtkuUFdUNapYqrBTlWnawIPnRKm8z+sHO+rzTsPP3HfCdAcUKrRwWAcTZglj0WNmpNV+15OgLYMLYU/nsoYP4+w0D6NPzIFYu/YqbLDEhDZ3NW7duZf369agq55xzTr0IZ+TIkfTs2fMqEflns4qAXcEQD7000+pQeBehcMTqY0paJXZkGILDYbDw63UYTkcjGQGFMrJ6oUXjZEKEOEHOZbJcTsy+1wW018revtKvbGKqr3SzxYgA6tiNFxFg1nhy+x4coaA0g+8Lc1mxqSsOw8CMmYrAIYcc8pWIMGHCBD744IN4mjGzZ8+u9UM6d+5Mz5496yP7TWDh+PHj5c0337z5m2++eS75YnNYAUuBYcUlZRTtLKNtNjhTMyAWhkAJVCm57zAMPl60ktRUD4FG+Nu1jjUEYxQlVe51A22A4hDsTIEihdxwPXUAJ7QywWXP9gKgvQluhSyjMmEkOqmzOBqTawpLiKalf+WcumQkaZ7VRCMRwsEyycnKCq9bt+4e4G2v1wswbs2aNfcfcsghnH322XsU26CqFBQUGHl5eZMsCca/apSDTQxnAEsNw+Bfb7yDw+nAiIYs5ljDfguC4HQ5oQEeOX2LTsDRtgqwraHjIrDhBNgKfA+kOmFIPblNOhADchXuAGKm1auOSRbJarGqh6PT6YPJuTj4dvgDrPv7zJNp3+pHwsEQS77bqNlpLkrLylxVfBEP9OvXL7t169bFzzzzTKMJIO4YysvLU9216wWgNRDYGwQAdrFkj8dj6WmGUaupVx4MIohCDXK8ts45SMewuJdq40usaoUdbzRABDgU3hZrrwBxWs/GrdJLgamAQ+dyACnI1PlDNslZW5Z/tvxC98at82MSLg+nOwkhEvnHy+8QicYEeDP5JSUlJSXFxcVnXH311Yfcd999DepTfJFpxIgRiAgbFi+Oh8gJtWnCzQBvJ3ynBdvrObkaKPs18aDRAIRrfcVHLc9nWRYoOTbCU0LWgpJD4Zn+VoiBiIGDCA+tWt/5xElPnb/11uzhOfD6tNUb1sy654XZcx+c8v5MPPpM4Q0l5yb67k36tnyuwcsaYN2bb7652lbidzvjwUpIFZFvZ8yY8U9AFi1bJpgmpw4e7Hn8iSfa7y0C2BFXmMLRmGUFZOVZXKBKR9I8KbYzr/khDVphKYJxKGggAXSsgWhjapmBAfueoKTQ86ftbd4cNvZv342KPtj3b/4FC4C/AOfbxygC/BGYjJerKymY+dyNn6fwsR1g8eLFh4kFNdr+yev9IsLAgQMBnjFN8xawah8RCjH12Wfd2dnZf9pbBHCl9U1JXj61TfHUrEZX4tpTiMJRgEcrMPiuzbu7NcDqSDYHDCzF0p0w5WBtaSDd3fGKDwdc1/rO464bt+kZbmRrjY35yQMW4+VBNNH0kYnr3sS5/r17917bt29fzjzzzER0kmmaiAiHdu/OgL59WfzBB0QikUqv+L/HHoNWrcjOztY/33jjnap6dnNbAYmPq8S2DAcYTUdvWuGTq7PAnzmdozEpM4azNsmMe99G5nr791H1fGerJCL4RKCvEzpbcSd8Y99jOohFx7cfNf/JS9Yu5C4b+V5yUcZWoiA/d+NjCV4mIVxGPjvwVzJJ7yGfUvxMXLly5aH2uRduvfXW30+bNo1Vq1bN9Hg8Zxd8842069TJKoAdDlf65uVLl743b/bsUwcff7zx1xtvVBE5CpjV7ARAJbepQGlBHaK+gSqA4BZLoIeBGnOAzHcRCeJVAy9wElbd3jgU1TyhdwuH2Q+8HYMrndaagClgKBTbDao4gtnzTlr93YZ/sslm688AF+InM2l2tyKfAEIaPo7HyybCDALgrwzEzTx8pPR6rJesYlXyN1z+97///fKMjAyXx+OJANF2HTo4CNSaFX76I5Mn6+Djj+emcePkhWnTzli6ePH/NbcIALghMcBij7DhqHGkXbYTyOPxXFw/9sJVGveKhqkWSWK+TT8JsdJGfk1UmdKYDomle84Pw4VRCKj1uyPQmQo38I8pMe75eGqSVePnanxJyAfwUYyfVOAa+3enj679aMW9H99bFLwn+Ln6NWKapq66flWNxFlWVhZpqNiipIQ+3bufoKr/anYCcDqdyypZ+6oEgoGqwbuEI1Fuu/J8cjLTFOhUrw4ZpCS5X6uy/KEYzEfoJdVV/Y72gMQX0x0NHIc0gc3HQ2SQlXi5zrAcLO74esMxML8//LsBQ/U1+TyOFx3yxJCH7njjjpM9Lo+ISIZhGPVhjY7vvv66Tg722cKF4HKBKrfecIOKyEnNTgAulyvJTWmha9eW7xEUl9NRKcwpHImi2mCTrDboIVW2hEl65veSNCkUFoiFyH71fGc/S5dMNBKxiSgSg28bOVSfIUxC+fCREY+s59GKHIZ6Qu+1dRealq0FBectWLBAAXr26SM9DjnksCVLlvTdGzoAYhgEy3bgycgmvU0eGijhgHatq/mw60fsu9ccpGK5tyZiidp/L7bPXwakaP11ALcJHye1G8WS/+4YBBs1QD4U+Bo45U/+PzXK9e5yuSq6XD3aWIEZp40cKSUbNyrl5fLa5Mn06dMnrVk5gL0Vm+XtKy4EEVLSMkGEDZsLKsKi7aybmy85m2CwYWOoDSeUDvbfZQthmgF3S8NCvdVIcqfO5oznT2POfxww5Xj4jn0Dg6KRSJyd0uGgg2q8qbSs7IzNP/0ksViMjPR0Jk+e3LwcQERmqypqmrTueDCoJpb+K0W0CIgKu4JNU91E6yYE077+qgGt1FoXkPrQ0nJwhaBrhUqxsN/duLIBTz+YyL6DBWaSuR0Oh2vMZDZEPuzQu3eJqmYempe3CXikua2ADBGxAkOo0AUioSrmSkome6sWssI2+0vi9nz8w7IWWG7eWmGXpVekAz/Cyr5geCD2M5hL+IWAmiaFRUU1LiCZqiERWSYiAaDL3jADUVW6dcy1RlmsSOBoMgGoWg6iRkYFST3PKbDQ0tYHUF0/UIEsl4XcOtcRBCKTuMYNWg6aB/IK9Iv9UghARKo5gqrg46SsrKz2e8MVXAnHoJDexqbS5HAMgWBZk7J7Tfo/mfdErb46arLt6/MuAzmojPSVU7i4OwT7gsyDfr+oqlyqWrHbWS1QUlJSvldcwTWlMZmmSVp2a3YW7UiSylEUSE9NaeIPoFwAFdJFCRh7mAp/LLo5j9e+DZAxEPgDHFP6S0G8y+UCtxsxDFrl5OAwjB9i9UwwbRYCSE1NTVFV0jzuauxZq85XO7Pz+Rkf4XanEA7Xf1JJ7d66dUQZpk7mohyCtQCkdbUT3s1YCItag7YB9wg4KvhLmvnDkmoR2/L/jfo+21wi4OGYaeqNvzuLmGnaYeL2QDprZlE/7yhtsC9Aa+7RQkyOM0awNp4cqyYxo3osQPJvtxN+U/fbytdD/zN/aciPm9zxgwZyuuYiAAUkGAoTLN2BiAFlRVbwlMOdUFhcTme1Ldb2WBE6h4XG+RRW0gOcGAYcYfdXbeSLwncmPG/fuxsZNHj3PNXLoc2K6b9wYigSupwbGNug527nZrxMx8uBe4sAKsynnUVWSFgSbYgITofBh4u+xu1qvBTanQEvlf9ok6R6isKiGBzeiJjCuuD4ZhvIfN7DyTtRjT6vj+gk7iJGvrUEXQdBtsPL53qvrsbHefjYvNcJoE3nQzFj8awgC11tsjO57OzB/PDTNis82jSJRmON4TMOcXNCXaZbTQShMMMJJw5M8utT+e+KJmJEGvBF/ya/0rJz04Gf05hIevq49C4dHuwgOkEnTr94+pXG3UYxXsprQH4PrEDQITEz1mGvKoGVNP9YLCGI4/hwuxw899qHiQCRcCRK6a5Ag6phYWn4DkyOISnAIXFtFjlqkpcsEW1q+MgDI3tXlIOOV1o+A3im0uRQbuGeKtE8Xt6ASkEoG/BhpeH6MPEyGS95+GqJAtpTeIiNm9kssk3ye3ftfT3wb5SX8PIZJrOZwL3cxFCUTvh5FqB/Xv8ruZNcHDyBn6K9SgAJuW6HhyngcDj3SN5rZQO+ZtYRpZc4yNDqzy5OQj6KpS9QOd4PDCbhY2MVNjwNHyOqEMQBeNmAcjF+PsdysZ6FFR3cfJDKSyu2rTDwsxYvxUC7Nultvp7749z/e+ubt7hv6H3xYNO3T+t2WtclY5fcszeVwKpmScULDQc7Nm+o17NL4IAaiUoxRHfLHQ6KZ2mQTlShVy3WY827bFRFvsWGR9Rw3xZ8dMXP53h5Dx8BlEnNrvr7+R5hjv0NrVCuL7qtqMexHY+VNFcaqvoR+UTxcf7EoRPz97YVUAnh5TsqZ25Z6wG1Y3ARdPsSvozC+Fq8iy8ma/k1EolB3wSq04hRS9yfNOVChDKKfD7GT64d5CE1yOamLBjQm3y+sAniIfJR8vnD+Nnjh8pd0gc/zqlfTxXqSH5tdgIQh5NYknPHNGO07nCQlRHkMFizcUul+7+EEQrLgWMEMudXDuOOY62Iiiz002tBRq5URnQ8O2JHLZ/q+XRPRaKfnfg5iXyOAYIog2v4rqvx8h7eSvpG48BHCD8D8NolboQr8PM0afyH/yP7uSXP6cjDR6qIPLbPCKDs581ktM2rpIkbTjfZGWm4nE4Wrfo+ce30aPQ0gdelIk1suLPCfKvNDGxXTfGciaHKwBruj5kwt5bmfmoSVuAlHcGNn1uQJI+cl1S8BPDzND5Ow5fIB2gKOAkvgo8X8LIVH4KXdVf2uVLI54p94QhKhP6nt26PiGHrAla9gFgsyvUXDSMQDNOv18EJVt5F9US1F2xs5LqB3+7GE5ii06tk95aSJkJ2LSKiqkNnrcIcAy48sWZTsKGzshyYZn/gNXjJJp8XUVrjs4paNDn4OBl4CC9ulP72uW54KUCYXdejzWYFHNyhPSJimYGGEzSGQ6Ns27KJtq1y2BUKgcbo0eVAAqEwrbMyMIp3uqtYbS7g8M/BcVwVbV8FEUUx6KIx+gIfJC5mcCbQVuIpRy5q3WHTgMIoXNKPKra0lwwUL5L0XqsYXVHco4iSDfyIn8cT8t0K8boLL0OB2cBDwN0Im5uV1fqI70S1KencbncdbzYC2Fq0w1oRVAVPBlq+nSlzP+LIzq1p1+aYRKZQLFEfUCv7kSvs80tdcC8VSRyIEFOTXRikq5WVcYr5Jh8aF6Dm2xgoN2Hlo/5HlFOD82kLdsx9FehnvW5HFXOvLVao9yuAQRTFQRQoRVmAUGqXoC0CnHgZh9IJpTtesvDxNF6eQ/Hhr+Id9HIYVuyBAEvwsU/jCZptLSAQClcIanEQDEdZvbmYEjMlYRq63W6m/OdzAqEwRTvLksmgIMlec8bssiwJ2Mk6YGVivV8ZKS477l7JQ+hjhyGEENAwTir0it33WSgGvkH4FlhVMr4kHViG8D1CayAHP53x0wc/vfHRFZgBPAisw0suEKiG/HwUK5l0FfD1HiE/n3FNgahm4QDJAaEgEA3iSXFxxx9GgghqmoghqEKq221XXDLi4rnIztm7LE4ADhgO/DfR4qWY5vREHJGqcChwhU5nKvCICh5bh1ibrAQohBywsR7sNEZS8GeWL+sTVT1fRKYnIWAW8Cx+W977GW4j/jzgRdTOcfAyFzgN2IKvCU1AaRrcNRcHGNOtY57l7bM9gPEUIVEzyTsIwXAET4qb1tnpcc3RNGGjWCHcaiPy5K9qswbssvCi/E2Fb9XgAtFEINKcKq7gsEKjQpAqId9C+NkIHrxMJZ8rbcLZBrwOvIcQxcst+DgDHw58VTyNzQVeO9MI4E+cz1+rW0PNzgFEhB8LiiqigtQEhxuJhSElA8JWZdBIOMzFw04gEAqT17YV5s/FCEwOw/1uuFEgw9L36Bi1qm58DqBvISqsUOhvl4lVxMrSTSDf0hVMtf6PU44a0wAADOxJREFUn3I2qcD18YqtJ1js3Y/gs7dq86JNMuO9OFBS8e+GcL38AZiAz/ae3sIgfVD/DVwo98veNwMPaJNTMdMjAUhrXaurWFUZecoATNMkBl96rLy7Fyo8v2Q54KoEgQ1HxeRf8ZTqeLl4iXMEQTD5UiN8KyDFy+gOuAVGD6SGlbOmYcmLbUSk2cUeXE3UsgehG16OrOJFrIrVc/FxAF4EL7dKpqwTkUzJl6v3jR+g0lqAQLicJKldjWNErcgh0wFb+kFU4Lvk5VyF3E+pZEerUPtSrQg7RXAA6wrnkgrc1h9ea0YzrJ9tBu6yZ36sidotx8cylP/aJibkEyJ5BTSfyfiIb2t/JcpoRXfh5SGEW+pyPze7J9CMRSzEh8vt11X+lnhmcHFJGbtgmwkLbYTPxpbX9hMnpVvr2xb2f2IpymqtzUOovI6DHRRzZHgbT/SHvze7/PUlqZy+Jk528NMOr+3UEYL4WJbk2ppuE8Ig4EH8dMfaMfRW/Gys61uanQBKCjYj8WqhalZUDgXEcLD42/VEojEem/IuLpcz8aUGbLft7PipzCgk0seN64iqEJUaOI/d/Eo5n1K5nED/2v3/vzaovnI5nmKdoGWMYxTwHj5a4eVRfLyOb/fBLM1OAK7UNKLhoB2IZev0CfvOwdpNW4nFYjgEypTCATbCTYvdB5NYhgGc+kVyAoda8Xw1sIAdmKxkfwMf99j6Raatb/TAYCxw76Aeg/6CnzTyeRz4x742AxOQ2ToPrSNGPVEvwDA40TTzAeZDZwP+A/TQCnkPMESS6wka/KhKTLWyG1FMJhvDKWV/BCUdtXZCE6QNPl57/MvHp8/fNH+aPaAd8FV4TfeZK7hCyzdxuOrOVkn1uGmdlU7fguDOhTBArLp58Uze5AQfF3AmtoUg5bxDGisQjrb3CUSEsLIXAjL2FfjZBTyLl+s0omNV9XC5XT5iIifjJYqvYTjdK9vGWYtCUWKRcC1EAqaVMpYr8K5ABxvzPyu8lMQFDIE+iXZ/S7kq/1TTrk5v7Rs03TiXH9jfQXno5d++/FdLg+YW8nkJu0DnL44A4gpf8eYNSKisxpKx9se8FN/JS+FHE07TuPPHeqrs2zwrGijJ3HsT4d9qEkL5gihj+F8AofCSIy+ZLSJiHGCkImTga7jes3cIQBwI0LZL90T5uNQUN0n1+uJOI6ddSvI7gcEDYEnMEgfrDNh16ZVMuOyaymvqci7l4uCPAscS5UQZYVXr+kWCFw/5XNpErT2Bl3mQKA/bqHLre4cAnCnWHLZdww7D4PE33sPpMDBVCYYjyRtHLVc49RirkDMu+DkTplx/Mb5VnVmFn8+q0ddZlMl5LDdGNCiGf19o8UHgVbw82ARtTQBOAejVvtdCfAxvHAHk4yOfmXjrXTO/8X7BlIxEQfUtQ4sItg9y5KGdMU0zTsWLIzDk2KSghmPAPOxe5n9+KFvxVY///xUqcTEaUBl9N0QQA/j6uq+vNk1zTuMkSYU78SWEQpQZ+PlwT74rNTVVO7RvzUWnHR93BliewMxcKN2G4XDwwLzpDOvQhz7du7Jm4xZ6z/n46xNUj64WljWeS1Bi3NOMbtx9AfHFoyYA0zQLDcNot2ciwM+l+LgZYSNeFC+X4G1qEWFxggm5r+PY6CAtxY0gvDx7Hk+53RdUQ76X36HsqIz8+Zn7iTkn5DeByPJiNhb5NesAPtbZixkLgbHkN5VHTatSLa/O+RhPiguny8VmkUiVGTKSGC7uSQ5qXDQK3K79hgsIfcnn/AZwjYer/P4C355NUqfdkA+pISJWWY6fI8hnIjALP5820htklYhRZYO7gKtWnMorfMp5pwwkGI4kfAVJbP8iYDJBKuLJ+eIWYCZEOmCtE/z6wccK8rmMpP0V6pjpU/BxUdLvl/FZNY/2nAD8NdfUxcsg8ilE6IFyCV5W4KvfDluVIFwOqZmwcyuSYmA4LKI9uEP76hWtLLb/AlBi+Ym/NICnQB8FvRKMf+5nFv3h9UD+DnxJSnp+EwWb7NYM9PEpftqhBBC6AB3twMbdTPgqhWAMB5QUgOEg3eXh6TffQ0Qo2F6FlsZzMcrLdrybsOVQB+gLIK+CXAuOt2BA4X6Ffj9nkV9rsgp4ObkS8r1kIPRtqtcb9fzIAPA8ynm28vJinaJNhEAwnCAGQwwrLkuVVzM/AXFgqtIxtyLML3RuaBjCYwl1IepciCttEX89+Wt6z/kdyELo+2UT59b9UnSBTnWoTq/ZiBe8DEK5CB9L9i4BWNxgJX7uxctHwH/JR/FyYhJbOiX+ZyQa5dQB1qbQhsNBSeFPliQIlFVgT8HjdlG0s8yOCMZEWWR/1TpWn5rJc08fyf0fLGHFsC/gmOftJw8mn6f2G+RbBH2pHcxRVel7Fz/xfX4PQTkFfxPkFO6RJ9DHEPy8gHAqMA8vx9lX1sRr0LicTuZ9ZW1yoKaJM8WDqsmM7C+4qei8Srs0/LClEIfDIGVGynsIp+HmFe5eOJVpvkugJAbGRXDsU/ZglaL0wZ8U+frrVwQVH0uRiiLUSVCSxAmm4cff1K937sGH/9f2JBaTz834eZ58lgNHqipOO9RLVUnNbGU5AtOzeOfdJXhS3PHVPwxDCF4TRLbLQGLi5a4VCrumoOEfIethkDH2bFhUbdOFX+aMdgC/QdmF8AJWfkFOPcLCT8FLb3yVts9bYre5EpLkfjwFLZ9DgG74G7913p7HA/hpRT7r8PIwPrLx8qg8IDbRWmG7ajggFkVRHA4rUbRjbmvmZixma7diPE95UId+ESyb1xVCr8Gx38PCiRC8CU6M4OXf+DjmVzKjY8B7NpK6JbHzOVh7FK/Cz4QanvwUrVjqTngKrXE9osq9t5DPQIQVifI0+4wALCLoRj4R8jkaMEzsDaPsAD1JyYRdxYm9/qKeGMHLggzddjzlgRCPx94lFnr8jyAvQb/vYeEEcE7Ce2w7YAE+OjdgBrpQ2iEU1icmrllZe+UxOrMScoUsfElRSz6ieHkT7L4KP9Rg++cA3yRi/5tEBHiTskkra58K5FCRVJFVp+3px0U+EZQRsQGxQ9Z/UnCa3RErGFSE7Fg6ZZlBUtJcXLJtCAK0ykq3zcZYAI5dAgvvwBF7lbuOPQblM6TyTty78ZTFgHeAMfALthYsS6ojXlYB1wMz8KGChBQFL2vw0ZX8JP+Ml09QzsHfdMiPc4D7azFNFDgQiODjbnuAb0bwxNGKcritqMzBzyybCFbHesZSnfMrPLYhwrgEWpmZzB+0mq7rc3FJ5eVrd9qNzwWdb9/K1cMGk7F9O7ABfz02dsznLWA7wiZ8jVsT30dE8CPQCS9DUd4ARuoOvfH292/X+96574JEZpFVfHKUbYI3eXSz7IadrrQR3BqlE0IaVkxeCJ+dj5/PowijgFyUE4AhrlmuAZGzI+fesXkkgrI6awcHl+XwwAFvcvyMXmwpLOZ3ZwyC9Na4gsXc88xbRA+68TPOes4gs+hKrMIQB9jf9yjCw/iS4vy8ZAPHAq/gox2/ZogrdF6+xcdhtnjItJXHTsBIfM2X0+DcjRw7ogbNcztwpR2eHEM5AR834KUz8APCBZEhkb84J7pY/4dtFLp2MiDSn+ScTDNeNNL2GEZvimA8mPeymVW0EFiDErMVIAOftRN3Jflp+c4v+NUjP1lX8HEYXhaggM8eLC/rsfYoajYCkEZSbW+U9ggG8B5KCTADP5fhZYkUSh5l5LXrlMXBgVx+Ez0JgqXMT/+G0vcCDO53OKkeD2ZaNs+lvc62B0rR0bHbtJ1+AzjxMy1pZjyFtd9uJjAK+BTffpPoUZNIU1tHUGAw/hr9A/vYD1DZVhW8HIdyDfkoyunaVt+lLRRHykihE0TDoCZhiWCq0io7g03fLufLo8ro9+khvNd9GeHW0ZsQXsbHX2wl9HK7ysZMhEvw8R/2d7C8gr9JKIp7xQvd9J24C2UGWLlrKeoiKjFu2zycmGny3oIVnH1aX/xZr3PnllGoKve2mUrqI6ndAuMCG7Ayf0pQyvGTQQs0KzRHUOgw/CyPk9ag8p5cuv0UAhKh+KfvibYx+XDV19y5ZRTRcIiH8mbieMZJcHRwNMpbKCUoHVqQ/2slAB+D8CKe+z0XuF9wU2IGOCCYzbK0DSw8ooRdrYJsWlWEAu+3W4G37CLMo00Q0hA+x4/gb+aKWi3QrBwAfKiIFOKEHms74ED4MHsF3QMHkvdjNtt3lmkwFObbnVujTy59d6drvnOjpmm0Vp9EC/zKCMAGx2ZHzAyHYmXbC2JXLTgilrOmNHZc58xYaSDMP16cPsN4zXHk+sHbMsO7wl1wM67Jc+pboJmsgPrBAlXNKy8uIJN0XA7LMxiOmfGNnQpLS8tIeO/2cb28FmiBFmiBFmiBFmiBFmiBFmiBFmiB/wH4f+jryq6sRdUDAAAAAElFTkSuQmCC" alt="DREME Logo"/> + <h1>DREME</h1> + <h2>Discriminative Regular Expression Motif Elicitation</h2> + </div> + <p class="spaced"> + For further information on how to interpret these results or to get a + copy of the MEME software please access + <a href="http://meme.nbcr.net/">http://meme.nbcr.net</a>. + </p> + <p> + If you use DREME in your research please cite the following paper:<br /> + <span class="citation"> + Timothy L. Bailey, "DREME: Motif discovery in transcription factor ChIP-seq data", <i>Bioinformatics</i>, <b>27</b>(12):1653-1659, 2011. + <a href="http://bioinformatics.oxfordjournals.org/content/27/12/1653">[full text]</a> + </span> + </p> + </div> + <!-- navigation --> + <div class="pad2"> + <a class="jump" href="#motifs_sec">Discovered Motifs</a> + | + <a class="jump" href="#inputs_sec">Inputs & Settings</a> + | + <a class="jump" href="#info_sec">Program information</a> + </div> + <!-- alert the user when their browser is not up to the task --> + <noscript><h1 style="color:red">Javascript is required to view these results!</h1></noscript> + <h1 id="html5_warning" style="color:red; display:none;">Your browser does not support canvas!</h1> + <script> + if (!window.HTMLCanvasElement) $("html5_warning").style.display = "block"; + </script> + <!-- description --> + <div id="description_section" style="display:none"> + <div id="description" class="header"> + <h2>Description</h2> + </div> + <div id="description_text" class="box"> + </div> + </div> + <script> + if (data.description) { + $("description_text").innerHTML = ""; + $("description_text").appendChild(make_description(data.description)); + $("description_section").style.display = "block"; + } + </script> + <!-- motifs --> + <div id="motifs_sec" class="header"> + <h2>Discovered Motifs</h2> + <span><a href="#inputs_sec">Next</a> <a href="#">Top</a></span> + </div> + <div id="motifs" class="box"> + <p>No motifs were discovered!</p> + </div> + <script>make_motifs();</script> + <!-- inputs and settings --> + <div id="inputs_sec" class="header"> + <h2>Inputs & Settings</h2> + <span><a href="#motifs_sec">Previous</a> <a href="#info_sec">Next</a> <a href="#">Top</a></span> + </div> + <div class="box"> + <h4>Sequences</h4> + <table id="seq_info" class="inputs"> + <tr><th>Source <div class="help" data-topic="pop_seq_source"></div></th> + <th>Alphabet <div class="help" data-topic="pop_seq_alph"></div></th> + <th>Sequence Count <div class="help" data-topic="pop_seq_count"></div></th> + </tr> + <tr> + <td id="ins_seq_source"></td> + <td id="ins_seq_alphabet"></td> + <td id="ins_seq_count"></td> + </tr> + </table> + <script> + { + var db = data.sequence_db; + $("ins_seq_source").innerHTML = db.file; + $("ins_seq_alphabet").innerHTML = dreme_alphabet.get_alphabet_name(); + $("ins_seq_count").innerHTML = db.count; + } + </script> + <h4>Control Sequences</h4> + <table id="seq_info" class="inputs"> + <tr><th>Source <div class="help" data-topic="pop_seq_source"></div></th> + <th>Sequence Count <div class="help" data-topic="pop_seq_count"></div></th> + </tr> + <tr> + <td id="ins_cseq_source"></td> + <td id="ins_cseq_count"></td> + </tr> + </table> + <script> + { + var db = data.control_db; + if (db.from == "shuffled") { + $("ins_cseq_source").innerHTML = "Shuffled Sequences"; + } else { + $("ins_cseq_source").innerHTML = db.file; + } + $("ins_cseq_count").innerHTML = db.count; + } + </script> + <h4>Background</h4> + <span id="alpha_bg"></span> + <script> + { + $("alpha_bg").appendChild(make_alpha_bg(dreme_alphabet, data.control_db.freqs)); + } + </script> + <h4>Other Settings</h4> + <table id="tbl_settings" class="inputs hide_advanced"> + <tr> + <th>Strand Handling</th> + <td id="opt_strand"> + <span class="strand_none">This alphabet only has one strand</span> + <span class="strand_given">Only the given strand is processed</span> + <span class="strand_both">Both the given and reverse complement strands are processed</span> + </td> + </tr> + <tr><th># REs to Generalize</th><td id="opt_ngen"></td></tr> + <tr><th>Shuffle Seed</th><td id="opt_seed"></td></tr> + <tr><th>E-value Threshold</th><td id="opt_stop_evalue"></td></tr> + <tr><th>Max Motif Count</th><td id="opt_stop_count"></td></tr> + <tr><th>Max Run Time</th><td id="opt_stop_time"></td></tr> + </table> + <script> + { + $("opt_strand").className = (dreme_alphabet.has_complement() ? (data.options.revcomp ? "both" : "given") : "none"); + $("opt_ngen").innerHTML = data.options.ngen; + $("opt_seed").innerHTML = data.options.seed; + $("opt_stop_evalue").innerHTML = data.options.stop.evalue; + $("opt_stop_count").innerHTML = (typeof data.options.stop.count == "number" ? data.options.stop.count : "No maximum motif count."); + $("opt_stop_time").innerHTML = (typeof data.options.stop.time == "number" ? data.options.stop.time + " seconds." : "No maximum running time."); + } + </script> + </div> + <!-- list information on this program --> + <div id="info_sec" class="bar" style="position:relative"> + <div style="position: absolute; right: 0;"><a href="#inputs_sec">Previous</a> <a href="#">Top</a></div> + <div class="subsection"> + <h5 id="version">DREME version</h5> + <span id="ins_version"></span> + (Release date: <span id="ins_release"></span>)<br> + </div> + <script> + $("ins_version").innerHTML = data["version"]; + $("ins_release").innerHTML = data["release"]; + </script> + <div class="subsection"> + <h5 id="reference">Reference</h5> + <span class="citation"> + Timothy L. Bailey, "DREME: Motif discovery in transcription factor ChIP-seq data", <i>Bioinformatics</i>, <b>27</b>(12):1653-1659, 2011. + <a href="http://bioinformatics.oxfordjournals.org/content/27/12/1653">[full text]</a> + </span> + </div> + <div class="subsection"> + <h5 id="command">Command line</h5> + <textarea id="cmd" rows="3" style="width:100%;" readonly="readonly"> + </textarea> + <script>$("cmd").value = data["cmd"].join(" ");</script> + </div> + </div> + + </body> +</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/dreme_output_test1.txt Thu May 17 14:11:00 2018 -0400 @@ -0,0 +1,102 @@ +# DREME 4.12.0 +# command: dreme -o ./dreme_test1_out -p dreme_test_sites.fa -norc -rna -s 1 +# positives: 1000 from dreme_test_sites.fa (Thu Apr 26 15:09:03 CEST 2018) +# negatives: 1000 from shuffled positives +# host: ThinkPad-T450s +# when: Thu May 03 13:22:29 CEST 2018 + +MEME version 4.12.0 + +ALPHABET "RNA" RNA-LIKE +A "Adenine" CC0000 +C "Cytosine" 0000CC +G "Guanine" FFB300 +U "Uracil" 008000 +N "Any base" = ACGU +X = ACGU +. = ACGU +V "Not U" = ACG +H "Not G" = ACU +D "Not C" = AGU +B "Not A" = CGU +M "Amino" = AC +R "Purine" = AG +W "Weak" = AU +S "Strong" = CG +Y "Pyrimidine" = CU +K "Keto" = GU +T = U +END ALPHABET + +Background letter frequencies (from dataset): +A 0.221 C 0.245 G 0.221 U 0.312 + + +MOTIF UUYUCY DREME-1 + +# Word Pos Neg P-value E-value +# BEST UUYUCY 387 210 2.6e-018 1.2e-013 +# UUUUCC 147 75 1.8e-007 8.1e-003 +# UUUUCU 155 94 2.2e-005 1.0e+000 +# UUCUCU 94 51 1.3e-004 6.1e+000 +# UUCUCC 75 42 1.1e-003 5.0e+001 + +letter-probability matrix: alength= 4 w= 6 nsites= 459 E= 1.2e-013 +0.000000 0.000000 0.000000 1.000000 +0.000000 0.000000 0.000000 1.000000 +0.000000 0.294118 0.000000 0.705882 +0.000000 0.000000 0.000000 1.000000 +0.000000 1.000000 0.000000 0.000000 +0.000000 0.474946 0.000000 0.525054 + + +MOTIF YAGG DREME-2 + +# Word Pos Neg P-value E-value +# BEST YAGG 600 416 1.1e-016 5.1e-012 +# CAGG 441 304 1.5e-010 6.6e-006 +# UAGG 232 165 1.1e-004 4.7e+000 + +letter-probability matrix: alength= 4 w= 4 nsites= 793 E= 5.1e-012 +0.000000 0.692308 0.000000 0.307692 +1.000000 0.000000 0.000000 0.000000 +0.000000 0.000000 1.000000 0.000000 +0.000000 0.000000 1.000000 0.000000 + + +MOTIF GAAGAW DREME-3 + +# Word Pos Neg P-value E-value +# BEST GAAGAW 81 22 8.2e-010 3.4e-005 +# GAAGAU 45 7 2.4e-008 9.9e-004 +# GAAGAA 40 16 7.9e-004 3.3e+001 + +letter-probability matrix: alength= 4 w= 6 nsites= 89 E= 3.4e-005 +0.000000 0.000000 1.000000 0.000000 +1.000000 0.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 0.000000 +0.000000 0.000000 1.000000 0.000000 +1.000000 0.000000 0.000000 0.000000 +0.494382 0.000000 0.000000 0.505618 + + +MOTIF SMUGGA DREME-4 + +# Word Pos Neg P-value E-value +# BEST SMUGGA 110 47 9.1e-008 3.7e-003 +# GAUGGA 22 6 1.7e-003 7.1e+001 +# GCUGGA 33 14 3.6e-003 1.5e+002 +# CCUGGA 32 15 8.6e-003 3.5e+002 +# CAUGGA 29 13 9.1e-003 3.7e+002 + +letter-probability matrix: alength= 4 w= 6 nsites= 119 E= 3.7e-003 +0.000000 0.529412 0.470588 0.000000 +0.428571 0.571429 0.000000 0.000000 +0.000000 0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 0.000000 +0.000000 0.000000 1.000000 0.000000 +1.000000 0.000000 0.000000 0.000000 + + +# Stopping reason: E-value threshold exceeded +# Running time: 13.95 seconds
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/dreme_output_test1.xml Thu May 17 14:11:00 2018 -0400 @@ -0,0 +1,77 @@ +<dreme version="4.12.0" release="Tue Jun 27 16:22:50 2017 -0700"> + <model> + <command_line>dreme -o ./dreme_test1_out -p dreme_test_sites.fa -norc -rna -s 1</command_line> + <positives name="dreme test sites" count="1000" file="dreme_test_sites.fa" last_mod_date="Thu Apr 26 15:09:03 CEST 2018" /> + <negatives name="shuffled positive sequences" count="1000" from="shuffled"/> + <alphabet name="RNA" like="rna"> + <letter id="A" symbol="A" name="Adenine" colour="CC0000"/> + <letter id="C" symbol="C" name="Cytosine" colour="0000CC"/> + <letter id="G" symbol="G" name="Guanine" colour="FFB300"/> + <letter id="U" symbol="U" aliases="T" name="Uracil" colour="008000"/> + <letter id="N" symbol="N" aliases="X." equals="ACGU" name="Any base"/> + <letter id="V" symbol="V" equals="ACG" name="Not U"/> + <letter id="H" symbol="H" equals="ACU" name="Not G"/> + <letter id="D" symbol="D" equals="AGU" name="Not C"/> + <letter id="B" symbol="B" equals="CGU" name="Not A"/> + <letter id="M" symbol="M" equals="AC" name="Amino"/> + <letter id="R" symbol="R" equals="AG" name="Purine"/> + <letter id="W" symbol="W" equals="AU" name="Weak"/> + <letter id="S" symbol="S" equals="CG" name="Strong"/> + <letter id="Y" symbol="Y" equals="CU" name="Pyrimidine"/> + <letter id="K" symbol="K" equals="GU" name="Keto"/> + </alphabet> + <strands>none</strands> + <background A="0.221" C="0.245" G="0.221" U="0.312" from="dataset"/> + <stop evalue="0.05"/> + <ngen>100</ngen> + <add_pv_thresh>0.01</add_pv_thresh> + <seed>1</seed> + <host>ThinkPad-T450s</host> + <when>Thu May 03 13:22:29 CEST 2018</when> + </model> + <motifs> + <motif id="m01" alt="DREME-1" seq="UUYUCY" length="6" nsites="459" p="387" n="210" pvalue="2.6e-018" evalue="1.2e-013" unerased_evalue="1.2e-013"> + <pos A="0.000000" C="0.000000" G="0.000000" U="1.000000"/> + <pos A="0.000000" C="0.000000" G="0.000000" U="1.000000"/> + <pos A="0.000000" C="0.294118" G="0.000000" U="0.705882"/> + <pos A="0.000000" C="0.000000" G="0.000000" U="1.000000"/> + <pos A="0.000000" C="1.000000" G="0.000000" U="0.000000"/> + <pos A="0.000000" C="0.474946" G="0.000000" U="0.525054"/> + <match seq="UUUUCC" p="147" n="75" pvalue="1.8e-007" evalue="8.1e-003"/> + <match seq="UUUUCU" p="155" n="94" pvalue="2.2e-005" evalue="1.0e+000"/> + <match seq="UUCUCU" p="94" n="51" pvalue="1.3e-004" evalue="6.1e+000"/> + <match seq="UUCUCC" p="75" n="42" pvalue="1.1e-003" evalue="5.0e+001"/> + </motif> + <motif id="m02" alt="DREME-2" seq="YAGG" length="4" nsites="793" p="600" n="416" pvalue="1.1e-016" evalue="5.1e-012" unerased_evalue="2.4e-012"> + <pos A="0.000000" C="0.692308" G="0.000000" U="0.307692"/> + <pos A="1.000000" C="0.000000" G="0.000000" U="0.000000"/> + <pos A="0.000000" C="0.000000" G="1.000000" U="0.000000"/> + <pos A="0.000000" C="0.000000" G="1.000000" U="0.000000"/> + <match seq="CAGG" p="441" n="304" pvalue="1.5e-010" evalue="6.6e-006"/> + <match seq="UAGG" p="232" n="165" pvalue="1.1e-004" evalue="4.7e+000"/> + </motif> + <motif id="m03" alt="DREME-3" seq="GAAGAW" length="6" nsites="89" p="81" n="22" pvalue="8.2e-010" evalue="3.4e-005" unerased_evalue="3.5e-004"> + <pos A="0.000000" C="0.000000" G="1.000000" U="0.000000"/> + <pos A="1.000000" C="0.000000" G="0.000000" U="0.000000"/> + <pos A="1.000000" C="0.000000" G="0.000000" U="0.000000"/> + <pos A="0.000000" C="0.000000" G="1.000000" U="0.000000"/> + <pos A="1.000000" C="0.000000" G="0.000000" U="0.000000"/> + <pos A="0.494382" C="0.000000" G="0.000000" U="0.505618"/> + <match seq="GAAGAU" p="45" n="7" pvalue="2.4e-008" evalue="9.9e-004"/> + <match seq="GAAGAA" p="40" n="16" pvalue="7.9e-004" evalue="3.3e+001"/> + </motif> + <motif id="m04" alt="DREME-4" seq="SMUGGA" length="6" nsites="119" p="110" n="47" pvalue="9.1e-008" evalue="3.7e-003" unerased_evalue="2.6e-005"> + <pos A="0.000000" C="0.529412" G="0.470588" U="0.000000"/> + <pos A="0.428571" C="0.571429" G="0.000000" U="0.000000"/> + <pos A="0.000000" C="0.000000" G="0.000000" U="1.000000"/> + <pos A="0.000000" C="0.000000" G="1.000000" U="0.000000"/> + <pos A="0.000000" C="0.000000" G="1.000000" U="0.000000"/> + <pos A="1.000000" C="0.000000" G="0.000000" U="0.000000"/> + <match seq="GAUGGA" p="22" n="6" pvalue="1.7e-003" evalue="7.1e+001"/> + <match seq="GCUGGA" p="33" n="14" pvalue="3.6e-003" evalue="1.5e+002"/> + <match seq="CCUGGA" p="32" n="15" pvalue="8.6e-003" evalue="3.5e+002"/> + <match seq="CAUGGA" p="29" n="13" pvalue="9.1e-003" evalue="3.7e+002"/> + </motif> + </motifs> + <run_time cpu="13.95" real="13.95" stop="evalue"/> +</dreme>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/dreme_output_test2.html Thu May 17 14:11:00 2018 -0400 @@ -0,0 +1,6119 @@ +<!DOCTYPE HTML> +<html> + <head> + <meta charset="UTF-8"> + <title>DREME</title> + <script> + // @JSON_VAR data + var data = { + "program": "dreme", + "version": "4.12.0", + "release": "Tue Jun 27 16:22:50 2017 -0700", + "cmd": [ + "dreme", "-o", "./dreme_test2_out", "-p", "dreme_test_sites.fa", + "-norc", "-rna", "-s", "1", "-e", "1e-05", "-g", "100", "-mink", + "4", "-maxk", "10" + ], + "options": { + "revcomp": false, + "ngen": 100, + "add_pv_thresh": 0.01, + "seed": 1, + "stop": { + "evalue": "1e-05" + } + }, + "alphabet": { + "name": "RNA", + "like": "rna", + "ncore": 4, + "symbols": [ + { + "symbol": "A", + "name": "Adenine", + "colour": "CC0000" + }, { + "symbol": "C", + "name": "Cytosine", + "colour": "0000CC" + }, { + "symbol": "G", + "name": "Guanine", + "colour": "FFB300" + }, { + "symbol": "U", + "aliases": "T", + "name": "Uracil", + "colour": "008000" + }, { + "symbol": "N", + "aliases": "X.", + "name": "Any base", + "equals": "ACGU" + }, { + "symbol": "V", + "name": "Not U", + "equals": "ACG" + }, { + "symbol": "H", + "name": "Not G", + "equals": "ACU" + }, { + "symbol": "D", + "name": "Not C", + "equals": "AGU" + }, { + "symbol": "B", + "name": "Not A", + "equals": "CGU" + }, { + "symbol": "M", + "name": "Amino", + "equals": "AC" + }, { + "symbol": "R", + "name": "Purine", + "equals": "AG" + }, { + "symbol": "W", + "name": "Weak", + "equals": "AU" + }, { + "symbol": "S", + "name": "Strong", + "equals": "CG" + }, { + "symbol": "Y", + "name": "Pyrimidine", + "equals": "CU" + }, { + "symbol": "K", + "name": "Keto", + "equals": "GU" + } + ] + }, + "background": { + "freqs": [0.221, 0.245, 0.221, 0.312] + }, + "sequence_db": { + "name": "dreme test sites", + "file": "dreme_test_sites.fa", + "lmod": "Thu Apr 26 15:09:03 CEST 2018", + "count": 1000 + }, + "control_db": { + "name": "shuffled positive sequences", + "from": "shuffled", + "count": 1000, + "freqs": [0.221, 0.245, 0.221, 0.312] + }, + "motifs": [ + { + "db": 0, + "id": "UUYUCY", + "alt": "DREME-1", + "len": 6, + "nsites": 459, + "evalue": "3.3e-013", + "p": 387, + "n": 210, + "pvalue": "2.6e-018", + "unerased_evalue": "3.3e-013", + "pwm": [ + [0.000000, 0.000000, 0.000000, 1.000000], + [0.000000, 0.000000, 0.000000, 1.000000], + [0.000000, 0.294118, 0.000000, 0.705882], + [0.000000, 0.000000, 0.000000, 1.000000], + [0.000000, 1.000000, 0.000000, 0.000000], + [0.000000, 0.474946, 0.000000, 0.525054] + ], + "matches": [ + { + "seq": "UUUUCC", + "p": 147, + "n": 75, + "pvalue": "1.8e-007", + "evalue": "2.2e-002" + }, { + "seq": "UUUUCU", + "p": 155, + "n": 94, + "pvalue": "2.2e-005", + "evalue": "2.8e+000" + }, { + "seq": "UUCUCU", + "p": 94, + "n": 51, + "pvalue": "1.3e-004", + "evalue": "1.7e+001" + }, { + "seq": "UUCUCC", + "p": 75, + "n": 42, + "pvalue": "1.1e-003", + "evalue": "1.4e+002" + } + ] + }, { + "db": 0, + "id": "YAGG", + "alt": "DREME-2", + "len": 4, + "nsites": 793, + "evalue": "1.4e-011", + "p": 600, + "n": 416, + "pvalue": "1.1e-016", + "unerased_evalue": "6.3e-012", + "pwm": [ + [0.000000, 0.692308, 0.000000, 0.307692], + [1.000000, 0.000000, 0.000000, 0.000000], + [0.000000, 0.000000, 1.000000, 0.000000], + [0.000000, 0.000000, 1.000000, 0.000000] + ], + "matches": [ + { + "seq": "CAGG", + "p": 441, + "n": 304, + "pvalue": "1.5e-010", + "evalue": "1.8e-005" + }, { + "seq": "UAGG", + "p": 232, + "n": 165, + "pvalue": "1.1e-004", + "evalue": "1.3e+001" + } + ] + } + ], + "runtime": { + "host": "ThinkPad-T450s", + "when": "Thu May 03 13:22:11 CEST 2018", + "cpu": 15.97, + "real": 15.97, + "stop": "evalue" + } + }; + </script> + <script> +var site_url = "http://meme-suite.org"; +</script> + <script> + +/* + * $ + * + * Shorthand function for getElementById + */ +function $(el) { + return document.getElementById(el); +} + + +/* + * See http://stackoverflow.com/a/5450113/66387 + * Does string multiplication like the perl x operator. + */ +function string_mult(pattern, count) { + if (count < 1) return ''; + var result = ''; + while (count > 1) { + if (count & 1) result += pattern; + count >>= 1, pattern += pattern; + } + return result + pattern; +} + +/* + * See http://stackoverflow.com/questions/814613/how-to-read-get-data-from-a-url-using-javascript + * Slightly modified with information from + * https://developer.mozilla.org/en/DOM/window.location + */ +function parse_params() { + "use strict"; + var search, queryStart, queryEnd, query, params, nvPairs, i, nv, n, v; + search = window.location.search; + queryStart = search.indexOf("?") + 1; + queryEnd = search.indexOf("#") + 1 || search.length + 1; + query = search.slice(queryStart, queryEnd - 1); + + if (query === search || query === "") return {}; + + params = {}; + nvPairs = query.replace(/\+/g, " ").split("&"); + + for (i = 0; i < nvPairs.length; i++) { + nv = nvPairs[i].split("="); + n = decodeURIComponent(nv[0]); + v = decodeURIComponent(nv[1]); + // allow a name to be used multiple times + // storing each value in the array + if (!(n in params)) { + params[n] = []; + } + params[n].push(nv.length === 2 ? v : null); + } + return params; +} + +/* + * coords + * + * Calculates the x and y offset of an element. + * From http://www.quirksmode.org/js/findpos.html + * with alterations to take into account scrolling regions + */ +function coords(elem) { + var myX = myY = 0; + if (elem.getBoundingClientRect) { + var rect; + rect = elem.getBoundingClientRect(); + myX = rect.left + ((typeof window.pageXOffset !== "undefined") ? + window.pageXOffset : document.body.scrollLeft); + myY = rect.top + ((typeof window.pageYOffset !== "undefined") ? + window.pageYOffset : document.body.scrollTop); + } else { + // this fall back doesn't properly handle absolutely positioned elements + // inside a scrollable box + var node; + if (elem.offsetParent) { + // subtract all scrolling + node = elem; + do { + myX -= node.scrollLeft ? node.scrollLeft : 0; + myY -= node.scrollTop ? node.scrollTop : 0; + } while (node = node.parentNode); + // this will include the page scrolling (which is unwanted) so add it back on + myX += (typeof window.pageXOffset !== "undefined") ? window.pageXOffset : document.body.scrollLeft; + myY += (typeof window.pageYOffset !== "undefined") ? window.pageYOffset : document.body.scrollTop; + // sum up offsets + node = elem; + do { + myX += node.offsetLeft; + myY += node.offsetTop; + } while (node = node.offsetParent); + } + } + return [myX, myY]; +} + +/* + * position_popup + * + * Positions a popup relative to an anchor element. + * + * The avaliable positions are: + * 0 - Centered below the anchor. + */ +function position_popup(anchor, popup, position) { + "use strict"; + var a_x, a_y, a_w, a_h, p_x, p_y, p_w, p_h; + var a_xy, spacer, margin, scrollbar, page_w; + // define constants + spacer = 5; + margin = 15; + scrollbar = 15; + // define the positions and widths + a_xy = coords(anchor); + a_x = a_xy[0]; + a_y = a_xy[1]; + a_w = anchor.offsetWidth; + a_h = anchor.offsetHeight; + p_w = popup.offsetWidth; + p_h = popup.offsetHeight; + page_w = null; + if (window.innerWidth) { + page_w = window.innerWidth; + } else if (document.body) { + page_w = document.body.clientWidth; + } + // check the position type is defined + if (typeof position !== "number") { + position = 0; + } + // calculate the popup position + switch (position) { + case 1: + p_x = a_x + a_w + spacer; + p_y = a_y + (a_h / 2) - (p_h / 2); + break; + case 0: + default: + p_x = a_x + (a_w / 2) - (p_w / 2); + p_y = a_y + a_h + spacer; + break; + } + // constrain the popup position + if (p_x < margin) { + p_x = margin; + } else if (page_w != null && (p_x + p_w) > (page_w - margin - scrollbar)) { + p_x = page_w - margin - scrollbar - p_w; + } + if (p_y < margin) { + p_y = margin; + } + // position the popup + popup.style.left = p_x + "px"; + popup.style.top = p_y + "px"; +} + +function lookup_help_popup(popup_id) { + var _body, pop, info; + pop = document.getElementById(popup_id); + if (pop == null) { + _body = document.getElementsByTagName("body")[0]; + pop = document.createElement("div"); + pop.className = "pop_content"; + pop.id = popup_id; + pop.style.backgroundColor = "#FFC"; + pop.style.borderColor = "black"; + info = document.createElement("p"); + info.style.fontWeight = "bold"; + info.appendChild(document.createTextNode("Error: No popup for topic \"" + popup_id + "\".")); + pop.appendChild(info); + // this might cause problems with the menu, but as this only happens + // when something is already wrong I don't think that's too much of a problem + _body.insertBefore(pop, _body.firstChild); + } + if (document.getElementsByTagName('body')[0].hasAttribute("data-autobtns")) { + if (!/\bauto_buttons\b/.test(pop.className)) { + pop.className += " auto_buttons"; + var back_btn_sec = document.createElement("div"); + back_btn_sec.className = "nested_only pop_back_sec"; + var back_btn = document.createElement("span"); + back_btn.className = "pop_back"; + back_btn.appendChild(document.createTextNode("<< back")); + back_btn.addEventListener("click", function(e) { + help_return(); + }, false); + back_btn_sec.appendChild(back_btn); + pop.insertBefore(back_btn_sec, pop.firstChild); + var close_btn_sec = document.createElement("div"); + close_btn_sec.className = "pop_close_sec"; + var close_btn = document.createElement("span"); + close_btn.className = "pop_close"; + close_btn.appendChild(document.createTextNode("close")); + close_btn.addEventListener("click", function(e) { + help_popup(); + }, false); + close_btn_sec.appendChild(close_btn); + pop.appendChild(close_btn_sec); + } + } + return pop; +} + +/* + * help_popup + * + * Moves around help pop-ups so they appear + * below an activator. + */ +function help_popup(activator, popup_id) { + "use strict"; + var pop; + // set default values + if (typeof help_popup.popup === "undefined") { + help_popup.popup = []; + } + if (typeof help_popup.activator === "undefined") { + help_popup.activator = null; + } + var last_pop = (help_popup.popup.length > 0 ? help_popup.popup[help_popup.popup.length - 1] : null); + if (typeof(activator) == "undefined") { // no activator so hide + if (last_pop != null) { + last_pop.style.display = 'none'; + help_popup.popup = []; + } + return; + } + pop = lookup_help_popup(popup_id); + if (pop == last_pop) { + if (activator == help_popup.activator) { + //hide popup (as we've already shown it for the current help button) + last_pop.style.display = 'none'; + help_popup.popup = []; + return; // toggling complete! + } + } else if (last_pop != null) { + //activating different popup so hide current one + last_pop.style.display = 'none'; + } + help_popup.popup = [pop]; + help_popup.activator = activator; + toggle_class(pop, "nested", false); + //must make the popup visible to measure it or it has zero width + pop.style.display = 'block'; + position_popup(activator, pop); +} + +/* + * help_refine + * + * Intended for links within a help popup. Stores a stack of state so + * you can go back. + */ +function help_refine(popup_id) { + if (help_popup.popup == null || help_popup.popup.length == 0 || help_popup.activator == null) { + throw new Error("Can not refine a help popup when one is not shown!"); + } + var pop = lookup_help_popup(popup_id); + var last_pop = help_popup.popup[help_popup.popup.length - 1]; + if (pop == last_pop) return; // slightly odd, but no real cause for alarm + help_popup.popup.push(pop); + toggle_class(pop, "nested", true); + last_pop.style.display = "none"; + //must make the popup visible to measure it or it has zero width + pop.style.display = "block"; + position_popup(help_popup.activator, pop); +} + +/* + * help_return + * + * Intended for links within a help popup. Stores a stack of state so + * you can go back. + */ +function help_return() { + if (help_popup.popup == null || help_popup.popup.length == 0 || help_popup.activator == null) { + throw new Error("Can not return to a earlier help popup when one is not shown!"); + } + var last_pop = help_popup.popup.pop(); + last_pop.style.display = "none"; + var pop = (help_popup.popup.length > 0 ? help_popup.popup[help_popup.popup.length - 1] : null); + if (pop != null) { + toggle_class(pop, "nested", help_popup.popup.length > 1); + pop.style.display = "block"; + position_popup(help_popup.activator, pop); + } else { + help_popup.activator = null; + } +} + +/* + * update_scroll_pad + * + * Creates padding at the bottom of the page to allow + * scrolling of anything into view. + */ +function update_scroll_pad() { + var page, pad; + page = (document.compatMode === "CSS1Compat") ? document.documentElement : document.body; + pad = $("scrollpad"); + if (pad === null) { + pad = document.createElement("div"); + pad.id = 'scrollpad'; + document.getElementsByTagName('body')[0].appendChild(pad); + } + pad.style.height = Math.abs(page.clientHeight - 100) + "px"; +} + +function substitute_classes(node, remove, add) { + "use strict"; + var list, all, i, cls, classes; + list = node.className.split(/\s+/); + all = {}; + for (i = 0; i < list.length; i++) { + if (list[i].length > 0) all[list[i]] = true; + } + for (i = 0; i < remove.length; i++) { + if (all.hasOwnProperty(remove[i])) { + delete all[remove[i]]; + } + } + for (i = 0; i < add.length; i++) { + all[add[i]] = true; + } + classes = ""; + for (cls in all) { + classes += cls + " "; + } + node.className = classes; +} + +/* + * toggle_class + * + * Adds or removes a class from the node. If the parameter 'enabled' is not + * passed then the existence of the class will be toggled, otherwise it will be + * included if enabled is true. + */ +function toggle_class(node, cls, enabled) { + var classes = node.className; + var list = classes.replace(/^\s+/, '').replace(/\s+$/, '').split(/\s+/); + var found = false; + for (var i = 0; i < list.length; i++) { + if (list[i] == cls) { + list.splice(i, 1); + i--; + found = true; + } + } + if (typeof enabled == "undefined") { + if (!found) list.push(cls); + } else { + if (enabled) list.push(cls); + } + node.className = list.join(" "); +} + +/* + * find_child + * + * Searches child nodes in depth first order and returns the first it finds + * with the className specified. + * TODO replace with querySelector + */ +function find_child(node, className) { + var pattern; + if (node == null || typeof node !== "object") { + return null; + } + if (typeof className === "string") { + pattern = new RegExp("\\b" + className + "\\b"); + } else { + pattern = className; + } + if (node.nodeType == Node.ELEMENT_NODE && + pattern.test(node.className)) { + return node; + } else { + var result = null; + for (var i = 0; i < node.childNodes.length; i++) { + result = find_child(node.childNodes[i], pattern); + if (result != null) break; + } + return result; + } +} + +/* + * find_parent + * + * Searches parent nodes outwards from the node and returns the first it finds + * with the className specified. + */ +function find_parent(node, className) { + var pattern; + pattern = new RegExp("\\b" + className + "\\b"); + do { + if (node.nodeType == Node.ELEMENT_NODE && + pattern.test(node.className)) { + return node; + } + } while (node = node.parentNode); + return null; +} + +/* + * find_parent_tag + * + * Searches parent nodes outwards from the node and returns the first it finds + * with the tag name specified. HTML tags should be specified in upper case. + */ +function find_parent_tag(node, tag_name) { + do { + if (node.nodeType == Node.ELEMENT_NODE && node.tagName == tag_name) { + return node; + } + } while (node = node.parentNode); + return null; +} + +/* + * __toggle_help + * + * Uses the 'topic' property of the this object to + * toggle display of a help topic. + * + * This function is not intended to be called directly. + */ +function __toggle_help(e) { + if (!e) e = window.event; + if (e.type === "keydown") { + if (e.keyCode !== 13 && e.keyCode !== 32) { + return; + } + // stop a submit or something like that + e.preventDefault(); + } + + help_popup(this, this.getAttribute("data-topic")); +} + +function setup_help_button(button) { + "use strict"; + var topic; + if (button.hasAttribute("data-topic")) { + topic = button.getAttribute("data-topic"); + if (document.getElementById(topic) != null) { + button.tabIndex = "0"; // make keyboard selectable + button.addEventListener("click", function() { + help_popup(button, topic); + }, false); + button.addEventListener("keydown", function(e) { + // toggle only on Enter or Spacebar, let other keys do their thing + if (e.keyCode !== 13 && e.keyCode !== 32) return; + // stop a submit or something like that + e.preventDefault(); + help_popup(button, topic); + }, false); + } else { + button.style.visibility = "hidden"; + } + } + button.className += " active"; +} + +/* + * help_button + * + * Makes a help button for the passed topic. + */ +function help_button(topic) { + var btn = document.createElement("div"); + btn.className = "help"; + btn.setAttribute("data-topic", topic); + setup_help_button(btn); + return btn; +} + +/* + * prepare_download + * + * Sets the attributes of a link to setup a file download using the given content. + * If no link is provided then create one and click it. + */ +function prepare_download(content, mimetype, filename, link) { + "use strict"; + // if no link is provided then create one and click it + var click_link = false; + if (!link) { + link = document.createElement("a"); + click_link = true; + } + try { + // Use a BLOB to convert the text into a data URL. + // We could do this manually with a base 64 conversion. + // This will only be supported on modern browsers, + // hence the try block. + var blob = new Blob([content], {type: mimetype}); + var reader = new FileReader(); + reader.onloadend = function() { + // If we're lucky the browser will also support the download + // attribute which will let us suggest a file name to save the link. + // Otherwise it is likely that the filename will be unintelligible. + link.setAttribute("download", filename); + link.href = reader.result; + if (click_link) { + // must add the link to click it + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + } + } + reader.readAsDataURL(blob); + } catch (error) { + if (console && console.log) console.log(error); + // probably an old browser + link.href = ""; + link.visible = false; + } +} + +/* + * add_cell + * + * Add a cell to the table row. + */ +function add_cell(row, node, cls, click_action) { + var cell = row.insertCell(row.cells.length); + if (node) cell.appendChild(node); + if (cls && cls !== "") cell.className = cls; + if (click_action) cell.addEventListener("click", click_action, false); +} + +/* + * add_header_cell + * + * Add a header cell to the table row. + */ +function add_header_cell(row, node, help_topic, cls, colspan) { + var th = document.createElement("th"); + if (node) th.appendChild(node); + if (help_topic && help_topic !== "") th.appendChild(help_button(help_topic)); + if (cls && cls !== "") th.className = cls; + if (typeof colspan == "number" && colspan > 1) th.colSpan = colspan; + row.appendChild(th); +} + +/* + * add_text_cell + * + * Add a text cell to the table row. + */ +function add_text_cell(row, text, cls, action) { + var node = null; + if (typeof(text) != 'undefined') node = document.createTextNode(text); + add_cell(row, node, cls, action); +} + +/* + * add_text_header_cell + * + * Add a text header cell to the table row. + */ +function add_text_header_cell(row, text, help_topic, cls, action, colspan) { + var node = null; + if (typeof(text) != 'undefined') { + var nbsp = (help_topic ? "\u00A0" : ""); + var str = "" + text; + var parts = str.split(/\n/); + if (parts.length === 1) { + if (action) { + node = document.createElement("span"); + node.appendChild(document.createTextNode(str + nbsp)); + } else { + node = document.createTextNode(str + nbsp); + } + } else { + node = document.createElement("span"); + for (var i = 0; i < parts.length; i++) { + if (i !== 0) { + node.appendChild(document.createElement("br")); + } + node.appendChild(document.createTextNode(parts[i])); + } + } + if (action) { + node.addEventListener("click", action, false); + node.style.cursor = "pointer"; + } + } + add_header_cell(row, node, help_topic, cls, colspan); +} + +function setup_help() { + "use strict"; + var help_buttons, i; + help_buttons = document.querySelectorAll(".help:not(.active)"); + for (i = 0; i < help_buttons.length; i++) { + setup_help_button(help_buttons[i]); + } +} + +function setup_scrollpad() { + "use strict"; + if (document.getElementsByTagName('body')[0].hasAttribute("data-scrollpad") && document.getElementById("scrollpad") == null) { + window.addEventListener("resize", update_scroll_pad, false); + update_scroll_pad(); + } +} + +// anon function to avoid polluting global scope +(function() { + "use strict"; + window.addEventListener("load", function load(evt) { + window.removeEventListener("load", load, false); + setup_help(); + setup_scrollpad(); + }, false); +})(); + +/* + * make_link + * + * Creates a text node and if a URL is specified it surrounds it with a link. + * If the URL doesn't begin with "http://" it automatically adds it, as + * relative links don't make much sense in this context. + */ +function make_link(text, url) { + var textNode = null; + var link = null; + if (typeof text !== "undefined" && text !== null) textNode = document.createTextNode(text); + if (typeof url === "string") { + if (url.indexOf("//") == -1) { + url = "http://" + url; + } + link = document.createElement('a'); + link.href = url; + if (textNode) link.appendChild(textNode); + return link; + } + return textNode; +} +</script> + <script> +function motif_logo_template(inputs) { + function _input(name) { + if (typeof inputs[name] === "undefined") { + throw new Error("Missing template variable: " + name); + } + return inputs[name]; + } + return ( +"%!PS-Adobe-3.0 EPSF-3.0\n" + +"%%Title: Sequence Logo : " + _input("TITLE") + "\n" + +"%%Creator: " + _input("CREATOR") + "\n" + +"%%CreationDate: " + _input("CREATIONDATE") + "\n" + +"%%BoundingBox: 0 0 " + _input("BOUNDINGWIDTH") + " " + _input("BOUNDINGHEIGHT") + " \n" + +"%%Pages: 0\n" + +"%%DocumentFonts: \n" + +"%%EndComments\n" + +"\n" + +"% ---- CONSTANTS ----\n" + +"\/cmfactor 72 2.54 div def % defines points -> cm conversion\n" + +"\/cm {cmfactor mul} bind def % defines centimeters\n" + +"\n" + +"% ---- VARIABLES ----\n" + +"\n" + +"% NA = Nucleic Acid, AA = Amino Acid\n" + +"\/logoType (" + _input("LOGOTYPE") + ") def \n" + +"\n" + +"\/logoTitle (" + _input("TITLE") + ") def\n" + +"\n" + +"% Dimensions in cm\n" + +"\/logoWidth " + _input("LOGOWIDTH") + " cm def\n" + +"\/logoHeight " + _input("LOGOLINEHEIGHT") + " cm def\n" + +"\/totalHeight " + _input("LOGOHEIGHT") + " cm def\n" + +"\n" + +"\/yaxis " + _input("YAXIS") + " def\n" + +"\/yaxisLabel (" + _input("YAXISLABEL") + ") def\n" + +"\/yaxisBits " + _input("BARBITS") + " def % bits\n" + +"\/yaxisTicBits " + _input("TICBITS") + " def\n" + +"\n" + +"\/xaxis " + _input("NUMBERING") + " def\n" + +"\/xaxisLabel (" + _input("XAXISLABEL") + ") def\n" + +"\/showEnds (" + _input("SHOWENDS") + ") def \n" + +"\n" + +"\/showFineprint true def\n" + +"\/fineprint (" + _input("FINEPRINT") + ") def\n" + +"\n" + +"\/charsPerLine " + _input("CHARSPERLINE") + " def\n" + +"\n" + +"\/showingBox " + _input("SHOWINGBOX") + " def \n" + +"\/shrinking false def % true falses\n" + +"\/shrink 1.0 def\n" + +"\/outline " + _input("OUTLINE") + " def\n" + +"\n" + +"\/IbeamFraction " + _input("ERRORBARFRACTION") + " def\n" + +"\/IbeamGray 0.50 def\n" + +"\/IbeamLineWidth 0.5 def\n" + +"\n" + +"\/fontsize " + _input("FONTSIZE") + " def\n" + +"\/titleFontsize " + _input("TITLEFONTSIZE") + " def\n" + +"\/smallFontsize " + _input("SMALLFONTSIZE") + " def\n" + +"\n" + +"\/topMargin " + _input("TOPMARGIN") + " cm def\n" + +"\/bottomMargin " + _input("BOTTOMMARGIN") + " cm def\n" + +"\n" + +"\/defaultColor [0 0 0] def \n" + +"\n" + +_input("COLORDICT") + "\n" + +"\n" + +"\/colorDict fullColourDict def\n" + +"\n" + +"% ---- DERIVED PARAMETERS ----\n" + +"\n" + +"\/leftMargin\n" + +" fontsize 3.5 mul\n" + +"\n" + +"def \n" + +"\n" + +"\/rightMargin \n" + +" %Add extra room if showing ends\n" + +" showEnds (false) eq { fontsize}{fontsize 1.5 mul} ifelse\n" + +"def\n" + +"\n" + +"\/yaxisHeight \n" + +" logoHeight \n" + +" bottomMargin sub \n" + +" topMargin sub\n" + +"def\n" + +"\n" + +"\/ticWidth fontsize 2 div def\n" + +"\n" + +"\/pointsPerBit yaxisHeight yaxisBits div def\n" + +"\n" + +"\/stackMargin 1 def\n" + +"\n" + +"% Do not add space aroung characters if characters are boxed\n" + +"\/charRightMargin \n" + +" showingBox { 0.0 } {stackMargin} ifelse\n" + +"def\n" + +"\n" + +"\/charTopMargin \n" + +" showingBox { 0.0 } {stackMargin} ifelse\n" + +"def\n" + +"\n" + +"\/charWidth\n" + +" logoWidth\n" + +" leftMargin sub\n" + +" rightMargin sub\n" + +" charsPerLine div\n" + +" charRightMargin sub\n" + +"def\n" + +"\n" + +"\/charWidth4 charWidth 4 div def\n" + +"\/charWidth2 charWidth 2 div def\n" + +"\n" + +"\/stackWidth \n" + +" charWidth charRightMargin add\n" + +"def\n" + +" \n" + +"\/numberFontsize \n" + +" fontsize charWidth lt {fontsize}{charWidth} ifelse\n" + +"def\n" + +"\n" + +"% movements to place 5'\/N and 3'\/C symbols\n" + +"\/leftEndDeltaX fontsize neg def\n" + +"\/leftEndDeltaY fontsize 1.5 mul neg def\n" + +"\/rightEndDeltaX fontsize 0.25 mul def\n" + +"\/rightEndDeltaY leftEndDeltaY def\n" + +"\n" + +"% Outline width is proporional to charWidth, \n" + +"% but no less that 1 point\n" + +"\/outlinewidth \n" + +" charWidth 32 div dup 1 gt {}{pop 1} ifelse\n" + +"def\n" + +"\n" + +"\n" + +"% ---- PROCEDURES ----\n" + +"\n" + +"\/StartLogo { \n" + +" % Save state\n" + +" save \n" + +" gsave \n" + +"\n" + +" % Print Logo Title, top center \n" + +" gsave \n" + +" SetStringFont\n" + +"\n" + +" logoWidth 2 div\n" + +" logoTitle\n" + +" stringwidth pop 2 div sub\n" + +" totalHeight\n" + +" titleFontsize sub\n" + +" moveto\n" + +"\n" + +" logoTitle\n" + +" show\n" + +" grestore\n" + +"\n" + +" % Print X-axis label, bottom center\n" + +" gsave\n" + +" SetStringFont\n" + +"\n" + +" logoWidth 2 div\n" + +" xaxisLabel\n" + +" stringwidth pop 2 div sub\n" + +" 0\n" + +" titleFontsize 3 div\n" + +" add\n" + +" moveto\n" + +"\n" + +" xaxisLabel\n" + +" show\n" + +" grestore\n" + +"\n" + +" % Show Fine Print\n" + +" showFineprint {\n" + +" gsave\n" + +" SetSmallFont\n" + +" logoWidth\n" + +" fineprint stringwidth pop sub\n" + +" smallFontsize sub\n" + +" smallFontsize 3 div\n" + +" moveto\n" + +" \n" + +" fineprint show\n" + +" grestore\n" + +" } if\n" + +"\n" + +" % Move to lower left corner of last line, first stack\n" + +" leftMargin bottomMargin translate\n" + +"\n" + +" % Move above first line ready for StartLine \n" + +" 0 totalHeight translate\n" + +"\n" + +" SetLogoFont\n" + +"} bind def\n" + +"\n" + +"\/EndLogo { \n" + +" grestore \n" + +" showpage \n" + +" restore \n" + +"} bind def\n" + +"\n" + +"\n" + +"\/StartLine { \n" + +" % move down to the bottom of the line:\n" + +" 0 logoHeight neg translate\n" + +" \n" + +" gsave \n" + +" yaxis { MakeYaxis } if\n" + +" xaxis { showEnds (true) eq {ShowLeftEnd} if } if\n" + +"} bind def\n" + +"\n" + +"\/EndLine{ \n" + +" xaxis { showEnds (true) eq {ShowRightEnd} if } if\n" + +" grestore \n" + +"} bind def\n" + +"\n" + +"\n" + +"\/MakeYaxis {\n" + +" gsave \n" + +" stackMargin neg 0 translate\n" + +" ShowYaxisBar\n" + +" ShowYaxisLabel\n" + +" grestore\n" + +"} bind def\n" + +"\n" + +"\n" + +"\/ShowYaxisBar { \n" + +" gsave \n" + +" SetStringFont\n" + +"\n" + +" \/str 10 string def % string to hold number \n" + +" \/smallgap stackMargin 2 div def\n" + +"\n" + +" % Draw first tic and bar\n" + +" gsave \n" + +" ticWidth neg 0 moveto \n" + +" ticWidth 0 rlineto \n" + +" 0 yaxisHeight rlineto\n" + +" stroke\n" + +" grestore\n" + +"\n" + +" \n" + +" % Draw the tics\n" + +" % initial increment limit proc for\n" + +" 0 yaxisTicBits yaxisBits abs %cvi\n" + +" {\/loopnumber exch def\n" + +"\n" + +" % convert the number coming from the loop to a string\n" + +" % and find its width\n" + +" loopnumber 10 str cvrs\n" + +" \/stringnumber exch def % string representing the number\n" + +"\n" + +" stringnumber stringwidth pop\n" + +" \/numberwidth exch def % width of number to show\n" + +"\n" + +" \/halfnumberheight\n" + +" stringnumber CharBoxHeight 2 div\n" + +" def\n" + +"\n" + +" numberwidth % move back width of number\n" + +" neg loopnumber pointsPerBit mul % shift on y axis\n" + +" halfnumberheight sub % down half the digit\n" + +"\n" + +" moveto % move back the width of the string\n" + +"\n" + +" ticWidth neg smallgap sub % Move back a bit more \n" + +" 0 rmoveto % move back the width of the tic \n" + +"\n" + +" stringnumber show\n" + +" smallgap 0 rmoveto % Make a small gap \n" + +"\n" + +" % now show the tic mark\n" + +" 0 halfnumberheight rmoveto % shift up again\n" + +" ticWidth 0 rlineto\n" + +" stroke\n" + +" } for\n" + +" grestore\n" + +"} bind def\n" + +"\n" + +"\/ShowYaxisLabel {\n" + +" gsave\n" + +" SetStringFont\n" + +"\n" + +" % How far we move left depends on the size of\n" + +" % the tic labels.\n" + +" \/str 10 string def % string to hold number \n" + +" yaxisBits yaxisTicBits div cvi yaxisTicBits mul \n" + +" str cvs stringwidth pop\n" + +" ticWidth 1.5 mul add neg \n" + +"\n" + +"\n" + +" yaxisHeight\n" + +" yaxisLabel stringwidth pop\n" + +" sub 2 div\n" + +"\n" + +" translate\n" + +" 90 rotate\n" + +" 0 0 moveto\n" + +" yaxisLabel show\n" + +" grestore\n" + +"} bind def\n" + +"\n" + +"\n" + +"\/StartStack { % <stackNumber> startstack\n" + +" xaxis {MakeNumber}{pop} ifelse\n" + +" gsave\n" + +"} bind def\n" + +"\n" + +"\/EndStack {\n" + +" grestore\n" + +" stackWidth 0 translate\n" + +"} bind def\n" + +"\n" + +"\n" + +"% Draw a character whose height is proportional to symbol bits\n" + +"\/MakeSymbol{ % charbits character MakeSymbol\n" + +" gsave\n" + +" \/char exch def\n" + +" \/bits exch def\n" + +"\n" + +" \/bitsHeight \n" + +" bits pointsPerBit mul \n" + +" def\n" + +"\n" + +" \/charHeight \n" + +" bitsHeight charTopMargin sub\n" + +" dup \n" + +" 0.0 gt {}{pop 0.0} ifelse % if neg replace with zero \n" + +" def \n" + +" \n" + +" charHeight 0.0 gt {\n" + +" char SetColor\n" + +" charWidth charHeight char ShowChar\n" + +"\n" + +" showingBox { % Unfilled box\n" + +" 0 0 charWidth charHeight false ShowBox\n" + +" } if\n" + +"\n" + +"\n" + +" } if\n" + +"\n" + +" grestore\n" + +"\n" + +" 0 bitsHeight translate \n" + +"} bind def\n" + +"\n" + +"\n" + +"\/ShowChar { % <width> <height> <char> ShowChar\n" + +" gsave\n" + +" \/tc exch def % The character\n" + +" \/ysize exch def % the y size of the character\n" + +" \/xsize exch def % the x size of the character\n" + +"\n" + +" \/xmulfactor 1 def \n" + +" \/ymulfactor 1 def\n" + +" \/limmulfactor 0.01 def\n" + +" \/drawable true def\n" + +"\n" + +" \n" + +" % if ysize is negative, make everything upside down!\n" + +" ysize 0 lt {\n" + +" % put ysize normal in this orientation\n" + +" \/ysize ysize abs def\n" + +" xsize ysize translate\n" + +" 180 rotate\n" + +" } if\n" + +"\n" + +" shrinking {\n" + +" xsize 1 shrink sub 2 div mul\n" + +" ysize 1 shrink sub 2 div mul translate \n" + +"\n" + +" shrink shrink scale\n" + +" } if\n" + +"\n" + +" % Calculate the font scaling factors\n" + +" % Loop twice to catch small correction due to first scaling\n" + +" 2 {\n" + +" gsave\n" + +" xmulfactor ymulfactor scale\n" + +" \n" + +" ysize % desired size of character in points\n" + +" tc CharBoxHeight \n" + +" dup 0.0 ne {\n" + +" div % factor by which to scale up the character\n" + +" \/ymulfactor exch def\n" + +" } % end if\n" + +" {pop pop}\n" + +" ifelse\n" + +"\n" + +" xsize % desired size of character in points\n" + +" tc CharBoxWidth \n" + +" dup 0.0 ne {\n" + +" div % factor by which to scale up the character\n" + +" \/xmulfactor exch def\n" + +" } % end if\n" + +" {pop pop}\n" + +" ifelse\n" + +" grestore\n" + +" % if the multiplication factors get too small we need to avoid a crash\n" + +" xmulfactor limmulfactor lt {\n" + +" \/xmulfactor 1 def\n" + +" \/drawable false def\n" + +" } if\n" + +" ymulfactor limmulfactor lt {\n" + +" \/ymulfactor 1 def\n" + +" \/drawable false def\n" + +" } if\n" + +" } repeat\n" + +"\n" + +" % Adjust horizontal position if the symbol is an I\n" + +" tc (I) eq {\n" + +" charWidth 2 div % half of requested character width\n" + +" tc CharBoxWidth 2 div % half of the actual character\n" + +" sub 0 translate\n" + +" % Avoid x scaling for I \n" + +" \/xmulfactor 1 def \n" + +" } if\n" + +"\n" + +"\n" + +" % ---- Finally, draw the character\n" + +" drawable { \n" + +" newpath\n" + +" xmulfactor ymulfactor scale\n" + +"\n" + +" % Move lower left corner of character to start point\n" + +" tc CharBox pop pop % llx lly : Lower left corner\n" + +" exch neg exch neg\n" + +" moveto\n" + +"\n" + +" outline { % outline characters:\n" + +" outlinewidth setlinewidth\n" + +" tc true charpath\n" + +" gsave 1 setgray fill grestore\n" + +" clip stroke\n" + +" } { % regular characters\n" + +" tc show\n" + +" } ifelse\n" + +" } if\n" + +"\n" + +" grestore\n" + +"} bind def\n" + +"\n" + +"\n" + +"\/ShowBox { % x1 y1 x2 y2 filled ShowBox\n" + +" gsave\n" + +" \/filled exch def \n" + +" \/y2 exch def\n" + +" \/x2 exch def\n" + +" \/y1 exch def\n" + +" \/x1 exch def\n" + +" newpath\n" + +" x1 y1 moveto\n" + +" x2 y1 lineto\n" + +" x2 y2 lineto\n" + +" x1 y2 lineto\n" + +" closepath\n" + +"\n" + +" clip\n" + +" \n" + +" filled {\n" + +" fill\n" + +" }{ \n" + +" 0 setgray stroke \n" + +" } ifelse\n" + +"\n" + +" grestore\n" + +"} bind def\n" + +"\n" + +"\n" + +"\/MakeNumber { % number MakeNumber\n" + +" gsave\n" + +" SetNumberFont\n" + +" stackWidth 0 translate\n" + +" 90 rotate % rotate so the number fits\n" + +" dup stringwidth pop % find the length of the number\n" + +" neg % prepare for move\n" + +" stackMargin sub % Move back a bit\n" + +" charWidth (0) CharBoxHeight % height of numbers\n" + +" sub 2 div %\n" + +" moveto % move back to provide space\n" + +" show\n" + +" grestore\n" + +"} bind def\n" + +"\n" + +"\n" + +"\/Ibeam{ % heightInBits Ibeam\n" + +" gsave\n" + +" % Make an Ibeam of twice the given height in bits\n" + +" \/height exch pointsPerBit mul def \n" + +" \/heightDRAW height IbeamFraction mul def\n" + +"\n" + +" IbeamLineWidth setlinewidth\n" + +" IbeamGray setgray \n" + +"\n" + +" charWidth2 height neg translate\n" + +" ShowIbar\n" + +" newpath\n" + +" 0 0 moveto\n" + +" 0 heightDRAW rlineto\n" + +" stroke\n" + +" newpath\n" + +" 0 height moveto\n" + +" 0 height rmoveto\n" + +" currentpoint translate\n" + +" ShowIbar\n" + +" newpath\n" + +" 0 0 moveto\n" + +" 0 heightDRAW neg rlineto\n" + +" currentpoint translate\n" + +" stroke\n" + +" grestore\n" + +"} bind def\n" + +"\n" + +"\n" + +"\/ShowIbar { % make a horizontal bar\n" + +" gsave\n" + +" newpath\n" + +" charWidth4 neg 0 moveto\n" + +" charWidth4 0 lineto\n" + +" stroke\n" + +" grestore\n" + +"} bind def\n" + +"\n" + +"\n" + +"\/ShowLeftEnd {\n" + +" gsave\n" + +" SetStringFont\n" + +" leftEndDeltaX leftEndDeltaY moveto\n" + +" logoType (NA) eq {(5) show ShowPrime} if\n" + +" logoType (AA) eq {(N) show} if\n" + +" grestore\n" + +"} bind def\n" + +"\n" + +"\n" + +"\/ShowRightEnd { \n" + +" gsave\n" + +" SetStringFont\n" + +" rightEndDeltaX rightEndDeltaY moveto\n" + +" logoType (NA) eq {(3) show ShowPrime} if\n" + +" logoType (AA) eq {(C) show} if\n" + +" grestore\n" + +"} bind def\n" + +"\n" + +"\n" + +"\/ShowPrime {\n" + +" gsave\n" + +" SetPrimeFont\n" + +" (\\242) show \n" + +" grestore\n" + +"} bind def\n" + +"\n" + +" \n" + +"\/SetColor{ % <char> SetColor\n" + +" dup colorDict exch known {\n" + +" colorDict exch get aload pop setrgbcolor\n" + +" } {\n" + +" pop\n" + +" defaultColor aload pop setrgbcolor\n" + +" } ifelse \n" + +"} bind def\n" + +"\n" + +"% define fonts\n" + +"\/SetTitleFont {\/Times-Bold findfont titleFontsize scalefont setfont} bind def\n" + +"\/SetLogoFont {\/Helvetica-Bold findfont charWidth scalefont setfont} bind def\n" + +"\/SetStringFont{\/Helvetica-Bold findfont fontsize scalefont setfont} bind def\n" + +"\/SetPrimeFont {\/Symbol findfont fontsize scalefont setfont} bind def\n" + +"\/SetSmallFont {\/Helvetica findfont smallFontsize scalefont setfont} bind def\n" + +"\n" + +"\/SetNumberFont {\n" + +" \/Helvetica-Bold findfont \n" + +" numberFontsize\n" + +" scalefont\n" + +" setfont\n" + +"} bind def\n" + +"\n" + +"%Take a single character and return the bounding box\n" + +"\/CharBox { % <char> CharBox <lx> <ly> <ux> <uy>\n" + +" gsave\n" + +" newpath\n" + +" 0 0 moveto\n" + +" % take the character off the stack and use it here:\n" + +" true charpath \n" + +" flattenpath \n" + +" pathbbox % compute bounding box of 1 pt. char => lx ly ux uy\n" + +" % the path is here, but toss it away ...\n" + +" grestore\n" + +"} bind def\n" + +"\n" + +"\n" + +"% The height of a characters bounding box\n" + +"\/CharBoxHeight { % <char> CharBoxHeight <num>\n" + +" CharBox\n" + +" exch pop sub neg exch pop\n" + +"} bind def\n" + +"\n" + +"\n" + +"% The width of a characters bounding box\n" + +"\/CharBoxWidth { % <char> CharBoxHeight <num>\n" + +" CharBox\n" + +" pop exch pop sub neg \n" + +"} bind def\n" + +"\n" + +"% Set the colour scheme to be faded to indicate trimming\n" + +"\/MuteColour {\n" + +" \/colorDict mutedColourDict def\n" + +"} def\n" + +"\n" + +"% Restore the colour scheme to the normal colours\n" + +"\/RestoreColour {\n" + +" \/colorDict fullColourDict def\n" + +"} def\n" + +"\n" + +"% Draw the background for a trimmed section\n" + +"% takes the number of columns as a parameter\n" + +"\/DrawTrimBg { % <num> DrawTrimBox\n" + +" \/col exch def\n" + +" \n" + +" \/boxwidth \n" + +" col stackWidth mul \n" + +" def\n" + +" \n" + +" gsave\n" + +" 0.97 setgray\n" + +"\n" + +" newpath\n" + +" 0 0 moveto\n" + +" boxwidth 0 rlineto\n" + +" 0 yaxisHeight rlineto\n" + +" 0 yaxisHeight lineto\n" + +" closepath\n" + +" \n" + +" fill\n" + +" grestore\n" + +"} def\n" + +"\n" + +"\/DrawTrimEdge {\n" + +" gsave\n" + +" 0.2 setgray\n" + +" [2] 0 setdash\n" + +"\n" + +" newpath\n" + +" 0 0 moveto\n" + +" 0 yaxisHeight lineto\n" + +" \n" + +" stroke\n" + +"\n" + +"} def\n" + +"\n" + +"\n" + +"% Deprecated names\n" + +"\/startstack {StartStack} bind def\n" + +"\/endstack {EndStack} bind def\n" + +"\/makenumber {MakeNumber} bind def\n" + +"\/numchar { MakeSymbol } bind def\n" + +"\n" + +"%%EndProlog\n" + +"\n" + +"%%Page: 1 1\n" + +"StartLogo\n" + +"\n" + +_input("DATA") + "\n" + +"\n" + +"EndLogo\n" + +"\n" + +"%%EOF\n" + ); +}</script> + <script> +//====================================================================== +// start Alphabet object +//====================================================================== +var Alphabet = function(alphabet, background) { + "use strict"; + var i, j, sym, aliases, complement, comp_e_sym, ambigs, generate_background; + generate_background = (background == null); + if (generate_background) { + background = []; + for (i = 0; i < alphabet.ncore; i++) background[i] = 1.0 / alphabet.ncore; + } else if (alphabet.ncore != background.length) { + throw new Error("The background length does not match the alphabet length."); + } + this.name = alphabet.name; + this.like = (alphabet.like != null ? alphabet.like.toUpperCase() : null); + this.ncore = alphabet.ncore; + this.symbols = alphabet.symbols; + this.background = background; + this.genbg = generate_background; + this.encode = {}; + this.encode2core = {}; + this.complement = {}; + // check if all symbols are same case + var seen_uc = false; + var seen_lc = false; + var check_case = function (syms) { + var s, sym; + if (typeof syms === "string") { + for (s = 0; s < syms.length; s++) { + sym = syms.charAt(s); + if (sym >= 'a' && sym <= 'z') seen_lc = true; + else if (sym >= 'A' && sym <= 'Z') seen_uc = true; + } + } + }; + for (i = 0; i < this.symbols.length; i++) { + check_case(this.symbols[i].symbol); + check_case(this.symbols[i].aliases); + } + // now map symbols to indexes + var update_array = function(array, syms, index) { + var s, sym; + if (typeof syms === "string") { + for (s = 0; s < syms.length; s++) { + sym = syms.charAt(s); + array[sym] = index; + // when only a single case is used, then encode as case insensitive + if (seen_uc != seen_lc) { + if (sym >= 'a' && sym <= 'z') { + array[sym.toUpperCase()] = index; + } else if (sym >= 'A' && sym <= 'Z') { + array[sym.toLowerCase()] = index; + } + } + } + } + } + // map core symbols to index + for (i = 0; i < this.ncore; i++) { + update_array(this.encode2core, this.symbols[i].symbol, i); + update_array(this.encode, this.symbols[i].symbol, i); + update_array(this.encode2core, this.symbols[i].aliases, i); + update_array(this.encode, this.symbols[i].aliases, i); + } + // map ambigous symbols to index + ambigs = {}; + for (i = this.ncore; i < this.symbols.length; i++) { + update_array(this.encode, this.symbols[i].symbol, i); + update_array(this.encode, this.symbols[i].aliases, i); + ambigs[this.symbols[i].equals] = i; + } + // determine complements + for (i = 0; i < this.ncore; i++) { + complement = this.symbols[i].complement; + if (typeof complement === "string") { + this.complement[i] = this.encode2core[complement]; + } + } + next_symbol: + for (i = this.ncore; i < this.symbols.length; i++) { + complement = ""; + for (j = 0; j < this.symbols[i].equals.length; j++) { + comp_e_sym = this.complement[this.encode2core[this.symbols[i].equals.charAt(j)]]; + if (typeof comp_e_sym !== "number") continue next_symbol; + complement += this.symbols[comp_e_sym].symbol; + } + complement = complement.split("").sort().join(""); + if (typeof ambigs[complement] === "number") { + this.complement[i] = ambigs[complement]; + } + } + // determine case insensitivity + this.case_insensitive = true; + if (seen_uc == seen_lc) { + // when there is a mixture of cases it probably won't + // be case insensitive but we still need to check + loop: + for (i = 0; i < this.symbols.length; i++) { + sym = this.symbols[i].symbol; + if (sym >= 'A' && sym <= 'Z') { + if (this.encode[sym.toLowerCase()] != i) { + this.case_insensitive = false; + break loop; + } + } else if (sym >= 'a' && sym <= 'z') { + if (this.encode[sym.toUpperCase()] != i) { + this.case_insensitive = false; + break loop; + } + } + aliases = this.symbols[i].aliases; + if (aliases != null) { + for (j = 0; j < aliases.length; j++) { + sym = aliases.charAt(j); + if (sym >= 'A' && sym <= 'Z') { + if (this.encode[sym.toLowerCase()] != i) { + this.case_insensitive = false; + break loop; + } + } else if (sym >= 'a' && sym <= 'z') { + if (this.encode[sym.toUpperCase()] != i) { + this.case_insensitive = false; + break loop; + } + } + } + } + } + } + // normalise aliases to remove the prime symbol and eliminate + // the alternate cases when the alphabet is case insensitive + var seen, out; + for (i = 0; i < this.symbols.length; i++) { + sym = this.symbols[i].symbol; + aliases = this.symbols[i].aliases; + if (typeof aliases != "string") aliases = ""; + seen = {}; + out = []; + if (this.case_insensitive) { + sym = sym.toUpperCase(); + aliases = aliases.toUpperCase(); + } + seen[sym] = true; + for (j = 0; j < aliases.length; j++) { + if (!seen[aliases.charAt(j)]) { + seen[aliases.charAt(j)] = true; + out.push(aliases.charAt(j)); + } + } + this.symbols[i].aliases = out.sort().join(""); + } +}; +// return the name of the alphabet +Alphabet.prototype.get_alphabet_name = function() { + return this.name; +}; +// return if the alphabet can be complemented +Alphabet.prototype.has_complement = function() { + return (typeof this.symbols[0].complement === "string"); +}; +// return true if an uppercase letter has the same meaning as the lowercase form +Alphabet.prototype.is_case_insensitive = function() { + return this.case_insensitive; +}; +// return the information content of an alphabet letter +Alphabet.prototype.get_ic = function() { + return Math.log(this.ncore) / Math.LN2; +}; +// return the count of the core alphabet symbols +Alphabet.prototype.get_size_core = function() { + return this.ncore; +}; +// return the count of all alphabet symbols +Alphabet.prototype.get_size_full = function() { + return this.symbols.length; +}; +// return the symbol for the given alphabet index +Alphabet.prototype.get_symbol = function(alph_index) { + "use strict"; + if (alph_index < 0 || alph_index >= this.symbols.length) { + throw new Error("Alphabet index out of bounds"); + } + return this.symbols[alph_index].symbol; +}; +// return the aliases for the given alphabet index +Alphabet.prototype.get_aliases = function(alph_index) { + "use strict"; + if (alph_index < 0 || alph_index >= this.symbols.length) { + throw new Error("Alphabet index out of bounds"); + } + var sym_obj = this.symbols[alph_index]; + return (sym_obj.aliases != null ? sym_obj.aliases : ""); +}; +// return the name for the given alphabet index +Alphabet.prototype.get_name = function(alph_index) { + "use strict"; + var sym; + if (alph_index < 0 || alph_index >= this.symbols.length) { + throw new Error("Alphabet index out of bounds"); + } + sym = this.symbols[alph_index]; + return (typeof sym.name === "string" ? sym.name : sym.symbol); +}; +// return the alphabet it is like or null +Alphabet.prototype.get_like = function() { + "use strict"; + return this.like; +}; +// return the index of the complement for the given alphabet index +Alphabet.prototype.get_complement = function(alph_index) { + var comp_e_sym = this.complement[alph_index]; + if (typeof comp_e_sym === "number") { + return comp_e_sym; + } else { + return -1; + } +}; +// return a string containing the core symbols +Alphabet.prototype.get_symbols = function() { + "use strict"; + var i, core_symbols; + core_symbols = ""; + for (i = 0; i < this.ncore; i++) { + core_symbols += this.symbols[i].symbol; + } + return core_symbols; +}; +// return if the background was not a uniform generated background +Alphabet.prototype.has_bg = function() { + "use strict"; + return !this.genbg; +}; +// get the background frequency for the index +Alphabet.prototype.get_bg_freq = function(alph_index) { + "use strict"; + var freq, i, symbols; + if (alph_index >= 0) { + if (alph_index < this.ncore) { + return this.background[alph_index]; + } else if (alph_index < this.symbols.length) { + freq = 0; + symbols = this.symbols[alph_index].equals; + for (i = 0; i < symbols.length; i++) { + freq += this.background[this.encode2core[symbols.charAt(i)]]; + } + return freq; + } + } + throw new Error("The alphabet index is out of range."); +}; +// get the colour of the index +Alphabet.prototype.get_colour = function(alph_index) { + "use strict"; + if (alph_index < 0 || alph_index >= this.symbols.length) { + throw new Error("BAD_ALPHABET_INDEX"); + } + if (typeof this.symbols[alph_index].colour != "string") { + return "black"; + } + return "#" + this.symbols[alph_index].colour; +}; +// get the rgb componets of the colour at the index +Alphabet.prototype.get_rgb = function(alph_index) { + "use strict"; + if (alph_index < 0 || alph_index >= this.symbols.length) { + throw new Error("BAD_ALPHABET_INDEX"); + } + if (typeof this.symbols[alph_index].colour != "string") { + return {"red": 0, "green": 0, "blue": 0}; + } + var colour = this.symbols[alph_index].colour; + var red = parseInt(colour.substr(0, 2), 16) / 255; + var green = parseInt(colour.substr(2, 2), 16) / 255; + var blue = parseInt(colour.substr(4, 2), 16) / 255; + return {"red": red, "green": green, "blue": blue}; +}; +// convert a symbol into the index +Alphabet.prototype.get_index = function(letter) { + "use strict"; + var alph_index; + alph_index = this.encode[letter]; + if (typeof alph_index === "undefined") { + return -1; + } + return alph_index; +}; +// convert a symbol into the list of core indexes that it equals +Alphabet.prototype.get_indexes = function(letter) { + "use strict"; + var alph_index, comprise_str, i, comprise_list; + alph_index = this.encode[letter]; + if (typeof alph_index === "undefined") { + throw new Error("Unknown letter"); + } + comprise_str = this.symbols[alph_index].equals; + comprise_list = []; + if (typeof comprise_str == "string") { + for (i = 0; i < comprise_str.length; i++) { + comprise_list.push(this.encode2core[comprise_str.charAt(i)]); + } + } else { + comprise_list.push(alph_index); + } + return comprise_list; +}; +// check if a symbol is the primary way of representing the symbol in the alphabet +Alphabet.prototype.is_prime_symbol = function(letter) { + var alph_index; + alph_index = this.encode[letter]; + if (alph_index == null) return false; + if (this.is_case_insensitive()) { + return (this.symbols[alph_index].symbol.toUpperCase() == letter.toUpperCase()); + } else { + return (this.symbols[alph_index].symbol == letter); + } +}; +// compare 2 alphabets +Alphabet.prototype.equals = function(other) { + "use strict"; + var i, sym1, sym2; + // first check that it's actually an alphabet object + if (!(typeof other === "object" && other != null && other instanceof Alphabet)) { + return false; + } + // second shortcircuit if it's the same object + if (this === other) return true; + // compare + if (this.name !== other.name) return false; + if (this.ncore !== other.ncore) return false; + if (this.symbols.length !== other.symbols.length) return false; + for (i = 0; i < this.symbols.length; i++) { + sym1 = this.symbols[i]; + sym2 = other.symbols[i]; + if (sym1.symbol !== sym2.symbol) return false; + if (sym1.aliases !== sym2.aliases) return false; + if (sym1.name !== sym2.name) return false; + if (typeof sym1.colour !== typeof sym2.colour || + (typeof sym1.colour === "string" && typeof sym2.colour === "string" && + parseInt(sym1.colour, 16) != parseInt(sym2.colour, 16))) { + return false; + } + if (sym1.complement !== sym2.complement) return false; + if (sym1.equals !== sym2.equals) return false; + } + return true; +}; +Alphabet.prototype.check_core_subset = function(super_alph) { + var complement_same = true; + var seen_set = {}; + var sub_i, sub_symbol, super_i, super_symbol; + for (sub_i = 0; sub_i < this.ncore; sub_i++) { + sub_symbol = this.symbols[sub_i]; + super_i = super_alph.encode[sub_symbol.symbol]; + if (super_i == null) return 0; + super_symbol = super_alph.symbols[super_i]; + if (seen_set[super_i]) return 0; + seen_set[super_i] = true; + // check complement + if (sub_symbol.complement != null && super_symbol.complement != null) { + if (super_alph.encode[sub_symbol.complement] != super_alph.encode[super_symbol.complement]) { + complement_same = false; + } + } else if (sub_symbol.complement != null || super_symbol.complement != null) { + complement_same = false; + } + } + return (complement_same ? 1 : -1); +}; +// convert a sequence to its reverse complement +Alphabet.prototype.invcomp_seq = function(seq) { + "use strict"; + var syms, i, e_sym, comp_e_sym; + if (!this.has_complement()) throw new Error("Alphabet must be complementable"); + syms = seq.split(""); + for (i = 0; i < syms.length; i++) { + e_sym = this.encode[syms[i]]; + if (typeof e_sym === "undefined") { + e_sym = this.ncore; // wildcard + } + comp_e_sym = this.complement[e_sym]; + if (typeof comp_e_sym === "undefined") { + comp_e_sym = e_sym; // not complementable + } + syms[i] = this.symbols[comp_e_sym].symbol; + } + return syms.reverse().join(""); +}; +// convert the alphabet to the text version +Alphabet.prototype.as_text = function() { + "use strict"; + function name_as_text(name) { + var i, c, out; + out = "\""; + for (i = 0; i < name.length; i++) { + c = name.charAt(i); + if (c == "\"") { + out += "\\\""; + } else if (c == "/") { + out += "\\/"; + } else if (c == "\\") { + out += "\\\\"; + } else { + out += c; + } + } + out += "\""; + return out; + } + function symbol_as_text(sym) { + var out; + out = sym.symbol; + if (typeof sym.name === "string" && sym.name != sym.symbol) { + out += " " + name_as_text(sym.name); + } + if (typeof sym.colour === "string") { + out += " " + sym.colour; + } + return out; + } + var out, i, j, c, sym; + out = ""; + // output core symbols with 2 way complements + for (i = 0; i < this.ncore; i++) { + c = this.complement[i]; + if (typeof c === "number" && i < c && this.complement[c] === i) { + out += symbol_as_text(this.symbols[i]) + " ~ " + symbol_as_text(this.symbols[c]) + "\n"; + } + } + // output core symbols with no complement + for (i = 0; i < this.ncore; i++) { + if (typeof this.complement[i] === "undefined") { + out += symbol_as_text(this.symbols[i]) + "\n"; + } + } + // output ambiguous symbols that have comprising characters + for (i = this.ncore; i < this.symbols.length; i++) { + if (this.symbols[i].equals.length == 0) break; + out += symbol_as_text(this.symbols[i]) + " = " + this.symbols[i].equals + "\n"; + if (typeof this.symbols[i].aliases === "string") { + for (j = 0; j < this.symbols[i].aliases.length; j++) { + if (this.symbols[i].aliases.charAt(j) == this.symbols[i].symbol) continue; + out += this.symbols[i].aliases.charAt(j) + " = " + this.symbols[i].equals + "\n"; + } + } + } + // output aliases of core symbols + for (i = 0; i < this.ncore; i++) { + if (typeof this.symbols[i].aliases === "string") { + for (j = 0; j < this.symbols[i].aliases.length; j++) { + if (this.symbols[i].aliases.charAt(j) == this.symbols[i].symbol) continue; + out += this.symbols[i].aliases.charAt(j) + " = " + this.symbols[i].symbol + "\n"; + } + } + } + // output gap symbols + i = this.symbols.length - 1; + if (this.symbols[i].equals.length == 0) { + out += symbol_as_text(this.symbols[i]) + " =\n"; + if (typeof this.symbols[i].aliases === "string") { + for (j = 0; j < this.symbols[i].aliases.length; j++) { + if (this.symbols[i].aliases.charAt(j) == this.symbols[i].symbol) continue; + out += this.symbols[i].aliases.charAt(j) + " =\n"; + } + } + } + return out; +}; +// output the alphabet as it appears in minimal MEME format +Alphabet.prototype.as_meme = function() { + "use strict"; + function name_as_text(name) { + var i, c, out; + out = "\""; + for (i = 0; i < name.length; i++) { + c = name.charAt(i); + if (c == "\"") { + out += "\\\""; + } else if (c == "/") { + out += "\\/"; + } else if (c == "\\") { + out += "\\\\"; + } else { + out += c; + } + } + out += "\""; + return out; + } + if (this.equals(AlphStd.DNA)) { + return "ALPHABET= ACGT\n"; + } else if (this.equals(AlphStd.PROTEIN)) { + return "ALPHABET= ACDEFGHIKLMNPQRSTVWY\n"; + } else { + return "ALPHABET" + + (this.name != null ? " " + name_as_text(this.name) : "") + + (this.like != null ? " " + this.like + "-LIKE" : "") + "\n" + + this.as_text() + "END ALPHABET\n"; + } +}; + +// Returns a table showing all the letters in the alphabet +Alphabet.prototype.as_table = function() { + "use strict"; + var i, j, row, th, td, aliases, equals, sym; + var table = document.createElement("table"); + // create the core symbol header + row = table.insertRow(table.rows.length); + th = document.createElement("th"); + th.appendChild(document.createTextNode("Symbol(s)")); + row.appendChild(th); + th = document.createElement("th"); + th.appendChild(document.createTextNode("Name")); + row.appendChild(th); + th = document.createElement("th"); + if (this.has_complement()) { + th.appendChild(document.createTextNode("Complement")); + } + row.appendChild(th); + // list the core symbols + for (i = 0; i < this.ncore; i++) { + row = table.insertRow(table.rows.length); + td = document.createElement("td"); + if (this.symbols[i].colour != null) { + td.style.color = '#' + this.symbols[i].colour; + } + td.appendChild(document.createTextNode(this.symbols[i].symbol)); + aliases = this.get_aliases(i); + if (aliases.length > 0) { + td.appendChild(document.createTextNode(' ' + aliases.split('').join(' '))); + } + row.appendChild(td); + td = document.createElement("td"); + if (this.symbols[i].name != null) { + td.appendChild(document.createTextNode(this.symbols[i].name)); + } + row.appendChild(td); + td = document.createElement("td"); + if (this.symbols[i].complement != null) { + td.style.color = this.get_colour(this.get_index(this.symbols[i].complement)); + td.appendChild(document.createTextNode(this.symbols[i].complement)); + } + row.appendChild(td); + } + // create the ambiguous symbol header + row = table.insertRow(table.rows.length); + th = document.createElement("th"); + th.appendChild(document.createTextNode("Symbol(s)")); + row.appendChild(th); + th = document.createElement("th"); + th.appendChild(document.createTextNode("Name")); + row.appendChild(th); + th = document.createElement("th"); + th.appendChild(document.createTextNode("Matches")); + row.appendChild(th); + // list the ambiguous symbols + for (i = this.ncore; i < this.symbols.length; i++) { + row = table.insertRow(table.rows.length); + td = document.createElement("td"); + if (this.symbols[i].colour != null) { + td.style.color = '#' + this.symbols[i].colour; + } + td.appendChild(document.createTextNode(this.symbols[i].symbol)); + aliases = this.get_aliases(i); + if (aliases.length > 0) { + td.appendChild(document.createTextNode(' ' + aliases.split('').join(' '))); + } + row.appendChild(td); + td = document.createElement("td"); + if (this.symbols[i].name != null) { + td.appendChild(document.createTextNode(this.symbols[i].name)); + } + row.appendChild(td); + td = document.createElement("td"); + equals = this.symbols[i].equals.split(''); + for (j = 0; j < equals.length; j++) { + if (j != 0) td.appendChild(document.createTextNode(' ')); + sym = document.createElement("span"); + sym.style.color = this.get_colour(this.get_index(equals[j])); + sym.appendChild(document.createTextNode(equals[j])); + td.appendChild(sym); + } + row.appendChild(td); + } + return table; +}; + +// returns a dictionary of the colours for EPS +Alphabet.prototype._as_eps_dict = function() { + "use strict"; + var i, sym, rgb; + var out = "/fullColourDict <<\n"; + for (i = 0; i < this.ncore; i++) { + sym = this.get_symbol(i); + sym = sym.replace(/\\/g, "\\\\"); + sym = sym.replace(/\(/g, "\\("); + sym = sym.replace(/\)/g, "\\)"); + rgb = this.get_rgb(i); + out += " (" + sym + ") [" + rgb.red.toFixed(4) + " " + rgb.green.toFixed(4) + " " + rgb.blue.toFixed(4) + "]\n"; + } + out += ">> def\n"; + out += "/mutedColourDict <<\n"; + for (i = 0; i < this.ncore; i++) { + sym = this.get_symbol(i); + sym = sym.replace(/\\/g, "\\\\"); + sym = sym.replace(/\(/g, "\\("); + sym = sym.replace(/\)/g, "\\)"); + rgb = Alphabet.lighten_colour(this.get_rgb(i)); + out += " (" + sym + ") [" + rgb.red.toFixed(4) + " " + rgb.green.toFixed(4) + " " + rgb.blue.toFixed(4) + "]\n"; + } + out += ">> def\n"; + return out; +}; + +// return the alphabet name or a list of primary symbols +Alphabet.prototype.toString = function() { + "use strict"; + if (this.name != null) { + return this.name; + } else { + return this.get_symbols(); + } +}; + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Helper functions +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +// Convert a colour specified in RGB colourspace values into LAB colourspace +Alphabet.rgb2lab = function(rgb) { + "use strict"; + var xyzHelper, labHelper; + // XYZ helper + xyzHelper = function(value) { + if (value > 0.0445) { + value = (value + 0.055) / 1.055; + value = Math.pow(value, 2.4); + } else { + value /= 12.92; + } + value *= 100; + return value; + }; + // lab helper + labHelper = function(value) { + if (value > 0.008856) { + value = Math.pow(value, 1.0 / 3.0); + } else { + value = (7.787 * value) + (16.0 / 116.0); + } + return value; + }; + // convert into XYZ colourspace + var c1, c2, c3; + if (typeof rgb == "number") { + c1 = xyzHelper(((rgb >> 16) & 0xFF) / 255.0); + c2 = xyzHelper(((rgb >> 8) & 0xFF) / 255.0); + c3 = xyzHelper((rgb & 0xFF) / 255.0); + } else { + c1 = xyzHelper(rgb.red); + c2 = xyzHelper(rgb.green); + c3 = xyzHelper(rgb.blue); + } + var x = (c1 * 0.4124) + (c2 * 0.3576) + (c3 * 0.1805); + var y = (c1 * 0.2126) + (c2 * 0.7152) + (c3 * 0.0722); + var z = (c1 * 0.0193) + (c2 * 0.1192) + (c3 * 0.9505); + // convert into Lab colourspace + c1 = labHelper(x / 95.047); + c2 = labHelper(y / 100.0); + c3 = labHelper(z / 108.883); + var l = (116.0 * c2) - 16; + var a = 500.0 * (c1 - c2); + var b = 200.0 * (c2 - c3); + return {"l": l, "a": a, "b": b}; +}; + +// Convert a colour specified in HSV colourspace into RGB colourspace +Alphabet.hsv2rgb = function(hue, sat, value, output_object) { + // achromatic (grey) + var r = value; + var g = value; + var b = value; + if (sat != 0) { + var h = hue / 60.0; + var i = Math.floor(h); + var f = h - i; + var p = value * (1.0 - sat); + var q = value * (1.0 - (sat * f)); + var t = value * (1.0 - (sat * (1.0 - f))); + if (i == 0) { + r = value; + g = t; + b = p; + } else if (i == 1) { + r = q; + g = value; + b = p; + } else if (i == 2) { + r = p; + g = value; + b = t; + } else if (i == 3) { + r = p; + g = q; + b = value; + } else if (i == 4) { + r = t; + g = p; + b = value; + } else { + r = value; + g = p; + b = q; + } + } + if (output_object) { + return {"red": r, "green": g, "blue": b}; + } else { + return (Math.floor(r * 255) << 15) | (Math.floor(g * 255) << 8) | (Math.floor(b * 255)); + } +}; + +// Calculate a distance score between two colours in LAB colourspace +Alphabet.lab_dist = function(lab1, lab2) { + var c1 = Math.sqrt((lab1.l * lab1.l) + (lab1.a * lab1.a)); + var c2 = Math.sqrt((lab2.l * lab2.l) + (lab2.a * lab2.a)); + var dc = c1 - c2; + var dl = lab1.l - lab2.l; + var da = lab1.a - lab2.a; + var db = lab1.b - lab2.b; + // we don't want NaN due to rounding errors so fudge things a bit... + var dh = 0; + var dh_squared = (da * da) + (db * db) - (dc * dc); + if (dh_squared > 0) { + dh = Math.sqrt(dh_squared); + } + var first = dl; + var second = dc / (1.0 + (0.045 * c1)); + var third = dh / (1.0 + (0.015 * c1)); + return Math.sqrt((first * first) + (second * second) + (third * third)); +}; + +// convert an RGB value into a HSL value +Alphabet.rgb2hsl = function(rgb) { + "use strict"; + var min, max, delta, h, s, l, r, g, b; + if (typeof rgb == "number") { + r = ((rgb >> 16) & 0xFF) / 255.0; + g = ((rgb >> 8) & 0xFF) / 255.0; + b = (rgb & 0xFF) / 255.0; + } else { + r = rgb.red; + g = rgb.green; + b = rgb.blue; + } + min = Math.min(r, g, b); + max = Math.max(r, g, b); + delta = max - min; + l = min + (delta / 2); + if (max == min) { + h = 0; // achromatic (grayscale) + s = 0; + } else { + if (l > 0.5) { + s = delta / (2 - max - min); + } else { + s = delta / (max + min); + } + if (max == r) { + h = (g - b) / delta; + if (g < b) h += 6; + } else if (max == g) { + h = ((b - r) / delta) + 2; + } else { + h = ((r - g) / delta) + 4; + } + h /= 6; + } + return {"h": h, "s": s, "l": l}; +}; + +// convert a HSL value into an RGB value +Alphabet.hsl2rgb = function(hsl, output_object) { + "use strict"; + function _hue(p, q, t) { + "use strict"; + if (t < 0) t += 1; + else if (t > 1) t -= 1; + if (t < (1.0 / 6.0)) { + return p + ((q - p) * 6.0 * t); + } else if (t < 0.5) { + return q; + } else if (t < (2.0 / 3.0)) { + return p + ((q - p) * ((2.0 / 3.0) - t) * 6.0); + } else { + return p; + } + } + var r, g, b, p, q; + if (hsl.s == 0) { + // achromatic (grayscale) + r = hsl.l; + g = hsl.l; + b = hsl.l; + } else { + if (hsl.l < 0.5) { + q = hsl.l * (1 + hsl.s); + } else { + q = hsl.l + hsl.s - (hsl.l * hsl.s); + } + p = (2 * hsl.l) - q; + r = _hue(p, q, hsl.h + (1.0 / 3.0)); + g = _hue(p, q, hsl.h); + b = _hue(p, q, hsl.h - (1.0 / 3.0)); + } + if (output_object) { + return {"red": r, "green": g, "blue": b}; + } else { + return (Math.floor(r * 255) << 15) | (Math.floor(g * 255) << 8) | (Math.floor(b * 255)); + } +}; + +Alphabet.lighten_colour = function(rgb) { + "use strict"; + var hsl = Alphabet.rgb2hsl(rgb); + hsl.l += (1.0 - hsl.l) * 2 / 3; + return Alphabet.hsl2rgb(hsl, typeof rgb != "number"); +}; + +//====================================================================== +// end Alphabet object +//====================================================================== + +//====================================================================== +// start StandardAlphabet object +//====================================================================== + +// an extension of the alphabet object to support some additional fields +// only present in standard alphabets. +var StandardAlphabet = function(enum_code, enum_name, alphabet_data) { + Alphabet.apply(this, [alphabet_data]); + this.enum_code = enum_code; + this.enum_name = enum_name; +}; +StandardAlphabet.prototype = Alphabet.prototype; +StandardAlphabet.prototype.constructor = StandardAlphabet; + +// A unique code for this standard alphabet. +// This code will be a power of 2 to enable creation of bitsets for +// a selection of standard alphabets. +StandardAlphabet.prototype.get_code = function() { + return this.enum_code; +}; + +// A unique name for this standard alphabet. +// this name will be all upper case and the same as the property that +// refers to this alphabet in the AlphStd collection. +StandardAlphabet.prototype.get_enum = function() { + return this.enum_name; +}; + +//====================================================================== +// end StandardAlphabet object +//====================================================================== + +// A collection of standard alphabets. +var AlphStd = { + RNA: new StandardAlphabet(1, "RNA", { + "name": "RNA", + "like": "RNA", + "ncore": 4, + "symbols": [ + {"symbol": "A", "name": "Adenine", "colour": "CC0000"}, + {"symbol": "C", "name": "Cytosine", "colour": "0000CC"}, + {"symbol": "G", "name": "Guanine", "colour": "FFB300"}, + {"symbol": "U", "name": "Uracil", "colour": "008000", + "aliases": "T"}, + {"symbol": "N", "name": "Any base", "equals": "ACGU", "aliases": "X."}, + {"symbol": "V", "name": "Not U", "equals": "ACG"}, + {"symbol": "H", "name": "Not G", "equals": "ACU"}, + {"symbol": "D", "name": "Not C", "equals": "AGU"}, + {"symbol": "B", "name": "Not A", "equals": "CGU"}, + {"symbol": "M", "name": "Amino", "equals": "AC"}, + {"symbol": "R", "name": "Purine", "equals": "AG"}, + {"symbol": "W", "name": "Weak", "equals": "AU"}, + {"symbol": "S", "name": "Strong", "equals": "CG"}, + {"symbol": "Y", "name": "Pyrimidine", "equals": "CU"}, + {"symbol": "K", "name": "Keto", "equals": "GU"} + ] + }), + DNA: new StandardAlphabet(2, "DNA", { + "name": "DNA", + "like": "DNA", + "ncore": 4, + "symbols": [ + {"symbol": "A", "name": "Adenine", "colour": "CC0000", "complement": "T"}, + {"symbol": "C", "name": "Cytosine", "colour": "0000CC", "complement": "G"}, + {"symbol": "G", "name": "Guanine", "colour": "FFB300", "complement": "C"}, + {"symbol": "T", "name": "Thymine", "colour": "008000", "complement": "A", + "aliases": "U"}, + {"symbol": "N", "name": "Any base", "equals": "ACGT", "aliases": "X."}, + {"symbol": "V", "name": "Not T", "equals": "ACG"}, + {"symbol": "H", "name": "Not G", "equals": "ACT"}, + {"symbol": "D", "name": "Not C", "equals": "AGT"}, + {"symbol": "B", "name": "Not A", "equals": "CGT"}, + {"symbol": "M", "name": "Amino", "equals": "AC"}, + {"symbol": "R", "name": "Purine", "equals": "AG"}, + {"symbol": "W", "name": "Weak", "equals": "AT"}, + {"symbol": "S", "name": "Strong", "equals": "CG"}, + {"symbol": "Y", "name": "Pyrimidine", "equals": "CT"}, + {"symbol": "K", "name": "Keto", "equals": "GT"} + ] + }), + PROTEIN: new StandardAlphabet(4, "PROTEIN", { + "name": "Protein", + "like": "PROTEIN", + "ncore": 20, + "symbols": [ + {"symbol": "A", "name": "Alanine", "colour": "0000CC"}, + {"symbol": "C", "name": "Cysteine", "colour": "0000CC"}, + {"symbol": "D", "name": "Aspartic acid", "colour": "FF00FF"}, + {"symbol": "E", "name": "Glutamic acid", "colour": "FF00FF"}, + {"symbol": "F", "name": "Phenylalanine", "colour": "0000CC"}, + {"symbol": "G", "name": "Glycine", "colour": "FFB300"}, + {"symbol": "H", "name": "Histidine", "colour": "FFCCCC"}, + {"symbol": "I", "name": "Isoleucine", "colour": "0000CC"}, + {"symbol": "K", "name": "Lysine", "colour": "CC0000"}, + {"symbol": "L", "name": "Leucine", "colour": "0000CC"}, + {"symbol": "M", "name": "Methionine", "colour": "0000CC"}, + {"symbol": "N", "name": "Asparagine", "colour": "008000"}, + {"symbol": "P", "name": "Proline", "colour": "FFFF00"}, + {"symbol": "Q", "name": "Glutamine", "colour": "008000"}, + {"symbol": "R", "name": "Arginine", "colour": "CC0000"}, + {"symbol": "S", "name": "Serine", "colour": "008000"}, + {"symbol": "T", "name": "Threonine", "colour": "008000"}, + {"symbol": "V", "name": "Valine", "colour": "0000CC"}, + {"symbol": "W", "name": "Tryptophan", "colour": "0000CC"}, + {"symbol": "Y", "name": "Tyrosine", "colour": "33E6CC"}, + {"symbol": "X", "name": "Any amino acid", "equals": "ACDEFGHIKLMNPQRSTVWY", "aliases": "*."}, + {"symbol": "B", "name": "Asparagine or Aspartic acid", "equals": "DN"}, + {"symbol": "Z", "name": "Glutamine or Glutamic acid", "equals": "EQ"}, + {"symbol": "J", "name": "Leucine or Isoleucine", "equals": "IL"} + ] + }) +}; + +//====================================================================== +// start Symbol object +//====================================================================== +var Symbol = function(alph_index, scale, alphabet) { + "use strict"; + //variable prototype + this.symbol = alphabet.get_symbol(alph_index); + this.scale = scale; + this.colour = alphabet.get_colour(alph_index); +}; + +Symbol.prototype.get_symbol = function() { + "use strict"; + return this.symbol; +}; + +Symbol.prototype.get_scale = function() { + "use strict"; + return this.scale; +}; + +Symbol.prototype.get_colour = function() { + "use strict"; + return this.colour; +}; + +Symbol.prototype.toString = function() { + "use strict"; + return this.symbol + " " + (Math.round(this.scale*1000)/10) + "%"; +}; + +function compare_symbol(sym1, sym2) { + "use strict"; + if (sym1.get_scale() < sym2.get_scale()) { + return -1; + } else if (sym1.get_scale() > sym2.get_scale()) { + return 1; + } else { + return 0; + } +} +//====================================================================== +// end Symbol object +//====================================================================== + +//====================================================================== +// start Pspm object +//====================================================================== +var Pspm = function(matrix, name, ltrim, rtrim, nsites, evalue, pssm, alt) { + "use strict"; + var row, col, data, row_sum, delta, evalue_re; + if (typeof name !== "string") { + name = ""; + } + this.name = name; + //construct + if (matrix instanceof Pspm) { + // copy constructor + this.alph_length = matrix.alph_length; + this.motif_length = matrix.motif_length; + this.name = matrix.name; + this.alt = matrix.alt; + this.nsites = matrix.nsites; + this.evalue = matrix.evalue; + this.ltrim = matrix.ltrim; + this.rtrim = matrix.rtrim; + this.pspm = []; + for (row = 0; row < matrix.motif_length; row++) { + this.pspm[row] = []; + for (col = 0; col < matrix.alph_length; col++) { + this.pspm[row][col] = matrix.pspm[row][col]; + } + } + if (matrix.pssm != null) { + this.pssm = []; + for (row = 0; row < matrix.motif_length; row++) { + this.pspm[row] = []; + for (col = 0; col < matrix.alph_length; col++) { + this.pssm[row][col] = matrix.pssm[row][col]; + } + } + } + } else { + // check parameters + if (ltrim == null) { + ltrim = 0; + } else if (typeof ltrim !== "number" || ltrim % 1 !== 0 || ltrim < 0) { + throw new Error("ltrim must be a non-negative integer, got: " + ltrim); + } + if (rtrim == null) { + rtrim = 0; + } else if (typeof rtrim !== "number" || rtrim % 1 !== 0 || rtrim < 0) { + throw new Error("rtrim must be a non-negative integer, got: " + rtrim); + } + if (nsites != null) { + if (typeof nsites !== "number" || nsites < 0) { + throw new Error("nsites must be a positive number, got: " + nsites); + } else if (nsites == 0) { + nsites = null; + } + } + if (evalue != null) { + if (typeof evalue === "number") { + if (evalue < 0) { + throw new Error("evalue must be a non-negative number, got: " + evalue); + } + } else if (typeof evalue === "string") { + evalue_re = /^((?:[+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?)|inf)$/; + if (!evalue_re.test(evalue)) { + throw new Error("evalue must be a non-negative number, got: " + evalue); + } + } else { + throw new Error("evalue must be a non-negative number, got: " + evalue); + } + } + // set properties + this.name = name; + this.alt = alt; + this.nsites = nsites; + this.evalue = evalue; + this.ltrim = ltrim; + this.rtrim = rtrim; + if (typeof matrix === "string") { + // string constructor + data = parse_pspm_string(matrix); + this.alph_length = data["alph_length"]; + this.motif_length = data["motif_length"]; + this.pspm = data["pspm"]; + if (this.evalue == null) { + if (data["evalue"] != null) { + this.evalue = data["evalue"]; + } else { + this.evalue = 0; + } + } + if (this.nsites == null) { + if (typeof data["nsites"] === "number") { + this.nsites = data["nsites"]; + } else { + this.nsites = 20; + } + } + } else { + // assume pspm is a nested array + this.motif_length = matrix.length; + this.alph_length = (matrix.length > 0 ? matrix[0].length : 0); + if (this.nsites == null) { + this.nsites = 20; + } + if (this.evalue == null) { + this.evalue = 0; + } + this.pspm = []; + // copy pspm and check + for (row = 0; row < this.motif_length; row++) { + if (this.alph_length != matrix[row].length) { + throw new Error("COLUMN_MISMATCH"); + } + this.pspm[row] = []; + row_sum = 0; + for (col = 0; col < this.alph_length; col++) { + this.pspm[row][col] = matrix[row][col]; + row_sum += this.pspm[row][col]; + } + delta = 0.1; + if (isNaN(row_sum) || (row_sum > 1 && (row_sum - 1) > delta) || + (row_sum < 1 && (1 - row_sum) > delta)) { + throw new Error("INVALID_SUM"); + } + } + // copy pssm + if (pssm != null) { + this.pssm = []; + for (row = 0; row < this.motif_length; row++) { + this.pssm[row] = []; + for (col = 0; col < this.alph_length; col++) { + this.pssm[row][col] = pssm[row][col]; + } + } + } + } + } +}; + +Pspm.prototype.copy = function() { + "use strict"; + return new Pspm(this); +}; + +Pspm.prototype.reverse = function() { + "use strict"; + var x, y, temp, temp_trim; + //reverse + x = 0; + y = this.motif_length-1; + while (x < y) { + temp = this.pspm[x]; + this.pspm[x] = this.pspm[y]; + this.pspm[y] = temp; + x++; + y--; + } + // reverse pssm (if defined) + if (typeof this.pssm !== "undefined") { + //reverse + x = 0; + y = this.motif_length-1; + while (x < y) { + temp = this.pssm[x]; + this.pspm[x] = this.pssm[y]; + this.pssm[y] = temp; + x++; + y--; + } + } + //swap triming + temp_trim = this.ltrim; + this.ltrim = this.rtrim; + this.rtrim = temp_trim; + return this; //allow function chaining... +}; + +Pspm.prototype.reverse_complement = function(alphabet) { + "use strict"; + var x, y, temp, i, row, c, temp_trim; + if (this.alph_length != alphabet.get_size_core()) { + throw new Error("The alphabet size does not match the size of the pspm."); + } + if (!alphabet.has_complement()) { + throw new Error("The specified alphabet can not be complemented."); + } + // reverse motif + this.reverse(); + //complement + for (x = 0; x < this.motif_length; x++) { + row = this.pspm[x]; + for (i = 0; i < row.length; i++) { + c = alphabet.get_complement(i); + if (c < i) continue; + temp = row[i]; + row[i] = row[c]; + row[c] = temp; + } + } + // complement pssm (if defined) + if (typeof this.pssm !== "undefined") { + //complement + for (x = 0; x < this.motif_length; x++) { + row = this.pssm[x]; + for (i = 0; i < row.length; i++) { + c = alphabet.get_complement(i); + if (c < i) continue; + temp = row[i]; + row[i] = row[c]; + row[c] = temp; + } + } + } + return this; //allow function chaining... +}; + +Pspm.prototype.get_stack = function(position, alphabet, ssc) { + "use strict"; + var row, stack_ic, alphabet_ic, stack, i, sym; + if (this.alph_length != alphabet.get_size_core()) { + throw new Error("The alphabet size does not match the size of the pspm."); + } + row = this.pspm[position]; + stack_ic = this.get_stack_ic(position, alphabet); + if (ssc) stack_ic -= this.get_error(alphabet); + alphabet_ic = alphabet.get_ic(); + stack = []; + for (i = 0; i < this.alph_length; i++) { + sym = new Symbol(i, row[i]*stack_ic/alphabet_ic, alphabet); + if (sym.get_scale() <= 0) { + continue; + } + stack.push(sym); + } + stack.sort(compare_symbol); + return stack; +}; + +Pspm.prototype.get_stack_ic = function(position, alphabet) { + "use strict"; + var row, H, i; + if (this.alph_length != alphabet.get_size_core()) { + throw new Error("The alphabet size does not match the size fo the pspm."); + } + row = this.pspm[position]; + H = 0; + for (i = 0; i < this.alph_length; i++) { + if (row[i] === 0) { + continue; + } + H -= (row[i] * (Math.log(row[i]) / Math.LN2)); + } + return alphabet.get_ic() - H; +}; + +Pspm.prototype.get_error = function(alphabet) { + "use strict"; + if (this.nsites === 0) { + return 0; + } + return (alphabet.get_size_core()-1) / (2 * Math.LN2 * this.nsites); +}; + +Pspm.prototype.get_motif_length = function() { + "use strict"; + return this.motif_length; +}; + +Pspm.prototype.get_alph_length = function() { + "use strict"; + return this.alph_length; +}; + +Pspm.prototype.get_left_trim = function() { + "use strict"; + return this.ltrim; +}; + +Pspm.prototype.get_right_trim = function() { + "use strict"; + return this.rtrim; +}; + +Pspm.prototype.as_best_match = function(alphabet) { + "use strict"; + var match, odds, best_odds, best_index; + var i, j; + match = ""; + for (i = 0; i < this.motif_length; i++) { + best_index = 0; + best_odds = this.pspm[i][0] / alphabet.get_bg_freq(0); + for (j = 1; j < this.alph_length; j++) { + odds = this.pspm[i][j] / alphabet.get_bg_freq(j); + if (odds > best_odds) { + best_odds = odds; + best_index = j; + } + } + match += alphabet.get_symbol(best_index); + } + return match; +}; + +Pspm.prototype.as_count_matrix = function() { + "use strict"; + var count, count_text, text; + var i, j; + text = ""; + for (i = 0; i < this.motif_length; i++) { + if (i !== 0) { + text += "\n"; + } + for (j = 0; j < this.alph_length; j++) { + if (j !== 0) { + text += " "; + } + count = Math.round(this.nsites * this.pspm[i][j]); + count_text = "" + count; + // pad up to length of 4 + if (count_text.length < 4) { + text += (new Array(5 - count_text.length)).join(" ") + count_text; + } else { + text += count_text; + } + } + } + return text; +}; + +Pspm.prototype.as_probability_matrix = function() { + "use strict"; + var text; + var i, j; + text = ""; + for (i = 0; i < this.motif_length; i++) { + if (i !== 0) { + text += "\n"; + } + for (j = 0; j < this.alph_length; j++) { + if (j !== 0) { + text += " "; + } + text += this.pspm[i][j].toFixed(6); + } + } + return text; +}; + +Pspm.prototype.as_score_matrix = function(alphabet, pseudo) { + "use strict"; + var me, score, out, row, col, score_text; + me = this; + if (typeof this.pssm === "undefined") { + if (!(typeof alphabet === "object" && alphabet != null && alphabet instanceof Alphabet)) { + throw new Error("The alphabet is required to generate the pssm."); + } + if (typeof pseudo === "undefined") { + pseudo = 0.01; + } else if (typeof pseudo !== "number" || pseudo < 0) { + throw new Error("Expected positive number for pseudocount"); + } + score = function(row, col) { + "use strict"; + var p, bg, p2; + p = me.pspm[row][col]; + bg = alphabet.get_bg_freq(col); + p2 = (p * me.nsites + bg * pseudo) / (me.nsites + pseudo); + return (p2 > 0 ? Math.round((Math.log(p2 / bg) / Math.LN2) * 100) : -10000); + }; + } else { + score = function(row, col) { + "use strict"; + return me.pssm[row][col]; + }; + } + out = ""; + for (row = 0; row < this.motif_length; row++) { + for (col = 0; col < this.alph_length; col++) { + if (col !== 0) { + out += " "; + } + score_text = "" + score(row, col); + // pad out to 6 characters + if (score_text.length < 6) { + out += (new Array(7 - score_text.length)).join(" ") + score_text; + } else { + out += score_text; + } + } + out += "\n"; + } + return out; +} + +Pspm.prototype.as_pspm = function() { + "use strict"; + return "letter-probability matrix: alength= " + this.alph_length + + " w= " + this.motif_length + " nsites= " + this.nsites + + " E= " + (typeof this.evalue === "number" ? + this.evalue.toExponential() : this.evalue) + "\n" + + this.as_probability_matrix(); +}; + +Pspm.prototype.as_pssm = function(alphabet, pseudo) { + "use strict"; + return "log-odds matrix: alength= " + this.alph_length + + " w= " + this.motif_length + + " E= " + (typeof this.evalue == "number" ? + this.evalue.toExponential() : this.evalue) + "\n" + + this.as_score_matrix(alphabet, pseudo); +}; + +Pspm.prototype.as_meme = function(options) { + var with_header, with_pspm, with_pssm, version, alphabet, bg_source, pseudocount, strands; + var out, alen, i; + // get the options + if (typeof options !== "object" || options === null) { + options = {}; + } + with_header = (typeof options["with_header"] === "boolean" ? options["with_header"] : false); + with_pspm = (typeof options["with_pspm"] === "boolean" ? options["with_pspm"] : false); + with_pssm = (typeof options["with_pssm"] === "boolean" ? options["with_pssm"] : false); + if (!with_pspm && !with_pssm) with_pspm = true; + if (with_header) { + if (typeof options["version"] === "string" && /^\d+(?:\.\d+){0,2}$/.test(options["version"])) { + version = options["version"]; + } else if (typeof options["version"] === "number") { + version = options["version"].toFixed(0); + } else { + version = "4"; + } + if (typeof options["strands"] === "number" && options["strands"] === 1) { + strands = 1; + } else { + strands = 2; + } + if (typeof options["bg_source"] === "string") { + bg_source = options["bg_source"]; + } else { + bg_source = "unknown source"; + } + if (typeof options["alphabet"] === "object" && options["alphabet"] != null + && options["alphabet"] instanceof Alphabet) { + alphabet = options["alphabet"]; + } else { + throw new Error("The alphabet is required to generate the header."); + } + } + // now create the output + out = ""; + if (with_header) { + out = "MEME version " + version + "\n\n"; + out += alphabet.as_meme() + "\n"; + if (alphabet.has_complement()) { // assume DNA has both strands unless otherwise specified + out += "strands: " + (strands === 1 ? "+" : "+ -") + "\n\n"; + } + out += "Background letter frequencies (from " + bg_source + "):\n"; + alen = alphabet.get_size_core(); + for (i = 0; i < alen; i++) { + if (i !== 0) { + if (i % 9 === 0) { // maximum of nine entries per line + out += "\n"; + } else { + out += " "; + } + } + out += alphabet.get_symbol(i) + " " + alphabet.get_bg_freq(i).toFixed(3); + } + } + out += "\n\n"; + out += "MOTIF " + this.name + (this.alt == null ? "" : " " + this.alt); + if (with_pssm) { + out += "\n\n"; + out += this.as_pssm(options["alphabet"], options["pseudocount"]); + } + if (with_pspm) { + out += "\n\n"; + out += this.as_pspm(); + } + return out; +} + +Pspm.prototype.toString = function() { + "use strict"; + var str, i, row; + str = ""; + for (i = 0; i < this.pspm.length; i++) { + row = this.pspm[i]; + str += row.join("\t") + "\n"; + } + return str; +}; + +function parse_pspm_properties(str) { + "use strict"; + var parts, i, eqpos, before, after, properties, prop, num, num_re; + num_re = /^((?:[+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?)|inf)$/; + parts = trim(str).split(/\s+/); + // split up words containing = + for (i = 0; i < parts.length;) { + eqpos = parts[i].indexOf("="); + if (eqpos != -1) { + before = parts[i].substr(0, eqpos); + after = parts[i].substr(eqpos+1); + if (before.length > 0 && after.length > 0) { + parts.splice(i, 1, before, "=", after); + i += 3; + } else if (before.length > 0) { + parts.splice(i, 1, before, "="); + i += 2; + } else if (after.length > 0) { + parts.splice(i, 1, "=", after); + i += 2; + } else { + parts.splice(i, 1, "="); + i++; + } + } else { + i++; + } + } + properties = {}; + for (i = 0; i < parts.length; i += 3) { + if (parts.length - i < 3) { + throw new Error("Expected PSPM property was incomplete. "+ + "Remaing parts are: " + parts.slice(i).join(" ")); + } + if (parts[i+1] !== "=") { + throw new Error("Expected '=' in PSPM property between key and " + + "value but got " + parts[i+1]); + } + prop = parts[i].toLowerCase(); + num = parts[i+2]; + if (!num_re.test(num)) { + throw new Error("Expected numeric value for PSPM property '" + + prop + "' but got '" + num + "'"); + } + properties[prop] = num; + } + return properties; +} + +function parse_pspm_string(pspm_string) { + "use strict"; + var header_re, lines, first_line, line_num, col_num, alph_length, + motif_length, nsites, evalue, pspm, i, line, match, props, parts, + j, prob; + header_re = /^letter-probability\s+matrix:(.*)$/i; + lines = pspm_string.split(/\n/); + first_line = true; + line_num = 0; + col_num = 0; + alph_length; + motif_length; + nsites; + evalue; + pspm = []; + for (i = 0; i < lines.length; i++) { + line = trim(lines[i]); + if (line.length === 0) { + continue; + } + // check the first line for a header though allow matrices without it + if (first_line) { + first_line = false; + match = header_re.exec(line); + if (match !== null) { + props = parse_pspm_properties(match[1]); + if (props.hasOwnProperty("alength")) { + alph_length = parseFloat(props["alength"]); + if (alph_length != 4 && alph_length != 20) { + throw new Error("PSPM property alength should be 4 or 20" + + " but got " + alph_length); + } + } + if (props.hasOwnProperty("w")) { + motif_length = parseFloat(props["w"]); + if (motif_length % 1 !== 0 || motif_length < 1) { + throw new Error("PSPM property w should be an integer larger " + + "than zero but got " + motif_length); + } + } + if (props.hasOwnProperty("nsites")) { + nsites = parseFloat(props["nsites"]); + if (nsites <= 0) { + throw new Error("PSPM property nsites should be larger than " + + "zero but got " + nsites); + } + } + if (props.hasOwnProperty("e")) { + evalue = props["e"]; + if (evalue < 0) { + throw new Error("PSPM property evalue should be " + + "non-negative but got " + evalue); + } + } + continue; + } + } + pspm[line_num] = []; + col_num = 0; + parts = line.split(/\s+/); + for (j = 0; j < parts.length; j++) { + prob = parseFloat(parts[j]); + if (prob != parts[j] || prob < 0 || prob > 1) { + throw new Error("Expected probability but got '" + parts[j] + "'"); + } + pspm[line_num][col_num] = prob; + col_num++; + } + line_num++; + } + if (typeof motif_length === "number") { + if (pspm.length != motif_length) { + throw new Error("Expected PSPM to have a motif length of " + + motif_length + " but it was actually " + pspm.length); + } + } else { + motif_length = pspm.length; + } + if (typeof alph_length !== "number") { + alph_length = pspm[0].length; + if (alph_length != 4 && alph_length != 20) { + throw new Error("Expected length of first row in the PSPM to be " + + "either 4 or 20 but got " + alph_length); + } + } + for (i = 0; i < pspm.length; i++) { + if (pspm[i].length != alph_length) { + throw new Error("Expected PSPM row " + i + " to have a length of " + + alph_length + " but the length was " + pspm[i].length); + } + } + return {"pspm": pspm, "motif_length": motif_length, + "alph_length": alph_length, "nsites": nsites, "evalue": evalue}; +} +//====================================================================== +// end Pspm object +//====================================================================== + +//====================================================================== +// start Logo object +//====================================================================== + +var Logo = function(alphabet, options) { + "use strict"; + this.alphabet = alphabet; + this.fine_text = ""; + this.x_axis = 1; + this.y_axis = true; + this.xlate_nsyms = 1; + this.xlate_start = null; + this.xlate_end = null; + this.pspm_list = []; + this.pspm_column = []; + this.rows = 0; + this.columns = 0; + if (typeof options === "string") { + // the old method signature had fine_text here so we support that + this.fine_text = options; + } else if (typeof options === "object" && options != null) { + this.fine_text = (typeof options.fine_text === "string" ? options.fine_text : ""); + this.x_axis = (typeof options.x_axis === "boolean" ? (options.x_axis ? 1 : 0) : 1); + if (options.x_axis_hidden != null && options.x_axis_hidden) this.x_axis = -1; + this.y_axis = (typeof options.y_axis === "boolean" ? options.y_axis : true); + this.xlate_nsyms = (typeof options.xlate_nsyms === "number" ? options.xlate_nsyms : this.xlate_nsyms); + this.xlate_start = (typeof options.xlate_start === "number" ? options.xlate_start : this.xlate_start); + this.xlate_end = (typeof options.xlate_end === "number" ? options.xlate_end : this.xlate_end); + } +}; + +Logo.prototype.add_pspm = function(pspm, column) { + "use strict"; + var col; + if (typeof column === "undefined") { + column = 0; + } else if (column < 0) { + throw new Error("Column index out of bounds."); + } + this.pspm_list[this.rows] = pspm; + this.pspm_column[this.rows] = column; + this.rows++; + col = column + pspm.get_motif_length(); + if (col > this.columns) { + this.columns = col; + } +}; + +Logo.prototype.get_columns = function() { + "use strict"; + return this.columns; +}; + +Logo.prototype.get_xlate_nsyms = function() { + "use strict"; + return this.xlate_nsyms; +}; + +Logo.prototype.get_xlate_start = function() { + "use strict"; + return (this.xlate_start != null ? this.xlate_start : 0); +}; + +Logo.prototype.get_xlate_end = function() { + "use strict"; + return (this.xlate_end != null ? this.xlate_end : this.columns * this.xlate_nsyms); +}; + +Logo.prototype.get_xlate_columns = function() { + "use strict"; + return this.get_xlate_end() - this.get_xlate_start(); +}; + +Logo.prototype.get_rows = function() { + "use strict"; + return this.rows; +}; + +Logo.prototype.get_pspm = function(row_index) { + "use strict"; + if (row_index < 0 || row_index >= this.rows) { + throw new Error("INDEX_OUT_OF_BOUNDS"); + } + return this.pspm_list[row_index]; +}; + +Logo.prototype.get_offset = function(row_index) { + "use strict"; + if (row_index < 0 || row_index >= this.rows) { + throw new Error("INDEX_OUT_OF_BOUNDS"); + } + return this.pspm_column[row_index]; +}; + +Logo.prototype._as_eps_data = function(ssc, errbars) { + var i, j, pos, stack_pos, pspm, stack, sym, out; + out = ""; + for (i = 0; i < this.rows; i++) { + out += "\nStartLine\n"; + // Indent + for (j = 0; j < this.pspm_column[i]; j++) { + out += "() startstack\nendstack\n\n"; + } + pspm = this.pspm_list[i]; + if (pspm.get_left_trim() > 0) { + out += "MuteColour\nDrawTrimEdge\n" + pspm.get_left_trim() + " DrawTrimBg\n"; + } + for (pos = 0; pos < pspm.get_motif_length(); pos++) { + if (pos != 0 && pos == pspm.get_left_trim()) { // enable full colour + out += "DrawTrimEdge\nRestoreColour\n"; + } else if (pos == (pspm.get_motif_length() - pspm.get_right_trim())) { + out += "MuteColour\n" + pspm.get_right_trim() + " DrawTrimBg\n"; + } + out += "(" + (pos + 1) + ") startstack\n"; + stack = pspm.get_stack(pos, this.alphabet, ssc); + for (stack_pos = 0; stack_pos < stack.length; stack_pos++) { + sym = stack[stack_pos]; + out += " " + (sym.get_scale() * this.alphabet.get_ic()) + " (" + sym.get_symbol() + ") numchar\n"; + } + if (errbars) { + out += " " + pspm.get_error(this.alphabet) + " Ibeam\n"; + } + out += "endstack\n\n"; + } + if (pspm.get_right_trim() > 0 || pspm.get_left_trim() == pspm.get_motif_length()) { + out += "RestoreColour\n"; + } + out += "EndLine\n"; + } + return out; +}; + +Logo.prototype.as_eps = function(options) { + "use strict"; + if (this.xlate_nsyms != 1) throw new Error("Unsupported setting xlate_nsyms for EPS"); + if (this.xlate_start != null) throw new Error("Unsupported setting xlate_start for EPS"); + if (this.xlate_end != null) throw new Error("Unsupported setting xlate_end for EPS"); + + var LOGOHEIGHT = 7.5; // default height of line in cm + var cm2pts, height, width, now, ssc, errbars; + if (typeof options === "undefined") { + options = {}; + } + cm2pts = 72 / 2.54; + if (typeof options.logo_height == "number") { + height = options.logo_height; + } else { + height = LOGOHEIGHT * this.rows; + } + if (typeof options.logo_width == "number") { + width = options.logo_width; + } else { + width = this.columns + 2; + } + now = new Date(); + ssc = (typeof options.ssc == "boolean" ? options.ssc : false); + errbars = (typeof options.show_error_bar == "boolean" ? options.show_error_bar : ssc); + var values = { + "LOGOHEIGHT": height, + "LOGOWIDTH": width, + "BOUNDINGHEIGHT": Math.round(height * cm2pts), + "BOUNDINGWIDTH": Math.round(width * cm2pts), + "LOGOLINEHEIGHT": (height / this.rows), + "CHARSPERLINE": this.columns, + "BARBITS": this.alphabet.get_ic(), + "LOGOTYPE": (this.alphabet.has_complement() ? "NA" : "AA"), + "CREATIONDATE": now.getDate() + "." + (now.getMonth() + 1) + "." + now.getFullYear() + " " + now.getHours() + ":" + now.getMinutes() + ":" + now.getSeconds(), + "ERRORBARFRACTION": (typeof options.error_bar_fraction == "number" ? options.error_bar_fraction : 1.0), + "TICBITS": (typeof options.ticbits == "number" ? options.ticbits : 1.0), + "TITLE": (typeof options.title == "string" ? options.title : ""), + "FINEPRINT": (typeof options.fineprint == "string" ? options.fineprint : this.fine_text), + "XAXISLABEL": (typeof options.xaxislabel == "string" ? options.xaxislabel : ""), + "YAXISLABEL": (typeof options.yaxislabel == "string" ? options.yaxislabel : "bits"), + "SSC": ssc, + "YAXIS": (typeof options.show_y_axis == "boolean" ? options.show_y_axis : this.y_axis), + "SHOWENDS": (typeof options.show_ends == "boolean" ? options.show_ends : false), + "ERRBAR": errbars, + "OUTLINE": (typeof options.show_outline == "boolean" ? options.show_outline : false), + "NUMBERING": (typeof options.show_numbering == "boolean" ? options.show_numbering : this.x_axis != 0), + "SHOWINGBOX": (typeof options.show_box == "boolean" ? options.show_box : false), + "CREATOR": (typeof options.creator == "string" ? options.creator : "motif_logo.js"), + "FONTSIZE": (typeof options.label_font_size == "number" ? options.label_font_size : 12), + "TITLEFONTSIZE": (typeof options.title_font_size == "number" ? options.title_font_size : 12), + "SMALLFONTSIZE": (typeof options.small_font_size == "number" ? options.small_font_size : 6), + "TOPMARGIN" : (typeof options.top_margin == "number" ? options.top_margin : 0.9), + "BOTTOMMARGIN": (typeof options.bottom_margin == "number" ? options.bottom_margin : 0.9), + "COLORDICT": this.alphabet._as_eps_dict(), + "DATA": this._as_eps_data(ssc, errbars) + }; + // now this requires that the script containing the template has been imported! + return motif_logo_template(values); +}; + +//====================================================================== +// end Logo object +//====================================================================== + +// calculate the exact size (in pixels) of an object drawn on the +// canvas assuming that the background of the canvas is transparent. +function canvas_bounds(ctx, cwidth, cheight) { + "use strict"; + var data, r, c, top_line, bottom_line, left_line, right_line, + txt_width, txt_height; + + // extract the image data + data = ctx.getImageData(0, 0, cwidth, cheight).data; + + // set initial values + top_line = -1; bottom_line = -1; left_line = -1; right_line = -1; + txt_width = 0; txt_height = 0; + + // Find the top-most line with a non-transparent pixel + for (r = 0; r < cheight; r++) { + for (c = 0; c < cwidth; c++) { + if (data[r * cwidth * 4 + c * 4 + 3]) { + top_line = r; + break; + } + } + if (top_line != -1) { + break; + } + } + + // Only bother looking if we found at least one set pixel... + if (top_line != -1) { + + //find the last line with a non-transparent pixel + for (r = cheight-1; r >= top_line; r--) { + for(c = 0; c < cwidth; c++) { + if(data[r * cwidth * 4 + c * 4 + 3]) { + bottom_line = r; + break; + } + } + if (bottom_line != -1) { + break; + } + } + // calculate height + txt_height = bottom_line - top_line + 1; + + // Find the left-most line with a non-transparent pixel + for (c = 0; c < cwidth; c++) { + for (r = top_line; r <= bottom_line; r++) { + if (data[r * cwidth * 4 + c * 4 + 3]) { + left_line = c; + break; + } + } + if (left_line != -1) { + break; + } + } + + //find the right most line with a non-transparent pixel + for (c = cwidth-1; c >= left_line; c--) { + for(r = top_line; r <= bottom_line; r++) { + if(data[r * cwidth * 4 + c * 4 + 3]) { + right_line = c; + break; + } + } + if (right_line != -1) { + break; + } + } + txt_width = right_line - left_line + 1; + } + + //return the bounds + return {bound_top: top_line, bound_bottom: bottom_line, + bound_left: left_line, bound_right: right_line, width: txt_width, + height: txt_height}; +} + +//====================================================================== +// start RasterizedAlphabet +//====================================================================== + +// Rasterize Alphabet +// 1) Measure width of text at default font for all symbols in alphabet +// 2) sort in width ascending +// 3) Drop the top and bottom 10% (designed to ignore outliers like 'W' and 'I') +// 4) Calculate the average as the maximum scaling factor (designed to stop I becoming a rectangular blob). +// 5) Assume scale of zero would result in width of zero, interpolate scale required to make perfect width font +// 6) Draw text onto temp canvas at calculated scale +// 7) Find bounds of drawn text +// 8) Paint on to another canvas at the desired height (but only scaling width to fit if larger). +var RasterizedAlphabet = function(alphabet, logo_scale, font, width) { + "use strict"; + var default_size, safety_pad, canvas, ctx, middle, baseline, widths, sizes, + i, sym, size, tenpercent, avg_width, scale, + target_width, target_height; + //variable prototypes + this.alphabet = alphabet; + this.scale = logo_scale; + this.sym_cache = {}; + this.stack_num_cache = []; + this.scale_num_cache = []; + // size of canvas + default_size = 60; // size of measuring canvas + safety_pad = 20; // pixels to pad around so we don't miss the edges + // create a canvas to do our measuring + canvas = document.createElement("canvas"); + if (!canvas.getContext) throw new Error("No canvas support"); + canvas.width = default_size + 2 * safety_pad; + canvas.height = default_size + 2 * safety_pad; + middle = Math.round(canvas.width / 2); + baseline = Math.round(canvas.height - safety_pad); + ctx = canvas.getContext('2d'); + if (!supports_text(ctx)) throw new Error("Canvas does not support text"); + ctx.font = font; + ctx.textAlign = "center"; + ctx.translate(middle, baseline); + // list of widths + widths = []; + sizes = []; + //now measure each letter in the alphabet + for (i = 0; i < alphabet.get_size_core(); ++i) { + // reset the canvas + ctx.clearRect(0, 0, canvas.width, canvas.height); + ctx.fillStyle = alphabet.get_colour(i); + // draw the test text + ctx.fillText(alphabet.get_symbol(i), 0, 0); + //measure + size = canvas_bounds(ctx, canvas.width, canvas.height); + if (size.width === 0) throw new Error("Invisible symbol!"); + widths.push(size.width); + sizes[i] = size; + } + //sort the widths + widths.sort(function(a,b) {return a - b;}); + //drop 10% of the items off each end + tenpercent = Math.floor(widths.length / 10); + for (i = 0; i < tenpercent; ++i) { + widths.pop(); + widths.shift(); + } + //calculate average width + avg_width = 0; + for (i = 0; i < widths.length; ++i) { + avg_width += widths[i]; + } + avg_width /= widths.length; + // calculate the target width + target_width = width * this.scale * 2; + // calculate scales + for (i = 0; i < alphabet.get_size_core(); ++i) { + sym = alphabet.get_symbol(i); + size = sizes[i]; + // calculate scale + scale = target_width / Math.max(avg_width, size.width); + // estimate scaled height + target_height = size.height * scale; + // create an appropriately sized canvas + canvas = document.createElement("canvas"); + canvas.width = target_width; + canvas.height = target_height + safety_pad * 2; + // calculate the middle + middle = Math.round(canvas.width / 2); + // calculate the baseline + baseline = Math.round(canvas.height - safety_pad); + // get the context and prepare to draw the rasterized text + ctx = canvas.getContext('2d'); + ctx.font = font; + ctx.fillStyle = alphabet.get_colour(i); + ctx.textAlign = "center"; + ctx.translate(middle, baseline); + ctx.save(); + ctx.scale(scale, scale); + // draw the text + ctx.fillText(sym, 0, 0); + ctx.restore(); + this.sym_cache[sym] = {"image": canvas, "size": canvas_bounds(ctx, canvas.width, canvas.height)}; + } +}; + +RasterizedAlphabet.prototype.get_alphabet = function() { + return this.alphabet; +}; + +RasterizedAlphabet.prototype.get_scale = function() { + return this.scale; +}; + +RasterizedAlphabet.prototype.draw_stack_sym = function(ctx, letter, dx, dy, dWidth, dHeight) { + "use strict"; + var entry, image, size; + entry = this.sym_cache[letter]; + image = entry.image; + size = entry.size; + ctx.drawImage(image, 0, size.bound_top -1, image.width, size.height+1, dx, dy, dWidth, dHeight); +}; + +RasterizedAlphabet.prototype.draw_stack_num = function(ctx, font, stack_width, index) { + var image, image_ctx, text_length; + if (index >= this.stack_num_cache.length) { + image = document.createElement("canvas"); + // measure the text + image_ctx = image.getContext('2d'); + image_ctx.save(); + image_ctx.font = font; + text_length = image_ctx.measureText("" + (index + 1)).width; + image_ctx.restore(); + // resize the canvas to fit + image.width = Math.ceil(stack_width); + image.height = Math.ceil(text_length); + // draw the text + image_ctx = image.getContext('2d'); + image_ctx.translate(Math.round(stack_width / 2), 0); + image_ctx.font = font; + image_ctx.textBaseline = "middle"; + image_ctx.textAlign = "right"; + image_ctx.rotate(-(Math.PI / 2)); + image_ctx.fillText("" + (index + 1), 0, 0); + this.stack_num_cache[index] = image; + } else { + image = this.stack_num_cache[index]; + } + ctx.drawImage(image, 0, 0); +} + +RasterizedAlphabet.prototype.draw_scale_num = function(ctx, font, num) { + var image, image_ctx, text_size, m_length; + if (num >= this.scale_num_cache.length) { + image = document.createElement("canvas"); + // measure the text + image_ctx = image.getContext('2d'); + image_ctx.font = font; + text_size = image_ctx.measureText("" + num); + if (text_size.actualBoundingBoxAscent && text_size.actualBoundingBoxDesent) { + // resize the canvas to fit + image.width = Math.ceil(text_size.width); + image.height = Math.ceil(text_size.actualBoundingBoxAscent + text_size.actualBoundingBoxDesent); + // draw the text + image_ctx = image.getContext('2d'); + image_ctx.font = font; + image_ctx.textAlign = "right"; + image_ctx.fillText("" + num, image.width, text_size.actualBoundingBoxAscent); + } else { + // measure width of 'm' to approximate height, we double it later anyway + m_length = image_ctx.measureText("m").width; + // resize the canvas to fit + image.width = Math.ceil(text_size.width); + image.height = Math.ceil(2 * m_length); + // draw the text + image_ctx = image.getContext('2d'); + image_ctx.font = font; + image_ctx.textAlign = "right"; + image_ctx.textBaseline = "middle"; + image_ctx.fillText("" + num, image.width, m_length); + } + this.scale_num_cache[num] = image; + } else { + image = this.scale_num_cache[num]; + } + ctx.drawImage(image, -image.width, -Math.round(image.height / 2)) +} + +//====================================================================== +// end RasterizedAlphabet +//====================================================================== + +//====================================================================== +// start LogoMetrics object +//====================================================================== + +var LogoMetrics = function(ctx, logo_columns, logo_rows, has_names, has_finetext, x_axis, y_axis) { + "use strict"; + var i, row_height; + //variable prototypes + this.pad_top = (has_names ? 5 : 0); + this.pad_left = (y_axis ? 10 : 0); + this.pad_right = (has_finetext ? 15 : 0); + this.pad_bottom = 0; + this.pad_middle = 20; + this.name_height = 14; + this.name_font = "bold " + this.name_height + "px Times, sans-serif"; + this.name_spacer = 0; + this.y_axis = y_axis; + this.y_label = "bits"; + this.y_label_height = 12; + this.y_label_font = "bold " + this.y_label_height + "px Helvetica, sans-serif"; + this.y_label_spacer = 3; + this.y_num_height = 12; + this.y_num_width = 0; + this.y_num_font = "bold " + this.y_num_height + "px Helvetica, sans-serif"; + this.y_tic_width = 5; + this.stack_pad_left = 0; + this.stack_font = "bold 25px Helvetica, sans-serif"; + this.stack_height = 90; + this.stack_width = 26; + this.stacks_pad_right = 5; + this.x_axis = x_axis; + this.x_num_above = 2; + this.x_num_height = 12; + this.x_num_width = 0; + this.x_num_font = "bold " + this.x_num_height + "px Helvetica, sans-serif"; + this.fine_txt_height = 6; + this.fine_txt_above = 2; + this.fine_txt_font = "normal " + this.fine_txt_height + "px Helvetica, sans-serif"; + this.letter_metrics = new Array(); + this.summed_width = 0; + this.summed_height = 0; + //calculate the width of the y axis numbers + ctx.font = this.y_num_font; + for (i = 0; i <= 2; i++) { + this.y_num_width = Math.max(this.y_num_width, ctx.measureText("" + i).width); + } + //calculate the width of the x axis numbers (but they are rotated so it becomes height) + if (x_axis == 1) { + ctx.font = this.x_num_font; + for (i = 1; i <= logo_columns; i++) { + this.x_num_width = Math.max(this.x_num_width, ctx.measureText("" + i).width); + } + } else if (x_axis == 0) { + this.x_num_height = 4; + this.x_num_width = 4; + } else { + this.x_num_height = 0; + this.x_num_width = 0; + } + + //calculate how much vertical space we want to draw this + //first we add the padding at the top and bottom since that's always there + this.summed_height += this.pad_top + this.pad_bottom; + //all except the last row have the same amount of space allocated to them + if (logo_rows > 1) { + row_height = this.stack_height + this.pad_middle; + if (has_names) { + row_height += this.name_height; + //the label is allowed to overlap into the spacer + row_height += Math.max(this.y_num_height/2, this.name_spacer); + //the label is allowed to overlap the space used by the other label + row_height += Math.max(this.y_num_height/2, this.x_num_height + this.x_num_above); + } else { + row_height += this.y_num_height/2; + //the label is allowed to overlap the space used by the other label + row_height += Math.max(this.y_num_height/2, this.x_num_height + this.x_num_above); + } + this.summed_height += row_height * (logo_rows - 1); + } + //the last row has the name and fine text below it but no padding + this.summed_height += this.stack_height + (this.y_axis ? this.y_num_height/2 : 0); + + var fine_txt_total = (has_finetext ? this.fine_txt_height + this.fine_txt_above : 0); + if (has_names) { + this.summed_height += fine_txt_total + this.name_height; + this.summed_height += Math.max((this.y_axis ? this.y_num_height/2 : 0), + this.x_num_height + this.x_num_above + this.name_spacer); + } else { + this.summed_height += Math.max((this.y_axis ? this.y_num_height/2 : 0), + this.x_num_height + this.x_num_above + fine_txt_total); + } + + //calculate how much horizontal space we want to draw this + //first add the padding at the left and right since that's always there + this.summed_width += this.pad_left + this.pad_right; + if (this.y_axis) { + //add on the space for the y-axis label + this.summed_width += this.y_label_height + this.y_label_spacer; + //add on the space for the y-axis + this.summed_width += this.y_num_width + this.y_tic_width; + } + //add on the space for the stacks + this.summed_width += (this.stack_pad_left + this.stack_width) * logo_columns; + //add on the padding after the stacks (an offset from the fine text) + this.summed_width += this.stacks_pad_right; + +}; + +//====================================================================== +// end LogoMetrics object +//====================================================================== + +//found this trick at http://talideon.com/weblog/2005/02/detecting-broken-images-js.cfm +function image_ok(img) { + "use strict"; + // During the onload event, IE correctly identifies any images that + // weren't downloaded as not complete. Others should too. Gecko-based + // browsers act like NS4 in that they report this incorrectly. + if (!img.complete) { + return false; + } + // However, they do have two very useful properties: naturalWidth and + // naturalHeight. These give the true size of the image. If it failed + // to load, either of these should be zero. + if (typeof img.naturalWidth !== "undefined" && img.naturalWidth === 0) { + return false; + } + // No other way of checking: assume it's ok. + return true; +} + +function supports_text(ctx) { + "use strict"; + if (!ctx.fillText) { + return false; + } + if (!ctx.measureText) { + return false; + } + return true; +} + +//draws the scale, returns the width +function draw_scale(ctx, metrics, alphabet_ic, raster) { + "use strict"; + var tic_height, i; + tic_height = metrics.stack_height / alphabet_ic; + ctx.save(); + ctx.translate(metrics.y_label_height, metrics.y_num_height/2); + //draw the axis label + ctx.save(); + ctx.font = metrics.y_label_font; + ctx.translate(0, metrics.stack_height/2); + ctx.rotate(-(Math.PI / 2)); + ctx.textAlign = "center"; + ctx.fillText("bits", 0, 0); + ctx.restore(); + + ctx.translate(metrics.y_label_spacer + metrics.y_num_width, 0); + + //draw the axis tics + ctx.save(); + ctx.translate(0, metrics.stack_height); + for (i = 0; i <= alphabet_ic; i++) { + //draw the number + ctx.save(); + ctx.translate(-1, 0); + raster.draw_scale_num(ctx, metrics.y_num_font, i); + ctx.restore(); + //draw the tic + ctx.fillRect(0, -1, metrics.y_tic_width, 2); + //prepare for next tic + ctx.translate(0, -tic_height); + } + ctx.restore(); + + ctx.fillRect(metrics.y_tic_width - 2, 0, 2, metrics.stack_height) + + ctx.restore(); +} + +function draw_stack_num(ctx, metrics, row_index, raster) { + "use strict"; + ctx.save(); + ctx.translate(0, Math.round(metrics.stack_height + metrics.x_num_above)); + if (metrics.x_axis == 1) { + raster.draw_stack_num(ctx, metrics.x_num_font, metrics.stack_width, row_index); + } else if (metrics.x_axis == 0) { + // draw dots instead of the numbers (good for small logos) + ctx.beginPath(); + var radius = Math.round(metrics.x_num_height / 2); + ctx.arc(Math.round(metrics.stack_width / 2), radius, radius, 0, 2 * Math.PI, false); + ctx.fill(); + } + ctx.restore(); +} + +function draw_stack(ctx, metrics, symbols, raster) { + "use strict"; + var preferred_pad, sym_min, i, sym, sym_height, pad; + preferred_pad = 0; + sym_min = 5; + + ctx.save();//1 + ctx.translate(0, metrics.stack_height); + for (i = 0; i < symbols.length; i++) { + sym = symbols[i]; + sym_height = metrics.stack_height * sym.get_scale(); + + pad = preferred_pad; + if (sym_height - pad < sym_min) { + pad = Math.min(pad, Math.max(0, sym_height - sym_min)); + } + sym_height -= pad; + + //translate to the correct position + ctx.translate(0, -(pad/2 + sym_height)); + + //draw + raster.draw_stack_sym(ctx, sym.get_symbol(), 0, 0, metrics.stack_width, sym_height); + //translate past the padding + ctx.translate(0, -(pad/2)); + } + ctx.restore();//1 +} + +function draw_dashed_line(ctx, pattern, start, x1, y1, x2, y2) { + "use strict"; + var x, y, len, i, dx, dy, tlen, theta, mulx, muly, lx, ly; + dx = x2 - x1; + dy = y2 - y1; + tlen = Math.pow(dx*dx + dy*dy, 0.5); + theta = Math.atan2(dy,dx); + mulx = Math.cos(theta); + muly = Math.sin(theta); + lx = []; + ly = []; + for (i = 0; i < pattern; ++i) { + lx.push(pattern[i] * mulx); + ly.push(pattern[i] * muly); + } + i = start; + x = x1; + y = y1; + len = 0; + ctx.beginPath(); + while (len + pattern[i] < tlen) { + ctx.moveTo(x, y); + x += lx[i]; + y += ly[i]; + ctx.lineTo(x, y); + len += pattern[i]; + i = (i + 1) % pattern.length; + x += lx[i]; + y += ly[i]; + len += pattern[i]; + i = (i + 1) % pattern.length; + } + if (len < tlen) { + ctx.moveTo(x, y); + x += mulx * (tlen - len); + y += muly * (tlen - len); + ctx.lineTo(x, y); + } + ctx.stroke(); +} + +function draw_trim_background(ctx, metrics, left_start, left_end, left_divider, right_start, right_end, right_divider) { + "use strict"; + var left_size = left_end - left_start; + var right_size = right_end - right_start; + var line_x; + + ctx.save();//s8 + ctx.fillStyle = "rgb(240, 240, 240)"; + if (left_size > 0) { + ctx.fillRect(left_start * metrics.stack_width, 0, left_size * metrics.stack_width, metrics.stack_height); + } + if (right_size > 0) { + ctx.fillRect(right_start * metrics.stack_width, 0, right_size * metrics.stack_width, metrics.stack_height); + } + ctx.fillStyle = "rgb(51, 51, 51)"; + if (left_size > 0 && left_divider) { + line_x = (left_end * metrics.stack_width) - 0.5; + draw_dashed_line(ctx, [3], 0, line_x, 0, line_x, metrics.stack_height); + } + if (right_size > 0 && right_divider) { + line_x = (right_start * metrics.stack_width) + 0.5; + draw_dashed_line(ctx, [3], 0, line_x, 0, line_x, metrics.stack_height); + } + ctx.restore();//s8 +} + +function size_logo_on_canvas(logo, canvas, show_names, scale) { + "use strict"; + var draw_name, draw_finetext, metrics; + draw_name = (typeof show_names === "boolean" ? show_names : (logo.get_rows() > 1)); + draw_finetext = (logo.fine_text.length > 0); + if (canvas.width !== 0 && canvas.height !== 0) { + return; + } + metrics = new LogoMetrics(canvas.getContext('2d'), + logo.get_xlate_columns(), logo.get_rows(), draw_name, draw_finetext, logo.x_axis, logo.y_axis); + if (typeof scale == "number") { + //resize the canvas to fit the scaled logo + canvas.width = metrics.summed_width * scale; + canvas.height = metrics.summed_height * scale; + } else { + if (canvas.width === 0 && canvas.height === 0) { + canvas.width = metrics.summed_width; + canvas.height = metrics.summed_height; + } else if (canvas.width === 0) { + canvas.width = metrics.summed_width * (canvas.height / metrics.summed_height); + } else if (canvas.height === 0) { + canvas.height = metrics.summed_height * (canvas.width / metrics.summed_width); + } + } +} + +function draw_logo_on_canvas(logo, canvas, show_names, scale) { + "use strict"; + var i, draw_name, draw_finetext, ctx, metrics, raster, pspm_i, pspm, + offset, col_index, motif_position, ssc; + ssc = false; + draw_name = (typeof show_names === "boolean" ? show_names : (logo.get_rows() > 1)); + draw_finetext = (logo.fine_text.length > 0); + ctx = canvas.getContext('2d'); + //assume that the user wants the canvas scaled equally so calculate what the best width for this image should be + metrics = new LogoMetrics(ctx, logo.get_xlate_columns(), logo.get_rows(), draw_name, draw_finetext, logo.x_axis, logo.y_axis); + if (typeof scale == "number") { + //resize the canvas to fit the scaled logo + canvas.width = metrics.summed_width * scale; + canvas.height = metrics.summed_height * scale; + } else { + if (canvas.width === 0 && canvas.height === 0) { + scale = 1; + canvas.width = metrics.summed_width; + canvas.height = metrics.summed_height; + } else if (canvas.width === 0) { + scale = canvas.height / metrics.summed_height; + canvas.width = metrics.summed_width * scale; + } else if (canvas.height === 0) { + scale = canvas.width / metrics.summed_width; + canvas.height = metrics.summed_height * scale; + } else { + scale = Math.min(canvas.width / metrics.summed_width, canvas.height / metrics.summed_height); + } + } + // cache the raster based on the assumption that we will be drawing a lot + // of logos the same size and alphabet + if (typeof draw_logo_on_canvas.raster_cache === "undefined") { + draw_logo_on_canvas.raster_cache = []; + } + for (i = 0; i < draw_logo_on_canvas.raster_cache.length; i++) { + raster = draw_logo_on_canvas.raster_cache[i]; + if (raster.get_alphabet().equals(logo.alphabet) && + Math.abs(raster.get_scale() - scale) < 0.1) break; + raster = null; + } + if (raster == null) { + raster = new RasterizedAlphabet(logo.alphabet, scale, metrics.stack_font, metrics.stack_width); + draw_logo_on_canvas.raster_cache.push(raster); + } + ctx = canvas.getContext('2d'); + ctx.save();//s1 + ctx.scale(scale, scale); + ctx.save();//s2 + ctx.save();//s7 + //create margin + ctx.translate(Math.round(metrics.pad_left), Math.round(metrics.pad_top)); + for (pspm_i = 0; pspm_i < logo.get_rows(); ++pspm_i) { + pspm = logo.get_pspm(pspm_i); + offset = logo.get_offset(pspm_i); + //optionally draw name if this isn't the last row or is the only row + if (draw_name && (logo.get_rows() == 1 || pspm_i != (logo.get_rows()-1))) { + ctx.save();//s4 + ctx.translate(Math.round(metrics.summed_width/2), Math.round(metrics.name_height)); + ctx.font = metrics.name_font; + ctx.textAlign = "center"; + ctx.fillText(pspm.name, 0, 0); + ctx.restore();//s4 + ctx.translate(0, Math.round(metrics.name_height + + Math.min(0, metrics.name_spacer - metrics.y_num_height/2))); + } + //draw scale + if (logo.y_axis) draw_scale(ctx, metrics, logo.alphabet.get_ic(), raster); + ctx.save();//s5 + //translate across past the scale + if (logo.y_axis) { + ctx.translate(Math.round(metrics.y_label_height + metrics.y_label_spacer + + metrics.y_num_width + metrics.y_tic_width), Math.round(metrics.y_num_height / 2)); + } + //draw the trimming background + if (pspm.get_left_trim() > 0 || pspm.get_right_trim() > 0) { + var left_start = offset * logo.get_xlate_nsyms(); + var left_end = (offset + pspm.get_left_trim()) * logo.get_xlate_nsyms(); + var left_divider = true; + if (left_end < logo.get_xlate_start() || left_start > logo.get_xlate_end()) { + // no overlap + left_start = 0; + left_end = 0; + left_divider = false; + } else { + if (left_start < logo.get_xlate_start()) { + left_start = logo.get_xlate_start(); + } + if (left_end > logo.get_xlate_end()) { + left_end = logo.get_xlate_end(); + left_divider = false; + } + left_start -= logo.get_xlate_start(); + left_end -= logo.get_xlate_start(); + if (left_end < left_start) { + left_start = 0; + left_end = 0; + left_divider = false; + } + } + var right_end = (offset + pspm.get_motif_length()) * logo.get_xlate_nsyms(); + //var right_start = right_end - (pspm.get_left_trim() * logo.get_xlate_nsyms()); + var right_start = right_end - (pspm.get_right_trim() * logo.get_xlate_nsyms()); + var right_divider = true; + if (right_end < logo.get_xlate_start() || right_start > logo.get_xlate_end()) { + // no overlap + right_start = 0; + right_end = 0; + right_divider = false; + } else { + if (right_start < logo.get_xlate_start()) { + right_start = logo.get_xlate_start(); + right_divider = false; + } + if (right_end > logo.get_xlate_end()) { + right_end = logo.get_xlate_end(); + } + right_start -= logo.get_xlate_start(); + right_end -= logo.get_xlate_start(); + if (right_end < right_start) { + right_start = 0; + right_end = 0; + right_divider = false; + } + } + draw_trim_background(ctx, metrics, left_start, left_end, left_divider, right_start, right_end, right_divider); + } + //draw letters + var xlate_col; + for (xlate_col = logo.get_xlate_start(); xlate_col < logo.get_xlate_end(); xlate_col++) { + ctx.translate(metrics.stack_pad_left,0); + col_index = Math.floor(xlate_col / logo.get_xlate_nsyms()); + if (xlate_col % logo.get_xlate_nsyms() == 0) { + if (col_index >= offset && col_index < (offset + pspm.get_motif_length())) { + motif_position = col_index - offset; + draw_stack_num(ctx, metrics, motif_position, raster); + draw_stack(ctx, metrics, pspm.get_stack(motif_position, logo.alphabet, ssc), raster); + } + } else { + if (col_index >= offset && col_index < (offset + pspm.get_motif_length())) { + ctx.save();// s5.1 + ctx.translate(0, Math.round(metrics.stack_height)); + // TODO draw a dot or dash or something to indicate continuity of the motif + ctx.restore(); //s5.1 + } + } + ctx.translate(Math.round(metrics.stack_width), 0); + } + ctx.restore();//s5 + ////optionally draw name if this is the last row but isn't the only row + if (draw_name && (logo.get_rows() != 1 && pspm_i == (logo.get_rows()-1))) { + //translate vertically past the stack and axis's + ctx.translate(0, metrics.y_num_height/2 + metrics.stack_height + + Math.max(metrics.y_num_height/2, metrics.x_num_above + metrics.x_num_width + metrics.name_spacer)); + + ctx.save();//s6 + ctx.translate(metrics.summed_width/2, metrics.name_height); + ctx.font = metrics.name_font; + ctx.textAlign = "center"; + ctx.fillText(pspm.name, 0, 0); + ctx.restore();//s6 + ctx.translate(0, metrics.name_height); + } else { + //translate vertically past the stack and axis's + ctx.translate(0, metrics.y_num_height/2 + metrics.stack_height + + Math.max(metrics.y_num_height/2, metrics.x_num_above + metrics.x_num_width)); + } + //if not the last row then add middle padding + if (pspm_i != (logo.get_rows() -1)) { + ctx.translate(0, metrics.pad_middle); + } + } + ctx.restore();//s7 + if (logo.fine_text.length > 0) { + ctx.translate(metrics.summed_width - metrics.pad_right, metrics.summed_height - metrics.pad_bottom); + ctx.font = metrics.fine_txt_font; + ctx.textAlign = "right"; + ctx.fillText(logo.fine_text, 0,0); + } + ctx.restore();//s2 + ctx.restore();//s1 +} + +function create_canvas(c_width, c_height, c_id, c_title, c_display) { + "use strict"; + var canvas = document.createElement("canvas"); + //check for canvas support before attempting anything + if (!canvas.getContext) { + return null; + } + var ctx = canvas.getContext('2d'); + //check for html5 text drawing support + if (!supports_text(ctx)) { + return null; + } + //size the canvas + canvas.width = c_width; + canvas.height = c_height; + canvas.id = c_id; + canvas.title = c_title; + canvas.style.display = c_display; + return canvas; +} + +function logo_1(alphabet, fine_text, pspm) { + "use strict"; + var logo = new Logo(alphabet, fine_text); + logo.add_pspm(pspm); + return logo; +} + +function logo_2(alphabet, fine_text, target, query, query_offset) { + "use strict"; + var logo = new Logo(alphabet, fine_text); + if (query_offset < 0) { + logo.add_pspm(target, -query_offset); + logo.add_pspm(query); + } else { + logo.add_pspm(target); + logo.add_pspm(query, query_offset); + } + return logo; +} + +/* + * Specifies an alternate source for an image. + * If the image with the image_id specified has + * not loaded then a generated logo will be used + * to replace it. + * + * Note that the image must either have dimensions + * or a scale must be set. + */ +function alternate_logo(logo, image_id, scale) { + "use strict"; + var image = document.getElementById(image_id); + if (!image) { + alert("Can't find specified image id (" + image_id + ")"); + return; + } + //if the image has loaded then there is no reason to use the canvas + if (image_ok(image)) { + return; + } + //the image has failed to load so replace it with a canvas if we can. + var canvas = create_canvas(image.width, image.height, image_id, image.title, image.style.display); + if (canvas === null) { + return; + } + //draw the logo on the canvas + draw_logo_on_canvas(logo, canvas, null, scale); + //replace the image with the canvas + image.parentNode.replaceChild(canvas, image); +} + +/* + * Specifes that the element with the specified id + * should be replaced with a generated logo. + */ +function replace_logo(logo, replace_id, scale, title_txt, display_style) { + "use strict"; + var element = document.getElementById(replace_id); + if (!replace_id) { + alert("Can't find specified id (" + replace_id + ")"); + return; + } + //found the element! + var canvas = create_canvas(50, 120, replace_id, title_txt, display_style); + if (canvas === null) { + return; + } + //draw the logo on the canvas + draw_logo_on_canvas(logo, canvas, null, scale); + //replace the element with the canvas + element.parentNode.replaceChild(canvas, element); +} + +/* + * Fast string trimming implementation found at + * http://blog.stevenlevithan.com/archives/faster-trim-javascript + * + * Note that regex is good at removing leading space but + * bad at removing trailing space as it has to first go through + * the whole string. + */ +function trim (str) { + "use strict"; + var ws, i; + str = str.replace(/^\s\s*/, ''); + ws = /\s/; i = str.length; + while (ws.test(str.charAt(--i))); + return str.slice(0, i + 1); +} +</script> + <script> +var current_motif = 0; +var dreme_alphabet = new Alphabet(data.alphabet, data.control_db.freqs); + +/* + * Create a pspm for the given motif data + */ +function motif_pspm(m) { + return new Pspm(m.pwm, m.id, 0, 0, m.nsites, m.evalue); +} + +/* + * Create a count matrix from the given motif data + */ +function motif_count_matrix(motif) { + return motif_pspm(motif).as_count_matrix(); +} + +/* + * Create a probablity matrix from the given motif data + */ +function motif_prob_matrix(motif) { + return motif_pspm(motif).as_probability_matrix(); +} + +/* + * Create a minimal meme format motif from the given motif data + */ +function motif_minimal_meme(motif) { + return motif_pspm(motif).as_meme({ + "with_header": true, + "with_pspm": true, + "with_pssm": false, + "version": data["version"], + "alphabet": dreme_alphabet, + "strands": (data.options.revcomp ? 2 : 1) + }); +} + +/* + * Fill in a template variable + */ +function set_tvar(template, tvar, value) { + var node; + node = find_child(template, tvar); + if (node === null) { + throw new Error("Template does not contain variable " + tvar); + } + node.innerHTML = ""; + if (typeof value !== "object") { + node.appendChild(document.createTextNode(value)); + } else { + node.appendChild(value); + } +} + +/* + * Make a canvas with the motif logo drawn on it. + */ +function make_logo(motif, height, rc) { + var pspm = new Pspm(motif["pwm"]); + if (rc) pspm = pspm.copy().reverse_complement(dreme_alphabet); + var logo = new Logo(dreme_alphabet); + logo.add_pspm(pspm, 0); + var canvas = document.createElement('canvas'); + canvas.height = height; + canvas.width = 0; + draw_logo_on_canvas(logo, canvas, false); + return canvas; +} + +/* + * Create a button designed to contain a single symbol + */ +function make_sym_btn(symbol, title, action) { + var box, sbox; + box = document.createElement("div"); + box.tabIndex = 0; + box.className = "sym_btn"; + sbox = document.createElement("span"); + if (typeof symbol == "string") { + sbox.appendChild(document.createTextNode(symbol)); + } else { + sbox.appendChild(symbol); + } + box.appendChild(sbox); + box.title = title; + box.addEventListener('click', action, false); + box.addEventListener('keydown', action, false); + return box; +} + +/* + * Create a pair of text spans with different classes. + * This is useful when using CSS to only display one of them. + */ +function text_pair(txt1, cls1, txt2, cls2) { + var container, part1, part2; + container = document.createElement("span"); + part1 = document.createElement("span"); + part1.appendChild(document.createTextNode(txt1)); + part1.className = cls1; + container.appendChild(part1); + part2 = document.createElement("span"); + part2.appendChild(document.createTextNode(txt2)); + part2.className = cls2; + container.appendChild(part2); + return container; +} + +/* + * Make a colourised sequence. + */ +function make_seq(seq) { + var i, j, letter, lbox, sbox; + sbox = document.createElement("span"); + for (i = 0; i < seq.length; i = j) { + letter = seq.charAt(i); + for (j = i+1; j < seq.length; j++) { + if (seq.charAt(j) !== letter) { + break; + } + } + lbox = document.createElement("span"); + lbox.style.color = dreme_alphabet.get_colour(dreme_alphabet.get_index(letter)); + lbox.appendChild(document.createTextNode(seq.substring(i, j))); + sbox.appendChild(lbox); + } + return sbox; +} + +/* + * Create a description element taking into account the newlines in the source text. + */ +function make_description(text) { + var i, j, lines, p; + var container = document.createElement("div"); + var paragraphs = text.split(/\n\n+/); + for (i = 0; i < paragraphs.length; i++) { + lines = paragraphs[i].split(/\n/); + p = document.createElement("p"); + p.appendChild(document.createTextNode(lines[0])); + for (j = 1; j < lines.length; j++) { + p.appendChild(document.createElement("br")); + p.appendChild(document.createTextNode(lines[j])); + } + container.appendChild(p); + } + return container; +} + +/* + * Make the table header for the discovered motifs. + */ +function make_motif_header() { + var row = document.createElement("tr"); + add_text_header_cell(row, "", "", "motif_ordinal"); + add_text_header_cell(row, "Motif", "pop_motifs_word", "motif_word"); + add_text_header_cell(row, "Logo", "pop_motifs_logo", "motif_logo"); + if (data.options.revcomp) { + add_text_header_cell(row, "RC Logo", "pop_motifs_rc_logo", "motif_logo"); + } + add_text_header_cell(row, "E-value", "pop_motifs_evalue", "motif_evalue"); + add_text_header_cell(row, "Unerased E-value", "pop_motifs_uevalue", "motif_evalue"); + add_text_header_cell(row, "More", "pop_more", "motif_more"); + add_text_header_cell(row, "Submit/Download", "pop_submit_dl", "motif_submit"); + row.className = "more"; + return row; +} + +/* + * Make a compact motif summary row for the discovered motifs. + */ +function make_motif_row(tbody, ordinal, motif) { + var row = document.createElement("tr"); + add_text_cell(row, "" + ordinal + ".", "motif_ordinal"); + add_text_cell(row, motif["id"], "motif_word"); + add_cell(row, make_logo(motif, 50, false), "motif_logo"); + if (data.options.revcomp) { + add_cell(row, make_logo(motif, 50, true), "motif_logo"); + } + add_text_cell(row, motif["evalue"], "motif_evalue"); + add_text_cell(row, motif["unerased_evalue"], "motif_evalue"); + add_cell(row, make_sym_btn(text_pair("\u21A7", "less", "\u21A5", "more"), "Show more information.", function(e) { toggle_class(tbody, "collapsed"); }, "\u21A5", ""), "motif_more"); + add_cell(row, make_sym_btn("\u21E2", "Submit the motif to another MEME Suite program or download it.", function(e) { action_show_outpop(e, ordinal); }), "motif_submit"); + return row; +} + +/* + * Make a sortable table of enriched matching rows. + */ +function make_motif_words(motif) { + var row, i, match; + var table = document.createElement("table"); + var thead = document.createElement("thead"); + row = document.createElement("tr"); + add_text_header_cell(row, "Word", "pop_match_word", "match_word", function(e) {sort_table(this, compare_words);}); + add_text_header_cell(row, "Positives", "pop_match_pos", "match_count", function(e) {sort_table(this, compare_counts);}); + add_text_header_cell(row, "Negatives", "pop_match_neg", "match_count", function(e) {sort_table(this, compare_counts);}); + add_text_header_cell(row, "P-value", "pop_match_pval", "match_evalue", function(e) {sort_table(this, compare_evalues);}); + add_text_header_cell(row, "E-value", "pop_match_eval", "match_evalue", function(e) {sort_table(this, compare_evalues);}); + thead.appendChild(row); + table.appendChild(thead); + var tbody = document.createElement("tbody"); + for (i = 0; i < motif.matches.length; i++) { + match = motif.matches[i]; + row = document.createElement("tr"); + add_cell(row, make_seq(match.seq), "match_word"); + add_text_cell(row, match.p + " / " + data.sequence_db.count, "match_count"); + add_text_cell(row, match.n + " / " + data.control_db.count, "match_count"); + add_text_cell(row, match.pvalue, "match_evalue"); + add_text_cell(row, match.evalue, "match_evalue"); + tbody.appendChild(row); + } + table.appendChild(tbody); + return table; +} + +/* + * Make an expanded view of a discovered motif. + */ +function make_motif_exp(tbody, ordinal, motif) { + "use strict"; + var box, pspm, logo_box; + box = $("tmpl_motif_expanded").cloneNode(true); + toggle_class(box, "template", false); + box.id = ""; + find_child(box, "tvar_logo").appendChild(make_logo(motif, 150, false)); + if (data.options.revcomp) { + find_child(box, "tvar_rclogo").appendChild(make_logo(motif, 150, true)); + } + set_tvar(box, "tvar_p", motif["p"]); + set_tvar(box, "tvar_p_total", data.sequence_db.count); + set_tvar(box, "tvar_n", motif["n"]); + set_tvar(box, "tvar_n_total", data.control_db.count); + set_tvar(box, "tvar_pvalue", motif["pvalue"]); + set_tvar(box, "tvar_evalue", motif["evalue"]); + set_tvar(box, "tvar_uevalue", motif["unerased_evalue"]); + set_tvar(box, "tvar_words", make_motif_words(motif)); + var cell = document.createElement("td"); + cell.colSpan = 8; + cell.appendChild(box); + var row = document.createElement("tr"); + row.className = "more"; + row.appendChild(cell); + return row; +} + +/* + * Convert a string containing a scientific number into the log of that number + * without having an intermediate representation of the number. + * This is intended to avoid underflow problems with the tiny evalues that + * MEME and DREME can create. + */ +function sci2log(scinum) { + "use strict"; + var ev_re, match, sig, exp; + ev_re = /^(.*)e(.*)$/; + if (match = ev_re.exec(scinum)) { + sig = parseFloat(match[1]); + exp = parseInt(match[2]); + return Math.log(sig) + (exp * Math.log(10)); + } + return 0; +} + +/* + * Create a table of discovered motifs. A fresh table body is used for each + * motif to make hiding/showing rows with css easier. + */ +function make_motifs() { + "use strict"; + var i, row, tbody, motif, ordinal; + // make the motifs table + var container = $("motifs"); + container.innerHTML = ""; // clear content + var table = document.createElement("table"); + // add a header that is always shown + var thead = document.createElement("thead"); + thead.appendChild(make_motif_header()); + table.appendChild(thead); + for (i = 0; i < data.motifs.length; i++) { + ordinal = i + 1; + motif = data.motifs[i]; + tbody = document.createElement("tbody"); + tbody.className = "collapsed"; + tbody.appendChild(make_motif_row(tbody, ordinal, motif)); + tbody.appendChild(make_motif_exp(tbody, ordinal, motif)); + // create a following header for every row except the last one + if ((i + 1) < data.motifs.length) tbody.appendChild(make_motif_header()); + table.appendChild(tbody); + } + container.appendChild(table); +} + +/* + * Create a table showing all the alphabet symbols, their names and frequencies. + */ +function make_alpha_bg(alph, freqs) { + function colour_symbol(index) { + var span = document.createElement("span"); + span.appendChild(document.createTextNode(alph.get_symbol(index))); + span.style.color = alph.get_colour(index); + span.className = "alpha_symbol"; + return span; + } + var table, thead, tbody, row, th, span, i; + // create table + table = document.createElement("table"); + table.className = "inputs"; + // create header + thead = document.createElement("thead"); + table.appendChild(thead); + row = thead.insertRow(thead.rows.length); + if (alph.has_complement()) { + add_text_header_cell(row, "Name", "pop_alph_name"); + add_text_header_cell(row, "Bg.", "pop_alph_control"); + add_text_header_cell(row, ""); + add_text_header_cell(row, ""); + add_text_header_cell(row, ""); + add_text_header_cell(row, "Bg.", "pop_alph_control"); + add_text_header_cell(row, "Name", "pop_alph_name"); + } else { + add_text_header_cell(row, ""); + add_text_header_cell(row, "Name", "pop_alph_name"); + add_text_header_cell(row, "Bg.", "pop_alph_control"); + } + // add alphabet entries + tbody = document.createElement("tbody"); + table.appendChild(tbody); + if (alph.has_complement()) { + for (i = 0; i < alph.get_size_core(); i++) { + var c = alph.get_complement(i); + if (i > c) continue; + row = tbody.insertRow(tbody.rows.length); + add_text_cell(row, alph.get_name(i)); + add_text_cell(row, "" + freqs[i].toFixed(3)); + add_cell(row, colour_symbol(i)); + add_text_cell(row, "~"); + add_cell(row, colour_symbol(c)); + add_text_cell(row, "" + freqs[c].toFixed(3)); + add_text_cell(row, alph.get_name(c)); + } + } else { + for (i = 0; i < alph.get_size_core(); i++) { + row = tbody.insertRow(tbody.rows.length); + add_cell(row, colour_symbol(i)); + add_text_cell(row, alph.get_name(i)); + add_text_cell(row, "" + freqs[i].toFixed(3)); + } + } + return table; +} + +/* + * Updates the format download text in the popup. + * This is called when either the format or current motif changes. + */ +function update_outpop_format(index) { + var motif = data.motifs[index]; + var fn = [motif_count_matrix, motif_prob_matrix, motif_minimal_meme]; + var suffix = ["_counts.txt", "_freqs.txt", ".meme"]; + var format = parseInt($("text_format").value); + var text = fn[format](motif); + prepare_download(text, "text/plain", motif.id + suffix[format], $("outpop_text_dl")); + $("outpop_text").value = text; +} + +/* + * Updates the motif logos and format download text in the popup. + * This is called whenever the current motif changes. + */ +function update_outpop_motif(index) { + "use strict"; + var motifs, motif, pspm, logo, canvas, num; + motifs = data["motifs"]; + if (index < 0 || index >= motifs.length) {return;} + current_motif = index; + motif = motifs[index]; + pspm = new Pspm(motif["pwm"]); + logo = new Logo(dreme_alphabet, ""); + logo.add_pspm(pspm, 0); + canvas = $("outpop_logo"); + canvas.width = canvas.width; // clear canvas + draw_logo_on_canvas(logo, canvas, false); + canvas = $("outpop_logo_rc"); + canvas.width = canvas.width; // clear rc canvas + if (data.options.revcomp) { + pspm.reverse_complement(dreme_alphabet); + logo = new Logo(dreme_alphabet, ""); + logo.add_pspm(pspm, 0); + draw_logo_on_canvas(logo, canvas, false); + } + num = $("outpop_num"); + num.innerHTML = ""; + num.appendChild(document.createTextNode("" + (index + 1))); + update_outpop_format(index); +} + + +/* + * Initialise and display the download popup. + */ +function action_show_outpop(e, ordinal) { + "use strict"; + function init() { + "use strict"; + var close_btn, next_btn, prev_btn, cancel_btn, do_btn; + var tab1, tab2, tab3; + var pnl1, pnl2, pnl3; + var format_list; + var tbl_submit, inputs, i, default_prog; + close_btn = $("outpop_close"); + close_btn.addEventListener("click", action_hide_outpop, false); + close_btn.addEventListener("keydown", action_hide_outpop, false); + next_btn = $("outpop_next"); + next_btn.addEventListener("click", action_outpop_next, false); + next_btn.addEventListener("keydown", action_outpop_next, false); + prev_btn = $("outpop_prev"); + prev_btn.addEventListener("click", action_outpop_prev, false); + prev_btn.addEventListener("keydown", action_outpop_prev, false); + cancel_btn = $("outpop_cancel"); + cancel_btn.addEventListener("click", action_hide_outpop, false); + do_btn = $("outpop_do"); + do_btn.addEventListener("click", action_outpop_submit, false); + tab1 = $("outpop_tab_1"); + tab1.tabIndex = 0; + tab1.addEventListener("click", action_outpop_tab, false); + tab1.addEventListener("keydown", action_outpop_tab, false); + tab2 = $("outpop_tab_2"); + tab2.tabIndex = 0; + tab2.addEventListener("click", action_outpop_tab, false); + tab2.addEventListener("keydown", action_outpop_tab, false); + tab3 = $("outpop_tab_3"); + tab3.tabIndex = 0; + tab3.addEventListener("click", action_outpop_tab, false); + tab3.addEventListener("keydown", action_outpop_tab, false); + pnl1 = $("outpop_pnl_1"); + pnl2 = $("outpop_pnl_2"); + pnl3 = $("outpop_pnl_3"); + toggle_class(tab1, "activeTab", true); + toggle_class(tab2, "activeTab", false); + toggle_class(tab3, "activeTab", false); + pnl1.style.display = "block"; + pnl2.style.display = "none"; + pnl3.style.display = "none"; + format_list = $("text_format"); + format_list.addEventListener("change", action_outpop_format, false); + // setup program selection + tbl_submit = $("programs"); + // when not dna, hide the inputs for programs that require dna motifs + toggle_class(tbl_submit, "alphabet_dna", dreme_alphabet.has_complement());//TODO FIXME alphabet_dna is a bad name for a field when allowing custom alphabets + // add a click listener for the radio buttons + inputs = tbl_submit.querySelectorAll("input[type='radio']"); + for (i = 0; i < inputs.length; i++) { + inputs[i].addEventListener("click", action_outpop_program, false); + } + // ensure that a default program option is selected for DNA and Protein + default_prog = document.getElementById(dreme_alphabet.has_complement() ? "submit_tomtom" : "submit_fimo"); + default_prog.checked = true; + action_outpop_program.call(default_prog); + // disable reverse-complement when not DNA + $("logo_rc_option").disabled = !dreme_alphabet.has_complement(); + // set errorbars on when ssc is on + $("logo_ssc").addEventListener("change", action_outpop_ssc, false); + } + // store the focused element + action_hide_outpop.last_active = document.activeElement; + if (!e) e = window.event; + if (e.type === "keydown") { + if (e.keyCode !== 13 && e.keyCode !== 32) { + return; + } + // stop a submit or something like that + e.preventDefault(); + } + // hide the help popup + help_popup(); + // on first load initilize the popup + if (!action_show_outpop.ready) { + init(); + action_show_outpop.ready = true; + } + update_outpop_motif(ordinal - 1); + // display the download popup + $("grey_out_page").style.display = "block"; + $("download").style.display = "block"; + $("outpop_close").focus(); +} + +/* + * Hide the download popup. + */ +function action_hide_outpop(e) { + if (!e) e = window.event; + if (e.type === "keydown") { + if (e.keyCode !== 13 && e.keyCode !== 32) { + return; + } + // stop a submit or something like that + e.preventDefault(); + } + $("download").style.display = "none"; + $("grey_out_page").style.display = "none"; + if (typeof action_hide_outpop.last_active !== "undefined") { + action_hide_outpop.last_active.focus(); + } +} + +/* + * Show the next motif in the download popup. + */ +function action_outpop_next(e) { + if (!e) e = window.event; + if (e.type === "keydown") { + if (e.keyCode !== 13 && e.keyCode !== 32) { + return; + } + // stop a submit or something like that + e.preventDefault(); + } + update_outpop_motif(current_motif + 1); +} + +/* + * Show the previous motif in the download popup. + */ +function action_outpop_prev(e) { + if (!e) e = window.event; + if (e.type === "keydown") { + if (e.keyCode !== 13 && e.keyCode !== 32) { + return; + } + // stop a submit or something like that + e.preventDefault(); + } + update_outpop_motif(current_motif - 1); +} + +/* + * Highlight the selected row in the program list. + */ +function action_outpop_program() { + "use strict"; + var table, tr, rows, i; + tr = find_parent_tag(this, "TR"); + table = find_parent_tag(tr, "TABLE"); + rows = table.querySelectorAll("tr"); + for (i = 0; i < rows.length; i++) { + toggle_class(rows[i], "selected", rows[i] === tr); + } +} + +/* + * Enable error bars when small sample correction is enabled. + */ +function action_outpop_ssc() { + "use strict"; + $("logo_err").value = $("logo_ssc").value; +} + +/* + * Submit the motif to the selected program. + */ +function action_outpop_submit(e) { + "use strict"; + var form, input, program, motifs; + // find out which program is selected + var radios, i; + radios = document.getElementsByName("program"); + program = "fimo"; // default to fimo, since it works with all alphabet types + for (i = 0; i < radios.length; i++) { + if (radios[i].checked) program = radios[i].value; + } + + motifs = motif_minimal_meme(data.motifs[current_motif]); + form = document.createElement("form"); + form.setAttribute("method", "post"); + form.setAttribute("action", site_url + "/tools/" + program); + + input = document.createElement("input"); + input.setAttribute("type", "hidden"); + input.setAttribute("name", "motifs_embed"); + input.setAttribute("value", motifs); + form.appendChild(input); + + document.body.appendChild(form); + form.submit(); + document.body.removeChild(form); +} + +/* + * Download the format text. + * Wire the link containing the data URI text to a download button so it looks + * the same as the server submit stuff. + */ +function action_outpop_download_motif(e) { + $("outpop_text_dl").click(); +} + +/* + * Download the motif logo. + * The EPS format can be calculated locally in Javascript + */ +function action_outpop_download_logo(e) { + "use strict"; + var pspm, logo, eps; + var logo_rc, logo_ssc, logo_width, logo_height; + var motif = data.motifs[current_motif]; + if ($("logo_format").value == "0") { // EPS + logo_rc = ($("logo_rc").value == "1"); + logo_ssc = ($("logo_ssc").value == "1"); + logo_width = parseFloat($("logo_width").value); + if (isNaN(logo_width) || !isFinite(logo_width) || logo_width <= 0) logo_width = null; + logo_height = parseFloat($("logo_height").value); + if (isNaN(logo_height) || !isFinite(logo_height) || logo_height <= 0) logo_height = null; + // create a PSPM from the motif + pspm = motif_pspm(motif); + if (logo_rc) pspm.reverse_complement(dreme_alphabet); + logo = new Logo(dreme_alphabet); + logo.add_pspm(pspm, 0); + eps = logo.as_eps({"ssc": logo_ssc, "logo_width": logo_width, "logo_height": logo_height}); + prepare_download(eps, "application/postscript", motif.id + ".eps"); + } else { + $("logo_motifs").value = motif_minimal_meme(motif); + $("logo_form").submit(); + } +} + +/* + * Change the selected tab in the download popup. + */ +function action_outpop_tab(e) { + "use strict"; + var tab1, tab2, tab3, pnl1, pnl2, pnl3, do_btn; + if (!e) e = window.event; + if (e.type === "keydown") { + if (e.keyCode !== 13 && e.keyCode !== 32) { + return; + } + // stop a submit or something like that + e.preventDefault(); + } + tab1 = $("outpop_tab_1"); + tab2 = $("outpop_tab_2"); + tab3 = $("outpop_tab_3"); + pnl1 = $("outpop_pnl_1"); + pnl2 = $("outpop_pnl_2"); + pnl3 = $("outpop_pnl_3"); + do_btn = $("outpop_do"); + + toggle_class(tab1, "activeTab", (this === tab1)); + toggle_class(tab2, "activeTab", (this === tab2)); + toggle_class(tab3, "activeTab", (this === tab3)); + pnl1.style.display = ((this === tab1) ? "block" : "none"); + pnl2.style.display = ((this === tab2) ? "block" : "none"); + pnl3.style.display = ((this === tab3) ? "block" : "none"); + do_btn.value = ((this === tab1) ? "Submit" : "Download"); + do_btn.removeEventListener("click", action_outpop_submit, false); + do_btn.removeEventListener("click", action_outpop_download_logo, false); + do_btn.removeEventListener("click", action_outpop_download_motif, false); + if (this === tab1) { + do_btn.addEventListener("click", action_outpop_submit, false); + } else if (this === tab2) { + do_btn.addEventListener("click", action_outpop_download_motif, false); + } else { + do_btn.addEventListener("click", action_outpop_download_logo, false); + } +} + +/* + * Update the text in the download format popup. + */ +function action_outpop_format() { + update_outpop_format(current_motif); +} + +/* + * Find all text nodes in the given container. + */ +function text_nodes(container) { + var textNodes = []; + var stack = [container]; + // depth first search to maintain ordering when flattened + while (stack.length > 0) { + var node = stack.pop(); + if (node.nodeType == Node.TEXT_NODE) { + textNodes.push(node); + } else { + for (var i = node.childNodes.length-1; i >= 0; i--) { + stack.push(node.childNodes[i]); + } + } + } + return textNodes; +} + +/* + * Get the text out of a specific text node. + */ +function node_text(node) { + if (node === undefined) { + return ''; + } else if (node.textContent) { + return node.textContent; + } else if (node.innerText) { + return node.innerText; + } else { + return ''; + } +} + +/* + * Get the text contained within the element. + */ +function elem_text(elem, separator) { + if (separator === undefined) separator = ''; + return text_nodes(elem).map(node_text).join(separator); +} + +/* + * Sort all rows in the first table body based on the column of the given element and the comparison function. + * The sort is not very fast and is intended for small tables only. + */ +function sort_table(colEle, compare_function) { + //find the parent of colEle that is either a td or th + var i, j; + var cell = colEle; + while (true) { + if (cell == null) return; + if (cell.nodeType == Node.ELEMENT_NODE && + (cell.tagName.toLowerCase() == "td" || cell.tagName.toLowerCase() == "th")) { + break; + } + cell = cell.parentNode; + } + //find the parent of cell that is a tr + var row = cell; + while (true) { + if (row == null) return; + if (row.nodeType == Node.ELEMENT_NODE && row.tagName.toLowerCase() == "tr") { + break; + } + row = row.parentNode; + } + //find the parent of row that is a table + var table = row; + while (true) { + if (table == null) return; + if (table.nodeType == Node.ELEMENT_NODE && table.tagName.toLowerCase() == "table") { + break; + } + table = table.parentNode; + } + var column_index = cell.cellIndex; + // do a bubble sort, because the tables are so small it doesn't matter + var change; + var trs = table.tBodies[0].getElementsByTagName('tr'); + var already_sorted = true; + var reverse = false; + while (true) { + do { + change = false; + for (i = 0; i < trs.length -1; i++) { + var v1 = elem_text(trs[i].cells[column_index]); + var v2 = elem_text(trs[i+1].cells[column_index]); + if (reverse) { + var tmp = v1; + v1 = v2; + v2 = tmp; + } + if (compare_function(v1, v2) > 0) { + exchange(trs[i], trs[i+1], table); + change = true; + already_sorted = false; + trs = table.tBodies[0].getElementsByTagName('tr'); + } + } + } while (change); + if (reverse) break;// we've sorted twice so exit + if (!already_sorted) break;// sort did something so exit + // when it's sorted one way already then sort the opposite way + reverse = true; + } + // put arrows on the headers + var headers = table.tHead.getElementsByTagName('tr'); + for (i = 0; i < headers.length; i++) { + for (j = 0; j < headers[i].cells.length; j++) { + var cell = headers[i].cells[j]; + var arrows = cell.getElementsByClassName("sort_arrow"); + var arrow; + if (arrows.length == 0) { + arrow = document.createElement("span"); + arrow.className = "sort_arrow"; + cell.insertBefore(arrow, cell.firstChild); + } else { + arrow = arrows[0]; + } + arrow.innerHTML = ""; + if (j == column_index) { + arrow.appendChild(document.createTextNode(reverse ? "\u25B2" : "\u25BC")); + } + } + } +} + +/* + * Swap two rows in a table. + */ +function exchange(oRowI, oRowJ, oTable) { + var i = oRowI.rowIndex; + var j = oRowJ.rowIndex; + if (i == j+1) { + oTable.tBodies[0].insertBefore(oRowI, oRowJ); + } if (j == i+1) { + oTable.tBodies[0].insertBefore(oRowJ, oRowI); + } else { + var tmpNode = oTable.tBodies[0].replaceChild(oRowI, oRowJ); + if(typeof(oRowI) != "undefined") { + oTable.tBodies[0].insertBefore(tmpNode, oRowI); + } else { + oTable.appendChild(tmpNode); + } + } +} + +/* + * Compare two E-values which may be very small. + */ +function compare_evalues(v1, v2) { + var e1 = sci2log(v1); + var e2 = sci2log(v2); + if (e1 < e2) return -1; + else if (e1 > e2) return 1; + return 0; +} + +/* + * Compare two counts. + */ +function compare_counts(v1, v2) { + var re = /(\d+)\s*\/\s*\d+/; + var m1 = re.exec(v1); + var m2 = re.exec(v2); + if (m1 == null && m2 == null) return 0; + if (m1 == null) return -1; + if (m2 == null) return 1; + return parseInt(m2[1]) - parseInt(m1[1]); +} + +/* + * Compare two sequence words. + */ +function compare_words(v1, v2) { + return v1.localeCompare(v2); +} + + +</script> + <style> +/* The following is the content of meme.css */ +body { background-color:white; font-size: 12px; font-family: Verdana, Arial, Helvetica, sans-serif;} + +div.help { + display: inline-block; + margin: 0px; + padding: 0px; + width: 12px; + height: 13px; + cursor: pointer; + background-image: url(data:image/gif;base64,R0lGODlhDAANAIABANR0AP///yH5BAEAAAEALAAAAAAMAA0AAAIdhI8Xy22MIFgv1DttrrJ7mlGNNo4c+aFg6SQuUAAAOw==); +} + +div.help:hover { + background-image: url(data:image/gif;base64,R0lGODlhDAANAKEAANR0AP///9R0ANR0ACH+EUNyZWF0ZWQgd2l0aCBHSU1QACH5BAEAAAIALAAAAAAMAA0AAAIdDGynCe3PgoxONntvwqz2/z2K2ImjR0KhmSIZUgAAOw==); +} + +p.spaced { line-height: 1.8em;} + +span.citation { font-family: "Book Antiqua", "Palatino Linotype", serif; color: #004a4d;} + +p.pad { padding-left: 30px; padding-top: 5px; padding-bottom: 10px;} + +td.jump { font-size: 13px; color: #ffffff; background-color: #00666a; + font-family: Georgia, "Times New Roman", Times, serif;} + +a.jump { margin: 15px 0 0; font-style: normal; font-variant: small-caps; + font-weight: bolder; font-family: Georgia, "Times New Roman", Times, serif;} + +h2.mainh {font-size: 1.5em; font-style: normal; margin: 15px 0 0; + font-variant: small-caps; font-family: Georgia, "Times New Roman", Times, serif;} + +h2.line {border-bottom: 1px solid #CCCCCC; font-size: 1.5em; font-style: normal; + margin: 15px 0 0; padding-bottom: 3px; font-variant: small-caps; + font-family: Georgia, "Times New Roman", Times, serif;} + +h4 {border-bottom: 1px solid #CCCCCC; font-size: 1.2em; font-style: normal; + margin: 10px 0 0; padding-bottom: 3px; font-family: Georgia, "Times New Roman", Times, serif;} + +h5 {margin: 0px} + +a.help { font-size: 9px; font-style: normal; text-transform: uppercase; + font-family: Georgia, "Times New Roman", Times, serif;} + +div.pad { padding-left: 30px; padding-top: 5px; padding-bottom: 10px;} + +div.pad1 { margin: 10px 5px;} + +div.pad2 { margin: 25px 5px 5px;} +h2.pad2 { padding: 25px 5px 5px;} + +div.pad3 { padding: 5px 0px 10px 30px;} + +div.box { border: 2px solid #CCCCCC; padding:10px; overflow: hidden;} + +div.bar { border-left: 7px solid #00666a; padding:5px; margin-top:25px; } + +div.subsection {margin:25px 0px;} + +img {border:0px none;} + +th.majorth {text-align:left;} +th.minorth {font-weight:normal; text-align:left; width:8em; padding: 3px 0px;} +th.actionth {font-weight:normal; text-align:left;} + +.explain h5 {font-size:1em; margin-left: 1em;} + +div.doc {margin-left: 2em; margin-bottom: 3em;} + +th.trainingset { + border-bottom: thin dashed black; + font-weight:normal; + padding:0px 10px; +} +div.pop_content { + position:absolute; + z-index:50; + width:300px; + padding: 5px; + background: #E4ECEC; + font-size: 12px; + font-family: Arial; + border-style: double; + border-width: 3px; + border-color: #AA2244; + display:none; +} + +div.pop_content > *:first-child { + margin-top: 0px; +} + +div.pop_content h1, div.pop_content h2, div.pop_content h3, div.pop_content h4, +div.pop_content h5, div.pop_content h6, div.pop_content p { + margin: 0px; +} + +div.pop_content p + h1, div.pop_content p + h2, div.pop_content p + h3, +div.pop_content p + h4, div.pop_content p + h5, div.pop_content p + h6 { + margin-top: 5px; +} + +div.pop_content p + p { + margin-top: 5px; +} + +div.pop_content > *:last-child { + margin-bottom: 0px; +} + +div.pop_content div.pop_close { + /* old definition */ + float:right; + bottom: 0; +} + +div.pop_content span.pop_close, div.pop_content span.pop_back { + display: inline-block; + border: 2px outset #661429; + background-color: #CCC; + padding-left: 1px; + padding-right: 1px; + padding-top: 0px; + padding-bottom: 0px; + cursor: pointer; + color: #AA2244; /*#661429;*/ + font-weight: bold; +} + +div.pop_content span.pop_close:active, div.pop_content span.pop_back:active { + border-style: inset; +} + +div.pop_content span.pop_close { + float:right; + /*border: 2px outset #AA002B;*/ + /*color: #AA2244;*/ +} + +div.pop_content:not(.nested) .nested_only { + display: none; +} + +div.pop_back_sec { + margin-bottom: 5px; +} + +div.pop_close_sec { + margin-top: 5px; +} + +table.hide_advanced tr.advanced { + display: none; +} +span.show_more { + display: none; +} +table.hide_advanced span.show_more { + display: inline; +} +table.hide_advanced span.show_less { + display: none; +} + + +/***************************************************************************** + * Program logo styling + ****************************************************************************/ +div.prog_logo { + border-bottom: 0.25em solid #0f5f60; + height: 4.5em; + width: 24em; + display:inline-block; +} +div.prog_logo img { + float:left; + width: 4em; + border-style: none; + margin-right: 0.2em; +} +div.prog_logo h1, div.prog_logo h1:hover, div.prog_logo h1:active, div.prog_logo h1:visited { + margin:0; + padding:0; + font-family: Arial, Helvetica, sans-serif; + font-size: 3.2em; + line-height: 1em; + vertical-align: top; + display: block; + color: #026666; + letter-spacing: -0.06em; + text-shadow: 0.04em 0.06em 0.05em #666; +} +div.prog_logo h2, div.prog_logo h2:hover, div.prog_logo h2:active, div.prog_logo h2:visited { + display: block; + margin:0; + padding:0; + font-family: Helvetica, sans-serif; + font-size: 0.9em; + line-height: 1em; + letter-spacing: -0.06em; + color: black; +} + +div.big.prog_logo { + font-size: 18px; +} + +</style> + <style> +/* dreme output specific css */ +div.header { + position: relative; + overflow: hidden; + margin-top: 15px; + margin-bottom: 5px; + margin-right: 3px; + margin-left: 3px; +} +div.header > h2 { + font-size: 1.5em; + font-style: normal; + margin: 0; + font-variant: small-caps; + font-family: Georgia, "Times New Roman", Times, serif; +} +div.header > span { + position: absolute; + right: 0; + bottom: 0; +} + +div.template { + position: absolute; + z-index: 1; + left: 0; + top: 0; + visibility: hidden; +} + +div.sym_btn { + display:inline-block; + text-decoration: underline; + cursor: pointer; + font-size: 20px; + line-height:20px; + text-align: center; + width: 20px; + height: 20px; + color: blue; +} +div.sym_btn:hover { + color: white; + background-color: blue; +} + +div.sym_btn.positioned { + position: absolute; + top: 0px; +} + +div.box + div.box { + margin-top: 5px; +} + +th.motif_ordinal { + +} +td.motif_ordinal { + text-align: right; + padding-right: 10px; + font-weight: bold; + font-size: large; +} +th.motif_word { + padding-right: 10px; +} +td.motif_word { + font-size:15px; + font-family: 'Courier New', Courier, monospace; + padding-right: 10px; +} +th.motif_logo { + padding-right: 10px; +} +td.motif_logo { + padding-right: 10px; +} +th.motif_evalue { + text-align:right; + padding-right: 10px; +} +td.motif_evalue { + text-align: right; + white-space: nowrap; + padding-right: 20px; +} +th.motif_more { + padding: 0 5px; +} +td.motif_more { + text-align: center; + padding: 0 5px; +} +th.motif_submit { + padding: 0 5px; +} +td.motif_submit { + text-align: center; + padding: 0 5px; +} +th.match_word { + padding-right: 10px; +} +td.match_word { + padding-right: 10px; + font-weight: bold; + font-size: large; + font-family: 'Courier New', Courier, monospace; +} +th.match_evalue, th.match_count { + text-align: right; + padding-right: 10px; +} +td.match_evalue, td.match_count { + text-align: right; + white-space: nowrap; + padding-right: 20px; +} + +div.tabArea { + font-size: 80%; + font-weight: bold; +} + +.norc div.tabArea { + display: none; +} + +span.tab, span.tab:visited { + cursor: pointer; + color: #888; + background-color: #ddd; + border: 2px solid #ccc; + padding: 2px 1em; + text-decoration: none; +} +span.tab.middle { + border-left-width: 0px; +} +div.tabArea.base span.tab { + border-top-width: 0px; +} +div.tabArea.top span.tab { + border-bottom-width: 0px; +} + +span.tab:hover { + background-color: #bbb; + border-color: #bbb; + color: #666; +} +span.tab.activeTab, span.tab.activeTab:hover, span.tab.activeTab:visited { + background-color: white; + color: black; + cursor: default; +} +div.tabMain { + border: 2px solid #ccc; + background-color: white; + padding: 10px; +} +div.tabMain.base { + margin-top: 5px; + display: inline-block; + max-width: 98%; +} + +div.tabMain.top { + margin-bottom: 5px; +} + +div.grey_background { + position:fixed; + z-index: 8; + background-color: #000; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + opacity: 0.5; + left: 0; + top: 0; + width: 100%; + height: 100%; +} + +div.popup_wrapper { + position:fixed; + z-index:9; + width:100%; + height:0; + top:50%; + left:0; +} + +div.popup { + width: 600px; + z-index:9; + margin-left: auto; + margin-right: auto; + padding: 5px; + background-color: #FFF; + border-style: double; + border-width: 5px; + border-color: #00666a; + position:relative; +} +div.close { + cursor: pointer; + border: 1px solid black; + width:15px; + height:15px; + line-height:15px; /* this causes vertical centering */ + text-align:center; + background-color:#FFF; + color:#000; + font-size:15px; + font-family:monospace; +} + +div.close:hover { + color:#FFF; + background-color:#000; +} + +div.navnum { + width:100%; + height:20px; + line-height:20px; + text-align:center; + font-size:medium; +} + +div.navarrow { + font-size: 30px; + text-decoration:none; + cursor: pointer; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; +} + +div.navarrow > span.inactive { + display: inline; +} +div.navarrow > span.active { + display: none; +} + +div.navarrow:hover > span.active { + display: inline; +} +div.navarrow:hover > span.inactive { + display: none; +} + +table.programs { + width: 100%; +} + +table.programs tr { + background-color: #EFE; +} + +table.programs tr.selected { + background-color: #262; + color: #FFF; +} + +table.programs tr.dna_only { + display: none; +} + +table.programs.alphabet_dna tr.dna_only { + display: table-row; +} + +table.inputs { + margin-top: 20px; + border-collapse:collapse; +} +table.inputs * td, table.inputs * th { + padding-left: 15px; + padding-right: 15px; + padding-top: 1px; + padding-bottom: 1px; +} + +/* program settings */ +span.strand_none, span.strand_given, span.strand_both { + display: none; +} +td.none span.strand_none, td.given span.strand_given, td.both span.strand_both { + display: inline; +} + +/* show the expanded motif only when the collapsed one is hidden */ +tbody *.less, tbody.collapsed *.more { + display: none; +} + +tbody.collapsed *.less { + display: inline; +} + +</style> + </head> + <body data-scrollpad="true"> + <!-- --> + <div id="grey_out_page" class="grey_background" style="display:none;"> + </div> + + <!-- Help popups --> + <div class="pop_content" id="pop_"> + <p>Help poup.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + + <div class="pop_content" id="pop_motifs_word"> + <p> + The name of the motif uses the IUPAC codes for nucleotides which has + a different letter to represent each of the 15 possible combinations. + </p> + <p> + The name is itself a representation of the motif though the position + weight matrix is not directly equalivant as it is generated from the + sites found that matched the letters given in the name. + </p> + <p> + <a id="doc_alphabets_url" href="#"> + Read more about the MEME suite's use of the IUPAC alphabets. + </a> + <script>$("doc_alphabets_url").href = site_url + "/doc/alphabets.html";</script> + </p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_motifs_logo"> + <p>The logo of the motif.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_motifs_rc_logo"> + <p>The logo of the reverse complement motif.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_motifs_evalue"> + <p>The E-value is the enrichment p-value times the number of candidate + motifs tested.</p> + <p>The enrichment p-value is calculated using Fisher's Exact Test for + enrichment of the motif in the positive sequences.</p> + <p>Note that the counts used in Fisher's Exact Test are made after + erasing sites that match previously found motifs.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_motifs_uevalue"> + <p>The E-value of the motif calculated without erasing the sites of + previously found motifs.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_more"> + <p>Show more information on the motif.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_submit_dl"> + <p>Submit your motif to another MEME Suite program or download your motif.</p> + <h5>Supported Programs</h5> + <dl> + <dt>Tomtom</dt> + <dd>Tomtom is a tool for searching for similar known motifs. + </dd> + <dt>MAST</dt> + <dd>MAST is a tool for searching biological sequence databases for + sequences that contain one or more of a group of known motifs. + </dd> + <dt>FIMO</dt> + <dd>FIMO is a tool for searching biological sequence databases for + sequences that contain one or more known motifs. + </dd> + <dt>GOMO</dt> + <dd>GOMO is a tool for identifying possible roles (Gene Ontology + terms) for DNA binding motifs. + </dd> + <dt>SpaMo</dt> + <dd>SpaMo is a tool for inferring possible transcription factor + complexes by finding motifs with enriched spacings. + </dd> + </dl> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_motif_positives"> + <p># positive sequences matching the motif / # positive sequences.</p> + <p>Note these counts are made after erasing sites that match previously + found motifs.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_motif_negatives"> + <p># negative sequences matching the motif / # negative sequences.</p> + <p>Note these counts are made after erasing sites that match previously + found motifs.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_motif_pvalue"> + <p>The p-value of Fisher's Exact Test for enrichment of the motif in + the positive sequences.</p> + <p>Note that the counts used in Fisher's Exact Test are made after + erasing sites that match previously found motifs.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_motif_evalue"> + <p>The E-value is the motif p-value times the number of candidate motifs + tested.</p> + <p>Note that the p-value was calculated with counts made after + erasing sites that match previously found motifs.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_motif_uevalue"> + <p>The E-value of the motif calculated without erasing the sites of + previously found motifs.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_match_word"> + <p>All words matching the motif whose uncorrected p-value is less than + <span id="help_add_pv_thresh"></span>.</p> + <script>$("help_add_pv_thresh").innerHTML = data.options.add_pv_thresh;</script> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_match_pos"> + <p># positive sequences with matches to the word / # positive sequences.</p> + <p>Note these counts are made after erasing sites that match previously + found motifs.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_match_neg"> + <p># negative sequences with matches to the word / # negative sequences.</p> + <p>Note these counts are made after erasing sites that match previously + found motifs.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_match_pval"> + <p>The p-value of Fisher's Exact Test for enrichment of the word in + the positive sequences.</p> + <p>Note that the counts used in Fisher's Exact Test are made after + erasing sites that match previously found motifs.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_match_eval"> + <p>The word p-value times the number of candidates tested.</p> + <p>Note that the p-value was calculated with counts made after + erasing sites that match previously found motifs.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + + <div class="pop_content" id="pop_seq_source"> + <p>The sequence file used by DREME to find the motifs.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_seq_alph"> + <p>The alphabet of the sequences.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_seq_count"> + <p>The count of the sequences.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + + <div class="pop_content" id="pop_alph_name"> + <p>The name of the alphabet symbol.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + + <div class="pop_content" id="pop_alph_control"> + <p>The frequency of the alphabet symbol in the control dataset.</p> + <div class="pop_close">[<a href="javascript:help_popup()">close</a> ]</div> + </div> + + <!-- templates --> + + <div class="template box expanded_motif" id="tmpl_motif_expanded"> + <div> + <span class="tvar_logo"></span> + <span class="tvar_rclogo"></span> + </div> + <h4>Details</h4> + <table class="details"> + <thead> + <tr> + <th class="match_count">Positives <div class="help" data-topic="pop_motif_positives"></div></th> + <th class="match_count">Negatives <div class="help" data-topic="pop_motif_negatives"></div></th> + <th class="match_evalue">P-value <div class="help" data-topic="pop_motif_pvalue"></div></th> + <th class="match_evalue">E-value <div class="help" data-topic="pop_motif_evalue"></div></th> + <th class="match_evalue">Unerased E-value <div class="help" data-topic="pop_motif_uevalue"></div></th> + </tr> + </thead> + <tbody> + <tr> + <td class="match_count"> + <span class="tvar_p"></span> / <span class="tvar_p_total"></span> + </td> + <td class="match_count"> + <span class="tvar_n"></span> / <span class="tvar_n_total"></span> + </td> + <td class="tvar_pvalue match_evalue"></td> + <td class="tvar_evalue match_evalue"></td> + <td class="tvar_uevalue match_evalue"></td> + </tr> + </tbody> + </table> + <h4>Enriched Matching Words</h4> + <div class="tvar_words"></div> + </div> + + + <div class="popup_wrapper"> + <div class="popup" style="display:none; top: -150px;" id="download"> + <div> + <div style="float:right; "> + <div id="outpop_close" class="close" tabindex="0">x</div> + </div> + <h2 class="mainh" style="margin:0; padding:0;">Submit or Download</h2> + <div style="clear:both"></div> + </div> + <div style="height:100px"> + <div style="float:right; width: 30px;"> + <div id="outpop_prev" class="navarrow" tabindex="0"> + <span class="inactive">⇧</span><span class="active">⬆</span> + </div> + <div id="outpop_num" class="navnum"></div> + <div id="outpop_next" class="navarrow" tabindex="0"> + <span class="inactive">⇩</span><span class="active">⬇</span> + </div> + </div> + <div id="logo_box" style="height: 100px; margin-right: 40px;"> + <canvas id="outpop_logo" height="100" width="250"></canvas> + <canvas id="outpop_logo_rc" height="100" width="250"></canvas> + </div> + </div> + <div> + <!-- tabs start --> + <div class="tabArea top"> + <span id="outpop_tab_1" class="tab">Submit Motif</span><span + id="outpop_tab_2" class="tab middle">Download Motif</span><span + id="outpop_tab_3" class="tab middle">Download Logo</span> + </div> + <div class="tabMain top"> + <!-- Submit to another program --> + <div id="outpop_pnl_1"> + <h4 class="compact">Submit to program</h4> + <table id="programs" class="programs"> + <tr class="dna_only"> + <td><input type="radio" name="program" value="tomtom" id="submit_tomtom"></td> + <td><label for="submit_tomtom">Tomtom</label></td> + <td><label for="submit_tomtom">Find similar motifs in + published libraries or a library you supply.</label></td> + </tr> + <tr> + <td><input type="radio" name="program" value="fimo" id="submit_fimo"></td> + <td><label for="submit_fimo">FIMO</label></td> + <td><label for="submit_fimo">Find motif occurrences in + sequence data.</label></td> + </tr> + <tr> + <td><input type="radio" name="program" value="mast" id="submit_mast"></td> + <td><label for="submit_mast">MAST</label></td> + <td><label for="submit_mast">Rank sequences by affinity to + groups of motifs.</label></td> + </tr> + <tr class="dna_only"> + <td><input type="radio" name="program" value="gomo" id="submit_gomo"></td> + <td><label for="submit_gomo">GOMo</label></td> + <td><label for="submit_gomo">Identify possible roles (Gene + Ontology terms) for motifs.</label></td> + </tr> + <tr class="dna_only"> + <td><input type="radio" name="program" value="spamo" id="submit_spamo"></td> + <td><label for="submit_spamo">SpaMo</label></td> + <td><label for="submit_spamo">Find other motifs that are + enriched at specific close spacings which might imply the existance of a complex.</label></td> + </tr> + </table> + </div> + <!-- download text format --> + <div id="outpop_pnl_2"> + <div> + <label for="text_format">Format:</label> + <select id="text_format"> + <option value="0">Count Matrix</option> + <option value="1">Probability Matrix</option> + <option value="2">Minimal MEME</option> + </select> + </div> + <textarea id="outpop_text" name="content" + style="width:99%; white-space: pre; word-wrap: normal; overflow-x: scroll;" + rows="8" readonly="readonly" wrap="off"></textarea> + <a id="outpop_text_dl" download="meme.txt" href=""></a> + </div> + <!-- download logo format --> + <div id="outpop_pnl_3"> + <form id="logo_form" method="post" action=""> + <script>$("logo_form").action = site_url + "/utilities/generate_logo";</script> + <input type="hidden" name="program" value="DREME"/> + <input type="hidden" id="logo_motifs" name="motifs" value=""/> + <table> + <tr> + <td><label for="logo_format">Format:</label></td> + <td> + <select id="logo_format" name="png"> + <option value="1">PNG (for web)</option> + <option value="0">EPS (for publication)</option> + </select> + </td> + </tr> + <tr> + <td><label for="logo_rc">Orientation:</label></td> + <td> + <select id="logo_rc" name="rc1"> + <option value="0">Normal</option> + <option value="1" id="logo_rc_option">Reverse Complement</option> + </select> + </td> + </tr> + <tr> + <td><label for="logo_ssc">Small Sample Correction:</label></td> + <td> + <input type="hidden" id="logo_err" name="errbars" value="0"/> + <select id="logo_ssc" name="ssc"> + <option value="0">Off</option> + <option value="1">On</option> + </select> + </td> + </tr> + <tr> + <td><label for="logo_width">Width:</label></td> + <td> + <input type="text" id="logo_width" size="4" placeholder="default" name="width"/> cm + </td> + </tr> + <tr> + <td><label for="logo_height">Height:</label></td> + <td> + <input type="text" id="logo_height" size="4" placeholder="default" name="height"/> cm + </td> + </tr> + </table> + </form> + </div> + <!-- Buttons --> + <div> + <div style="float:left;"> + <input type="button" id="outpop_do" value="Submit" /> + </div> + <div style="float:right;"> + <input id="outpop_cancel" type="button" value="Cancel" /> + </div> + <div style="clear:both;"></div> + </div> + </div> + </div> + </div> + </div> + + + + <!-- Page starts here --> + <div id="top" class="pad1"> + <div class="prog_logo big"> + <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAAAd0SU1FB9wLGwYBMoyhiwgAACAASURBVHja7Z13fFRV9sC/503JpIeaKFVREBQVEEFFQVcUuyDouuraFoVV17IrayPjDP4U3XXXhrpiXxuKKF1dV8WCiEgXRUAQlJIYAilMf+f3x3szmVSSkICyOR/eh8wr9717z7mn3XPOhRZogRbYLQiQJiJGy1D8D0LHjh1/XrZsmQK9gU3Ap0mE0QL7KTx411136Z///GdV1ZhpmvrYY4+pqsZUVceNG6dAz5Zh2j/hnpKSEtM0TVVVrfq/qmosFtMxY8Yo8CPQHejucDjyfm0dbZFp1WGaxmJ3ppSWSiQUIhQKIWJxehGhpKSE1LQ0uvfowQHZ2exYt65D8dq1qzUaXR2LxTYCP7UM4a8MVFWA9mY0+nLhmjV63LHH6vMvvKATJkzQfn366CtPPKEDjjtOV61apeeedZZqMKgaCKju2KFmYaFqJKJaWqqqqoACR/9a+u5sQT+IiD77zDPbKCnR00aOZPHSpcydO5fLf/972rdvTzgcZsEnnzDmqquYPmsW/PxzxbMOB4NPOokRZ5+tB3XrJsAUYKmqOkQkVuVVKUBGDRbGz/vSvPlfBHcVDpB7XP/+Gz9/5x1mzJ/P1i1buPbaa1m/fj1du3alW5curPvqqxobCoVCpKSkIO3a1Wc89bCuBy51OZwu1RgiBqGYGf1uw09/Bd5t4QDNT+wKfPXoxIl9jzm6gkt/OmsWn3/4oRIMyrfLlzPuzjvp27cvHTt2ZNGXX+K/7baaW8zJITM1lflz5wL8ZtWqVWm9evXaVcv7Q2cN6hM68tAuR2MIhirFpUEef+MdBFK1RQQ0v6g/MC9PLxk5Uq+/7joIBECSJmwwKKqKR4RTTjyR0885h2effZaNa9Ywa9YstKQkoQzGwSwuJhwIwK5ddO3a9b+9evWqjQPoSf16qUOQles2gYLL5WDaBwu5dtSw8L/eeKdFB2huaJWTo0NOOMF8wOs1qiG/QhfghtGj+dMNN4DblhJlZVBaWg35AIYI7NgBbjcbNmwwjz766I+WLl16OfCDfUs3YB3AAdke6d7tYNR2Jv6wuZA2rbIwxbFPxfD/jBn4t7vv5uUnnzRsTNelEEIoBKWl1qH1YM7hMAXffWcsWbBgMLAB+AgoAtYC5SJCp86dUTPG89M/ACASi1mDH4u2+AH2Bvzhpps+p3Xrmi+mp2Oa5h613y4nh1WLFuHxeHTq1KmDVbWVqjJjxozU4cOH88rsj1FXKteMOh3D4eQ/ny/hjnwfn32zyWUYxtAWK6D54YW1X355WbcePSr32elk1EUX8cYbb1gzvvG+BEzA2b49msQ1RARVZe7cuTzzjwl079qB6R8s4PhThjF58mQADjroIDZs2CAtBLAXFMEaTwaDe4R8ALKzEbcbVUVVE4hP/t/lctGnTx9+c8op3HvffQm9YubMmZx77rlic2Rzbw7I/5oreNzJgwapqqI7dqA7d1pHSUnyVG5Uw0MGD6agoCCB7IQ+kcQFIpEIkydPZszYsQmuoaqEw2H95JNPdOHChTHgervJT4DTWzhA08OjwGWT7r8/u3xXhckei8W47c47obwcMjMtsy9OEHUojdhI/M2oUXwwb16dIqKqJVFaWkJmZlal60OGDJk7b968M1SVsWPH8uSTTxYC7WmBvQIbV6xcGQK0aM0a3bRsmW5fu1b1559NLSzUakdBgXXYawC7A0CXLVtW7fzMmTOrnTNNU03T1OXLl5u1ia4WaA4lQbXVmDFjcoFcIHfJ0qUXqKqaBQXVCMC0kZ+MtNogEAjoli1bar0ef/bee++tiXDMFszsQ+jbt+/r1111leqOHZWJIBBQ7913azgc1qaAeABCVUKqQgBvAO8BL7RgZu9xhd6nnnpqNLpzp8559VXVkhL9ZOZM/X79+j1Bdm1sP2KaZix+rqioSBctWqSqejPw2KhRo+IPxjp06KC0rOg2p82AkE8O4zkbiAJ6ySWXVJLRjUW2qmqrVq30+eefr3RrFWYQf4+pqjpq1Khq7zYMY4/0g5agxppgPCnARcC1GPRFSUF5gAn0VNVz69vMkiVLWLNmDRdeeGGt93Tu3JmNGzfu1slkGAZbt24lNze30jWHw4Fpmo3GYwv7SIY7GYKD8UA/INteQFaKEL7iqBNPPPHYhjTXp08f+vTpU+O1rVu38sc//pE5c+ZgmiaGUbtLJu5HqMNdfYXT6VwdjUY/b+EAdXm9DMNlmmYrAA/I6SKe6ao/JM38v2Pw52oPrgV9Seu06RugTzT62ZogNzeXbdu2ISIYhpFmmmagxRNYC7Gbptlnw5Il29Z/9dW2H1ev3jpddQPwQ79+/f5k32NNsSpStdeSXonZ99JLL+0RAkWEG2+8samUU7Zt2xb3KKppmptbREAd43Vwly5fdDniCLS42DoRDILb3fnRiRPzLzzrrIdVlX9MeoKCw36GSMUIpaWlJVh0UVHRHiPt4YcfbhqKruxyFiDUIsfrhpWAfjprlpplZVZUb1UHTyBgRfnGD1Xt0KlTvR0++xIcDodecMEFCvxDVXv/79nrM2lnzuAanUWdnV8InzocDu104IGqO3aY+vPPWqOrt7BQdds2jcRijTLzmsg5VO93RCyCNa+88kotKCgosTnC6f8rIkD/PGcsQ044AYAZL9XOgkdfdlnxibEYuzZvjkpOjrN1q1Yc1Llz4p4Lzz+fcePH21qBidMwGDhwIA8++CAn2O1XZcWjR4/mmmuuoX///k2ruIjw9ttvc/755+9enjudAGIYBu3atctUVXr16vXOqlWrOovIpv169pszeX/yP/9Z+0xOPqLRymy+yvHp7Nl61tChetbQoTpt6tRaF2x+qSLh6quvTvw9adIkE3hrw4YNjv3WDNSZDEZ5/6Hl9zhvGjsWzKZbOykH0tu2Tdjie9H9XCmYpCHPjR49mqeffjqZi5iq+jQwVkTM/c4MVCUfcM564y6u+8ufmxRRV1xxxb6xWUUSR0Ofa2clqdgSzOTVV181otHoNTNnzjxjv9MBzBl0EeUUNeD9e2Dkfc/z53xPnUGeN4wezcFHHlmvwX1j1iwAJk6cuNf7tmLFit16CavCww8/jMPhSHZ+sWDBAi688EL97W9/O0tVPSIS2m9EgDmda8XgSRRFKvqjigooQh85h+Xx819BaxO2nQ/ODGAjrA5A9WyeTA4kg1y2UCnO75cOJ510Eh9//HGN10aOHKmLFi2a98MPP5y834gAEYaikIx8+7wAhpr8oabnpgMvA5/Av4C+1Y5bWMRoIJUXBg0apL8G5KsqH3/8cY0iUFWZOnWqnHfeeUNUtcPeJoBUwFPHkdoYbqQ+BBiitYVMWYs57iqnYskv0trEoGlzjXGMX7du3R3RaNMlcDz55JN1c7VGKrFVg1DjiE++duutt6phGAtV1dhbBHBW6+zM0iM6tSkccFTPwv6HH1o44KiehUd0ap34PahPr0Kga4MJ4CjOUWgjUgvxKIiDc8yZpMVPReEkrZ/uk2hz69atr7344ot2i3sOY8aMqRXJt99+e40yf9q0aU2iRHbs2FEGDhx4wPr1689sbiXwcDEck3My044ePWKo4dRwRjQUILPtgZRt34rDeTCxWJSs1rk8PmUOKSkeCYWCDSR5OiXQpLYggLCCS8TCv0CmmBWELtDNThPeKZBdzzdtuPrqqyU1NVXPPPNMsrKyqs26hkJtil12dnaN7HvEiBEN1kPatGnD9OnTOe+88yqdnzRpkoiIpzk5wMnZGWkrhxxz+HG3XHRqqsPplPKyMlxZ7dkVCODMaEtZeRlpOe3419S5dOt8ANFYrDHy/5i4wocgKH9Xg0MFvkiewVolqNKexu+p5TFIq+/7fve733Wcm5PzStzbJyK43e4mHbjbbrutmgyvmmdQX+jatSu1ia4tW7asbS4O0Mntcn5wxx9GaUlJiQQiiivFQKNhHAaEy8pwuj1kt8njqTfepXvXA+nToyvzvlzZCK2HYxGsf8oKPNxunE5U3+Kv6uBdBI8qHlEOB76sLiBQA04GfPV840/dIPDEV1/dd5lhXP0TLAmrzveIyKlnnXV3z549uSknp/Qf27dnDh06lGHDhu2RLG+M4ygOmzZt4swzz+SCCy6o8f7PPvtsS3MRwPI22Zn61LT3JRwoQw0noIg4UP0Wp8uNwzAQEbp3PZDB/Xqxs2xXwzs8B6dGcNvs3BST2+V0ogAynI/N6SwTYYCCC8FTnQEkwNEwqYNDwbgZCoAPROSBL6CLMXv2rctmz85eC5suX7Yss3fv5lmMi0QiqGo1ziMiZGdns2LFCjp37kynTp3w+/01EoqtDJY0FwEEI6FAzgF5OQw6vi/ZuZ2qsDTFYRj4n5pKSXmAwcc0cqBCHC0ODrFlf1TdLK6CqWUKA5IxvhwkDCfsoSY3AHhCLQKIZ+x4gNgy0KOgpP9RR5kh1QNVVZrafEx28lRF7M6dO+vFXbZt2zYzLiKbRQfof2QvBg/sh5HZlrJdAcp2BSgPBO0jRFnAUvaGDuhNWKVR+XhacQiwQkJsq9RRk9fFVgvjKCgHUTjY/j0TCNOApItnraacWAUgNgI9kr4n8Hu4HejxCVwhIufbkT9ah07RoD5PmTIFwzBqVCDrS2hjxozh0ksvzW1WP4DGPTGqlO/4GTEMMGMJRBticGiXA4hEYxAO1J17V7sCmJpkq70vw6shsrwWV6fadPGFQkSg+6dW9a7dQtuK7glgSAXxuA3IFbgnaQhmPvroo2kvvviiTJkyhfnz51ebsa+++mqD+nzRRRdVUxAbsu6hqvztb3/ToqKi9LfeessNuJqFAFJcTsx4UqXhsIY8o03i7x+3FfH1uk10ymvbKOTbLP4uxEaFWb3CVtw5ZP9f0yw37OttU6mkI9QK7SALONh+7geFTp9bhHBI8jsdkGkTQeDyyy+XRy6++MCJQ4aQ4jJwuxy4nQYOw2DqM4/w6KOPNsi/EJ/p4XCYYDCIiDBz5sz6IF9FhKysLFHVZ4YPH74DiDQLAfxnwTI8bhcA6QceCmrCrh1JyFGcDgebC7ZbMe+N0XohB0BNtkuUFdUNapYqrBTlWnawIPnRKm8z+sHO+rzTsPP3HfCdAcUKrRwWAcTZglj0WNmpNV+15OgLYMLYU/nsoYP4+w0D6NPzIFYu/YqbLDEhDZ3NW7duZf369agq55xzTr0IZ+TIkfTs2fMqEflns4qAXcEQD7000+pQeBehcMTqY0paJXZkGILDYbDw63UYTkcjGQGFMrJ6oUXjZEKEOEHOZbJcTsy+1wW018revtKvbGKqr3SzxYgA6tiNFxFg1nhy+x4coaA0g+8Lc1mxqSsOw8CMmYrAIYcc8pWIMGHCBD744IN4mjGzZ8+u9UM6d+5Mz5496yP7TWDh+PHj5c0337z5m2++eS75YnNYAUuBYcUlZRTtLKNtNjhTMyAWhkAJVCm57zAMPl60ktRUD4FG+Nu1jjUEYxQlVe51A22A4hDsTIEihdxwPXUAJ7QywWXP9gKgvQluhSyjMmEkOqmzOBqTawpLiKalf+WcumQkaZ7VRCMRwsEyycnKCq9bt+4e4G2v1wswbs2aNfcfcsghnH322XsU26CqFBQUGHl5eZMsCca/apSDTQxnAEsNw+Bfb7yDw+nAiIYs5ljDfguC4HQ5oQEeOX2LTsDRtgqwraHjIrDhBNgKfA+kOmFIPblNOhADchXuAGKm1auOSRbJarGqh6PT6YPJuTj4dvgDrPv7zJNp3+pHwsEQS77bqNlpLkrLylxVfBEP9OvXL7t169bFzzzzTKMJIO4YysvLU9216wWgNRDYGwQAdrFkj8dj6WmGUaupVx4MIohCDXK8ts45SMewuJdq40usaoUdbzRABDgU3hZrrwBxWs/GrdJLgamAQ+dyACnI1PlDNslZW5Z/tvxC98at82MSLg+nOwkhEvnHy+8QicYEeDP5JSUlJSXFxcVnXH311Yfcd999DepTfJFpxIgRiAgbFi+Oh8gJtWnCzQBvJ3ynBdvrObkaKPs18aDRAIRrfcVHLc9nWRYoOTbCU0LWgpJD4Zn+VoiBiIGDCA+tWt/5xElPnb/11uzhOfD6tNUb1sy654XZcx+c8v5MPPpM4Q0l5yb67k36tnyuwcsaYN2bb7652lbidzvjwUpIFZFvZ8yY8U9AFi1bJpgmpw4e7Hn8iSfa7y0C2BFXmMLRmGUFZOVZXKBKR9I8KbYzr/khDVphKYJxKGggAXSsgWhjapmBAfueoKTQ86ftbd4cNvZv342KPtj3b/4FC4C/AOfbxygC/BGYjJerKymY+dyNn6fwsR1g8eLFh4kFNdr+yev9IsLAgQMBnjFN8xawah8RCjH12Wfd2dnZf9pbBHCl9U1JXj61TfHUrEZX4tpTiMJRgEcrMPiuzbu7NcDqSDYHDCzF0p0w5WBtaSDd3fGKDwdc1/rO464bt+kZbmRrjY35yQMW4+VBNNH0kYnr3sS5/r17917bt29fzjzzzER0kmmaiAiHdu/OgL59WfzBB0QikUqv+L/HHoNWrcjOztY/33jjnap6dnNbAYmPq8S2DAcYTUdvWuGTq7PAnzmdozEpM4azNsmMe99G5nr791H1fGerJCL4RKCvEzpbcSd8Y99jOohFx7cfNf/JS9Yu5C4b+V5yUcZWoiA/d+NjCV4mIVxGPjvwVzJJ7yGfUvxMXLly5aH2uRduvfXW30+bNo1Vq1bN9Hg8Zxd8842069TJKoAdDlf65uVLl743b/bsUwcff7zx1xtvVBE5CpjV7ARAJbepQGlBHaK+gSqA4BZLoIeBGnOAzHcRCeJVAy9wElbd3jgU1TyhdwuH2Q+8HYMrndaagClgKBTbDao4gtnzTlr93YZ/sslm688AF+InM2l2tyKfAEIaPo7HyybCDALgrwzEzTx8pPR6rJesYlXyN1z+97///fKMjAyXx+OJANF2HTo4CNSaFX76I5Mn6+Djj+emcePkhWnTzli6ePH/NbcIALghMcBij7DhqHGkXbYTyOPxXFw/9sJVGveKhqkWSWK+TT8JsdJGfk1UmdKYDomle84Pw4VRCKj1uyPQmQo38I8pMe75eGqSVePnanxJyAfwUYyfVOAa+3enj679aMW9H99bFLwn+Ln6NWKapq66flWNxFlWVhZpqNiipIQ+3bufoKr/anYCcDqdyypZ+6oEgoGqwbuEI1Fuu/J8cjLTFOhUrw4ZpCS5X6uy/KEYzEfoJdVV/Y72gMQX0x0NHIc0gc3HQ2SQlXi5zrAcLO74esMxML8//LsBQ/U1+TyOFx3yxJCH7njjjpM9Lo+ISIZhGPVhjY7vvv66Tg722cKF4HKBKrfecIOKyEnNTgAulyvJTWmha9eW7xEUl9NRKcwpHImi2mCTrDboIVW2hEl65veSNCkUFoiFyH71fGc/S5dMNBKxiSgSg28bOVSfIUxC+fCREY+s59GKHIZ6Qu+1dRealq0FBectWLBAAXr26SM9DjnksCVLlvTdGzoAYhgEy3bgycgmvU0eGijhgHatq/mw60fsu9ccpGK5tyZiidp/L7bPXwakaP11ALcJHye1G8WS/+4YBBs1QD4U+Bo45U/+PzXK9e5yuSq6XD3aWIEZp40cKSUbNyrl5fLa5Mn06dMnrVk5gL0Vm+XtKy4EEVLSMkGEDZsLKsKi7aybmy85m2CwYWOoDSeUDvbfZQthmgF3S8NCvdVIcqfO5oznT2POfxww5Xj4jn0Dg6KRSJyd0uGgg2q8qbSs7IzNP/0ksViMjPR0Jk+e3LwcQERmqypqmrTueDCoJpb+K0W0CIgKu4JNU91E6yYE077+qgGt1FoXkPrQ0nJwhaBrhUqxsN/duLIBTz+YyL6DBWaSuR0Oh2vMZDZEPuzQu3eJqmYempe3CXikua2ADBGxAkOo0AUioSrmSkome6sWssI2+0vi9nz8w7IWWG7eWmGXpVekAz/Cyr5geCD2M5hL+IWAmiaFRUU1LiCZqiERWSYiAaDL3jADUVW6dcy1RlmsSOBoMgGoWg6iRkYFST3PKbDQ0tYHUF0/UIEsl4XcOtcRBCKTuMYNWg6aB/IK9Iv9UghARKo5gqrg46SsrKz2e8MVXAnHoJDexqbS5HAMgWBZk7J7Tfo/mfdErb46arLt6/MuAzmojPSVU7i4OwT7gsyDfr+oqlyqWrHbWS1QUlJSvldcwTWlMZmmSVp2a3YW7UiSylEUSE9NaeIPoFwAFdJFCRh7mAp/LLo5j9e+DZAxEPgDHFP6S0G8y+UCtxsxDFrl5OAwjB9i9UwwbRYCSE1NTVFV0jzuauxZq85XO7Pz+Rkf4XanEA7Xf1JJ7d66dUQZpk7mohyCtQCkdbUT3s1YCItag7YB9wg4KvhLmvnDkmoR2/L/jfo+21wi4OGYaeqNvzuLmGnaYeL2QDprZlE/7yhtsC9Aa+7RQkyOM0awNp4cqyYxo3osQPJvtxN+U/fbytdD/zN/aciPm9zxgwZyuuYiAAUkGAoTLN2BiAFlRVbwlMOdUFhcTme1Ldb2WBE6h4XG+RRW0gOcGAYcYfdXbeSLwncmPG/fuxsZNHj3PNXLoc2K6b9wYigSupwbGNug527nZrxMx8uBe4sAKsynnUVWSFgSbYgITofBh4u+xu1qvBTanQEvlf9ok6R6isKiGBzeiJjCuuD4ZhvIfN7DyTtRjT6vj+gk7iJGvrUEXQdBtsPL53qvrsbHefjYvNcJoE3nQzFj8awgC11tsjO57OzB/PDTNis82jSJRmON4TMOcXNCXaZbTQShMMMJJw5M8utT+e+KJmJEGvBF/ya/0rJz04Gf05hIevq49C4dHuwgOkEnTr94+pXG3UYxXsprQH4PrEDQITEz1mGvKoGVNP9YLCGI4/hwuxw899qHiQCRcCRK6a5Ag6phYWn4DkyOISnAIXFtFjlqkpcsEW1q+MgDI3tXlIOOV1o+A3im0uRQbuGeKtE8Xt6ASkEoG/BhpeH6MPEyGS95+GqJAtpTeIiNm9kssk3ye3ftfT3wb5SX8PIZJrOZwL3cxFCUTvh5FqB/Xv8ruZNcHDyBn6K9SgAJuW6HhyngcDj3SN5rZQO+ZtYRpZc4yNDqzy5OQj6KpS9QOd4PDCbhY2MVNjwNHyOqEMQBeNmAcjF+PsdysZ6FFR3cfJDKSyu2rTDwsxYvxUC7Nultvp7749z/e+ubt7hv6H3xYNO3T+t2WtclY5fcszeVwKpmScULDQc7Nm+o17NL4IAaiUoxRHfLHQ6KZ2mQTlShVy3WY827bFRFvsWGR9Rw3xZ8dMXP53h5Dx8BlEnNrvr7+R5hjv0NrVCuL7qtqMexHY+VNFcaqvoR+UTxcf7EoRPz97YVUAnh5TsqZ25Z6wG1Y3ARdPsSvozC+Fq8iy8ma/k1EolB3wSq04hRS9yfNOVChDKKfD7GT64d5CE1yOamLBjQm3y+sAniIfJR8vnD+Nnjh8pd0gc/zqlfTxXqSH5tdgIQh5NYknPHNGO07nCQlRHkMFizcUul+7+EEQrLgWMEMudXDuOOY62Iiiz002tBRq5URnQ8O2JHLZ/q+XRPRaKfnfg5iXyOAYIog2v4rqvx8h7eSvpG48BHCD8D8NolboQr8PM0afyH/yP7uSXP6cjDR6qIPLbPCKDs581ktM2rpIkbTjfZGWm4nE4Wrfo+ce30aPQ0gdelIk1suLPCfKvNDGxXTfGciaHKwBruj5kwt5bmfmoSVuAlHcGNn1uQJI+cl1S8BPDzND5Ow5fIB2gKOAkvgo8X8LIVH4KXdVf2uVLI54p94QhKhP6nt26PiGHrAla9gFgsyvUXDSMQDNOv18EJVt5F9US1F2xs5LqB3+7GE5ii06tk95aSJkJ2LSKiqkNnrcIcAy48sWZTsKGzshyYZn/gNXjJJp8XUVrjs4paNDn4OBl4CC9ulP72uW54KUCYXdejzWYFHNyhPSJimYGGEzSGQ6Ns27KJtq1y2BUKgcbo0eVAAqEwrbMyMIp3uqtYbS7g8M/BcVwVbV8FEUUx6KIx+gIfJC5mcCbQVuIpRy5q3WHTgMIoXNKPKra0lwwUL5L0XqsYXVHco4iSDfyIn8cT8t0K8boLL0OB2cBDwN0Im5uV1fqI70S1KencbncdbzYC2Fq0w1oRVAVPBlq+nSlzP+LIzq1p1+aYRKZQLFEfUCv7kSvs80tdcC8VSRyIEFOTXRikq5WVcYr5Jh8aF6Dm2xgoN2Hlo/5HlFOD82kLdsx9FehnvW5HFXOvLVao9yuAQRTFQRQoRVmAUGqXoC0CnHgZh9IJpTtesvDxNF6eQ/Hhr+Id9HIYVuyBAEvwsU/jCZptLSAQClcIanEQDEdZvbmYEjMlYRq63W6m/OdzAqEwRTvLksmgIMlec8bssiwJ2Mk6YGVivV8ZKS477l7JQ+hjhyGEENAwTir0it33WSgGvkH4FlhVMr4kHViG8D1CayAHP53x0wc/vfHRFZgBPAisw0suEKiG/HwUK5l0FfD1HiE/n3FNgahm4QDJAaEgEA3iSXFxxx9GgghqmoghqEKq221XXDLi4rnIztm7LE4ADhgO/DfR4qWY5vREHJGqcChwhU5nKvCICh5bh1ibrAQohBywsR7sNEZS8GeWL+sTVT1fRKYnIWAW8Cx+W977GW4j/jzgRdTOcfAyFzgN2IKvCU1AaRrcNRcHGNOtY57l7bM9gPEUIVEzyTsIwXAET4qb1tnpcc3RNGGjWCHcaiPy5K9qswbssvCi/E2Fb9XgAtFEINKcKq7gsEKjQpAqId9C+NkIHrxMJZ8rbcLZBrwOvIcQxcst+DgDHw58VTyNzQVeO9MI4E+cz1+rW0PNzgFEhB8LiiqigtQEhxuJhSElA8JWZdBIOMzFw04gEAqT17YV5s/FCEwOw/1uuFEgw9L36Bi1qm58DqBvISqsUOhvl4lVxMrSTSDf0hVMtf6PU44a0wAADOxJREFUn3I2qcD18YqtJ1js3Y/gs7dq86JNMuO9OFBS8e+GcL38AZiAz/ae3sIgfVD/DVwo98veNwMPaJNTMdMjAUhrXaurWFUZecoATNMkBl96rLy7Fyo8v2Q54KoEgQ1HxeRf8ZTqeLl4iXMEQTD5UiN8KyDFy+gOuAVGD6SGlbOmYcmLbUSk2cUeXE3UsgehG16OrOJFrIrVc/FxAF4EL7dKpqwTkUzJl6v3jR+g0lqAQLicJKldjWNErcgh0wFb+kFU4Lvk5VyF3E+pZEerUPtSrQg7RXAA6wrnkgrc1h9ea0YzrJ9tBu6yZ36sidotx8cylP/aJibkEyJ5BTSfyfiIb2t/JcpoRXfh5SGEW+pyPze7J9CMRSzEh8vt11X+lnhmcHFJGbtgmwkLbYTPxpbX9hMnpVvr2xb2f2IpymqtzUOovI6DHRRzZHgbT/SHvze7/PUlqZy+Jk528NMOr+3UEYL4WJbk2ppuE8Ig4EH8dMfaMfRW/Gys61uanQBKCjYj8WqhalZUDgXEcLD42/VEojEem/IuLpcz8aUGbLft7PipzCgk0seN64iqEJUaOI/d/Eo5n1K5nED/2v3/vzaovnI5nmKdoGWMYxTwHj5a4eVRfLyOb/fBLM1OAK7UNKLhoB2IZev0CfvOwdpNW4nFYjgEypTCATbCTYvdB5NYhgGc+kVyAoda8Xw1sIAdmKxkfwMf99j6Raatb/TAYCxw76Aeg/6CnzTyeRz4x742AxOQ2ToPrSNGPVEvwDA40TTzAeZDZwP+A/TQCnkPMESS6wka/KhKTLWyG1FMJhvDKWV/BCUdtXZCE6QNPl57/MvHp8/fNH+aPaAd8FV4TfeZK7hCyzdxuOrOVkn1uGmdlU7fguDOhTBArLp58Uze5AQfF3AmtoUg5bxDGisQjrb3CUSEsLIXAjL2FfjZBTyLl+s0omNV9XC5XT5iIifjJYqvYTjdK9vGWYtCUWKRcC1EAqaVMpYr8K5ABxvzPyu8lMQFDIE+iXZ/S7kq/1TTrk5v7Rs03TiXH9jfQXno5d++/FdLg+YW8nkJu0DnL44A4gpf8eYNSKisxpKx9se8FN/JS+FHE07TuPPHeqrs2zwrGijJ3HsT4d9qEkL5gihj+F8AofCSIy+ZLSJiHGCkImTga7jes3cIQBwI0LZL90T5uNQUN0n1+uJOI6ddSvI7gcEDYEnMEgfrDNh16ZVMuOyaymvqci7l4uCPAscS5UQZYVXr+kWCFw/5XNpErT2Bl3mQKA/bqHLre4cAnCnWHLZdww7D4PE33sPpMDBVCYYjyRtHLVc49RirkDMu+DkTplx/Mb5VnVmFn8+q0ddZlMl5LDdGNCiGf19o8UHgVbw82ARtTQBOAejVvtdCfAxvHAHk4yOfmXjrXTO/8X7BlIxEQfUtQ4sItg9y5KGdMU0zTsWLIzDk2KSghmPAPOxe5n9+KFvxVY///xUqcTEaUBl9N0QQA/j6uq+vNk1zTuMkSYU78SWEQpQZ+PlwT74rNTVVO7RvzUWnHR93BliewMxcKN2G4XDwwLzpDOvQhz7du7Jm4xZ6z/n46xNUj64WljWeS1Bi3NOMbtx9AfHFoyYA0zQLDcNot2ciwM+l+LgZYSNeFC+X4G1qEWFxggm5r+PY6CAtxY0gvDx7Hk+53RdUQ76X36HsqIz8+Zn7iTkn5DeByPJiNhb5NesAPtbZixkLgbHkN5VHTatSLa/O+RhPiguny8VmkUiVGTKSGC7uSQ5qXDQK3K79hgsIfcnn/AZwjYer/P4C355NUqfdkA+pISJWWY6fI8hnIjALP5820htklYhRZYO7gKtWnMorfMp5pwwkGI4kfAVJbP8iYDJBKuLJ+eIWYCZEOmCtE/z6wccK8rmMpP0V6pjpU/BxUdLvl/FZNY/2nAD8NdfUxcsg8ilE6IFyCV5W4KvfDluVIFwOqZmwcyuSYmA4LKI9uEP76hWtLLb/AlBi+Ym/NICnQB8FvRKMf+5nFv3h9UD+DnxJSnp+EwWb7NYM9PEpftqhBBC6AB3twMbdTPgqhWAMB5QUgOEg3eXh6TffQ0Qo2F6FlsZzMcrLdrybsOVQB+gLIK+CXAuOt2BA4X6Ffj9nkV9rsgp4ObkS8r1kIPRtqtcb9fzIAPA8ynm28vJinaJNhEAwnCAGQwwrLkuVVzM/AXFgqtIxtyLML3RuaBjCYwl1IepciCttEX89+Wt6z/kdyELo+2UT59b9UnSBTnWoTq/ZiBe8DEK5CB9L9i4BWNxgJX7uxctHwH/JR/FyYhJbOiX+ZyQa5dQB1qbQhsNBSeFPliQIlFVgT8HjdlG0s8yOCMZEWWR/1TpWn5rJc08fyf0fLGHFsC/gmOftJw8mn6f2G+RbBH2pHcxRVel7Fz/xfX4PQTkFfxPkFO6RJ9DHEPy8gHAqMA8vx9lX1sRr0LicTuZ9ZW1yoKaJM8WDqsmM7C+4qei8Srs0/LClEIfDIGVGynsIp+HmFe5eOJVpvkugJAbGRXDsU/ZglaL0wZ8U+frrVwQVH0uRiiLUSVCSxAmm4cff1K937sGH/9f2JBaTz834eZ58lgNHqipOO9RLVUnNbGU5AtOzeOfdJXhS3PHVPwxDCF4TRLbLQGLi5a4VCrumoOEfIethkDH2bFhUbdOFX+aMdgC/QdmF8AJWfkFOPcLCT8FLb3yVts9bYre5EpLkfjwFLZ9DgG74G7913p7HA/hpRT7r8PIwPrLx8qg8IDbRWmG7ajggFkVRHA4rUbRjbmvmZixma7diPE95UId+ESyb1xVCr8Gx38PCiRC8CU6M4OXf+DjmVzKjY8B7NpK6JbHzOVh7FK/Cz4QanvwUrVjqTngKrXE9osq9t5DPQIQVifI0+4wALCLoRj4R8jkaMEzsDaPsAD1JyYRdxYm9/qKeGMHLggzddjzlgRCPx94lFnr8jyAvQb/vYeEEcE7Ce2w7YAE+OjdgBrpQ2iEU1icmrllZe+UxOrMScoUsfElRSz6ieHkT7L4KP9Rg++cA3yRi/5tEBHiTskkra58K5FCRVJFVp+3px0U+EZQRsQGxQ9Z/UnCa3RErGFSE7Fg6ZZlBUtJcXLJtCAK0ykq3zcZYAI5dAgvvwBF7lbuOPQblM6TyTty78ZTFgHeAMfALthYsS6ojXlYB1wMz8KGChBQFL2vw0ZX8JP+Ml09QzsHfdMiPc4D7azFNFDgQiODjbnuAb0bwxNGKcritqMzBzyybCFbHesZSnfMrPLYhwrgEWpmZzB+0mq7rc3FJ5eVrd9qNzwWdb9/K1cMGk7F9O7ABfz02dsznLWA7wiZ8jVsT30dE8CPQCS9DUd4ARuoOvfH292/X+96574JEZpFVfHKUbYI3eXSz7IadrrQR3BqlE0IaVkxeCJ+dj5/PowijgFyUE4AhrlmuAZGzI+fesXkkgrI6awcHl+XwwAFvcvyMXmwpLOZ3ZwyC9Na4gsXc88xbRA+68TPOes4gs+hKrMIQB9jf9yjCw/iS4vy8ZAPHAq/gox2/ZogrdF6+xcdhtnjItJXHTsBIfM2X0+DcjRw7ogbNcztwpR2eHEM5AR834KUz8APCBZEhkb84J7pY/4dtFLp2MiDSn+ScTDNeNNL2GEZvimA8mPeymVW0EFiDErMVIAOftRN3Jflp+c4v+NUjP1lX8HEYXhaggM8eLC/rsfYoajYCkEZSbW+U9ggG8B5KCTADP5fhZYkUSh5l5LXrlMXBgVx+Ez0JgqXMT/+G0vcCDO53OKkeD2ZaNs+lvc62B0rR0bHbtJ1+AzjxMy1pZjyFtd9uJjAK+BTffpPoUZNIU1tHUGAw/hr9A/vYD1DZVhW8HIdyDfkoyunaVt+lLRRHykihE0TDoCZhiWCq0io7g03fLufLo8ro9+khvNd9GeHW0ZsQXsbHX2wl9HK7ysZMhEvw8R/2d7C8gr9JKIp7xQvd9J24C2UGWLlrKeoiKjFu2zycmGny3oIVnH1aX/xZr3PnllGoKve2mUrqI6ndAuMCG7Ayf0pQyvGTQQs0KzRHUOgw/CyPk9ag8p5cuv0UAhKh+KfvibYx+XDV19y5ZRTRcIiH8mbieMZJcHRwNMpbKCUoHVqQ/2slAB+D8CKe+z0XuF9wU2IGOCCYzbK0DSw8ooRdrYJsWlWEAu+3W4G37CLMo00Q0hA+x4/gb+aKWi3QrBwAfKiIFOKEHms74ED4MHsF3QMHkvdjNtt3lmkwFObbnVujTy59d6drvnOjpmm0Vp9EC/zKCMAGx2ZHzAyHYmXbC2JXLTgilrOmNHZc58xYaSDMP16cPsN4zXHk+sHbMsO7wl1wM67Jc+pboJmsgPrBAlXNKy8uIJN0XA7LMxiOmfGNnQpLS8tIeO/2cb28FmiBFmiBFmiBFmiBFmiBFmiBFmiB/wH4f+jryq6sRdUDAAAAAElFTkSuQmCC" alt="DREME Logo"/> + <h1>DREME</h1> + <h2>Discriminative Regular Expression Motif Elicitation</h2> + </div> + <p class="spaced"> + For further information on how to interpret these results or to get a + copy of the MEME software please access + <a href="http://meme.nbcr.net/">http://meme.nbcr.net</a>. + </p> + <p> + If you use DREME in your research please cite the following paper:<br /> + <span class="citation"> + Timothy L. Bailey, "DREME: Motif discovery in transcription factor ChIP-seq data", <i>Bioinformatics</i>, <b>27</b>(12):1653-1659, 2011. + <a href="http://bioinformatics.oxfordjournals.org/content/27/12/1653">[full text]</a> + </span> + </p> + </div> + <!-- navigation --> + <div class="pad2"> + <a class="jump" href="#motifs_sec">Discovered Motifs</a> + | + <a class="jump" href="#inputs_sec">Inputs & Settings</a> + | + <a class="jump" href="#info_sec">Program information</a> + </div> + <!-- alert the user when their browser is not up to the task --> + <noscript><h1 style="color:red">Javascript is required to view these results!</h1></noscript> + <h1 id="html5_warning" style="color:red; display:none;">Your browser does not support canvas!</h1> + <script> + if (!window.HTMLCanvasElement) $("html5_warning").style.display = "block"; + </script> + <!-- description --> + <div id="description_section" style="display:none"> + <div id="description" class="header"> + <h2>Description</h2> + </div> + <div id="description_text" class="box"> + </div> + </div> + <script> + if (data.description) { + $("description_text").innerHTML = ""; + $("description_text").appendChild(make_description(data.description)); + $("description_section").style.display = "block"; + } + </script> + <!-- motifs --> + <div id="motifs_sec" class="header"> + <h2>Discovered Motifs</h2> + <span><a href="#inputs_sec">Next</a> <a href="#">Top</a></span> + </div> + <div id="motifs" class="box"> + <p>No motifs were discovered!</p> + </div> + <script>make_motifs();</script> + <!-- inputs and settings --> + <div id="inputs_sec" class="header"> + <h2>Inputs & Settings</h2> + <span><a href="#motifs_sec">Previous</a> <a href="#info_sec">Next</a> <a href="#">Top</a></span> + </div> + <div class="box"> + <h4>Sequences</h4> + <table id="seq_info" class="inputs"> + <tr><th>Source <div class="help" data-topic="pop_seq_source"></div></th> + <th>Alphabet <div class="help" data-topic="pop_seq_alph"></div></th> + <th>Sequence Count <div class="help" data-topic="pop_seq_count"></div></th> + </tr> + <tr> + <td id="ins_seq_source"></td> + <td id="ins_seq_alphabet"></td> + <td id="ins_seq_count"></td> + </tr> + </table> + <script> + { + var db = data.sequence_db; + $("ins_seq_source").innerHTML = db.file; + $("ins_seq_alphabet").innerHTML = dreme_alphabet.get_alphabet_name(); + $("ins_seq_count").innerHTML = db.count; + } + </script> + <h4>Control Sequences</h4> + <table id="seq_info" class="inputs"> + <tr><th>Source <div class="help" data-topic="pop_seq_source"></div></th> + <th>Sequence Count <div class="help" data-topic="pop_seq_count"></div></th> + </tr> + <tr> + <td id="ins_cseq_source"></td> + <td id="ins_cseq_count"></td> + </tr> + </table> + <script> + { + var db = data.control_db; + if (db.from == "shuffled") { + $("ins_cseq_source").innerHTML = "Shuffled Sequences"; + } else { + $("ins_cseq_source").innerHTML = db.file; + } + $("ins_cseq_count").innerHTML = db.count; + } + </script> + <h4>Background</h4> + <span id="alpha_bg"></span> + <script> + { + $("alpha_bg").appendChild(make_alpha_bg(dreme_alphabet, data.control_db.freqs)); + } + </script> + <h4>Other Settings</h4> + <table id="tbl_settings" class="inputs hide_advanced"> + <tr> + <th>Strand Handling</th> + <td id="opt_strand"> + <span class="strand_none">This alphabet only has one strand</span> + <span class="strand_given">Only the given strand is processed</span> + <span class="strand_both">Both the given and reverse complement strands are processed</span> + </td> + </tr> + <tr><th># REs to Generalize</th><td id="opt_ngen"></td></tr> + <tr><th>Shuffle Seed</th><td id="opt_seed"></td></tr> + <tr><th>E-value Threshold</th><td id="opt_stop_evalue"></td></tr> + <tr><th>Max Motif Count</th><td id="opt_stop_count"></td></tr> + <tr><th>Max Run Time</th><td id="opt_stop_time"></td></tr> + </table> + <script> + { + $("opt_strand").className = (dreme_alphabet.has_complement() ? (data.options.revcomp ? "both" : "given") : "none"); + $("opt_ngen").innerHTML = data.options.ngen; + $("opt_seed").innerHTML = data.options.seed; + $("opt_stop_evalue").innerHTML = data.options.stop.evalue; + $("opt_stop_count").innerHTML = (typeof data.options.stop.count == "number" ? data.options.stop.count : "No maximum motif count."); + $("opt_stop_time").innerHTML = (typeof data.options.stop.time == "number" ? data.options.stop.time + " seconds." : "No maximum running time."); + } + </script> + </div> + <!-- list information on this program --> + <div id="info_sec" class="bar" style="position:relative"> + <div style="position: absolute; right: 0;"><a href="#inputs_sec">Previous</a> <a href="#">Top</a></div> + <div class="subsection"> + <h5 id="version">DREME version</h5> + <span id="ins_version"></span> + (Release date: <span id="ins_release"></span>)<br> + </div> + <script> + $("ins_version").innerHTML = data["version"]; + $("ins_release").innerHTML = data["release"]; + </script> + <div class="subsection"> + <h5 id="reference">Reference</h5> + <span class="citation"> + Timothy L. Bailey, "DREME: Motif discovery in transcription factor ChIP-seq data", <i>Bioinformatics</i>, <b>27</b>(12):1653-1659, 2011. + <a href="http://bioinformatics.oxfordjournals.org/content/27/12/1653">[full text]</a> + </span> + </div> + <div class="subsection"> + <h5 id="command">Command line</h5> + <textarea id="cmd" rows="3" style="width:100%;" readonly="readonly"> + </textarea> + <script>$("cmd").value = data["cmd"].join(" ");</script> + </div> + </div> + + </body> +</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/dreme_output_test2.txt Thu May 17 14:11:00 2018 -0400 @@ -0,0 +1,68 @@ +# DREME 4.12.0 +# command: dreme -o ./dreme_test2_out -p dreme_test_sites.fa -norc -rna -s 1 -e 1e-05 -g 100 -mink 4 -maxk 10 +# positives: 1000 from dreme_test_sites.fa (Thu Apr 26 15:09:03 CEST 2018) +# negatives: 1000 from shuffled positives +# host: ThinkPad-T450s +# when: Thu May 03 13:22:11 CEST 2018 + +MEME version 4.12.0 + +ALPHABET "RNA" RNA-LIKE +A "Adenine" CC0000 +C "Cytosine" 0000CC +G "Guanine" FFB300 +U "Uracil" 008000 +N "Any base" = ACGU +X = ACGU +. = ACGU +V "Not U" = ACG +H "Not G" = ACU +D "Not C" = AGU +B "Not A" = CGU +M "Amino" = AC +R "Purine" = AG +W "Weak" = AU +S "Strong" = CG +Y "Pyrimidine" = CU +K "Keto" = GU +T = U +END ALPHABET + +Background letter frequencies (from dataset): +A 0.221 C 0.245 G 0.221 U 0.312 + + +MOTIF UUYUCY DREME-1 + +# Word Pos Neg P-value E-value +# BEST UUYUCY 387 210 2.6e-018 3.3e-013 +# UUUUCC 147 75 1.8e-007 2.2e-002 +# UUUUCU 155 94 2.2e-005 2.8e+000 +# UUCUCU 94 51 1.3e-004 1.7e+001 +# UUCUCC 75 42 1.1e-003 1.4e+002 + +letter-probability matrix: alength= 4 w= 6 nsites= 459 E= 3.3e-013 +0.000000 0.000000 0.000000 1.000000 +0.000000 0.000000 0.000000 1.000000 +0.000000 0.294118 0.000000 0.705882 +0.000000 0.000000 0.000000 1.000000 +0.000000 1.000000 0.000000 0.000000 +0.000000 0.474946 0.000000 0.525054 + + +MOTIF YAGG DREME-2 + +# Word Pos Neg P-value E-value +# BEST YAGG 600 416 1.1e-016 1.4e-011 +# CAGG 441 304 1.5e-010 1.8e-005 +# UAGG 232 165 1.1e-004 1.3e+001 + +letter-probability matrix: alength= 4 w= 4 nsites= 793 E= 1.4e-011 +0.000000 0.692308 0.000000 0.307692 +1.000000 0.000000 0.000000 0.000000 +0.000000 0.000000 1.000000 0.000000 +0.000000 0.000000 1.000000 0.000000 + + +# Stopping reason: E-value threshold exceeded +# Running time: 15.97 seconds
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/dreme_output_test2.xml Thu May 17 14:11:00 2018 -0400 @@ -0,0 +1,55 @@ +<dreme version="4.12.0" release="Tue Jun 27 16:22:50 2017 -0700"> + <model> + <command_line>dreme -o ./dreme_test2_out -p dreme_test_sites.fa -norc -rna -s 1 -e 1e-05 -g 100 -mink 4 -maxk 10</command_line> + <positives name="dreme test sites" count="1000" file="dreme_test_sites.fa" last_mod_date="Thu Apr 26 15:09:03 CEST 2018" /> + <negatives name="shuffled positive sequences" count="1000" from="shuffled"/> + <alphabet name="RNA" like="rna"> + <letter id="A" symbol="A" name="Adenine" colour="CC0000"/> + <letter id="C" symbol="C" name="Cytosine" colour="0000CC"/> + <letter id="G" symbol="G" name="Guanine" colour="FFB300"/> + <letter id="U" symbol="U" aliases="T" name="Uracil" colour="008000"/> + <letter id="N" symbol="N" aliases="X." equals="ACGU" name="Any base"/> + <letter id="V" symbol="V" equals="ACG" name="Not U"/> + <letter id="H" symbol="H" equals="ACU" name="Not G"/> + <letter id="D" symbol="D" equals="AGU" name="Not C"/> + <letter id="B" symbol="B" equals="CGU" name="Not A"/> + <letter id="M" symbol="M" equals="AC" name="Amino"/> + <letter id="R" symbol="R" equals="AG" name="Purine"/> + <letter id="W" symbol="W" equals="AU" name="Weak"/> + <letter id="S" symbol="S" equals="CG" name="Strong"/> + <letter id="Y" symbol="Y" equals="CU" name="Pyrimidine"/> + <letter id="K" symbol="K" equals="GU" name="Keto"/> + </alphabet> + <strands>none</strands> + <background A="0.221" C="0.245" G="0.221" U="0.312" from="dataset"/> + <stop evalue="1e-05"/> + <ngen>100</ngen> + <add_pv_thresh>0.01</add_pv_thresh> + <seed>1</seed> + <host>ThinkPad-T450s</host> + <when>Thu May 03 13:22:11 CEST 2018</when> + </model> + <motifs> + <motif id="m01" alt="DREME-1" seq="UUYUCY" length="6" nsites="459" p="387" n="210" pvalue="2.6e-018" evalue="3.3e-013" unerased_evalue="3.3e-013"> + <pos A="0.000000" C="0.000000" G="0.000000" U="1.000000"/> + <pos A="0.000000" C="0.000000" G="0.000000" U="1.000000"/> + <pos A="0.000000" C="0.294118" G="0.000000" U="0.705882"/> + <pos A="0.000000" C="0.000000" G="0.000000" U="1.000000"/> + <pos A="0.000000" C="1.000000" G="0.000000" U="0.000000"/> + <pos A="0.000000" C="0.474946" G="0.000000" U="0.525054"/> + <match seq="UUUUCC" p="147" n="75" pvalue="1.8e-007" evalue="2.2e-002"/> + <match seq="UUUUCU" p="155" n="94" pvalue="2.2e-005" evalue="2.8e+000"/> + <match seq="UUCUCU" p="94" n="51" pvalue="1.3e-004" evalue="1.7e+001"/> + <match seq="UUCUCC" p="75" n="42" pvalue="1.1e-003" evalue="1.4e+002"/> + </motif> + <motif id="m02" alt="DREME-2" seq="YAGG" length="4" nsites="793" p="600" n="416" pvalue="1.1e-016" evalue="1.4e-011" unerased_evalue="6.3e-012"> + <pos A="0.000000" C="0.692308" G="0.000000" U="0.307692"/> + <pos A="1.000000" C="0.000000" G="0.000000" U="0.000000"/> + <pos A="0.000000" C="0.000000" G="1.000000" U="0.000000"/> + <pos A="0.000000" C="0.000000" G="1.000000" U="0.000000"/> + <match seq="CAGG" p="441" n="304" pvalue="1.5e-010" evalue="1.8e-005"/> + <match seq="UAGG" p="232" n="165" pvalue="1.1e-004" evalue="1.3e+001"/> + </motif> + </motifs> + <run_time cpu="15.97" real="15.97" stop="evalue"/> +</dreme>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/fimo_background_probs_hsa_chrM.txt Thu May 17 14:11:00 2018 -0400 @@ -0,0 +1,7 @@ +# 0-order Markov frequencies from file hsa_chrM.fa +# seqs: 1 min: 16569 max: 16569 avg: 16569.0 sum: 16569 alph: DNA +# order 0 +A 3.093e-01 +C 3.127e-01 +G 1.309e-01 +T 2.471e-01
--- a/test-data/fimo_output_almost-gff_1.txt Wed Apr 25 12:12:47 2018 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,100 +0,0 @@ -##gff-version 3 -phiX174 fimo polypeptide_motif 1388 1398 102 + . Name=1;ID=1-1-phiX174;pvalue=6.36e-11;qvalue= 1.25e-09;sequence=AATATCTATAA; -phiX174 fimo polypeptide_motif 847 857 102 + . Name=1;ID=1-2-phiX174;pvalue=7.02e-11;qvalue= 1.25e-09;sequence=AATGTCTAAAG; -phiX174 fimo polypeptide_motif 2301 2311 99.6 + . Name=1;ID=1-3-phiX174;pvalue=1.08e-10;qvalue= 1.29e-09;sequence=AGGTTATAACG; -phiX174 fimo polypeptide_motif 5063 5073 95.6 + . Name=1;ID=1-4-phiX174;pvalue=2.73e-10;qvalue= 2.25e-09;sequence=AGGAGCTAAAG; -phiX174 fimo polypeptide_motif 989 999 95 + . Name=1;ID=1-5-phiX174;pvalue=3.15e-10;qvalue= 2.25e-09;sequence=TGAGGATAAAT; -phiX174 fimo polypeptide_motif 4713 4723 91.1 + . Name=1;ID=1-6-phiX174;pvalue=7.74e-10;qvalue= 3.48e-09;sequence=GACTGCTATCA; -phiX174 fimo polypeptide_motif 5048 5058 90.7 + . Name=1;ID=1-7-phiX174;pvalue=8.51e-10;qvalue= 3.48e-09;sequence=TGCTGCTAAAG; -phiX174 fimo polypeptide_motif 855 865 90.6 + . Name=1;ID=1-8-phiX174;pvalue=8.64e-10;qvalue= 3.48e-09;sequence=AAGGTAAAAAA; -phiX174 fimo polypeptide_motif 3155 3165 90.1 + . Name=1;ID=1-9-phiX174;pvalue=9.76e-10;qvalue= 3.48e-09;sequence=TATGGCTAAAG; -phiX174 fimo polypeptide_motif 5009 5019 90.1 + . Name=1;ID=1-10-phiX174;pvalue=9.76e-10;qvalue= 3.48e-09;sequence=TGTGGCTAAAT; -phiX174 fimo polypeptide_motif 814 824 88.9 + . Name=1;ID=1-11-phiX174;pvalue=1.28e-09;qvalue= 4.14e-09;sequence=TGCGTCAAAAA; -phiX174 fimo polypeptide_motif 2832 2842 88.5 + . Name=1;ID=1-12-phiX174;pvalue=1.42e-09;qvalue= 4.23e-09;sequence=TTGGTCTAACT; -phiX174 fimo polypeptide_motif 3830 3840 87.7 + . Name=1;ID=1-13-phiX174;pvalue=1.7e-09;qvalue= 4.68e-09;sequence=TATTGATAAAG; -phiX174 fimo polypeptide_motif 3560 3570 87.2 + . Name=1;ID=1-14-phiX174;pvalue=1.89e-09;qvalue= 4.82e-09;sequence=TGCGTCTATTA; -phiX174 fimo polypeptide_motif 2882 2892 86.4 + . Name=1;ID=1-15-phiX174;pvalue=2.29e-09;qvalue= 5.46e-09;sequence=AGGTTATTAAA; -phiX174 fimo polypeptide_motif 4453 4463 85.9 + . Name=1;ID=1-16-phiX174;pvalue=2.58e-09;qvalue= 5.75e-09;sequence=AAGGTATTAAG; -phiX174 fimo polypeptide_motif 2493 2503 85.1 + . Name=1;ID=1-17-phiX174;pvalue=3.06e-09;qvalue= 5.79e-09;sequence=GACACCTAAAG; -phiX174 fimo polypeptide_motif 4104 4114 85.1 + . Name=1;ID=1-18-phiX174;pvalue=3.08e-09;qvalue= 5.79e-09;sequence=GGCTTCCATAA; -phiX174 fimo polypeptide_motif 4955 4965 85.1 + . Name=1;ID=1-19-phiX174;pvalue=3.08e-09;qvalue= 5.79e-09;sequence=TGATGCTAAAG; -phiX174 fimo polypeptide_motif 1885 1895 84.4 + . Name=1;ID=1-20-phiX174;pvalue=3.61e-09;qvalue= 6.45e-09;sequence=TGCGACTAAAG; -phiX174 fimo polypeptide_motif 3376 3386 84.2 + . Name=1;ID=1-21-phiX174;pvalue=3.81e-09;qvalue= 6.48e-09;sequence=AGAATCAAAAA; -phiX174 fimo polypeptide_motif 52 62 83.9 + . Name=1;ID=1-22-phiX174;pvalue=4.06e-09;qvalue= 6.58e-09;sequence=TGAGTCGAAAA; -phiX174 fimo polypeptide_motif 1390 1400 83.7 + . Name=1;ID=1-23-phiX174;pvalue=4.26e-09;qvalue= 6.61e-09;sequence=TATCTATAACA; -phiX174 fimo polypeptide_motif 2017 2027 83.4 + . Name=1;ID=1-24-phiX174;pvalue=4.6e-09;qvalue= 6.85e-09;sequence=TTCGTCTAAGA; -phiX174 fimo polypeptide_motif 1000 1010 83.1 + . Name=1;ID=1-25-phiX174;pvalue=4.88e-09;qvalue= 6.97e-09;sequence=TATGTCTAATA; -phiX174 fimo polypeptide_motif 1555 1565 82.5 + . Name=1;ID=1-26-phiX174;pvalue=5.58e-09;qvalue= 7.37e-09;sequence=GACTTCTACCA; -phiX174 fimo polypeptide_motif 4430 4440 82.5 + . Name=1;ID=1-27-phiX174;pvalue=5.62e-09;qvalue= 7.37e-09;sequence=TGAGTATAATT; -phiX174 fimo polypeptide_motif 1927 1937 82.3 + . Name=1;ID=1-28-phiX174;pvalue=5.82e-09;qvalue= 7.37e-09;sequence=GACTTATACCG; -phiX174 fimo polypeptide_motif 2981 2991 82.1 + . Name=1;ID=1-29-phiX174;pvalue=6.13e-09;qvalue= 7.37e-09;sequence=CATGTCTAAAT; -phiX174 fimo polypeptide_motif 4203 4213 82 + . Name=1;ID=1-30-phiX174;pvalue=6.34e-09;qvalue= 7.37e-09;sequence=GACGGCCATAA; -phiX174 fimo polypeptide_motif 1669 1679 81.9 + . Name=1;ID=1-31-phiX174;pvalue=6.4e-09;qvalue= 7.37e-09;sequence=TGGAGGTAAAA; -phiX174 fimo polypeptide_motif 3260 3270 81.5 + . Name=1;ID=1-32-phiX174;pvalue=7.01e-09;qvalue= 7.82e-09;sequence=CGCTGATAAAG; -phiX174 fimo polypeptide_motif 3047 3057 81.3 + . Name=1;ID=1-33-phiX174;pvalue=7.4e-09;qvalue= 7.85e-09;sequence=TACCGATAACA; -phiX174 fimo polypeptide_motif 4176 4186 81.2 + . Name=1;ID=1-34-phiX174;pvalue=7.6e-09;qvalue= 7.85e-09;sequence=GAGTTCGATAA; -phiX174 fimo polypeptide_motif 4118 4128 81.1 + . Name=1;ID=1-35-phiX174;pvalue=7.7e-09;qvalue= 7.85e-09;sequence=GATGGATAACC; -phiX174 fimo polypeptide_motif 5370 5380 80.9 + . Name=1;ID=1-36-phiX174;pvalue=8.03e-09;qvalue= 7.87e-09;sequence=GGCGTATCCAA; -phiX174 fimo polypeptide_motif 1242 1252 80.5 + . Name=1;ID=1-37-phiX174;pvalue=8.94e-09;qvalue= 7.87e-09;sequence=AGTGGATTAAG; -phiX174 fimo polypeptide_motif 2583 2593 80.5 + . Name=1;ID=1-38-phiX174;pvalue=8.94e-09;qvalue= 7.87e-09;sequence=TACATCTGTCA; -phiX174 fimo polypeptide_motif 698 708 80.4 + . Name=1;ID=1-39-phiX174;pvalue=9.13e-09;qvalue= 7.87e-09;sequence=TACGGAAAACA; -phiX174 fimo polypeptide_motif 2299 2309 80.3 + . Name=1;ID=1-40-phiX174;pvalue=9.26e-09;qvalue= 7.87e-09;sequence=TGAGGTTATAA; -phiX174 fimo polypeptide_motif 4189 4199 80.1 + . Name=1;ID=1-41-phiX174;pvalue=9.69e-09;qvalue= 7.87e-09;sequence=GTGATATGTAT; -phiX174 fimo polypeptide_motif 275 285 80.1 + . Name=1;ID=1-42-phiX174;pvalue=9.85e-09;qvalue= 7.87e-09;sequence=GGTTTAGATAT; -phiX174 fimo polypeptide_motif 1801 1811 80 + . Name=1;ID=1-43-phiX174;pvalue=1e-08;qvalue= 7.87e-09;sequence=GACCTATAAAC; -phiX174 fimo polypeptide_motif 1386 1396 79.9 + . Name=1;ID=1-44-phiX174;pvalue=1.03e-08;qvalue= 7.87e-09;sequence=TGAATATCTAT; -phiX174 fimo polypeptide_motif 1303 1313 79.8 + . Name=1;ID=1-45-phiX174;pvalue=1.03e-08;qvalue= 7.87e-09;sequence=TGGTTATATTG; -phiX174 fimo polypeptide_motif 3772 3782 79.8 + . Name=1;ID=1-46-phiX174;pvalue=1.04e-08;qvalue= 7.87e-09;sequence=AGGATATTTCT; -phiX174 fimo polypeptide_motif 1288 1298 79.8 + . Name=1;ID=1-47-phiX174;pvalue=1.04e-08;qvalue= 7.87e-09;sequence=GACTGTTAACA; -phiX174 fimo polypeptide_motif 2577 2587 79.7 + . Name=1;ID=1-48-phiX174;pvalue=1.08e-08;qvalue= 7.87e-09;sequence=GATGGATACAT; -phiX174 fimo polypeptide_motif 937 947 79.6 + . Name=1;ID=1-49-phiX174;pvalue=1.08e-08;qvalue= 7.87e-09;sequence=TTGGTATGTAG; -phiX174 fimo polypeptide_motif 904 914 79.5 + . Name=1;ID=1-50-phiX174;pvalue=1.11e-08;qvalue= 7.93e-09;sequence=AGGTACTAAAG; -phiX174 fimo polypeptide_motif 2279 2289 79.4 + . Name=1;ID=1-51-phiX174;pvalue=1.13e-08;qvalue= 7.93e-09;sequence=TCGTGATAAAA; -phiX174 fimo polypeptide_motif 3164 3174 79.3 + . Name=1;ID=1-52-phiX174;pvalue=1.16e-08;qvalue= 7.98e-09;sequence=AGCTGGTAAAG; -phiX174 fimo polypeptide_motif 24 34 79.1 + . Name=1;ID=1-53-phiX174;pvalue=1.23e-08;qvalue= 8.24e-09;sequence=AGAAGTTAACA; -phiX174 fimo polypeptide_motif 838 848 78.9 + . Name=1;ID=1-54-phiX174;pvalue=1.27e-08;qvalue= 8.24e-09;sequence=GAGTGATGTAA; -phiX174 fimo polypeptide_motif 853 863 78.9 + . Name=1;ID=1-55-phiX174;pvalue=1.27e-08;qvalue= 8.24e-09;sequence=TAAAGGTAAAA; -phiX174 fimo polypeptide_motif 1984 1994 78.6 + . Name=1;ID=1-56-phiX174;pvalue=1.36e-08;qvalue= 8.68e-09;sequence=AATTTCTATGA; -phiX174 fimo polypeptide_motif 1 11 78.3 + . Name=1;ID=1-57-phiX174;pvalue=1.46e-08;qvalue= 9.05e-09;sequence=GAGTTTTATCG; -phiX174 fimo polypeptide_motif 4307 4317 78.3 + . Name=1;ID=1-58-phiX174;pvalue=1.47e-08;qvalue= 9.05e-09;sequence=TATTAATAACA; -phiX174 fimo polypeptide_motif 4303 4313 78.2 + . Name=1;ID=1-59-phiX174;pvalue=1.52e-08;qvalue= 9.19e-09;sequence=TTGATATTAAT; -phiX174 fimo polypeptide_motif 5033 5043 78 + . Name=1;ID=1-60-phiX174;pvalue=1.58e-08;qvalue= 9.41e-09;sequence=GTCAGATATGG; -phiX174 fimo polypeptide_motif 2579 2589 77.6 + . Name=1;ID=1-61-phiX174;pvalue=1.73e-08;qvalue= 1.01e-08;sequence=TGGATACATCT; -phiX174 fimo polypeptide_motif 322 332 77.4 + . Name=1;ID=1-62-phiX174;pvalue=1.82e-08;qvalue= 1.05e-08;sequence=GACATTTTAAA; -phiX174 fimo polypeptide_motif 5001 5011 76.8 + . Name=1;ID=1-63-phiX174;pvalue=2.09e-08;qvalue= 1.19e-08;sequence=GGTTTCTATGT; -phiX174 fimo polypeptide_motif 4217 4227 76.7 + . Name=1;ID=1-64-phiX174;pvalue=2.15e-08;qvalue= 1.2e-08;sequence=TGCTTCTGACG; -phiX174 fimo polypeptide_motif 4262 4272 76.6 + . Name=1;ID=1-65-phiX174;pvalue=2.18e-08;qvalue= 1.2e-08;sequence=AATGGATGAAT; -phiX174 fimo polypeptide_motif 3569 3579 76.5 + . Name=1;ID=1-66-phiX174;pvalue=2.26e-08;qvalue= 1.22e-08;sequence=TATGGAAAACA; -phiX174 fimo polypeptide_motif 194 204 76.4 + . Name=1;ID=1-67-phiX174;pvalue=2.29e-08;qvalue= 1.22e-08;sequence=ATCAACTAACG; -phiX174 fimo polypeptide_motif 131 141 76 + . Name=1;ID=1-68-phiX174;pvalue=2.49e-08;qvalue= 1.31e-08;sequence=AAATGAGAAAA; -phiX174 fimo polypeptide_motif 1491 1501 75.9 + . Name=1;ID=1-69-phiX174;pvalue=2.55e-08;qvalue= 1.32e-08;sequence=GCCATCTCAAA; -phiX174 fimo polypeptide_motif 434 444 75.7 + . Name=1;ID=1-70-phiX174;pvalue=2.67e-08;qvalue= 1.36e-08;sequence=GGCCTCTATTA; -phiX174 fimo polypeptide_motif 4565 4575 75.6 + . Name=1;ID=1-71-phiX174;pvalue=2.73e-08;qvalue= 1.36e-08;sequence=TTGGTTTATCG; -phiX174 fimo polypeptide_motif 102 112 75.6 + . Name=1;ID=1-72-phiX174;pvalue=2.75e-08;qvalue= 1.36e-08;sequence=GAATTAAATCG; -phiX174 fimo polypeptide_motif 903 913 75.5 + . Name=1;ID=1-73-phiX174;pvalue=2.82e-08;qvalue= 1.38e-08;sequence=GAGGTACTAAA; -phiX174 fimo polypeptide_motif 4748 4758 75.2 + . Name=1;ID=1-74-phiX174;pvalue=3.01e-08;qvalue= 1.45e-08;sequence=TACAGCTAATG; -phiX174 fimo polypeptide_motif 2622 2632 75 + . Name=1;ID=1-75-phiX174;pvalue=3.16e-08;qvalue= 1.5e-08;sequence=TGCTGATATTG; -phiX174 fimo polypeptide_motif 467 477 74.7 + . Name=1;ID=1-76-phiX174;pvalue=3.35e-08;qvalue= 1.57e-08;sequence=TTTGGATTTAA; -phiX174 fimo polypeptide_motif 4033 4043 74.6 + . Name=1;ID=1-77-phiX174;pvalue=3.44e-08;qvalue= 1.58e-08;sequence=AGCGTATCGAG; -phiX174 fimo polypeptide_motif 1348 1358 74.6 + . Name=1;ID=1-78-phiX174;pvalue=3.46e-08;qvalue= 1.58e-08;sequence=TACCAATAAAA; -phiX174 fimo polypeptide_motif 239 249 74.4 + . Name=1;ID=1-79-phiX174;pvalue=3.62e-08;qvalue= 1.64e-08;sequence=AGTGGCTTAAT; -phiX174 fimo polypeptide_motif 500 510 74.1 + . Name=1;ID=1-80-phiX174;pvalue=3.84e-08;qvalue= 1.71e-08;sequence=GACGAGTAACA; -phiX174 fimo polypeptide_motif 3001 3011 74 + . Name=1;ID=1-81-phiX174;pvalue=3.93e-08;qvalue= 1.73e-08;sequence=GCGGTCAAAAA; -phiX174 fimo polypeptide_motif 3776 3786 74 + . Name=1;ID=1-82-phiX174;pvalue=3.98e-08;qvalue= 1.73e-08;sequence=TATTTCTAATG; -phiX174 fimo polypeptide_motif 2026 2036 73.9 + . Name=1;ID=1-83-phiX174;pvalue=4.06e-08;qvalue= 1.75e-08;sequence=GAAGTTTAAGA; -phiX174 fimo polypeptide_motif 4237 4247 73.8 + . Name=1;ID=1-84-phiX174;pvalue=4.12e-08;qvalue= 1.75e-08;sequence=AGTTTGTATCT; -phiX174 fimo polypeptide_motif 803 813 73.7 + . Name=1;ID=1-85-phiX174;pvalue=4.24e-08;qvalue= 1.78e-08;sequence=AGAAGAAAACG; -phiX174 fimo polypeptide_motif 3770 3780 73.6 + . Name=1;ID=1-86-phiX174;pvalue=4.35e-08;qvalue= 1.81e-08;sequence=AAAGGATATTT; -phiX174 fimo polypeptide_motif 3429 3439 73.5 + . Name=1;ID=1-87-phiX174;pvalue=4.45e-08;qvalue= 1.82e-08;sequence=GAGATGCAAAA; -phiX174 fimo polypeptide_motif 99 109 73.5 + . Name=1;ID=1-88-phiX174;pvalue=4.48e-08;qvalue= 1.82e-08;sequence=TACGAATTAAA; -phiX174 fimo polypeptide_motif 67 77 73.2 + . Name=1;ID=1-89-phiX174;pvalue=4.78e-08;qvalue= 1.92e-08;sequence=TCTTGATAAAG; -phiX174 fimo polypeptide_motif 5332 5342 72.9 + . Name=1;ID=1-90-phiX174;pvalue=5.13e-08;qvalue= 2.01e-08;sequence=ATCTGCTCAAA; -phiX174 fimo polypeptide_motif 277 287 72.9 + . Name=1;ID=1-91-phiX174;pvalue=5.14e-08;qvalue= 2.01e-08;sequence=TTTAGATATGA; -phiX174 fimo polypeptide_motif 4338 4348 72.8 + . Name=1;ID=1-92-phiX174;pvalue=5.18e-08;qvalue= 2.01e-08;sequence=GGGGACGAAAA; -phiX174 fimo polypeptide_motif 3812 3822 72.8 + . Name=1;ID=1-93-phiX174;pvalue=5.28e-08;qvalue= 2.03e-08;sequence=GGTTGATATTT; -phiX174 fimo polypeptide_motif 1909 1919 72.6 + . Name=1;ID=1-94-phiX174;pvalue=5.51e-08;qvalue= 2.08e-08;sequence=TAACGCTAAAG; -phiX174 fimo polypeptide_motif 3000 3010 72.6 + . Name=1;ID=1-95-phiX174;pvalue=5.54e-08;qvalue= 2.08e-08;sequence=GGCGGTCAAAA; -phiX174 fimo polypeptide_motif 3891 3901 72.4 + . Name=1;ID=1-96-phiX174;pvalue=5.75e-08;qvalue= 2.11e-08;sequence=ATTGGCTCTAA; -phiX174 fimo polypeptide_motif 3079 3089 72.4 + . Name=1;ID=1-97-phiX174;pvalue=5.76e-08;qvalue= 2.11e-08;sequence=CTGGTATTAAA; -phiX174 fimo polypeptide_motif 37 47 72.4 + . Name=1;ID=1-98-phiX174;pvalue=5.79e-08;qvalue= 2.11e-08;sequence=TTCGGATATTT; -phiX174 fimo polypeptide_motif 380 390 72.2 + . Name=1;ID=1-99-phiX174;pvalue=6.01e-08;qvalue= 2.17e-08;sequence=GTAAGAAATCA;
--- a/test-data/fimo_output_almost-gff_2.txt Wed Apr 25 12:12:47 2018 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,100 +0,0 @@ -##gff-version 3 -phiX174 fimo polypeptide_motif 1388 1398 102 + . Name=1;ID=1-1-phiX174;pvalue=6.36e-11;sequence=AATATCTATAA; -phiX174 fimo polypeptide_motif 847 857 102 + . Name=1;ID=1-2-phiX174;pvalue=7.02e-11;sequence=AATGTCTAAAG; -phiX174 fimo polypeptide_motif 2301 2311 99.6 + . Name=1;ID=1-3-phiX174;pvalue=1.08e-10;sequence=AGGTTATAACG; -phiX174 fimo polypeptide_motif 5063 5073 95.6 + . Name=1;ID=1-4-phiX174;pvalue=2.73e-10;sequence=AGGAGCTAAAG; -phiX174 fimo polypeptide_motif 989 999 95 + . Name=1;ID=1-5-phiX174;pvalue=3.15e-10;sequence=TGAGGATAAAT; -phiX174 fimo polypeptide_motif 4713 4723 91.1 + . Name=1;ID=1-6-phiX174;pvalue=7.74e-10;sequence=GACTGCTATCA; -phiX174 fimo polypeptide_motif 5048 5058 90.7 + . Name=1;ID=1-7-phiX174;pvalue=8.51e-10;sequence=TGCTGCTAAAG; -phiX174 fimo polypeptide_motif 855 865 90.6 + . Name=1;ID=1-8-phiX174;pvalue=8.64e-10;sequence=AAGGTAAAAAA; -phiX174 fimo polypeptide_motif 3155 3165 90.1 + . Name=1;ID=1-9-phiX174;pvalue=9.76e-10;sequence=TATGGCTAAAG; -phiX174 fimo polypeptide_motif 5009 5019 90.1 + . Name=1;ID=1-10-phiX174;pvalue=9.76e-10;sequence=TGTGGCTAAAT; -phiX174 fimo polypeptide_motif 814 824 88.9 + . Name=1;ID=1-11-phiX174;pvalue=1.28e-09;sequence=TGCGTCAAAAA; -phiX174 fimo polypeptide_motif 2832 2842 88.5 + . Name=1;ID=1-12-phiX174;pvalue=1.42e-09;sequence=TTGGTCTAACT; -phiX174 fimo polypeptide_motif 3830 3840 87.7 + . Name=1;ID=1-13-phiX174;pvalue=1.7e-09;sequence=TATTGATAAAG; -phiX174 fimo polypeptide_motif 3560 3570 87.2 + . Name=1;ID=1-14-phiX174;pvalue=1.89e-09;sequence=TGCGTCTATTA; -phiX174 fimo polypeptide_motif 2882 2892 86.4 + . Name=1;ID=1-15-phiX174;pvalue=2.29e-09;sequence=AGGTTATTAAA; -phiX174 fimo polypeptide_motif 4453 4463 85.9 + . Name=1;ID=1-16-phiX174;pvalue=2.58e-09;sequence=AAGGTATTAAG; -phiX174 fimo polypeptide_motif 2493 2503 85.1 + . Name=1;ID=1-17-phiX174;pvalue=3.06e-09;sequence=GACACCTAAAG; -phiX174 fimo polypeptide_motif 4104 4114 85.1 + . Name=1;ID=1-18-phiX174;pvalue=3.08e-09;sequence=GGCTTCCATAA; -phiX174 fimo polypeptide_motif 4955 4965 85.1 + . Name=1;ID=1-19-phiX174;pvalue=3.08e-09;sequence=TGATGCTAAAG; -phiX174 fimo polypeptide_motif 1885 1895 84.4 + . Name=1;ID=1-20-phiX174;pvalue=3.61e-09;sequence=TGCGACTAAAG; -phiX174 fimo polypeptide_motif 3376 3386 84.2 + . Name=1;ID=1-21-phiX174;pvalue=3.81e-09;sequence=AGAATCAAAAA; -phiX174 fimo polypeptide_motif 52 62 83.9 + . Name=1;ID=1-22-phiX174;pvalue=4.06e-09;sequence=TGAGTCGAAAA; -phiX174 fimo polypeptide_motif 1390 1400 83.7 + . Name=1;ID=1-23-phiX174;pvalue=4.26e-09;sequence=TATCTATAACA; -phiX174 fimo polypeptide_motif 2017 2027 83.4 + . Name=1;ID=1-24-phiX174;pvalue=4.6e-09;sequence=TTCGTCTAAGA; -phiX174 fimo polypeptide_motif 1000 1010 83.1 + . Name=1;ID=1-25-phiX174;pvalue=4.88e-09;sequence=TATGTCTAATA; -phiX174 fimo polypeptide_motif 1555 1565 82.5 + . Name=1;ID=1-26-phiX174;pvalue=5.58e-09;sequence=GACTTCTACCA; -phiX174 fimo polypeptide_motif 4430 4440 82.5 + . Name=1;ID=1-27-phiX174;pvalue=5.62e-09;sequence=TGAGTATAATT; -phiX174 fimo polypeptide_motif 1927 1937 82.3 + . Name=1;ID=1-28-phiX174;pvalue=5.82e-09;sequence=GACTTATACCG; -phiX174 fimo polypeptide_motif 2981 2991 82.1 + . Name=1;ID=1-29-phiX174;pvalue=6.13e-09;sequence=CATGTCTAAAT; -phiX174 fimo polypeptide_motif 4203 4213 82 + . Name=1;ID=1-30-phiX174;pvalue=6.34e-09;sequence=GACGGCCATAA; -phiX174 fimo polypeptide_motif 1669 1679 81.9 + . Name=1;ID=1-31-phiX174;pvalue=6.4e-09;sequence=TGGAGGTAAAA; -phiX174 fimo polypeptide_motif 3260 3270 81.5 + . Name=1;ID=1-32-phiX174;pvalue=7.01e-09;sequence=CGCTGATAAAG; -phiX174 fimo polypeptide_motif 3047 3057 81.3 + . Name=1;ID=1-33-phiX174;pvalue=7.4e-09;sequence=TACCGATAACA; -phiX174 fimo polypeptide_motif 4176 4186 81.2 + . Name=1;ID=1-34-phiX174;pvalue=7.6e-09;sequence=GAGTTCGATAA; -phiX174 fimo polypeptide_motif 4118 4128 81.1 + . Name=1;ID=1-35-phiX174;pvalue=7.7e-09;sequence=GATGGATAACC; -phiX174 fimo polypeptide_motif 5370 5380 80.9 + . Name=1;ID=1-36-phiX174;pvalue=8.03e-09;sequence=GGCGTATCCAA; -phiX174 fimo polypeptide_motif 1242 1252 80.5 + . Name=1;ID=1-37-phiX174;pvalue=8.94e-09;sequence=AGTGGATTAAG; -phiX174 fimo polypeptide_motif 2583 2593 80.5 + . Name=1;ID=1-38-phiX174;pvalue=8.94e-09;sequence=TACATCTGTCA; -phiX174 fimo polypeptide_motif 698 708 80.4 + . Name=1;ID=1-39-phiX174;pvalue=9.13e-09;sequence=TACGGAAAACA; -phiX174 fimo polypeptide_motif 2299 2309 80.3 + . Name=1;ID=1-40-phiX174;pvalue=9.26e-09;sequence=TGAGGTTATAA; -phiX174 fimo polypeptide_motif 4189 4199 80.1 + . Name=1;ID=1-41-phiX174;pvalue=9.69e-09;sequence=GTGATATGTAT; -phiX174 fimo polypeptide_motif 275 285 80.1 + . Name=1;ID=1-42-phiX174;pvalue=9.85e-09;sequence=GGTTTAGATAT; -phiX174 fimo polypeptide_motif 1801 1811 80 + . Name=1;ID=1-43-phiX174;pvalue=1e-08;sequence=GACCTATAAAC; -phiX174 fimo polypeptide_motif 1386 1396 79.9 + . Name=1;ID=1-44-phiX174;pvalue=1.03e-08;sequence=TGAATATCTAT; -phiX174 fimo polypeptide_motif 1303 1313 79.8 + . Name=1;ID=1-45-phiX174;pvalue=1.03e-08;sequence=TGGTTATATTG; -phiX174 fimo polypeptide_motif 3772 3782 79.8 + . Name=1;ID=1-46-phiX174;pvalue=1.04e-08;sequence=AGGATATTTCT; -phiX174 fimo polypeptide_motif 1288 1298 79.8 + . Name=1;ID=1-47-phiX174;pvalue=1.04e-08;sequence=GACTGTTAACA; -phiX174 fimo polypeptide_motif 2577 2587 79.7 + . Name=1;ID=1-48-phiX174;pvalue=1.08e-08;sequence=GATGGATACAT; -phiX174 fimo polypeptide_motif 937 947 79.6 + . Name=1;ID=1-49-phiX174;pvalue=1.08e-08;sequence=TTGGTATGTAG; -phiX174 fimo polypeptide_motif 904 914 79.5 + . Name=1;ID=1-50-phiX174;pvalue=1.11e-08;sequence=AGGTACTAAAG; -phiX174 fimo polypeptide_motif 2279 2289 79.4 + . Name=1;ID=1-51-phiX174;pvalue=1.13e-08;sequence=TCGTGATAAAA; -phiX174 fimo polypeptide_motif 3164 3174 79.3 + . Name=1;ID=1-52-phiX174;pvalue=1.16e-08;sequence=AGCTGGTAAAG; -phiX174 fimo polypeptide_motif 24 34 79.1 + . Name=1;ID=1-53-phiX174;pvalue=1.23e-08;sequence=AGAAGTTAACA; -phiX174 fimo polypeptide_motif 838 848 78.9 + . Name=1;ID=1-54-phiX174;pvalue=1.27e-08;sequence=GAGTGATGTAA; -phiX174 fimo polypeptide_motif 853 863 78.9 + . Name=1;ID=1-55-phiX174;pvalue=1.27e-08;sequence=TAAAGGTAAAA; -phiX174 fimo polypeptide_motif 1984 1994 78.6 + . Name=1;ID=1-56-phiX174;pvalue=1.36e-08;sequence=AATTTCTATGA; -phiX174 fimo polypeptide_motif 1 11 78.3 + . Name=1;ID=1-57-phiX174;pvalue=1.46e-08;sequence=GAGTTTTATCG; -phiX174 fimo polypeptide_motif 4307 4317 78.3 + . Name=1;ID=1-58-phiX174;pvalue=1.47e-08;sequence=TATTAATAACA; -phiX174 fimo polypeptide_motif 4303 4313 78.2 + . Name=1;ID=1-59-phiX174;pvalue=1.52e-08;sequence=TTGATATTAAT; -phiX174 fimo polypeptide_motif 5033 5043 78 + . Name=1;ID=1-60-phiX174;pvalue=1.58e-08;sequence=GTCAGATATGG; -phiX174 fimo polypeptide_motif 2579 2589 77.6 + . Name=1;ID=1-61-phiX174;pvalue=1.73e-08;sequence=TGGATACATCT; -phiX174 fimo polypeptide_motif 322 332 77.4 + . Name=1;ID=1-62-phiX174;pvalue=1.82e-08;sequence=GACATTTTAAA; -phiX174 fimo polypeptide_motif 5001 5011 76.8 + . Name=1;ID=1-63-phiX174;pvalue=2.09e-08;sequence=GGTTTCTATGT; -phiX174 fimo polypeptide_motif 4217 4227 76.7 + . Name=1;ID=1-64-phiX174;pvalue=2.15e-08;sequence=TGCTTCTGACG; -phiX174 fimo polypeptide_motif 4262 4272 76.6 + . Name=1;ID=1-65-phiX174;pvalue=2.18e-08;sequence=AATGGATGAAT; -phiX174 fimo polypeptide_motif 3569 3579 76.5 + . Name=1;ID=1-66-phiX174;pvalue=2.26e-08;sequence=TATGGAAAACA; -phiX174 fimo polypeptide_motif 194 204 76.4 + . Name=1;ID=1-67-phiX174;pvalue=2.29e-08;sequence=ATCAACTAACG; -phiX174 fimo polypeptide_motif 131 141 76 + . Name=1;ID=1-68-phiX174;pvalue=2.49e-08;sequence=AAATGAGAAAA; -phiX174 fimo polypeptide_motif 1491 1501 75.9 + . Name=1;ID=1-69-phiX174;pvalue=2.55e-08;sequence=GCCATCTCAAA; -phiX174 fimo polypeptide_motif 434 444 75.7 + . Name=1;ID=1-70-phiX174;pvalue=2.67e-08;sequence=GGCCTCTATTA; -phiX174 fimo polypeptide_motif 4565 4575 75.6 + . Name=1;ID=1-71-phiX174;pvalue=2.73e-08;sequence=TTGGTTTATCG; -phiX174 fimo polypeptide_motif 102 112 75.6 + . Name=1;ID=1-72-phiX174;pvalue=2.75e-08;sequence=GAATTAAATCG; -phiX174 fimo polypeptide_motif 903 913 75.5 + . Name=1;ID=1-73-phiX174;pvalue=2.82e-08;sequence=GAGGTACTAAA; -phiX174 fimo polypeptide_motif 4748 4758 75.2 + . Name=1;ID=1-74-phiX174;pvalue=3.01e-08;sequence=TACAGCTAATG; -phiX174 fimo polypeptide_motif 2622 2632 75 + . Name=1;ID=1-75-phiX174;pvalue=3.16e-08;sequence=TGCTGATATTG; -phiX174 fimo polypeptide_motif 467 477 74.7 + . Name=1;ID=1-76-phiX174;pvalue=3.35e-08;sequence=TTTGGATTTAA; -phiX174 fimo polypeptide_motif 4033 4043 74.6 + . Name=1;ID=1-77-phiX174;pvalue=3.44e-08;sequence=AGCGTATCGAG; -phiX174 fimo polypeptide_motif 1348 1358 74.6 + . Name=1;ID=1-78-phiX174;pvalue=3.46e-08;sequence=TACCAATAAAA; -phiX174 fimo polypeptide_motif 239 249 74.4 + . Name=1;ID=1-79-phiX174;pvalue=3.62e-08;sequence=AGTGGCTTAAT; -phiX174 fimo polypeptide_motif 500 510 74.1 + . Name=1;ID=1-80-phiX174;pvalue=3.84e-08;sequence=GACGAGTAACA; -phiX174 fimo polypeptide_motif 3001 3011 74 + . Name=1;ID=1-81-phiX174;pvalue=3.93e-08;sequence=GCGGTCAAAAA; -phiX174 fimo polypeptide_motif 3776 3786 74 + . Name=1;ID=1-82-phiX174;pvalue=3.98e-08;sequence=TATTTCTAATG; -phiX174 fimo polypeptide_motif 2026 2036 73.9 + . Name=1;ID=1-83-phiX174;pvalue=4.06e-08;sequence=GAAGTTTAAGA; -phiX174 fimo polypeptide_motif 4237 4247 73.8 + . Name=1;ID=1-84-phiX174;pvalue=4.12e-08;sequence=AGTTTGTATCT; -phiX174 fimo polypeptide_motif 803 813 73.7 + . Name=1;ID=1-85-phiX174;pvalue=4.24e-08;sequence=AGAAGAAAACG; -phiX174 fimo polypeptide_motif 3770 3780 73.6 + . Name=1;ID=1-86-phiX174;pvalue=4.35e-08;sequence=AAAGGATATTT; -phiX174 fimo polypeptide_motif 3429 3439 73.5 + . Name=1;ID=1-87-phiX174;pvalue=4.45e-08;sequence=GAGATGCAAAA; -phiX174 fimo polypeptide_motif 99 109 73.5 + . Name=1;ID=1-88-phiX174;pvalue=4.48e-08;sequence=TACGAATTAAA; -phiX174 fimo polypeptide_motif 67 77 73.2 + . Name=1;ID=1-89-phiX174;pvalue=4.78e-08;sequence=TCTTGATAAAG; -phiX174 fimo polypeptide_motif 5332 5342 72.9 + . Name=1;ID=1-90-phiX174;pvalue=5.13e-08;sequence=ATCTGCTCAAA; -phiX174 fimo polypeptide_motif 277 287 72.9 + . Name=1;ID=1-91-phiX174;pvalue=5.14e-08;sequence=TTTAGATATGA; -phiX174 fimo polypeptide_motif 4338 4348 72.8 + . Name=1;ID=1-92-phiX174;pvalue=5.18e-08;sequence=GGGGACGAAAA; -phiX174 fimo polypeptide_motif 3812 3822 72.8 + . Name=1;ID=1-93-phiX174;pvalue=5.28e-08;sequence=GGTTGATATTT; -phiX174 fimo polypeptide_motif 1909 1919 72.6 + . Name=1;ID=1-94-phiX174;pvalue=5.51e-08;sequence=TAACGCTAAAG; -phiX174 fimo polypeptide_motif 3000 3010 72.6 + . Name=1;ID=1-95-phiX174;pvalue=5.54e-08;sequence=GGCGGTCAAAA; -phiX174 fimo polypeptide_motif 3891 3901 72.4 + . Name=1;ID=1-96-phiX174;pvalue=5.75e-08;sequence=ATTGGCTCTAA; -phiX174 fimo polypeptide_motif 3079 3089 72.4 + . Name=1;ID=1-97-phiX174;pvalue=5.76e-08;sequence=CTGGTATTAAA; -phiX174 fimo polypeptide_motif 37 47 72.4 + . Name=1;ID=1-98-phiX174;pvalue=5.79e-08;sequence=TTCGGATATTT; -phiX174 fimo polypeptide_motif 380 390 72.2 + . Name=1;ID=1-99-phiX174;pvalue=6.01e-08;sequence=GTAAGAAATCA;
--- a/test-data/fimo_output_html_1.html Wed Apr 25 12:12:47 2018 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,97 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html xmlns:cis="http://zlab.bu.edu/schema/cisml" xmlns:fimo="http://noble.gs.washington.edu/schema/cisml" xmlns:mem="http://noble.gs.washington.edu/meme"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> -<meta charset="UTF-8"> -<title>FIMO Results</title> -<style type="text/css"> -td.left {text-align: left;} -td.right {text-align: right; padding-right: 1cm;} -</style> -</head> -<body bgcolor="#D5F0FF"> -<a name="top_buttons"></a> -<hr> -<table summary="buttons" align="left" cellspacing="0"> -<tr> -<td bgcolor="#00FFFF"><a href="#database_and_motifs"><b>Database and Motifs</b></a></td> -<td bgcolor="#DDFFDD"><a href="#sec_i"><b>High-scoring Motif Occurences</b></a></td> -<td bgcolor="#DDDDFF"><a href="#debugging_information"><b>Debugging Information</b></a></td> -</tr> -</table> -<br/> -<br/> -<hr/> -<center><big><b>FIMO - Motif search tool</b></big></center> -<hr> -<p> -For further information on how to interpret these results -or to get a copy of the FIMO software please access -<a href="http://meme.nbcr.net">http://meme.nbcr.net</a></p> -<p>If you use FIMO in your research, please cite the following paper:<br> -Charles E. Grant, Timothy L. Bailey, and William Stafford Noble, -"FIMO: Scanning for occurrences of a given motif", -<i>Bioinformatics</i>, <b>27</b>(7):1017-1018, 2011. -<a href="http://bioinformatics.oxfordjournals.org/content/27/7/1017">[full text]</a></p> -<hr> -<center><big><b><a name="database_and_motifs">DATABASE AND MOTIFS</a></b></big></center> -<hr> -<div style="padding-left: 0.75in; line-height: 1em; font-family: monospace;"> -<p> - <br /> - Database contains 1 sequences, 5386 residues -</p> -<p> - <table> - <thead> - <tr> - <th style="border-bottom: 1px dashed;">MOTIF</th> - <th style="border-bottom: 1px dashed; padding-left: 1em;">WIDTH</th> - <th style="border-bottom: 1px dashed; padding-left: 1em;text-align:left;" > - BEST POSSIBLE MATCH - </th> - </tr> - </thead> - <tbody> - <tr> - <td style="text-align:right;">1</td> - <td style="text-align:right;padding-left: 1em;">11</td> - <td style="text-align:left;padding-left: 1em;">GGGGTATAAAA</td> - </tr> - </tbody> - </table> -</p> -<p> -Random model letter frequencies (from non-redundant database): -<br/> - -A 0.073 C 0.018 D 0.052 E 0.062 F 0.040 G 0.069 H 0.022 I 0.056 K 0.058 -L 0.092 M 0.023 N 0.046 P 0.051 Q 0.041 R 0.052 S 0.074 T 0.059 V 0.064 -W 0.013 Y 0.033 </p> -</div> -<hr> -<center><big><b><a name="sec_i">SECTION I: HIGH-SCORING MOTIF OCCURENCES</a></b></big></center> -<hr> -<ul> -<li> -There were 1937 motif occurences with a p-value less than 0.0001. -<b>Only the most significant 1000 matches are shown here.</b> - -The full set of motif occurences can be seen in the -tab-delimited plain text output file -<a href="fimo.txt">fimo.txt</a>, -the GFF file -<a href="fimo.gff">fimo.gff</a> -which may be suitable for uploading to the -<a href="http://genome.ucsc.edu/cgi-bin/hgTables">UCSC Genome Table Browser</a> -(assuming the FASTA input sequences included genomic coordinates in UCSC or Galaxy format), -or the XML file -<a href="fimo.xml">fimo.xml</a>. -</li> -<li> -The p-value of a motif occurrence is defined as the -probability of a random sequence of the same length as the motif -matching that position of the sequence with as good or better a score. -</li> -<li> -The score for the match of a position in a sequence to a motif
--- a/test-data/fimo_output_html_2.html Wed Apr 25 12:12:47 2018 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,97 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html xmlns:cis="http://zlab.bu.edu/schema/cisml" xmlns:fimo="http://noble.gs.washington.edu/schema/cisml" xmlns:mem="http://noble.gs.washington.edu/meme"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> -<meta charset="UTF-8"> -<title>FIMO Results</title> -<style type="text/css"> -td.left {text-align: left;} -td.right {text-align: right; padding-right: 1cm;} -</style> -</head> -<body bgcolor="#D5F0FF"> -<a name="top_buttons"></a> -<hr> -<table summary="buttons" align="left" cellspacing="0"> -<tr> -<td bgcolor="#00FFFF"><a href="#database_and_motifs"><b>Database and Motifs</b></a></td> -<td bgcolor="#DDFFDD"><a href="#sec_i"><b>High-scoring Motif Occurences</b></a></td> -<td bgcolor="#DDDDFF"><a href="#debugging_information"><b>Debugging Information</b></a></td> -</tr> -</table> -<br/> -<br/> -<hr/> -<center><big><b>FIMO - Motif search tool</b></big></center> -<hr> -<p> -For further information on how to interpret these results -or to get a copy of the FIMO software please access -<a href="http://meme.nbcr.net">http://meme.nbcr.net</a></p> -<p>If you use FIMO in your research, please cite the following paper:<br> -Charles E. Grant, Timothy L. Bailey, and William Stafford Noble, -"FIMO: Scanning for occurrences of a given motif", -<i>Bioinformatics</i>, <b>27</b>(7):1017-1018, 2011. -<a href="http://bioinformatics.oxfordjournals.org/content/27/7/1017">[full text]</a></p> -<hr> -<center><big><b><a name="database_and_motifs">DATABASE AND MOTIFS</a></b></big></center> -<hr> -<div style="padding-left: 0.75in; line-height: 1em; font-family: monospace;"> -<p> - <br /> - Database contains 1 sequences, 5386 residues -</p> -<p> - <table> - <thead> - <tr> - <th style="border-bottom: 1px dashed;">MOTIF</th> - <th style="border-bottom: 1px dashed; padding-left: 1em;">WIDTH</th> - <th style="border-bottom: 1px dashed; padding-left: 1em;text-align:left;" > - BEST POSSIBLE MATCH - </th> - </tr> - </thead> - <tbody> - <tr> - <td style="text-align:right;">1</td> - <td style="text-align:right;padding-left: 1em;">11</td> - <td style="text-align:left;padding-left: 1em;">GGGGTATAAAA</td> - </tr> - </tbody> - </table> -</p> -<p> -Random model letter frequencies (from non-redundant database): -<br/> - -A 0.073 C 0.018 D 0.052 E 0.062 F 0.040 G 0.069 H 0.022 I 0.056 K 0.058 -L 0.092 M 0.023 N 0.046 P 0.051 Q 0.041 R 0.052 S 0.074 T 0.059 V 0.064 -W 0.013 Y 0.033 </p> -</div> -<hr> -<center><big><b><a name="sec_i">SECTION I: HIGH-SCORING MOTIF OCCURENCES</a></b></big></center> -<hr> -<ul> -<li> -There were 1937 motif occurences with a p-value less than 0.0001. -<b>Only the most significant 1000 matches are shown here.</b> - -The full set of motif occurences can be seen in the -tab-delimited plain text output file -<a href="fimo.txt">fimo.txt</a>, -the GFF file -<a href="fimo.gff">fimo.gff</a> -which may be suitable for uploading to the -<a href="http://genome.ucsc.edu/cgi-bin/hgTables">UCSC Genome Table Browser</a> -(assuming the FASTA input sequences included genomic coordinates in UCSC or Galaxy format), -or the XML file -<a href="fimo.xml">fimo.xml</a>. -</li> -<li> -The p-value of a motif occurrence is defined as the -probability of a random sequence of the same length as the motif -matching that position of the sequence with as good or better a score. -</li> -<li> -The score for the match of a position in a sequence to a motif
--- a/test-data/fimo_output_interval_1.txt Wed Apr 25 12:12:47 2018 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,100 +0,0 @@ -#chr start end pattern name score strand matched sequence p-value q-value -phiX174 1387 1398 1 + + 1.25e-09 29.4024 6.36e-11 -phiX174 846 857 1 + + 1.25e-09 29.122 7.02e-11 -phiX174 2300 2311 1 + + 1.29e-09 27.6463 1.08e-10 -phiX174 5062 5073 1 + + 2.25e-09 25.5366 2.73e-10 -phiX174 988 999 1 + + 2.25e-09 25.3049 3.15e-10 -phiX174 4712 4723 1 + + 3.48e-09 23.622 7.74e-10 -phiX174 5047 5058 1 + + 3.48e-09 23.3293 8.51e-10 -phiX174 854 865 1 + + 3.48e-09 23.3049 8.64e-10 -phiX174 3154 3165 1 + + 3.48e-09 23.0366 9.76e-10 -phiX174 5008 5019 1 + + 3.48e-09 23.0366 9.76e-10 -phiX174 813 824 1 + + 4.14e-09 22.5854 1.28e-09 -phiX174 2831 2842 1 + + 4.23e-09 22.3415 1.42e-09 -phiX174 3829 3840 1 + + 4.68e-09 21.8293 1.7e-09 -phiX174 3559 3570 1 + + 4.82e-09 21.5976 1.89e-09 -phiX174 2881 2892 1 + + 5.46e-09 21.1951 2.29e-09 -phiX174 4452 4463 1 + + 5.75e-09 20.8902 2.58e-09 -phiX174 2492 2503 1 + + 5.79e-09 20.3415 3.06e-09 -phiX174 4103 4114 1 + + 5.79e-09 20.3171 3.08e-09 -phiX174 4954 4965 1 + + 5.79e-09 20.3171 3.08e-09 -phiX174 1884 1895 1 + + 6.45e-09 19.9268 3.61e-09 -phiX174 3375 3386 1 + + 6.48e-09 19.7683 3.81e-09 -phiX174 51 62 1 + + 6.58e-09 19.5732 4.06e-09 -phiX174 1389 1400 1 + + 6.61e-09 19.378 4.26e-09 -phiX174 2016 2027 1 + + 6.85e-09 19.0854 4.6e-09 -phiX174 999 1010 1 + + 6.97e-09 18.878 4.88e-09 -phiX174 1554 1565 1 + + 7.37e-09 18.439 5.58e-09 -phiX174 4429 4440 1 + + 7.37e-09 18.4268 5.62e-09 -phiX174 1926 1937 1 + + 7.37e-09 18.2927 5.82e-09 -phiX174 2980 2991 1 + + 7.37e-09 18.0732 6.13e-09 -phiX174 4202 4213 1 + + 7.37e-09 17.9268 6.34e-09 -phiX174 1668 1679 1 + + 7.37e-09 17.8659 6.4e-09 -phiX174 3259 3270 1 + + 7.82e-09 17.5 7.01e-09 -phiX174 3046 3057 1 + + 7.85e-09 17.2805 7.4e-09 -phiX174 4175 4186 1 + + 7.85e-09 17.1829 7.6e-09 -phiX174 4117 4128 1 + + 7.85e-09 17.1341 7.7e-09 -phiX174 5369 5380 1 + + 7.87e-09 16.9878 8.03e-09 -phiX174 1241 1252 1 + + 7.87e-09 16.5122 8.94e-09 -phiX174 2582 2593 1 + + 7.87e-09 16.5122 8.94e-09 -phiX174 697 708 1 + + 7.87e-09 16.4146 9.13e-09 -phiX174 2298 2309 1 + + 7.87e-09 16.3537 9.26e-09 -phiX174 4188 4199 1 + + 7.87e-09 16.1707 9.69e-09 -phiX174 274 285 1 + + 7.87e-09 16.0976 9.85e-09 -phiX174 1800 1811 1 + + 7.87e-09 16.0366 1e-08 -phiX174 1385 1396 1 + + 7.87e-09 15.9268 1.03e-08 -phiX174 1302 1313 1 + + 7.87e-09 15.9024 1.03e-08 -phiX174 3771 3782 1 + + 7.87e-09 15.878 1.04e-08 -phiX174 1287 1298 1 + + 7.87e-09 15.8659 1.04e-08 -phiX174 2576 2587 1 + + 7.87e-09 15.7683 1.08e-08 -phiX174 936 947 1 + + 7.87e-09 15.7561 1.08e-08 -phiX174 903 914 1 + + 7.93e-09 15.6585 1.11e-08 -phiX174 2278 2289 1 + + 7.93e-09 15.5854 1.13e-08 -phiX174 3163 3174 1 + + 7.98e-09 15.5 1.16e-08 -phiX174 23 34 1 + + 8.24e-09 15.3293 1.23e-08 -phiX174 837 848 1 + + 8.24e-09 15.2561 1.27e-08 -phiX174 852 863 1 + + 8.24e-09 15.2561 1.27e-08 -phiX174 1983 1994 1 + + 8.68e-09 15.0244 1.36e-08 -phiX174 0 11 1 + + 9.05e-09 14.8293 1.46e-08 -phiX174 4306 4317 1 + + 9.05e-09 14.7927 1.47e-08 -phiX174 4302 4313 1 + + 9.19e-09 14.6585 1.52e-08 -phiX174 5032 5043 1 + + 9.41e-09 14.561 1.58e-08 -phiX174 2578 2589 1 + + 1.01e-08 14.2927 1.73e-08 -phiX174 321 332 1 + + 1.05e-08 14.1951 1.82e-08 -phiX174 5000 5011 1 + + 1.19e-08 13.8902 2.09e-08 -phiX174 4216 4227 1 + + 1.2e-08 13.8171 2.15e-08 -phiX174 4261 4272 1 + + 1.2e-08 13.7805 2.18e-08 -phiX174 3568 3579 1 + + 1.22e-08 13.7073 2.26e-08 -phiX174 193 204 1 + + 1.22e-08 13.6829 2.29e-08 -phiX174 130 141 1 + + 1.31e-08 13.4756 2.49e-08 -phiX174 1490 1501 1 + + 1.32e-08 13.4024 2.55e-08 -phiX174 433 444 1 + + 1.36e-08 13.2805 2.67e-08 -phiX174 4564 4575 1 + + 1.36e-08 13.2439 2.73e-08 -phiX174 101 112 1 + + 1.36e-08 13.2195 2.75e-08 -phiX174 902 913 1 + + 1.38e-08 13.1463 2.82e-08 -phiX174 4747 4758 1 + + 1.45e-08 12.9756 3.01e-08 -phiX174 2621 2632 1 + + 1.5e-08 12.8659 3.16e-08 -phiX174 466 477 1 + + 1.57e-08 12.7317 3.35e-08 -phiX174 4032 4043 1 + + 1.58e-08 12.6829 3.44e-08 -phiX174 1347 1358 1 + + 1.58e-08 12.6707 3.46e-08 -phiX174 238 249 1 + + 1.64e-08 12.5732 3.62e-08 -phiX174 499 510 1 + + 1.71e-08 12.4634 3.84e-08 -phiX174 3000 3011 1 + + 1.73e-08 12.4146 3.93e-08 -phiX174 3775 3786 1 + + 1.73e-08 12.378 3.98e-08 -phiX174 2025 2036 1 + + 1.75e-08 12.3293 4.06e-08 -phiX174 4236 4247 1 + + 1.75e-08 12.3049 4.12e-08 -phiX174 802 813 1 + + 1.78e-08 12.2439 4.24e-08 -phiX174 3769 3780 1 + + 1.81e-08 12.1829 4.35e-08 -phiX174 3428 3439 1 + + 1.82e-08 12.122 4.45e-08 -phiX174 98 109 1 + + 1.82e-08 12.1098 4.48e-08 -phiX174 66 77 1 + + 1.92e-08 11.9268 4.78e-08 -phiX174 5331 5342 1 + + 2.01e-08 11.7195 5.13e-08 -phiX174 276 287 1 + + 2.01e-08 11.7073 5.14e-08 -phiX174 4337 4348 1 + + 2.01e-08 11.6951 5.18e-08 -phiX174 3811 3822 1 + + 2.03e-08 11.6585 5.28e-08 -phiX174 1908 1919 1 + + 2.08e-08 11.5488 5.51e-08 -phiX174 2999 3010 1 + + 2.08e-08 11.5366 5.54e-08 -phiX174 3890 3901 1 + + 2.11e-08 11.439 5.75e-08 -phiX174 3078 3089 1 + + 2.11e-08 11.4268 5.76e-08 -phiX174 36 47 1 + + 2.11e-08 11.4146 5.79e-08 -phiX174 379 390 1 + + 2.17e-08 11.3293 6.01e-08
--- a/test-data/fimo_output_interval_2.txt Wed Apr 25 12:12:47 2018 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,100 +0,0 @@ -#chr start end pattern name score strand matched sequence p-value q-value -phiX174 1387 1398 1 + + 0 29.4024 6.36e-11 -phiX174 846 857 1 + + 0 29.122 7.02e-11 -phiX174 2300 2311 1 + + 0 27.6463 1.08e-10 -phiX174 5062 5073 1 + + 0 25.5366 2.73e-10 -phiX174 988 999 1 + + 0 25.3049 3.15e-10 -phiX174 4712 4723 1 + + 0 23.622 7.74e-10 -phiX174 5047 5058 1 + + 0 23.3293 8.51e-10 -phiX174 854 865 1 + + 0 23.3049 8.64e-10 -phiX174 3154 3165 1 + + 0 23.0366 9.76e-10 -phiX174 5008 5019 1 + + 0 23.0366 9.76e-10 -phiX174 813 824 1 + + 0 22.5854 1.28e-09 -phiX174 2831 2842 1 + + 0 22.3415 1.42e-09 -phiX174 3829 3840 1 + + 0 21.8293 1.7e-09 -phiX174 3559 3570 1 + + 0 21.5976 1.89e-09 -phiX174 2881 2892 1 + + 0 21.1951 2.29e-09 -phiX174 4452 4463 1 + + 0 20.8902 2.58e-09 -phiX174 2492 2503 1 + + 0 20.3415 3.06e-09 -phiX174 4103 4114 1 + + 0 20.3171 3.08e-09 -phiX174 4954 4965 1 + + 0 20.3171 3.08e-09 -phiX174 1884 1895 1 + + 0 19.9268 3.61e-09 -phiX174 3375 3386 1 + + 0 19.7683 3.81e-09 -phiX174 51 62 1 + + 0 19.5732 4.06e-09 -phiX174 1389 1400 1 + + 0 19.378 4.26e-09 -phiX174 2016 2027 1 + + 0 19.0854 4.6e-09 -phiX174 999 1010 1 + + 0 18.878 4.88e-09 -phiX174 1554 1565 1 + + 0 18.439 5.58e-09 -phiX174 4429 4440 1 + + 0 18.4268 5.62e-09 -phiX174 1926 1937 1 + + 0 18.2927 5.82e-09 -phiX174 2980 2991 1 + + 0 18.0732 6.13e-09 -phiX174 4202 4213 1 + + 0 17.9268 6.34e-09 -phiX174 1668 1679 1 + + 0 17.8659 6.4e-09 -phiX174 3259 3270 1 + + 0 17.5 7.01e-09 -phiX174 3046 3057 1 + + 0 17.2805 7.4e-09 -phiX174 4175 4186 1 + + 0 17.1829 7.6e-09 -phiX174 4117 4128 1 + + 0 17.1341 7.7e-09 -phiX174 5369 5380 1 + + 0 16.9878 8.03e-09 -phiX174 1241 1252 1 + + 0 16.5122 8.94e-09 -phiX174 2582 2593 1 + + 0 16.5122 8.94e-09 -phiX174 697 708 1 + + 0 16.4146 9.13e-09 -phiX174 2298 2309 1 + + 0 16.3537 9.26e-09 -phiX174 4188 4199 1 + + 0 16.1707 9.69e-09 -phiX174 274 285 1 + + 0 16.0976 9.85e-09 -phiX174 1800 1811 1 + + 0 16.0366 1e-08 -phiX174 1385 1396 1 + + 0 15.9268 1.03e-08 -phiX174 1302 1313 1 + + 0 15.9024 1.03e-08 -phiX174 3771 3782 1 + + 0 15.878 1.04e-08 -phiX174 1287 1298 1 + + 0 15.8659 1.04e-08 -phiX174 2576 2587 1 + + 0 15.7683 1.08e-08 -phiX174 936 947 1 + + 0 15.7561 1.08e-08 -phiX174 903 914 1 + + 0 15.6585 1.11e-08 -phiX174 2278 2289 1 + + 0 15.5854 1.13e-08 -phiX174 3163 3174 1 + + 0 15.5 1.16e-08 -phiX174 23 34 1 + + 0 15.3293 1.23e-08 -phiX174 837 848 1 + + 0 15.2561 1.27e-08 -phiX174 852 863 1 + + 0 15.2561 1.27e-08 -phiX174 1983 1994 1 + + 0 15.0244 1.36e-08 -phiX174 0 11 1 + + 0 14.8293 1.46e-08 -phiX174 4306 4317 1 + + 0 14.7927 1.47e-08 -phiX174 4302 4313 1 + + 0 14.6585 1.52e-08 -phiX174 5032 5043 1 + + 0 14.561 1.58e-08 -phiX174 2578 2589 1 + + 0 14.2927 1.73e-08 -phiX174 321 332 1 + + 0 14.1951 1.82e-08 -phiX174 5000 5011 1 + + 0 13.8902 2.09e-08 -phiX174 4216 4227 1 + + 0 13.8171 2.15e-08 -phiX174 4261 4272 1 + + 0 13.7805 2.18e-08 -phiX174 3568 3579 1 + + 0 13.7073 2.26e-08 -phiX174 193 204 1 + + 0 13.6829 2.29e-08 -phiX174 130 141 1 + + 0 13.4756 2.49e-08 -phiX174 1490 1501 1 + + 0 13.4024 2.55e-08 -phiX174 433 444 1 + + 0 13.2805 2.67e-08 -phiX174 4564 4575 1 + + 0 13.2439 2.73e-08 -phiX174 101 112 1 + + 0 13.2195 2.75e-08 -phiX174 902 913 1 + + 0 13.1463 2.82e-08 -phiX174 4747 4758 1 + + 0 12.9756 3.01e-08 -phiX174 2621 2632 1 + + 0 12.8659 3.16e-08 -phiX174 466 477 1 + + 0 12.7317 3.35e-08 -phiX174 4032 4043 1 + + 0 12.6829 3.44e-08 -phiX174 1347 1358 1 + + 0 12.6707 3.46e-08 -phiX174 238 249 1 + + 0 12.5732 3.62e-08 -phiX174 499 510 1 + + 0 12.4634 3.84e-08 -phiX174 3000 3011 1 + + 0 12.4146 3.93e-08 -phiX174 3775 3786 1 + + 0 12.378 3.98e-08 -phiX174 2025 2036 1 + + 0 12.3293 4.06e-08 -phiX174 4236 4247 1 + + 0 12.3049 4.12e-08 -phiX174 802 813 1 + + 0 12.2439 4.24e-08 -phiX174 3769 3780 1 + + 0 12.1829 4.35e-08 -phiX174 3428 3439 1 + + 0 12.122 4.45e-08 -phiX174 98 109 1 + + 0 12.1098 4.48e-08 -phiX174 66 77 1 + + 0 11.9268 4.78e-08 -phiX174 5331 5342 1 + + 0 11.7195 5.13e-08 -phiX174 276 287 1 + + 0 11.7073 5.14e-08 -phiX174 4337 4348 1 + + 0 11.6951 5.18e-08 -phiX174 3811 3822 1 + + 0 11.6585 5.28e-08 -phiX174 1908 1919 1 + + 0 11.5488 5.51e-08 -phiX174 2999 3010 1 + + 0 11.5366 5.54e-08 -phiX174 3890 3901 1 + + 0 11.439 5.75e-08 -phiX174 3078 3089 1 + + 0 11.4268 5.76e-08 -phiX174 36 47 1 + + 0 11.4146 5.79e-08 -phiX174 379 390 1 + + 0 11.3293 6.01e-08
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/fimo_output_test1.gff Thu May 17 14:11:00 2018 -0400 @@ -0,0 +1,12 @@ +##gff-version 3 +chrM fimo nucleotide_motif 2299 2306 46.6 - . Name=TACTAAYM_chrM-;Alias=MEME-1;ID=TACTAAYM-MEME-1-1-chrM;pvalue=2.18e-05;qvalue= 0.142;sequence=TACTAACA; +chrM fimo nucleotide_motif 6529 6536 46.6 + . Name=TACTAAYM_chrM+;Alias=MEME-1;ID=TACTAAYM-MEME-1-2-chrM;pvalue=2.18e-05;qvalue= 0.142;sequence=TACTAACA; +chrM fimo nucleotide_motif 7741 7748 46.6 + . Name=TACTAAYM_chrM+;Alias=MEME-1;ID=TACTAAYM-MEME-1-3-chrM;pvalue=2.18e-05;qvalue= 0.142;sequence=TACTAACA; +chrM fimo nucleotide_motif 13656 13663 46.6 + . Name=TACTAAYM_chrM+;Alias=MEME-1;ID=TACTAAYM-MEME-1-4-chrM;pvalue=2.18e-05;qvalue= 0.142;sequence=TACTAACA; +chrM fimo nucleotide_motif 13740 13747 46.6 + . Name=TACTAAYM_chrM+;Alias=MEME-1;ID=TACTAAYM-MEME-1-5-chrM;pvalue=2.18e-05;qvalue= 0.142;sequence=TACTAACA; +chrM fimo nucleotide_motif 861 868 44 + . Name=TACTAAYM_chrM+;Alias=MEME-1;ID=TACTAAYM-MEME-1-6-chrM;pvalue=3.96e-05;qvalue= 0.185;sequence=TACTAACC; +chrM fimo nucleotide_motif 9346 9353 44 + . Name=TACTAAYM_chrM+;Alias=MEME-1;ID=TACTAAYM-MEME-1-7-chrM;pvalue=3.96e-05;qvalue= 0.185;sequence=TACTAACC; +chrM fimo nucleotide_motif 3767 3774 41.8 + . Name=TACTAAYM_chrM+;Alias=MEME-1;ID=TACTAAYM-MEME-1-8-chrM;pvalue=6.62e-05;qvalue= 0.216;sequence=TACTAATA; +chrM fimo nucleotide_motif 5497 5504 41.8 + . Name=TACTAAYM_chrM+;Alias=MEME-1;ID=TACTAAYM-MEME-1-9-chrM;pvalue=6.62e-05;qvalue= 0.216;sequence=TACTAATA; +chrM fimo nucleotide_motif 10105 10112 41.8 + . Name=TACTAAYM_chrM+;Alias=MEME-1;ID=TACTAAYM-MEME-1-10-chrM;pvalue=6.62e-05;qvalue= 0.216;sequence=TACTAATA; +chrM fimo nucleotide_motif 10959 10966 40.6 + . Name=TACTAAYM_chrM+;Alias=MEME-1;ID=TACTAAYM-MEME-1-11-chrM;pvalue=8.79e-05;qvalue= 0.261;sequence=TACTAACT;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/fimo_output_test1.html Thu May 17 14:11:00 2018 -0400 @@ -0,0 +1,300 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html xmlns:cis="http://zlab.bu.edu/schema/cisml" xmlns:fimo="http://noble.gs.washington.edu/schema/cisml" xmlns:mem="http://noble.gs.washington.edu/meme"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +<meta charset="UTF-8"> +<title>FIMO Results</title> +<style type="text/css"> +td.left {text-align: left;} +td.right {text-align: right; padding-right: 1cm;} +</style> +</head> +<body bgcolor="#D5F0FF"> +<a name="top_buttons"></a> +<hr> +<table summary="buttons" align="left" cellspacing="0"> +<tr> +<td bgcolor="#00FFFF"><a href="#database_and_motifs"><b>Database and Motifs</b></a></td> +<td bgcolor="#DDFFDD"><a href="#sec_i"><b>High-scoring Motif Occurences</b></a></td> +<td bgcolor="#DDDDFF"><a href="#debugging_information"><b>Debugging Information</b></a></td> +</tr> +</table> +<br/> +<br/> +<hr/> +<center><big><b>FIMO - Motif search tool</b></big></center> +<hr> +<p> +FIMO version 4.12.0, (Release date: Tue Jun 27 16:22:50 2017 -0700) +</p> +<p> +For further information on how to interpret these results +or to get a copy of the FIMO software please access +<a href="http://meme.nbcr.net">http://meme.nbcr.net</a></p> +<p>If you use FIMO in your research, please cite the following paper:<br> +Charles E. Grant, Timothy L. Bailey, and William Stafford Noble, +"FIMO: Scanning for occurrences of a given motif", +<i>Bioinformatics</i>, <b>27</b>(7):1017-1018, 2011. +<a href="http://bioinformatics.oxfordjournals.org/content/27/7/1017">[full text]</a></p> +<hr> +<center><big><b><a name="database_and_motifs">DATABASE AND MOTIFS</a></b></big></center> +<hr> +<div style="padding-left: 0.75in; line-height: 1em; font-family: monospace;"> +<p> + DATABASE hsa_chrM.fa + <br /> + Database contains 1 sequences, 16569 residues +</p> +<p> + MOTIFS meme_fimo_input_1.xml (DNA) + <table> + <thead> + <tr> + <th style="border-bottom: 1px dashed;">MOTIF</th> + <th style="border-bottom: 1px dashed; padding-left: 1em;">WIDTH</th> + <th style="border-bottom: 1px dashed; padding-left: 1em;text-align:left;" > + BEST POSSIBLE MATCH + </th> + </tr> + </thead> + <tbody> + <tr> + <td style="text-align:right;">TACTAAYM</td> + <td style="text-align:right;padding-left: 1em;">8</td> + <td style="text-align:left;padding-left: 1em;">TACTAACA</td> + </tr> + </tbody> + </table> +</p> +<p> +Random model letter frequencies (--nrdb--): +<br/> + +A 0.275 C 0.225 G 0.225 T 0.275 </p> +</div> +<hr> +<center><big><b><a name="sec_i">SECTION I: HIGH-SCORING MOTIF OCCURENCES</a></b></big></center> +<hr> +<ul> +<li> +There were 11 motif occurences with a p-value less than 0.0001. + +The full set of motif occurences can be seen in the +tab-delimited plain text output file +<a href="fimo.txt">fimo.txt</a>, +the GFF file +<a href="fimo.gff">fimo.gff</a> +which may be suitable for uploading to the +<a href="http://genome.ucsc.edu/cgi-bin/hgTables">UCSC Genome Table Browser</a> +(assuming the FASTA input sequences included genomic coordinates in UCSC or Galaxy format), +or the XML file +<a href="fimo.xml">fimo.xml</a>. +</li> +<li> +The p-value of a motif occurrence is defined as the +probability of a random sequence of the same length as the motif +matching that position of the sequence with as good or better a score. +</li> +<li> +The score for the match of a position in a sequence to a motif +is computed by summing the appropriate entries from each column of +the position-dependent scoring matrix that represents the motif. +</li> +<li> +The q-value of a motif occurrence is defined as the +false discovery rate if the occurrence is accepted as significant. +</li> +<li>The table is sorted by increasing p-value.</li> +</ul> +<table border="1"> +<thead> +<tr> +<th>Motif ID</th> +<th>Alt ID</th> +<th>Sequence Name</th> +<th>Strand</th> +<th>Start</th> +<th>End</th> +<th>p-value</th> +<th>q-value</th> +<th>Matched Sequence</th> +</tr> +</thead> +<tbody> + <tr> + <td style="text-align:left;">TACTAAYM</td> + <td style="text-align:left;">MEME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">2299</td> + <td style="text-align:left;">2306</td> + <td style="text-align:left;">2.18e-05</td> + <td style="text-align:left;">0.142</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">TACTAACA</td> + </tr> + <tr> + <td style="text-align:left;">TACTAAYM</td> + <td style="text-align:left;">MEME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">6529</td> + <td style="text-align:left;">6536</td> + <td style="text-align:left;">2.18e-05</td> + <td style="text-align:left;">0.142</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">TACTAACA</td> + </tr> + <tr> + <td style="text-align:left;">TACTAAYM</td> + <td style="text-align:left;">MEME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">7741</td> + <td style="text-align:left;">7748</td> + <td style="text-align:left;">2.18e-05</td> + <td style="text-align:left;">0.142</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">TACTAACA</td> + </tr> + <tr> + <td style="text-align:left;">TACTAAYM</td> + <td style="text-align:left;">MEME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">13656</td> + <td style="text-align:left;">13663</td> + <td style="text-align:left;">2.18e-05</td> + <td style="text-align:left;">0.142</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">TACTAACA</td> + </tr> + <tr> + <td style="text-align:left;">TACTAAYM</td> + <td style="text-align:left;">MEME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">13740</td> + <td style="text-align:left;">13747</td> + <td style="text-align:left;">2.18e-05</td> + <td style="text-align:left;">0.142</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">TACTAACA</td> + </tr> + <tr> + <td style="text-align:left;">TACTAAYM</td> + <td style="text-align:left;">MEME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">861</td> + <td style="text-align:left;">868</td> + <td style="text-align:left;">3.96e-05</td> + <td style="text-align:left;">0.185</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">TACTAACC</td> + </tr> + <tr> + <td style="text-align:left;">TACTAAYM</td> + <td style="text-align:left;">MEME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">9346</td> + <td style="text-align:left;">9353</td> + <td style="text-align:left;">3.96e-05</td> + <td style="text-align:left;">0.185</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">TACTAACC</td> + </tr> + <tr> + <td style="text-align:left;">TACTAAYM</td> + <td style="text-align:left;">MEME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">3767</td> + <td style="text-align:left;">3774</td> + <td style="text-align:left;">6.62e-05</td> + <td style="text-align:left;">0.216</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">TACTAATA</td> + </tr> + <tr> + <td style="text-align:left;">TACTAAYM</td> + <td style="text-align:left;">MEME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">5497</td> + <td style="text-align:left;">5504</td> + <td style="text-align:left;">6.62e-05</td> + <td style="text-align:left;">0.216</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">TACTAATA</td> + </tr> + <tr> + <td style="text-align:left;">TACTAAYM</td> + <td style="text-align:left;">MEME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">10105</td> + <td style="text-align:left;">10112</td> + <td style="text-align:left;">6.62e-05</td> + <td style="text-align:left;">0.216</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">TACTAATA</td> + </tr> + <tr> + <td style="text-align:left;">TACTAAYM</td> + <td style="text-align:left;">MEME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">10959</td> + <td style="text-align:left;">10966</td> + <td style="text-align:left;">8.79e-05</td> + <td style="text-align:left;">0.261</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">TACTAACT</td> + </tr> +</tbody> +</table> + +<hr> +<center><big><b><a name="debugging_information">DEBUGGING INFORMATION</a></b></big></center> +<hr> +<p> +Command line: +</p> +<pre> +fimo -oc fimo_test1_out meme_fimo_input_1.xml hsa_chrM.fa +</pre> +<p> +Settings: +</p> +<pre> +<table> + <tr> + <td style="padding-right: 2em">output_directory = fimo_test1_out</td> + <td style="padding-left: 5em; padding-right: 2em">MEME file name = meme_fimo_input_1.xml</td> + <td style="padding-left: 5em; padding-right: 2em">sequence file name = hsa_chrM.fa</td> + </tr> <tr> + <td style="padding-right: 2em">background file name = --nrdb--</td> + <td style="padding-left: 5em; padding-right: 2em">alphabet = DNA</td> + <td style="padding-left: 5em; padding-right: 2em">max stored scores = 100000</td> + </tr> <tr> + <td style="padding-right: 2em">allow clobber = true</td> + <td style="padding-left: 5em; padding-right: 2em">compute q-values = true</td> + <td style="padding-left: 5em; padding-right: 2em">parse genomic coord. = false</td> + </tr> + <tr> + <td style="padding-right: 2em">text only = false</td> + <td style="padding-left: 5em; padding-right: 2em">scan both strands = true</td> + <td style="padding-left: 5em; padding-right: 2em">max strand = false</td> + </tr> + <tr> + <td style="padding-right: 2em">threshold type = p-value</td> + <td style="padding-left: 5em; padding-right: 2em">output theshold = 0.0001</td> + <td style="padding-left: 5em; padding-right: 2em">pseudocount = 0.1</td> + </tr> + <tr> + <td style="padding-right: 2em">alpha = 1</td> + <td style="padding-left: 5em; padding-right: 2em">verbosity = 2</td> + <td style="padding-left: 5em; padding-right: 2em"></td> + </tr> + +</table> +</pre> +<p> +This information can be useful in the event you wish to report a +problem with the FIMO software. +</p> +<hr> +<span style="background-color: #DDDDFF"><a href="#top_buttons"><b>Go to top</b></a></span> +</body> +</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/fimo_output_test1.txt Thu May 17 14:11:00 2018 -0400 @@ -0,0 +1,12 @@ +# motif_id motif_alt_id sequence_name start stop strand score p-value q-value matched_sequence +TACTAAYM MEME-1 chrM 2299 2306 - 12.9701 2.18e-05 0.142 TACTAACA +TACTAAYM MEME-1 chrM 6529 6536 + 12.9701 2.18e-05 0.142 TACTAACA +TACTAAYM MEME-1 chrM 7741 7748 + 12.9701 2.18e-05 0.142 TACTAACA +TACTAAYM MEME-1 chrM 13656 13663 + 12.9701 2.18e-05 0.142 TACTAACA +TACTAAYM MEME-1 chrM 13740 13747 + 12.9701 2.18e-05 0.142 TACTAACA +TACTAAYM MEME-1 chrM 861 868 + 12.2836 3.96e-05 0.185 TACTAACC +TACTAAYM MEME-1 chrM 9346 9353 + 12.2836 3.96e-05 0.185 TACTAACC +TACTAAYM MEME-1 chrM 3767 3774 + 11.7164 6.62e-05 0.216 TACTAATA +TACTAAYM MEME-1 chrM 5497 5504 + 11.7164 6.62e-05 0.216 TACTAATA +TACTAAYM MEME-1 chrM 10105 10112 + 11.7164 6.62e-05 0.216 TACTAATA +TACTAAYM MEME-1 chrM 10959 10966 + 11.6567 8.79e-05 0.261 TACTAACT
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/fimo_output_test1.xml Thu May 17 14:11:00 2018 -0400 @@ -0,0 +1,50 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Begin document body --> +<fimo version="4.12.0" release="Tue Jun 27 16:22:50 2017 -0700"> + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation= xmlns:fimo="http://noble.gs.washington.edu/schema/fimo" +> +<command-line>fimo -oc fimo_test1_out meme_fimo_input_1.xml hsa_chrM.fa</command-line> +<settings> +<setting name="output directory">fimo_test1_out</setting> +<setting name="MEME file name">meme_fimo_input_1.xml</setting> +<setting name="sequence file name">hsa_chrM.fa</setting> +<setting name="background file name">--nrdb--</setting> +<setting name="allow clobber">true</setting> +<setting name="compute q-values">true</setting> +<setting name="parse genomic coord.">false</setting> +<setting name="text only">false</setting> +<setting name="scan both strands">true</setting> +<setting name="output threshold">0.0001</setting> +<setting name="threshold type">p-value</setting> +<setting name="max stored scores">100000</setting> +<setting name="pseudocount">0.1</setting> +<setting name="verbosity">2</setting> +</settings> +<sequence-data num-sequences="1" num-residues="16569" /> +<alphabet name="DNA" like="dna"> +<letter id="A" symbol="A" complement="T" name="Adenine" colour="CC0000"/> +<letter id="C" symbol="C" complement="G" name="Cytosine" colour="0000CC"/> +<letter id="G" symbol="G" complement="C" name="Guanine" colour="FFB300"/> +<letter id="T" symbol="T" aliases="U" complement="A" name="Thymine" colour="008000"/> +<letter id="N" symbol="N" aliases="X." equals="ACGT" name="Any base"/> +<letter id="V" symbol="V" equals="ACG" name="Not T"/> +<letter id="H" symbol="H" equals="ACT" name="Not G"/> +<letter id="D" symbol="D" equals="AGT" name="Not C"/> +<letter id="B" symbol="B" equals="CGT" name="Not A"/> +<letter id="M" symbol="M" equals="AC" name="Amino"/> +<letter id="R" symbol="R" equals="AG" name="Purine"/> +<letter id="W" symbol="W" equals="AT" name="Weak"/> +<letter id="S" symbol="S" equals="CG" name="Strong"/> +<letter id="Y" symbol="Y" equals="CT" name="Pyrimidine"/> +<letter id="K" symbol="K" equals="GT" name="Keto"/> +</alphabet> +<motif name="TACTAAYM" alt="MEME-1" width="8" best-possible-match="TACTAACA"/> +<background source="--nrdb--"> +<value letter="A">0.275</value> +<value letter="C">0.225</value> +<value letter="G">0.225</value> +<value letter="T">0.275</value> +</background> +<cisml-file>cisml.xml</cisml-file> +</fimo>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/fimo_output_test2.gff Thu May 17 14:11:00 2018 -0400 @@ -0,0 +1,12 @@ +##gff-version 3 +chrM fimo nucleotide_motif 440 446 40.9 + . Name=ACTAAYH_chrM+;Alias=DREME-1;ID=ACTAAYH-DREME-1-1-chrM;pvalue=8.2e-05;qvalue= 0.327;sequence=ACTAACA; +chrM fimo nucleotide_motif 2093 2099 40.9 - . Name=ACTAAYH_chrM-;Alias=DREME-1;ID=ACTAAYH-DREME-1-2-chrM;pvalue=8.2e-05;qvalue= 0.327;sequence=ACTAACA; +chrM fimo nucleotide_motif 2299 2305 40.9 - . Name=ACTAAYH_chrM-;Alias=DREME-1;ID=ACTAAYH-DREME-1-3-chrM;pvalue=8.2e-05;qvalue= 0.327;sequence=ACTAACA; +chrM fimo nucleotide_motif 5186 5192 40.9 + . Name=ACTAAYH_chrM+;Alias=DREME-1;ID=ACTAAYH-DREME-1-4-chrM;pvalue=8.2e-05;qvalue= 0.327;sequence=ACTAACA; +chrM fimo nucleotide_motif 6530 6536 40.9 + . Name=ACTAAYH_chrM+;Alias=DREME-1;ID=ACTAAYH-DREME-1-5-chrM;pvalue=8.2e-05;qvalue= 0.327;sequence=ACTAACA; +chrM fimo nucleotide_motif 7742 7748 40.9 + . Name=ACTAAYH_chrM+;Alias=DREME-1;ID=ACTAAYH-DREME-1-6-chrM;pvalue=8.2e-05;qvalue= 0.327;sequence=ACTAACA; +chrM fimo nucleotide_motif 13657 13663 40.9 + . Name=ACTAAYH_chrM+;Alias=DREME-1;ID=ACTAAYH-DREME-1-7-chrM;pvalue=8.2e-05;qvalue= 0.327;sequence=ACTAACA; +chrM fimo nucleotide_motif 13741 13747 40.9 + . Name=ACTAAYH_chrM+;Alias=DREME-1;ID=ACTAAYH-DREME-1-8-chrM;pvalue=8.2e-05;qvalue= 0.327;sequence=ACTAACA; +chrM fimo nucleotide_motif 510 516 43.8 + . Name=CCAGCAY_chrM+;Alias=DREME-5;ID=CCAGCAY-DREME-5-1-chrM;pvalue=4.15e-05;qvalue= 0.668;sequence=CCAGCAC; +chrM fimo nucleotide_motif 5137 5143 43.8 + . Name=CCAGCAY_chrM+;Alias=DREME-5;ID=CCAGCAY-DREME-5-2-chrM;pvalue=4.15e-05;qvalue= 0.668;sequence=CCAGCAC; +chrM fimo nucleotide_motif 4241 4247 40.3 + . Name=CCAGCAY_chrM+;Alias=DREME-5;ID=CCAGCAY-DREME-5-3-chrM;pvalue=9.37e-05;qvalue= 1;sequence=CCAGCAT;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/fimo_output_test2.html Thu May 17 14:11:00 2018 -0400 @@ -0,0 +1,325 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html xmlns:cis="http://zlab.bu.edu/schema/cisml" xmlns:fimo="http://noble.gs.washington.edu/schema/cisml" xmlns:mem="http://noble.gs.washington.edu/meme"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +<meta charset="UTF-8"> +<title>FIMO Results</title> +<style type="text/css"> +td.left {text-align: left;} +td.right {text-align: right; padding-right: 1cm;} +</style> +</head> +<body bgcolor="#D5F0FF"> +<a name="top_buttons"></a> +<hr> +<table summary="buttons" align="left" cellspacing="0"> +<tr> +<td bgcolor="#00FFFF"><a href="#database_and_motifs"><b>Database and Motifs</b></a></td> +<td bgcolor="#DDFFDD"><a href="#sec_i"><b>High-scoring Motif Occurences</b></a></td> +<td bgcolor="#DDDDFF"><a href="#debugging_information"><b>Debugging Information</b></a></td> +</tr> +</table> +<br/> +<br/> +<hr/> +<center><big><b>FIMO - Motif search tool</b></big></center> +<hr> +<p> +FIMO version 4.12.0, (Release date: Tue Jun 27 16:22:50 2017 -0700) +</p> +<p> +For further information on how to interpret these results +or to get a copy of the FIMO software please access +<a href="http://meme.nbcr.net">http://meme.nbcr.net</a></p> +<p>If you use FIMO in your research, please cite the following paper:<br> +Charles E. Grant, Timothy L. Bailey, and William Stafford Noble, +"FIMO: Scanning for occurrences of a given motif", +<i>Bioinformatics</i>, <b>27</b>(7):1017-1018, 2011. +<a href="http://bioinformatics.oxfordjournals.org/content/27/7/1017">[full text]</a></p> +<hr> +<center><big><b><a name="database_and_motifs">DATABASE AND MOTIFS</a></b></big></center> +<hr> +<div style="padding-left: 0.75in; line-height: 1em; font-family: monospace;"> +<p> + DATABASE hsa_chrM.fa + <br /> + Database contains 1 sequences, 16569 residues +</p> +<p> + MOTIFS dreme_fimo_input_1.xml (DNA) + <table> + <thead> + <tr> + <th style="border-bottom: 1px dashed;">MOTIF</th> + <th style="border-bottom: 1px dashed; padding-left: 1em;">WIDTH</th> + <th style="border-bottom: 1px dashed; padding-left: 1em;text-align:left;" > + BEST POSSIBLE MATCH + </th> + </tr> + </thead> + <tbody> + <tr> + <td style="text-align:right;">ACTAAYH</td> + <td style="text-align:right;padding-left: 1em;">7</td> + <td style="text-align:left;padding-left: 1em;">ACTAACA</td> + </tr> + <tr> + <td style="text-align:right;">YTAACA</td> + <td style="text-align:right;padding-left: 1em;">6</td> + <td style="text-align:left;padding-left: 1em;">TTAACA</td> + </tr> + <tr> + <td style="text-align:right;">TCTGT</td> + <td style="text-align:right;padding-left: 1em;">5</td> + <td style="text-align:left;padding-left: 1em;">TCTGT</td> + </tr> + <tr> + <td style="text-align:right;">SCCAGG</td> + <td style="text-align:right;padding-left: 1em;">6</td> + <td style="text-align:left;padding-left: 1em;">CCCAGG</td> + </tr> + <tr> + <td style="text-align:right;">CCAGCAY</td> + <td style="text-align:right;padding-left: 1em;">7</td> + <td style="text-align:left;padding-left: 1em;">CCAGCAC</td> + </tr> + <tr> + <td style="text-align:right;">GMATGT</td> + <td style="text-align:right;padding-left: 1em;">6</td> + <td style="text-align:left;padding-left: 1em;">GAATGT</td> + </tr> + </tbody> + </table> +</p> +<p> +Random model letter frequencies (fimo_background_probs_hsa_chrM.txt): +<br/> + +A 0.278 C 0.222 G 0.222 T 0.278 </p> +</div> +<hr> +<center><big><b><a name="sec_i">SECTION I: HIGH-SCORING MOTIF OCCURENCES</a></b></big></center> +<hr> +<ul> +<li> +There were 11 motif occurences with a p-value less than 0.0001. + +The full set of motif occurences can be seen in the +tab-delimited plain text output file +<a href="fimo.txt">fimo.txt</a>, +the GFF file +<a href="fimo.gff">fimo.gff</a> +which may be suitable for uploading to the +<a href="http://genome.ucsc.edu/cgi-bin/hgTables">UCSC Genome Table Browser</a> +(assuming the FASTA input sequences included genomic coordinates in UCSC or Galaxy format), +or the XML file +<a href="fimo.xml">fimo.xml</a>. +</li> +<li> +The p-value of a motif occurrence is defined as the +probability of a random sequence of the same length as the motif +matching that position of the sequence with as good or better a score. +</li> +<li> +The score for the match of a position in a sequence to a motif +is computed by summing the appropriate entries from each column of +the position-dependent scoring matrix that represents the motif. +</li> +<li> +The q-value of a motif occurrence is defined as the +false discovery rate if the occurrence is accepted as significant. +</li> +<li>The table is sorted by increasing p-value.</li> +</ul> +<table border="1"> +<thead> +<tr> +<th>Motif ID</th> +<th>Alt ID</th> +<th>Sequence Name</th> +<th>Strand</th> +<th>Start</th> +<th>End</th> +<th>p-value</th> +<th>q-value</th> +<th>Matched Sequence</th> +</tr> +</thead> +<tbody> + <tr> + <td style="text-align:left;">CCAGCAY</td> + <td style="text-align:left;">DREME-5</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">510</td> + <td style="text-align:left;">516</td> + <td style="text-align:left;">4.15e-05</td> + <td style="text-align:left;">0.668</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCAGCAC</td> + </tr> + <tr> + <td style="text-align:left;">CCAGCAY</td> + <td style="text-align:left;">DREME-5</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">5137</td> + <td style="text-align:left;">5143</td> + <td style="text-align:left;">4.15e-05</td> + <td style="text-align:left;">0.668</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCAGCAC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">440</td> + <td style="text-align:left;">446</td> + <td style="text-align:left;">8.2e-05</td> + <td style="text-align:left;">0.327</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">2093</td> + <td style="text-align:left;">2099</td> + <td style="text-align:left;">8.2e-05</td> + <td style="text-align:left;">0.327</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">2299</td> + <td style="text-align:left;">2305</td> + <td style="text-align:left;">8.2e-05</td> + <td style="text-align:left;">0.327</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">5186</td> + <td style="text-align:left;">5192</td> + <td style="text-align:left;">8.2e-05</td> + <td style="text-align:left;">0.327</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">6530</td> + <td style="text-align:left;">6536</td> + <td style="text-align:left;">8.2e-05</td> + <td style="text-align:left;">0.327</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">7742</td> + <td style="text-align:left;">7748</td> + <td style="text-align:left;">8.2e-05</td> + <td style="text-align:left;">0.327</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">13657</td> + <td style="text-align:left;">13663</td> + <td style="text-align:left;">8.2e-05</td> + <td style="text-align:left;">0.327</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">13741</td> + <td style="text-align:left;">13747</td> + <td style="text-align:left;">8.2e-05</td> + <td style="text-align:left;">0.327</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACA</td> + </tr> + <tr> + <td style="text-align:left;">CCAGCAY</td> + <td style="text-align:left;">DREME-5</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">4241</td> + <td style="text-align:left;">4247</td> + <td style="text-align:left;">9.37e-05</td> + <td style="text-align:left;">1</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCAGCAT</td> + </tr> +</tbody> +</table> + +<hr> +<center><big><b><a name="debugging_information">DEBUGGING INFORMATION</a></b></big></center> +<hr> +<p> +Command line: +</p> +<pre> +fimo -oc fimo_test2_out --bgfile fimo_background_probs_hsa_chrM.txt dreme_fimo_input_1.xml hsa_chrM.fa +</pre> +<p> +Settings: +</p> +<pre> +<table> + <tr> + <td style="padding-right: 2em">output_directory = fimo_test2_out</td> + <td style="padding-left: 5em; padding-right: 2em">MEME file name = dreme_fimo_input_1.xml</td> + <td style="padding-left: 5em; padding-right: 2em">sequence file name = hsa_chrM.fa</td> + </tr> <tr> + <td style="padding-right: 2em">background file name = fimo_background_probs_hsa_chrM.txt</td> + <td style="padding-left: 5em; padding-right: 2em">alphabet = DNA</td> + <td style="padding-left: 5em; padding-right: 2em">max stored scores = 100000</td> + </tr> <tr> + <td style="padding-right: 2em">allow clobber = true</td> + <td style="padding-left: 5em; padding-right: 2em">compute q-values = true</td> + <td style="padding-left: 5em; padding-right: 2em">parse genomic coord. = false</td> + </tr> + <tr> + <td style="padding-right: 2em">text only = false</td> + <td style="padding-left: 5em; padding-right: 2em">scan both strands = true</td> + <td style="padding-left: 5em; padding-right: 2em">max strand = false</td> + </tr> + <tr> + <td style="padding-right: 2em">threshold type = p-value</td> + <td style="padding-left: 5em; padding-right: 2em">output theshold = 0.0001</td> + <td style="padding-left: 5em; padding-right: 2em">pseudocount = 0.1</td> + </tr> + <tr> + <td style="padding-right: 2em">alpha = 1</td> + <td style="padding-left: 5em; padding-right: 2em">verbosity = 2</td> + <td style="padding-left: 5em; padding-right: 2em"></td> + </tr> + +</table> +</pre> +<p> +This information can be useful in the event you wish to report a +problem with the FIMO software. +</p> +<hr> +<span style="background-color: #DDDDFF"><a href="#top_buttons"><b>Go to top</b></a></span> +</body> +</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/fimo_output_test2.txt Thu May 17 14:11:00 2018 -0400 @@ -0,0 +1,12 @@ +# motif_id motif_alt_id sequence_name start stop strand score p-value q-value matched_sequence +CCAGCAY DREME-5 chrM 510 516 + 13.5843 4.15e-05 0.668 CCAGCAC +CCAGCAY DREME-5 chrM 5137 5143 + 13.5843 4.15e-05 0.668 CCAGCAC +ACTAAYH DREME-1 chrM 440 446 + 11.7385 8.2e-05 0.327 ACTAACA +ACTAAYH DREME-1 chrM 2093 2099 - 11.7385 8.2e-05 0.327 ACTAACA +ACTAAYH DREME-1 chrM 2299 2305 - 11.7385 8.2e-05 0.327 ACTAACA +ACTAAYH DREME-1 chrM 5186 5192 + 11.7385 8.2e-05 0.327 ACTAACA +ACTAAYH DREME-1 chrM 6530 6536 + 11.7385 8.2e-05 0.327 ACTAACA +ACTAAYH DREME-1 chrM 7742 7748 + 11.7385 8.2e-05 0.327 ACTAACA +ACTAAYH DREME-1 chrM 13657 13663 + 11.7385 8.2e-05 0.327 ACTAACA +ACTAAYH DREME-1 chrM 13741 13747 + 11.7385 8.2e-05 0.327 ACTAACA +CCAGCAY DREME-5 chrM 4241 4247 + 13.1461 9.37e-05 1 CCAGCAT
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/fimo_output_test2.xml Thu May 17 14:11:00 2018 -0400 @@ -0,0 +1,55 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Begin document body --> +<fimo version="4.12.0" release="Tue Jun 27 16:22:50 2017 -0700"> + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation= xmlns:fimo="http://noble.gs.washington.edu/schema/fimo" +> +<command-line>fimo -oc fimo_test2_out --bgfile fimo_background_probs_hsa_chrM.txt dreme_fimo_input_1.xml hsa_chrM.fa</command-line> +<settings> +<setting name="output directory">fimo_test2_out</setting> +<setting name="MEME file name">dreme_fimo_input_1.xml</setting> +<setting name="sequence file name">hsa_chrM.fa</setting> +<setting name="background file name">fimo_background_probs_hsa_chrM.txt</setting> +<setting name="allow clobber">true</setting> +<setting name="compute q-values">true</setting> +<setting name="parse genomic coord.">false</setting> +<setting name="text only">false</setting> +<setting name="scan both strands">true</setting> +<setting name="output threshold">0.0001</setting> +<setting name="threshold type">p-value</setting> +<setting name="max stored scores">100000</setting> +<setting name="pseudocount">0.1</setting> +<setting name="verbosity">2</setting> +</settings> +<sequence-data num-sequences="1" num-residues="16569" /> +<alphabet name="DNA" like="dna"> +<letter id="A" symbol="A" complement="T" name="Adenine" colour="CC0000"/> +<letter id="C" symbol="C" complement="G" name="Cytosine" colour="0000CC"/> +<letter id="G" symbol="G" complement="C" name="Guanine" colour="FFB300"/> +<letter id="T" symbol="T" aliases="U" complement="A" name="Thymine" colour="008000"/> +<letter id="N" symbol="N" aliases="X." equals="ACGT" name="Any base"/> +<letter id="V" symbol="V" equals="ACG" name="Not T"/> +<letter id="H" symbol="H" equals="ACT" name="Not G"/> +<letter id="D" symbol="D" equals="AGT" name="Not C"/> +<letter id="B" symbol="B" equals="CGT" name="Not A"/> +<letter id="M" symbol="M" equals="AC" name="Amino"/> +<letter id="R" symbol="R" equals="AG" name="Purine"/> +<letter id="W" symbol="W" equals="AT" name="Weak"/> +<letter id="S" symbol="S" equals="CG" name="Strong"/> +<letter id="Y" symbol="Y" equals="CT" name="Pyrimidine"/> +<letter id="K" symbol="K" equals="GT" name="Keto"/> +</alphabet> +<motif name="ACTAAYH" alt="DREME-1" width="7" best-possible-match="ACTAACA"/> +<motif name="YTAACA" alt="DREME-2" width="6" best-possible-match="TTAACA"/> +<motif name="TCTGT" alt="DREME-3" width="5" best-possible-match="TCTGT"/> +<motif name="SCCAGG" alt="DREME-4" width="6" best-possible-match="CCCAGG"/> +<motif name="CCAGCAY" alt="DREME-5" width="7" best-possible-match="CCAGCAC"/> +<motif name="GMATGT" alt="DREME-6" width="6" best-possible-match="GAATGT"/> +<background source="fimo_background_probs_hsa_chrM.txt"> +<value letter="A">0.278</value> +<value letter="C">0.222</value> +<value letter="G">0.222</value> +<value letter="T">0.278</value> +</background> +<cisml-file>cisml.xml</cisml-file> +</fimo>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/fimo_output_test3.html Thu May 17 14:11:00 2018 -0400 @@ -0,0 +1,5891 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html xmlns:cis="http://zlab.bu.edu/schema/cisml" xmlns:fimo="http://noble.gs.washington.edu/schema/cisml" xmlns:mem="http://noble.gs.washington.edu/meme"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +<meta charset="UTF-8"> +<title>FIMO Results</title> +<style type="text/css"> +td.left {text-align: left;} +td.right {text-align: right; padding-right: 1cm;} +</style> +</head> +<body bgcolor="#D5F0FF"> +<a name="top_buttons"></a> +<hr> +<table summary="buttons" align="left" cellspacing="0"> +<tr> +<td bgcolor="#00FFFF"><a href="#database_and_motifs"><b>Database and Motifs</b></a></td> +<td bgcolor="#DDFFDD"><a href="#sec_i"><b>High-scoring Motif Occurences</b></a></td> +<td bgcolor="#DDDDFF"><a href="#debugging_information"><b>Debugging Information</b></a></td> +</tr> +</table> +<br/> +<br/> +<hr/> +<center><big><b>FIMO - Motif search tool</b></big></center> +<hr> +<p> +FIMO version 4.12.0, (Release date: Tue Jun 27 16:22:50 2017 -0700) +</p> +<p> +For further information on how to interpret these results +or to get a copy of the FIMO software please access +<a href="http://meme.nbcr.net">http://meme.nbcr.net</a></p> +<p>If you use FIMO in your research, please cite the following paper:<br> +Charles E. Grant, Timothy L. Bailey, and William Stafford Noble, +"FIMO: Scanning for occurrences of a given motif", +<i>Bioinformatics</i>, <b>27</b>(7):1017-1018, 2011. +<a href="http://bioinformatics.oxfordjournals.org/content/27/7/1017">[full text]</a></p> +<hr> +<center><big><b><a name="database_and_motifs">DATABASE AND MOTIFS</a></b></big></center> +<hr> +<div style="padding-left: 0.75in; line-height: 1em; font-family: monospace;"> +<p> + DATABASE hsa_chrM.fa + <br /> + Database contains 1 sequences, 16569 residues +</p> +<p> + MOTIFS dreme_fimo_input_1.xml (DNA) + <table> + <thead> + <tr> + <th style="border-bottom: 1px dashed;">MOTIF</th> + <th style="border-bottom: 1px dashed; padding-left: 1em;">WIDTH</th> + <th style="border-bottom: 1px dashed; padding-left: 1em;text-align:left;" > + BEST POSSIBLE MATCH + </th> + </tr> + </thead> + <tbody> + <tr> + <td style="text-align:right;">ACTAAYH</td> + <td style="text-align:right;padding-left: 1em;">7</td> + <td style="text-align:left;padding-left: 1em;">ACTAACA</td> + </tr> + <tr> + <td style="text-align:right;">YTAACA</td> + <td style="text-align:right;padding-left: 1em;">6</td> + <td style="text-align:left;padding-left: 1em;">TTAACA</td> + </tr> + <tr> + <td style="text-align:right;">TCTGT</td> + <td style="text-align:right;padding-left: 1em;">5</td> + <td style="text-align:left;padding-left: 1em;">TCTGT</td> + </tr> + <tr> + <td style="text-align:right;">SCCAGG</td> + <td style="text-align:right;padding-left: 1em;">6</td> + <td style="text-align:left;padding-left: 1em;">CCCAGG</td> + </tr> + <tr> + <td style="text-align:right;">CCAGCAY</td> + <td style="text-align:right;padding-left: 1em;">7</td> + <td style="text-align:left;padding-left: 1em;">CCAGCAC</td> + </tr> + <tr> + <td style="text-align:right;">GMATGT</td> + <td style="text-align:right;padding-left: 1em;">6</td> + <td style="text-align:left;padding-left: 1em;">GAATGT</td> + </tr> + </tbody> + </table> +</p> +<p> +Random model letter frequencies (--uniform--): +<br/> + +A 0.250 C 0.250 G 0.250 T 0.250 </p> +</div> +<hr> +<center><big><b><a name="sec_i">SECTION I: HIGH-SCORING MOTIF OCCURENCES</a></b></big></center> +<hr> +<ul> +<li> +There were 517 motif occurences with a p-value less than 0.01. + +The full set of motif occurences can be seen in the +tab-delimited plain text output file +<a href="fimo.txt">fimo.txt</a>, +the GFF file +<a href="fimo.gff">fimo.gff</a> +which may be suitable for uploading to the +<a href="http://genome.ucsc.edu/cgi-bin/hgTables">UCSC Genome Table Browser</a> +(assuming the FASTA input sequences included genomic coordinates in UCSC or Galaxy format), +or the XML file +<a href="fimo.xml">fimo.xml</a>. +</li> +<li> +The p-value of a motif occurrence is defined as the +probability of a random sequence of the same length as the motif +matching that position of the sequence with as good or better a score. +</li> +<li> +The score for the match of a position in a sequence to a motif +is computed by summing the appropriate entries from each column of +the position-dependent scoring matrix that represents the motif. +</li> +<li> +The q-value of a motif occurrence is defined as the +false discovery rate if the occurrence is accepted as significant. +</li> +<li>The table is sorted by increasing p-value.</li> +</ul> +<table border="1"> +<thead> +<tr> +<th>Motif ID</th> +<th>Alt ID</th> +<th>Sequence Name</th> +<th>Strand</th> +<th>Start</th> +<th>End</th> +<th>p-value</th> +<th>q-value</th> +<th>Matched Sequence</th> +</tr> +</thead> +<tbody> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">440</td> + <td style="text-align:left;">446</td> + <td style="text-align:left;">6.1e-05</td> + <td style="text-align:left;">0.239</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">2093</td> + <td style="text-align:left;">2099</td> + <td style="text-align:left;">6.1e-05</td> + <td style="text-align:left;">0.239</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">2299</td> + <td style="text-align:left;">2305</td> + <td style="text-align:left;">6.1e-05</td> + <td style="text-align:left;">0.239</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">5186</td> + <td style="text-align:left;">5192</td> + <td style="text-align:left;">6.1e-05</td> + <td style="text-align:left;">0.239</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">6530</td> + <td style="text-align:left;">6536</td> + <td style="text-align:left;">6.1e-05</td> + <td style="text-align:left;">0.239</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">7742</td> + <td style="text-align:left;">7748</td> + <td style="text-align:left;">6.1e-05</td> + <td style="text-align:left;">0.239</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">13657</td> + <td style="text-align:left;">13663</td> + <td style="text-align:left;">6.1e-05</td> + <td style="text-align:left;">0.239</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">13741</td> + <td style="text-align:left;">13747</td> + <td style="text-align:left;">6.1e-05</td> + <td style="text-align:left;">0.239</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">3768</td> + <td style="text-align:left;">3774</td> + <td style="text-align:left;">0.000122</td> + <td style="text-align:left;">0.239</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">5498</td> + <td style="text-align:left;">5504</td> + <td style="text-align:left;">0.000122</td> + <td style="text-align:left;">0.239</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">7736</td> + <td style="text-align:left;">7742</td> + <td style="text-align:left;">0.000122</td> + <td style="text-align:left;">0.239</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">9872</td> + <td style="text-align:left;">9878</td> + <td style="text-align:left;">0.000122</td> + <td style="text-align:left;">0.239</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">10106</td> + <td style="text-align:left;">10112</td> + <td style="text-align:left;">0.000122</td> + <td style="text-align:left;">0.239</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">10313</td> + <td style="text-align:left;">10319</td> + <td style="text-align:left;">0.000122</td> + <td style="text-align:left;">0.239</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">11818</td> + <td style="text-align:left;">11824</td> + <td style="text-align:left;">0.000122</td> + <td style="text-align:left;">0.239</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">15903</td> + <td style="text-align:left;">15909</td> + <td style="text-align:left;">0.000122</td> + <td style="text-align:left;">0.239</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">7732</td> + <td style="text-align:left;">7738</td> + <td style="text-align:left;">0.000183</td> + <td style="text-align:left;">0.294</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">10960</td> + <td style="text-align:left;">10966</td> + <td style="text-align:left;">0.000183</td> + <td style="text-align:left;">0.294</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">862</td> + <td style="text-align:left;">868</td> + <td style="text-align:left;">0.000244</td> + <td style="text-align:left;">0.294</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">1832</td> + <td style="text-align:left;">1838</td> + <td style="text-align:left;">0.000244</td> + <td style="text-align:left;">0.294</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">8679</td> + <td style="text-align:left;">8685</td> + <td style="text-align:left;">0.000244</td> + <td style="text-align:left;">0.294</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">8770</td> + <td style="text-align:left;">8776</td> + <td style="text-align:left;">0.000244</td> + <td style="text-align:left;">0.294</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">9347</td> + <td style="text-align:left;">9353</td> + <td style="text-align:left;">0.000244</td> + <td style="text-align:left;">0.294</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">9359</td> + <td style="text-align:left;">9365</td> + <td style="text-align:left;">0.000244</td> + <td style="text-align:left;">0.294</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">10302</td> + <td style="text-align:left;">10308</td> + <td style="text-align:left;">0.000244</td> + <td style="text-align:left;">0.294</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">14765</td> + <td style="text-align:left;">14771</td> + <td style="text-align:left;">0.000244</td> + <td style="text-align:left;">0.294</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">4466</td> + <td style="text-align:left;">4472</td> + <td style="text-align:left;">0.000305</td> + <td style="text-align:left;">0.302</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">11248</td> + <td style="text-align:left;">11254</td> + <td style="text-align:left;">0.000305</td> + <td style="text-align:left;">0.302</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">475</td> + <td style="text-align:left;">481</td> + <td style="text-align:left;">0.000366</td> + <td style="text-align:left;">0.302</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">7930</td> + <td style="text-align:left;">7936</td> + <td style="text-align:left;">0.000366</td> + <td style="text-align:left;">0.302</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">8649</td> + <td style="text-align:left;">8655</td> + <td style="text-align:left;">0.000366</td> + <td style="text-align:left;">0.302</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">8670</td> + <td style="text-align:left;">8676</td> + <td style="text-align:left;">0.000366</td> + <td style="text-align:left;">0.302</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">10768</td> + <td style="text-align:left;">10774</td> + <td style="text-align:left;">0.000366</td> + <td style="text-align:left;">0.302</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">11053</td> + <td style="text-align:left;">11059</td> + <td style="text-align:left;">0.000366</td> + <td style="text-align:left;">0.302</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">11101</td> + <td style="text-align:left;">11107</td> + <td style="text-align:left;">0.000366</td> + <td style="text-align:left;">0.302</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">12720</td> + <td style="text-align:left;">12726</td> + <td style="text-align:left;">0.000366</td> + <td style="text-align:left;">0.302</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">13149</td> + <td style="text-align:left;">13155</td> + <td style="text-align:left;">0.000366</td> + <td style="text-align:left;">0.302</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">14216</td> + <td style="text-align:left;">14222</td> + <td style="text-align:left;">0.000366</td> + <td style="text-align:left;">0.302</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">678</td> + <td style="text-align:left;">684</td> + <td style="text-align:left;">0.000549</td> + <td style="text-align:left;">0.366</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">1435</td> + <td style="text-align:left;">1441</td> + <td style="text-align:left;">0.000549</td> + <td style="text-align:left;">0.366</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">1524</td> + <td style="text-align:left;">1530</td> + <td style="text-align:left;">0.000549</td> + <td style="text-align:left;">0.366</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">2035</td> + <td style="text-align:left;">2041</td> + <td style="text-align:left;">0.000549</td> + <td style="text-align:left;">0.366</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">8440</td> + <td style="text-align:left;">8446</td> + <td style="text-align:left;">0.000549</td> + <td style="text-align:left;">0.366</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">9995</td> + <td style="text-align:left;">10001</td> + <td style="text-align:left;">0.000549</td> + <td style="text-align:left;">0.366</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">10225</td> + <td style="text-align:left;">10231</td> + <td style="text-align:left;">0.000549</td> + <td style="text-align:left;">0.366</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">12725</td> + <td style="text-align:left;">12731</td> + <td style="text-align:left;">0.000549</td> + <td style="text-align:left;">0.366</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">14393</td> + <td style="text-align:left;">14399</td> + <td style="text-align:left;">0.000549</td> + <td style="text-align:left;">0.366</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">2294</td> + <td style="text-align:left;">2300</td> + <td style="text-align:left;">0.00061</td> + <td style="text-align:left;">0.398</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAATG</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">206</td> + <td style="text-align:left;">212</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">237</td> + <td style="text-align:left;">243</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">370</td> + <td style="text-align:left;">376</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">1630</td> + <td style="text-align:left;">1636</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTTACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">1702</td> + <td style="text-align:left;">1708</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACCA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">2309</td> + <td style="text-align:left;">2315</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">2363</td> + <td style="text-align:left;">2369</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTGACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">2370</td> + <td style="text-align:left;">2376</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">2395</td> + <td style="text-align:left;">2401</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">2761</td> + <td style="text-align:left;">2767</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">2784</td> + <td style="text-align:left;">2790</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACCA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">3191</td> + <td style="text-align:left;">3197</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAGT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">3756</td> + <td style="text-align:left;">3762</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATCA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">3873</td> + <td style="text-align:left;">3879</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGCA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">3991</td> + <td style="text-align:left;">3997</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">4445</td> + <td style="text-align:left;">4451</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">4734</td> + <td style="text-align:left;">4740</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACCA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">5061</td> + <td style="text-align:left;">5067</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">5177</td> + <td style="text-align:left;">5183</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">5391</td> + <td style="text-align:left;">5397</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">5680</td> + <td style="text-align:left;">5686</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">5686</td> + <td style="text-align:left;">5692</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAGT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">6595</td> + <td style="text-align:left;">6601</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">7146</td> + <td style="text-align:left;">7152</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATCA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">7286</td> + <td style="text-align:left;">7292</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">7714</td> + <td style="text-align:left;">7720</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">7720</td> + <td style="text-align:left;">7726</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">8344</td> + <td style="text-align:left;">8350</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">8374</td> + <td style="text-align:left;">8380</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAAT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">8460</td> + <td style="text-align:left;">8466</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACCA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">9010</td> + <td style="text-align:left;">9016</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">9257</td> + <td style="text-align:left;">9263</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">9351</td> + <td style="text-align:left;">9357</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">10127</td> + <td style="text-align:left;">10133</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACCA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">10295</td> + <td style="text-align:left;">10301</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">10496</td> + <td style="text-align:left;">10502</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGCA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">10792</td> + <td style="text-align:left;">10798</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACCA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">10798</td> + <td style="text-align:left;">10804</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTGACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">10939</td> + <td style="text-align:left;">10945</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">11023</td> + <td style="text-align:left;">11029</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATCA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">11258</td> + <td style="text-align:left;">11264</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">11314</td> + <td style="text-align:left;">11320</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATCA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">11593</td> + <td style="text-align:left;">11599</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">11650</td> + <td style="text-align:left;">11656</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">11768</td> + <td style="text-align:left;">11774</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">11901</td> + <td style="text-align:left;">11907</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGCA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">11941</td> + <td style="text-align:left;">11947</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTTACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">12026</td> + <td style="text-align:left;">12032</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">12245</td> + <td style="text-align:left;">12251</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">12412</td> + <td style="text-align:left;">12418</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">12530</td> + <td style="text-align:left;">12536</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTGACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">12617</td> + <td style="text-align:left;">12623</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACGAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">12736</td> + <td style="text-align:left;">12742</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">13161</td> + <td style="text-align:left;">13167</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">13626</td> + <td style="text-align:left;">13632</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">13797</td> + <td style="text-align:left;">13803</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">13830</td> + <td style="text-align:left;">13836</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">13858</td> + <td style="text-align:left;">13864</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">14185</td> + <td style="text-align:left;">14191</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">14189</td> + <td style="text-align:left;">14195</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">14548</td> + <td style="text-align:left;">14554</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">14569</td> + <td style="text-align:left;">14575</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">15469</td> + <td style="text-align:left;">15475</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">15599</td> + <td style="text-align:left;">15605</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">16227</td> + <td style="text-align:left;">16233</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATCA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">16277</td> + <td style="text-align:left;">16283</td> + <td style="text-align:left;">0.00165</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAACA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">852</td> + <td style="text-align:left;">858</td> + <td style="text-align:left;">0.00177</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAGC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">1449</td> + <td style="text-align:left;">1455</td> + <td style="text-align:left;">0.00177</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAGC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">4913</td> + <td style="text-align:left;">4919</td> + <td style="text-align:left;">0.00177</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAAC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">11278</td> + <td style="text-align:left;">11284</td> + <td style="text-align:left;">0.00177</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAAC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">13686</td> + <td style="text-align:left;">13692</td> + <td style="text-align:left;">0.00177</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAAC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">14582</td> + <td style="text-align:left;">14588</td> + <td style="text-align:left;">0.00177</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAAC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">14636</td> + <td style="text-align:left;">14642</td> + <td style="text-align:left;">0.00177</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAAC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">15703</td> + <td style="text-align:left;">15709</td> + <td style="text-align:left;">0.00177</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAGC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">152</td> + <td style="text-align:left;">158</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">234</td> + <td style="text-align:left;">240</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">472</td> + <td style="text-align:left;">478</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACTA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">645</td> + <td style="text-align:left;">651</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">671</td> + <td style="text-align:left;">677</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">2305</td> + <td style="text-align:left;">2311</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTTATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">2529</td> + <td style="text-align:left;">2535</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">2744</td> + <td style="text-align:left;">2750</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">2880</td> + <td style="text-align:left;">2886</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACTA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">4158</td> + <td style="text-align:left;">4164</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">4206</td> + <td style="text-align:left;">4212</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTTATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">4301</td> + <td style="text-align:left;">4307</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">4679</td> + <td style="text-align:left;">4685</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">4728</td> + <td style="text-align:left;">4734</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">4754</td> + <td style="text-align:left;">4760</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">5036</td> + <td style="text-align:left;">5042</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">5103</td> + <td style="text-align:left;">5109</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACTA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">5153</td> + <td style="text-align:left;">5159</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACTA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">5962</td> + <td style="text-align:left;">5968</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">6110</td> + <td style="text-align:left;">6116</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">6155</td> + <td style="text-align:left;">6161</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">6527</td> + <td style="text-align:left;">6533</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACTA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">6973</td> + <td style="text-align:left;">6979</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">7295</td> + <td style="text-align:left;">7301</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">7301</td> + <td style="text-align:left;">7307</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">7300</td> + <td style="text-align:left;">7306</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">7349</td> + <td style="text-align:left;">7355</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">7351</td> + <td style="text-align:left;">7357</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATTA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">7522</td> + <td style="text-align:left;">7528</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">8739</td> + <td style="text-align:left;">8745</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGTA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">8738</td> + <td style="text-align:left;">8744</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGTA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">8945</td> + <td style="text-align:left;">8951</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGTA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">8982</td> + <td style="text-align:left;">8988</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">9613</td> + <td style="text-align:left;">9619</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">9656</td> + <td style="text-align:left;">9662</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">10055</td> + <td style="text-align:left;">10061</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">10103</td> + <td style="text-align:left;">10109</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACTA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">10246</td> + <td style="text-align:left;">10252</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">10315</td> + <td style="text-align:left;">10321</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATTA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">10336</td> + <td style="text-align:left;">10342</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">10368</td> + <td style="text-align:left;">10374</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">10526</td> + <td style="text-align:left;">10532</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGTA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">10525</td> + <td style="text-align:left;">10531</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGTA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">10574</td> + <td style="text-align:left;">10580</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">10657</td> + <td style="text-align:left;">10663</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGTA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">10699</td> + <td style="text-align:left;">10705</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGTA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">10788</td> + <td style="text-align:left;">10794</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">10858</td> + <td style="text-align:left;">10864</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">10954</td> + <td style="text-align:left;">10960</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">11873</td> + <td style="text-align:left;">11879</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATTA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">11958</td> + <td style="text-align:left;">11964</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGTA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">12333</td> + <td style="text-align:left;">12339</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">12349</td> + <td style="text-align:left;">12355</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACTA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">12425</td> + <td style="text-align:left;">12431</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">12471</td> + <td style="text-align:left;">12477</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTGATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">12933</td> + <td style="text-align:left;">12939</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">12972</td> + <td style="text-align:left;">12978</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACTA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">13269</td> + <td style="text-align:left;">13275</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">13274</td> + <td style="text-align:left;">13280</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATTA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">13566</td> + <td style="text-align:left;">13572</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">14210</td> + <td style="text-align:left;">14216</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACTA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">14213</td> + <td style="text-align:left;">14219</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACTA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">14251</td> + <td style="text-align:left;">14257</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">14314</td> + <td style="text-align:left;">14320</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATTA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">14510</td> + <td style="text-align:left;">14516</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATTA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">14545</td> + <td style="text-align:left;">14551</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">14773</td> + <td style="text-align:left;">14779</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">15627</td> + <td style="text-align:left;">15633</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">15838</td> + <td style="text-align:left;">15844</td> + <td style="text-align:left;">0.00269</td> + <td style="text-align:left;">0.441</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAATA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">193</td> + <td style="text-align:left;">199</td> + <td style="text-align:left;">0.0036</td> + <td style="text-align:left;">0.501</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTTACT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">714</td> + <td style="text-align:left;">720</td> + <td style="text-align:left;">0.0036</td> + <td style="text-align:left;">0.501</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCACT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">1860</td> + <td style="text-align:left;">1866</td> + <td style="text-align:left;">0.0036</td> + <td style="text-align:left;">0.501</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAACT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">1870</td> + <td style="text-align:left;">1876</td> + <td style="text-align:left;">0.0036</td> + <td style="text-align:left;">0.501</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAACT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">2220</td> + <td style="text-align:left;">2226</td> + <td style="text-align:left;">0.0036</td> + <td style="text-align:left;">0.501</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACCT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">2901</td> + <td style="text-align:left;">2907</td> + <td style="text-align:left;">0.0036</td> + <td style="text-align:left;">0.501</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAACT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">4154</td> + <td style="text-align:left;">4160</td> + <td style="text-align:left;">0.0036</td> + <td style="text-align:left;">0.501</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAACT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">4283</td> + <td style="text-align:left;">4289</td> + <td style="text-align:left;">0.0036</td> + <td style="text-align:left;">0.501</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAACT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">5099</td> + <td style="text-align:left;">5105</td> + <td style="text-align:left;">0.0036</td> + <td style="text-align:left;">0.501</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">5156</td> + <td style="text-align:left;">5162</td> + <td style="text-align:left;">0.0036</td> + <td style="text-align:left;">0.501</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATCT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">5555</td> + <td style="text-align:left;">5561</td> + <td style="text-align:left;">0.0036</td> + <td style="text-align:left;">0.501</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTTACT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">6142</td> + <td style="text-align:left;">6148</td> + <td style="text-align:left;">0.0036</td> + <td style="text-align:left;">0.501</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTGACT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">6678</td> + <td style="text-align:left;">6684</td> + <td style="text-align:left;">0.0036</td> + <td style="text-align:left;">0.501</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTTACT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">7169</td> + <td style="text-align:left;">7175</td> + <td style="text-align:left;">0.0036</td> + <td style="text-align:left;">0.501</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAACT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">8304</td> + <td style="text-align:left;">8310</td> + <td style="text-align:left;">0.0036</td> + <td style="text-align:left;">0.501</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAACT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">8456</td> + <td style="text-align:left;">8462</td> + <td style="text-align:left;">0.0036</td> + <td style="text-align:left;">0.501</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAACT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">8817</td> + <td style="text-align:left;">8823</td> + <td style="text-align:left;">0.0036</td> + <td style="text-align:left;">0.501</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATCT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">8949</td> + <td style="text-align:left;">8955</td> + <td style="text-align:left;">0.0036</td> + <td style="text-align:left;">0.501</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAACT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">9120</td> + <td style="text-align:left;">9126</td> + <td style="text-align:left;">0.0036</td> + <td style="text-align:left;">0.501</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTGACT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">9852</td> + <td style="text-align:left;">9858</td> + <td style="text-align:left;">0.0036</td> + <td style="text-align:left;">0.501</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATCT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">10025</td> + <td style="text-align:left;">10031</td> + <td style="text-align:left;">0.0036</td> + <td style="text-align:left;">0.501</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAACT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">10964</td> + <td style="text-align:left;">10970</td> + <td style="text-align:left;">0.0036</td> + <td style="text-align:left;">0.501</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACCT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">11293</td> + <td style="text-align:left;">11299</td> + <td style="text-align:left;">0.0036</td> + <td style="text-align:left;">0.501</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCACT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">11347</td> + <td style="text-align:left;">11353</td> + <td style="text-align:left;">0.0036</td> + <td style="text-align:left;">0.501</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGCT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">12226</td> + <td style="text-align:left;">12232</td> + <td style="text-align:left;">0.0036</td> + <td style="text-align:left;">0.501</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAACT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">12516</td> + <td style="text-align:left;">12522</td> + <td style="text-align:left;">0.0036</td> + <td style="text-align:left;">0.501</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAACT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">13850</td> + <td style="text-align:left;">13856</td> + <td style="text-align:left;">0.0036</td> + <td style="text-align:left;">0.501</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACCT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">13862</td> + <td style="text-align:left;">13868</td> + <td style="text-align:left;">0.0036</td> + <td style="text-align:left;">0.501</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAACT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">14206</td> + <td style="text-align:left;">14212</td> + <td style="text-align:left;">0.0036</td> + <td style="text-align:left;">0.501</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAACT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">15185</td> + <td style="text-align:left;">15191</td> + <td style="text-align:left;">0.0036</td> + <td style="text-align:left;">0.501</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAACT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">15189</td> + <td style="text-align:left;">15195</td> + <td style="text-align:left;">0.0036</td> + <td style="text-align:left;">0.501</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTTACT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">15603</td> + <td style="text-align:left;">15609</td> + <td style="text-align:left;">0.0036</td> + <td style="text-align:left;">0.501</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAACT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">15844</td> + <td style="text-align:left;">15850</td> + <td style="text-align:left;">0.0036</td> + <td style="text-align:left;">0.501</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAACT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">15848</td> + <td style="text-align:left;">15854</td> + <td style="text-align:left;">0.0036</td> + <td style="text-align:left;">0.501</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATCT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">21</td> + <td style="text-align:left;">27</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">381</td> + <td style="text-align:left;">387</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">529</td> + <td style="text-align:left;">535</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">547</td> + <td style="text-align:left;">553</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">823</td> + <td style="text-align:left;">829</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">873</td> + <td style="text-align:left;">879</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">910</td> + <td style="text-align:left;">916</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">978</td> + <td style="text-align:left;">984</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">1569</td> + <td style="text-align:left;">1575</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTTACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">1596</td> + <td style="text-align:left;">1602</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACGAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">1991</td> + <td style="text-align:left;">1997</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">2578</td> + <td style="text-align:left;">2584</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">2765</td> + <td style="text-align:left;">2771</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">3031</td> + <td style="text-align:left;">3037</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACGAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">3225</td> + <td style="text-align:left;">3231</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">3883</td> + <td style="text-align:left;">3889</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">4101</td> + <td style="text-align:left;">4107</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">4191</td> + <td style="text-align:left;">4197</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">4598</td> + <td style="text-align:left;">4604</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">4874</td> + <td style="text-align:left;">4880</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGCC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">5237</td> + <td style="text-align:left;">5243</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">5839</td> + <td style="text-align:left;">5845</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">5931</td> + <td style="text-align:left;">5937</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">6335</td> + <td style="text-align:left;">6341</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">7228</td> + <td style="text-align:left;">7234</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACCC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">7781</td> + <td style="text-align:left;">7787</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATCC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">8315</td> + <td style="text-align:left;">8321</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">8508</td> + <td style="text-align:left;">8514</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">8721</td> + <td style="text-align:left;">8727</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACGAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">8805</td> + <td style="text-align:left;">8811</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">9003</td> + <td style="text-align:left;">9009</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">9076</td> + <td style="text-align:left;">9082</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">9124</td> + <td style="text-align:left;">9130</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATCC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">11548</td> + <td style="text-align:left;">11554</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATCC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">11852</td> + <td style="text-align:left;">11858</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">11876</td> + <td style="text-align:left;">11882</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">11905</td> + <td style="text-align:left;">11911</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">12013</td> + <td style="text-align:left;">12019</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">12336</td> + <td style="text-align:left;">12342</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">12363</td> + <td style="text-align:left;">12369</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">13295</td> + <td style="text-align:left;">13301</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">13672</td> + <td style="text-align:left;">13678</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">13854</td> + <td style="text-align:left;">13860</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">13998</td> + <td style="text-align:left;">14004</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">14124</td> + <td style="text-align:left;">14130</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">14384</td> + <td style="text-align:left;">14390</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">14401</td> + <td style="text-align:left;">14407</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">14624</td> + <td style="text-align:left;">14630</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">14786</td> + <td style="text-align:left;">14792</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">14910</td> + <td style="text-align:left;">14916</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">15193</td> + <td style="text-align:left;">15199</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATCC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">15631</td> + <td style="text-align:left;">15637</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATCC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">15748</td> + <td style="text-align:left;">15754</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">16066</td> + <td style="text-align:left;">16072</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">16281</td> + <td style="text-align:left;">16287</td> + <td style="text-align:left;">0.00452</td> + <td style="text-align:left;">0.505</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAACC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">211</td> + <td style="text-align:left;">217</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">210</td> + <td style="text-align:left;">216</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">214</td> + <td style="text-align:left;">220</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">1961</td> + <td style="text-align:left;">1967</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATTT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">2188</td> + <td style="text-align:left;">2194</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">3771</td> + <td style="text-align:left;">3777</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTTATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">3923</td> + <td style="text-align:left;">3929</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGTT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">4469</td> + <td style="text-align:left;">4475</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">4543</td> + <td style="text-align:left;">4549</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTGATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">5085</td> + <td style="text-align:left;">5091</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATTT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">6146</td> + <td style="text-align:left;">6152</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGTT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">7087</td> + <td style="text-align:left;">7093</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTGATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">7304</td> + <td style="text-align:left;">7310</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">8041</td> + <td style="text-align:left;">8047</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">8221</td> + <td style="text-align:left;">8227</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">8220</td> + <td style="text-align:left;">8226</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">8795</td> + <td style="text-align:left;">8801</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">8946</td> + <td style="text-align:left;">8952</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGTT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">8973</td> + <td style="text-align:left;">8979</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">9042</td> + <td style="text-align:left;">9048</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">9111</td> + <td style="text-align:left;">9117</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">9538</td> + <td style="text-align:left;">9544</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">9680</td> + <td style="text-align:left;">9686</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">9953</td> + <td style="text-align:left;">9959</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATTT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">10004</td> + <td style="text-align:left;">10010</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATTT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">10029</td> + <td style="text-align:left;">10035</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGTT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">10028</td> + <td style="text-align:left;">10034</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGTT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">10109</td> + <td style="text-align:left;">10115</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">10112</td> + <td style="text-align:left;">10118</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">10402</td> + <td style="text-align:left;">10408</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">10438</td> + <td style="text-align:left;">10444</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">10852</td> + <td style="text-align:left;">10858</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">10855</td> + <td style="text-align:left;">10861</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">10876</td> + <td style="text-align:left;">10882</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATTT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">11500</td> + <td style="text-align:left;">11506</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">12378</td> + <td style="text-align:left;">12384</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">12584</td> + <td style="text-align:left;">12590</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACTT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">12679</td> + <td style="text-align:left;">12685</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTGATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">12708</td> + <td style="text-align:left;">12714</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">13013</td> + <td style="text-align:left;">13019</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">13350</td> + <td style="text-align:left;">13356</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATTT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">13611</td> + <td style="text-align:left;">13617</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">14296</td> + <td style="text-align:left;">14302</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">14782</td> + <td style="text-align:left;">14788</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">14781</td> + <td style="text-align:left;">14787</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">14793</td> + <td style="text-align:left;">14799</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">15178</td> + <td style="text-align:left;">15184</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">15856</td> + <td style="text-align:left;">15862</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">16003</td> + <td style="text-align:left;">16009</td> + <td style="text-align:left;">0.00543</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAATT</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">1074</td> + <td style="text-align:left;">1080</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">2270</td> + <td style="text-align:left;">2276</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">3081</td> + <td style="text-align:left;">3087</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">3345</td> + <td style="text-align:left;">3351</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">3824</td> + <td style="text-align:left;">3830</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">3924</td> + <td style="text-align:left;">3930</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGTC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">4470</td> + <td style="text-align:left;">4476</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">4520</td> + <td style="text-align:left;">4526</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">4737</td> + <td style="text-align:left;">4743</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">4747</td> + <td style="text-align:left;">4753</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">4757</td> + <td style="text-align:left;">4763</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">5120</td> + <td style="text-align:left;">5126</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACTC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">5354</td> + <td style="text-align:left;">5360</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">5378</td> + <td style="text-align:left;">5384</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACTC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">5453</td> + <td style="text-align:left;">5459</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">5501</td> + <td style="text-align:left;">5507</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">5707</td> + <td style="text-align:left;">5713</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">5921</td> + <td style="text-align:left;">5927</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATTC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">6095</td> + <td style="text-align:left;">6101</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">6145</td> + <td style="text-align:left;">6151</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGTC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">6158</td> + <td style="text-align:left;">6164</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">6307</td> + <td style="text-align:left;">6313</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACTC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">6467</td> + <td style="text-align:left;">6473</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">6659</td> + <td style="text-align:left;">6665</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">6682</td> + <td style="text-align:left;">6688</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACTC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">6982</td> + <td style="text-align:left;">6988</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">8007</td> + <td style="text-align:left;">8013</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACTC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">8422</td> + <td style="text-align:left;">8428</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATTC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">8589</td> + <td style="text-align:left;">8595</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTGATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">9093</td> + <td style="text-align:left;">9099</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTTATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">9214</td> + <td style="text-align:left;">9220</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">10079</td> + <td style="text-align:left;">10085</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">10337</td> + <td style="text-align:left;">10343</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">10387</td> + <td style="text-align:left;">10393</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">10658</td> + <td style="text-align:left;">10664</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGTC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">10700</td> + <td style="text-align:left;">10706</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGTC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">11007</td> + <td style="text-align:left;">11013</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTTATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">11065</td> + <td style="text-align:left;">11071</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">11134</td> + <td style="text-align:left;">11140</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTTATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">11239</td> + <td style="text-align:left;">11245</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">11290</td> + <td style="text-align:left;">11296</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACTC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">11734</td> + <td style="text-align:left;">11740</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATTC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">11959</td> + <td style="text-align:left;">11965</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGTC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">12676</td> + <td style="text-align:left;">12682</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">12699</td> + <td style="text-align:left;">12705</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">12952</td> + <td style="text-align:left;">12958</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">13113</td> + <td style="text-align:left;">13119</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">13419</td> + <td style="text-align:left;">13425</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACTC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">14118</td> + <td style="text-align:left;">14124</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">14136</td> + <td style="text-align:left;">14142</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">14366</td> + <td style="text-align:left;">14372</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">14890</td> + <td style="text-align:left;">14896</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATTC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">14907</td> + <td style="text-align:left;">14913</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACTC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">15475</td> + <td style="text-align:left;">15481</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATTC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">15652</td> + <td style="text-align:left;">15658</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">15832</td> + <td style="text-align:left;">15838</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">15951</td> + <td style="text-align:left;">15957</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAATC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">16013</td> + <td style="text-align:left;">16019</td> + <td style="text-align:left;">0.00635</td> + <td style="text-align:left;">0.514</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATTC</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">197</td> + <td style="text-align:left;">203</td> + <td style="text-align:left;">0.00647</td> + <td style="text-align:left;">0.521</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAAG</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">8713</td> + <td style="text-align:left;">8719</td> + <td style="text-align:left;">0.00647</td> + <td style="text-align:left;">0.521</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAAAG</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">28</td> + <td style="text-align:left;">34</td> + <td style="text-align:left;">0.00739</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCACG</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">1322</td> + <td style="text-align:left;">1328</td> + <td style="text-align:left;">0.00739</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAACG</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">2910</td> + <td style="text-align:left;">2916</td> + <td style="text-align:left;">0.00739</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAACG</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">3035</td> + <td style="text-align:left;">3041</td> + <td style="text-align:left;">0.00739</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAACG</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">5106</td> + <td style="text-align:left;">5112</td> + <td style="text-align:left;">0.00739</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACCG</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">7218</td> + <td style="text-align:left;">7224</td> + <td style="text-align:left;">0.00739</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAACG</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">8381</td> + <td style="text-align:left;">8387</td> + <td style="text-align:left;">0.00739</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACCG</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">10580</td> + <td style="text-align:left;">10586</td> + <td style="text-align:left;">0.00739</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATCG</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">11760</td> + <td style="text-align:left;">11766</td> + <td style="text-align:left;">0.00739</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACGAACG</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">13546</td> + <td style="text-align:left;">13552</td> + <td style="text-align:left;">0.00739</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAACG</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">13663</td> + <td style="text-align:left;">13669</td> + <td style="text-align:left;">0.00739</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAACG</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">57</td> + <td style="text-align:left;">63</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACGAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">284</td> + <td style="text-align:left;">290</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">331</td> + <td style="text-align:left;">337</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTTAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">361</td> + <td style="text-align:left;">367</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAAGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">608</td> + <td style="text-align:left;">614</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTGAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">682</td> + <td style="text-align:left;">688</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAAGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">946</td> + <td style="text-align:left;">952</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">972</td> + <td style="text-align:left;">978</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">1019</td> + <td style="text-align:left;">1025</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">1057</td> + <td style="text-align:left;">1063</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAAGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">1142</td> + <td style="text-align:left;">1148</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">1162</td> + <td style="text-align:left;">1168</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">1384</td> + <td style="text-align:left;">1390</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">1864</td> + <td style="text-align:left;">1870</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">1894</td> + <td style="text-align:left;">1900</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAAGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">1922</td> + <td style="text-align:left;">1928</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAAGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">1932</td> + <td style="text-align:left;">1938</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">2124</td> + <td style="text-align:left;">2130</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">2148</td> + <td style="text-align:left;">2154</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">2175</td> + <td style="text-align:left;">2181</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">2192</td> + <td style="text-align:left;">2198</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAAGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">2224</td> + <td style="text-align:left;">2230</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">2350</td> + <td style="text-align:left;">2356</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">2463</td> + <td style="text-align:left;">2469</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">2500</td> + <td style="text-align:left;">2506</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">2658</td> + <td style="text-align:left;">2664</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAAGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">2798</td> + <td style="text-align:left;">2804</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">2855</td> + <td style="text-align:left;">2861</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAAGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">3065</td> + <td style="text-align:left;">3071</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCAGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">3262</td> + <td style="text-align:left;">3268</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTTAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">3378</td> + <td style="text-align:left;">3384</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACGAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">3441</td> + <td style="text-align:left;">3447</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">3486</td> + <td style="text-align:left;">3492</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">3558</td> + <td style="text-align:left;">3564</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">3677</td> + <td style="text-align:left;">3683</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">4021</td> + <td style="text-align:left;">4027</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">4087</td> + <td style="text-align:left;">4093</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAAGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">4259</td> + <td style="text-align:left;">4265</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAAGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">4334</td> + <td style="text-align:left;">4340</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">4586</td> + <td style="text-align:left;">4592</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">4602</td> + <td style="text-align:left;">4608</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">4778</td> + <td style="text-align:left;">4784</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">4784</td> + <td style="text-align:left;">4790</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">4807</td> + <td style="text-align:left;">4813</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCAGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">4868</td> + <td style="text-align:left;">4874</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">5002</td> + <td style="text-align:left;">5008</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAAGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">5075</td> + <td style="text-align:left;">5081</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAAGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">5128</td> + <td style="text-align:left;">5134</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTTAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">5280</td> + <td style="text-align:left;">5286</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">5405</td> + <td style="text-align:left;">5411</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">5533</td> + <td style="text-align:left;">5539</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAAGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">5670</td> + <td style="text-align:left;">5676</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTTAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">5938</td> + <td style="text-align:left;">5944</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAAGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">6106</td> + <td style="text-align:left;">6112</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">6376</td> + <td style="text-align:left;">6382</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAAGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">6451</td> + <td style="text-align:left;">6457</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACGAAGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">7445</td> + <td style="text-align:left;">7451</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">7581</td> + <td style="text-align:left;">7587</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAAGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">7692</td> + <td style="text-align:left;">7698</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">7800</td> + <td style="text-align:left;">7806</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">8230</td> + <td style="text-align:left;">8236</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">8323</td> + <td style="text-align:left;">8329</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTTAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">8335</td> + <td style="text-align:left;">8341</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAAGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">8494</td> + <td style="text-align:left;">8500</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">8521</td> + <td style="text-align:left;">8527</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">8531</td> + <td style="text-align:left;">8537</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACGAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">8757</td> + <td style="text-align:left;">8763</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">8881</td> + <td style="text-align:left;">8887</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">TCTAAGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">8887</td> + <td style="text-align:left;">8893</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">9173</td> + <td style="text-align:left;">9179</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">9236</td> + <td style="text-align:left;">9242</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">9706</td> + <td style="text-align:left;">9712</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">9796</td> + <td style="text-align:left;">9802</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">9987</td> + <td style="text-align:left;">9993</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAAGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">10075</td> + <td style="text-align:left;">10081</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">10243</td> + <td style="text-align:left;">10249</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAAGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">10333</td> + <td style="text-align:left;">10339</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAAGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">10376</td> + <td style="text-align:left;">10382</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">10379</td> + <td style="text-align:left;">10385</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">10630</td> + <td style="text-align:left;">10636</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAAGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">10762</td> + <td style="text-align:left;">10768</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">11029</td> + <td style="text-align:left;">11035</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACGAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">11367</td> + <td style="text-align:left;">11373</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">11602</td> + <td style="text-align:left;">11608</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">11646</td> + <td style="text-align:left;">11652</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">11751</td> + <td style="text-align:left;">11757</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">11757</td> + <td style="text-align:left;">11763</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">12152</td> + <td style="text-align:left;">12158</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">12295</td> + <td style="text-align:left;">12301</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAAGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">12311</td> + <td style="text-align:left;">12317</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">12327</td> + <td style="text-align:left;">12333</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">12352</td> + <td style="text-align:left;">12358</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTATAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">12416</td> + <td style="text-align:left;">12422</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACAAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">12509</td> + <td style="text-align:left;">12515</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAAGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">12662</td> + <td style="text-align:left;">12668</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCAGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">13109</td> + <td style="text-align:left;">13115</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AGTAAGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">13263</td> + <td style="text-align:left;">13269</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">13422</td> + <td style="text-align:left;">13428</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">13667</td> + <td style="text-align:left;">13673</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACGAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">13791</td> + <td style="text-align:left;">13797</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">13866</td> + <td style="text-align:left;">13872</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTTAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">13872</td> + <td style="text-align:left;">13878</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">13894</td> + <td style="text-align:left;">13900</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">14007</td> + <td style="text-align:left;">14013</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">14023</td> + <td style="text-align:left;">14029</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">CCTAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">14405</td> + <td style="text-align:left;">14411</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACCAAGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">14501</td> + <td style="text-align:left;">14507</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ATTAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">14687</td> + <td style="text-align:left;">14693</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">14732</td> + <td style="text-align:left;">14738</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">14776</td> + <td style="text-align:left;">14782</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">15072</td> + <td style="text-align:left;">15078</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCAGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">15607</td> + <td style="text-align:left;">15613</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">15874</td> + <td style="text-align:left;">15880</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTCAAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">-</td> + <td style="text-align:left;">15892</td> + <td style="text-align:left;">15898</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTACAA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">15995</td> + <td style="text-align:left;">16001</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">GCTAAGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">16269</td> + <td style="text-align:left;">16275</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">ACTAGGA</td> + </tr> + <tr> + <td style="text-align:left;">ACTAAYH</td> + <td style="text-align:left;">DREME-1</td> + <td style="text-align:left;">chrM</td> + <td style="text-align:center;">+</td> + <td style="text-align:left;">16553</td> + <td style="text-align:left;">16559</td> + <td style="text-align:left;">0.00922</td> + <td style="text-align:left;">0.559</td> + <td style="text-align:left;font-size:x-large;font-family:monospace;">AATAAGA</td> + </tr> +</tbody> +</table> + +<hr> +<center><big><b><a name="debugging_information">DEBUGGING INFORMATION</a></b></big></center> +<hr> +<p> +Command line: +</p> +<pre> +fimo -o ./fimo_test4_out --thresh 0.01 --bgfile --uniform-- --max-stored-scores 100000 --motif ACTAAYH --motif-pseudo 0.1 dreme_fimo_input_1.xml hsa_chrM.fa +</pre> +<p> +Settings: +</p> +<pre> +<table> + <tr> + <td style="padding-right: 2em">output_directory = ./fimo_test4_out</td> + <td style="padding-left: 5em; padding-right: 2em">MEME file name = dreme_fimo_input_1.xml</td> + <td style="padding-left: 5em; padding-right: 2em">sequence file name = hsa_chrM.fa</td> + </tr> <tr> + <td style="padding-right: 2em">background file name = --uniform--</td> + <td style="padding-left: 5em; padding-right: 2em">alphabet = DNA</td> + <td style="padding-left: 5em; padding-right: 2em">max stored scores = 100000</td> + </tr> <tr> + <td style="padding-right: 2em">allow clobber = false</td> + <td style="padding-left: 5em; padding-right: 2em">compute q-values = true</td> + <td style="padding-left: 5em; padding-right: 2em">parse genomic coord. = false</td> + </tr> + <tr> + <td style="padding-right: 2em">text only = false</td> + <td style="padding-left: 5em; padding-right: 2em">scan both strands = true</td> + <td style="padding-left: 5em; padding-right: 2em">max strand = false</td> + </tr> + <tr> + <td style="padding-right: 2em">threshold type = p-value</td> + <td style="padding-left: 5em; padding-right: 2em">output theshold = 0.01</td> + <td style="padding-left: 5em; padding-right: 2em">pseudocount = 0.1</td> + </tr> + <tr> + <td style="padding-right: 2em">alpha = 1</td> + <td style="padding-left: 5em; padding-right: 2em">verbosity = 2</td> + <td style="padding-left: 5em; padding-right: 2em"></td> + </tr> + +</table> +</pre> +<p> +This information can be useful in the event you wish to report a +problem with the FIMO software. +</p> +<hr> +<span style="background-color: #DDDDFF"><a href="#top_buttons"><b>Go to top</b></a></span> +</body> +</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/fimo_output_test3.txt Thu May 17 14:11:00 2018 -0400 @@ -0,0 +1,518 @@ +# motif_id motif_alt_id sequence_name start stop strand score p-value q-value matched_sequence +ACTAAYH DREME-1 chrM 440 446 + 12.1831 6.1e-05 0.239 ACTAACA +ACTAAYH DREME-1 chrM 2093 2099 - 12.1831 6.1e-05 0.239 ACTAACA +ACTAAYH DREME-1 chrM 2299 2305 - 12.1831 6.1e-05 0.239 ACTAACA +ACTAAYH DREME-1 chrM 5186 5192 + 12.1831 6.1e-05 0.239 ACTAACA +ACTAAYH DREME-1 chrM 6530 6536 + 12.1831 6.1e-05 0.239 ACTAACA +ACTAAYH DREME-1 chrM 7742 7748 + 12.1831 6.1e-05 0.239 ACTAACA +ACTAAYH DREME-1 chrM 13657 13663 + 12.1831 6.1e-05 0.239 ACTAACA +ACTAAYH DREME-1 chrM 13741 13747 + 12.1831 6.1e-05 0.239 ACTAACA +ACTAAYH DREME-1 chrM 3768 3774 + 11.5915 0.000122 0.239 ACTAATA +ACTAAYH DREME-1 chrM 5498 5504 + 11.5915 0.000122 0.239 ACTAATA +ACTAAYH DREME-1 chrM 7736 7742 + 11.5915 0.000122 0.239 ACTAATA +ACTAAYH DREME-1 chrM 9872 9878 + 11.5915 0.000122 0.239 ACTAATA +ACTAAYH DREME-1 chrM 10106 10112 + 11.5915 0.000122 0.239 ACTAATA +ACTAAYH DREME-1 chrM 10313 10319 + 11.5915 0.000122 0.239 ACTAATA +ACTAAYH DREME-1 chrM 11818 11824 + 11.5915 0.000122 0.239 ACTAATA +ACTAAYH DREME-1 chrM 15903 15909 + 11.5915 0.000122 0.239 ACTAATA +ACTAAYH DREME-1 chrM 7732 7738 + 11.4507 0.000183 0.294 ACTAACT +ACTAAYH DREME-1 chrM 10960 10966 + 11.4507 0.000183 0.294 ACTAACT +ACTAAYH DREME-1 chrM 862 868 + 11.2394 0.000244 0.294 ACTAACC +ACTAAYH DREME-1 chrM 1832 1838 + 11.2394 0.000244 0.294 ACTAACC +ACTAAYH DREME-1 chrM 8679 8685 + 11.2394 0.000244 0.294 ACTAACC +ACTAAYH DREME-1 chrM 8770 8776 + 11.2394 0.000244 0.294 ACTAACC +ACTAAYH DREME-1 chrM 9347 9353 + 11.2394 0.000244 0.294 ACTAACC +ACTAAYH DREME-1 chrM 9359 9365 + 11.2394 0.000244 0.294 ACTAACC +ACTAAYH DREME-1 chrM 10302 10308 + 11.2394 0.000244 0.294 ACTAACC +ACTAAYH DREME-1 chrM 14765 14771 + 11.2394 0.000244 0.294 ACTAACC +ACTAAYH DREME-1 chrM 4466 4472 + 10.8592 0.000305 0.302 ACTAATT +ACTAAYH DREME-1 chrM 11248 11254 + 10.8592 0.000305 0.302 ACTAATT +ACTAAYH DREME-1 chrM 475 481 + 10.6479 0.000366 0.302 ACTAATC +ACTAAYH DREME-1 chrM 7930 7936 + 10.6479 0.000366 0.302 ACTAATC +ACTAAYH DREME-1 chrM 8649 8655 + 10.6479 0.000366 0.302 ACTAATC +ACTAAYH DREME-1 chrM 8670 8676 + 10.6479 0.000366 0.302 ACTAATC +ACTAAYH DREME-1 chrM 10768 10774 + 10.6479 0.000366 0.302 ACTAATC +ACTAAYH DREME-1 chrM 11053 11059 + 10.6479 0.000366 0.302 ACTAATC +ACTAAYH DREME-1 chrM 11101 11107 + 10.6479 0.000366 0.302 ACTAATC +ACTAAYH DREME-1 chrM 12720 12726 + 10.6479 0.000366 0.302 ACTAATC +ACTAAYH DREME-1 chrM 13149 13155 + 10.6479 0.000366 0.302 ACTAATC +ACTAAYH DREME-1 chrM 14216 14222 + 10.6479 0.000366 0.302 ACTAATC +ACTAAYH DREME-1 chrM 678 684 - -1.07042 0.000549 0.366 ACTAAGA +ACTAAYH DREME-1 chrM 1435 1441 + -1.07042 0.000549 0.366 ACTAAGA +ACTAAYH DREME-1 chrM 1524 1530 + -1.07042 0.000549 0.366 ACTAAAA +ACTAAYH DREME-1 chrM 2035 2041 - -1.07042 0.000549 0.366 ACTAAGA +ACTAAYH DREME-1 chrM 8440 8446 + -1.07042 0.000549 0.366 ACTAAAA +ACTAAYH DREME-1 chrM 9995 10001 - -1.07042 0.000549 0.366 ACTAAAA +ACTAAYH DREME-1 chrM 10225 10231 - -1.07042 0.000549 0.366 ACTAAGA +ACTAAYH DREME-1 chrM 12725 12731 - -1.07042 0.000549 0.366 ACTAAGA +ACTAAYH DREME-1 chrM 14393 14399 + -1.07042 0.000549 0.366 ACTAAAA +ACTAAYH DREME-1 chrM 2294 2300 + -1.30986 0.00061 0.398 ACTAATG +ACTAAYH DREME-1 chrM 206 212 - -1.80282 0.00165 0.441 ATTAACA +ACTAAYH DREME-1 chrM 237 243 + -1.80282 0.00165 0.441 AATAACA +ACTAAYH DREME-1 chrM 370 376 + -1.80282 0.00165 0.441 CCTAACA +ACTAAYH DREME-1 chrM 1630 1636 + -1.80282 0.00165 0.441 ACTTACA +ACTAAYH DREME-1 chrM 1702 1708 + -1.80282 0.00165 0.441 ACTACCA +ACTAAYH DREME-1 chrM 2309 2315 + -1.80282 0.00165 0.441 AGTAACA +ACTAAYH DREME-1 chrM 2363 2369 + -1.80282 0.00165 0.441 ACTGACA +ACTAAYH DREME-1 chrM 2370 2376 + -1.80282 0.00165 0.441 ATTAACA +ACTAAYH DREME-1 chrM 2395 2401 + -1.80282 0.00165 0.441 ACCAACA +ACTAAYH DREME-1 chrM 2761 2767 + -1.80282 0.00165 0.441 CCTAACA +ACTAAYH DREME-1 chrM 2784 2790 + -1.80282 0.00165 0.441 ACTACCA +ACTAAYH DREME-1 chrM 3191 3197 - -1.80282 0.00165 0.441 ACTAAGT +ACTAAYH DREME-1 chrM 3756 3762 + -1.80282 0.00165 0.441 ACTATCA +ACTAAYH DREME-1 chrM 3873 3879 + -1.80282 0.00165 0.441 ACTAGCA +ACTAAYH DREME-1 chrM 3991 3997 + -1.80282 0.00165 0.441 ACAAACA +ACTAAYH DREME-1 chrM 4445 4451 - -1.80282 0.00165 0.441 ACCAACA +ACTAAYH DREME-1 chrM 4734 4740 + -1.80282 0.00165 0.441 ACTACCA +ACTAAYH DREME-1 chrM 5061 5067 + -1.80282 0.00165 0.441 CCTAACA +ACTAAYH DREME-1 chrM 5177 5183 + -1.80282 0.00165 0.441 GCTAACA +ACTAAYH DREME-1 chrM 5391 5397 + -1.80282 0.00165 0.441 TCTAACA +ACTAAYH DREME-1 chrM 5680 5686 + -1.80282 0.00165 0.441 ACAAACA +ACTAAYH DREME-1 chrM 5686 5692 - -1.80282 0.00165 0.441 ACTAAGT +ACTAAYH DREME-1 chrM 6595 6601 + -1.80282 0.00165 0.441 ACCAACA +ACTAAYH DREME-1 chrM 7146 7152 + -1.80282 0.00165 0.441 ACTATCA +ACTAAYH DREME-1 chrM 7286 7292 + -1.80282 0.00165 0.441 TCTAACA +ACTAAYH DREME-1 chrM 7714 7720 + -1.80282 0.00165 0.441 CCTAACA +ACTAAYH DREME-1 chrM 7720 7726 + -1.80282 0.00165 0.441 ACTCACA +ACTAAYH DREME-1 chrM 8344 8350 + -1.80282 0.00165 0.441 ACCAACA +ACTAAYH DREME-1 chrM 8374 8380 + -1.80282 0.00165 0.441 ACTAAAT +ACTAAYH DREME-1 chrM 8460 8466 + -1.80282 0.00165 0.441 ACTACCA +ACTAAYH DREME-1 chrM 9010 9016 + -1.80282 0.00165 0.441 GCTAACA +ACTAAYH DREME-1 chrM 9257 9263 + -1.80282 0.00165 0.441 CCTAACA +ACTAAYH DREME-1 chrM 9351 9357 + -1.80282 0.00165 0.441 ACCAACA +ACTAAYH DREME-1 chrM 10127 10133 + -1.80282 0.00165 0.441 ACTACCA +ACTAAYH DREME-1 chrM 10295 10301 + -1.80282 0.00165 0.441 ACAAACA +ACTAAYH DREME-1 chrM 10496 10502 + -1.80282 0.00165 0.441 ACTAGCA +ACTAAYH DREME-1 chrM 10792 10798 + -1.80282 0.00165 0.441 ACTACCA +ACTAAYH DREME-1 chrM 10798 10804 + -1.80282 0.00165 0.441 ACTGACA +ACTAAYH DREME-1 chrM 10939 10945 + -1.80282 0.00165 0.441 CCTAACA +ACTAAYH DREME-1 chrM 11023 11029 + -1.80282 0.00165 0.441 ACTATCA +ACTAAYH DREME-1 chrM 11258 11264 + -1.80282 0.00165 0.441 ACTCACA +ACTAAYH DREME-1 chrM 11314 11320 + -1.80282 0.00165 0.441 ACTATCA +ACTAAYH DREME-1 chrM 11593 11599 + -1.80282 0.00165 0.441 ACAAACA +ACTAAYH DREME-1 chrM 11650 11656 + -1.80282 0.00165 0.441 AGTAACA +ACTAAYH DREME-1 chrM 11768 11774 + -1.80282 0.00165 0.441 ACTCACA +ACTAAYH DREME-1 chrM 11901 11907 - -1.80282 0.00165 0.441 ACTAGCA +ACTAAYH DREME-1 chrM 11941 11947 + -1.80282 0.00165 0.441 ACTTACA +ACTAAYH DREME-1 chrM 12026 12032 + -1.80282 0.00165 0.441 ATTAACA +ACTAAYH DREME-1 chrM 12245 12251 + -1.80282 0.00165 0.441 TCTAACA +ACTAAYH DREME-1 chrM 12412 12418 + -1.80282 0.00165 0.441 CCTAACA +ACTAAYH DREME-1 chrM 12530 12536 + -1.80282 0.00165 0.441 ACTGACA +ACTAAYH DREME-1 chrM 12617 12623 - -1.80282 0.00165 0.441 ACGAACA +ACTAAYH DREME-1 chrM 12736 12742 + -1.80282 0.00165 0.441 GCTAACA +ACTAAYH DREME-1 chrM 13161 13167 + -1.80282 0.00165 0.441 TCTAACA +ACTAAYH DREME-1 chrM 13626 13632 + -1.80282 0.00165 0.441 CCTAACA +ACTAAYH DREME-1 chrM 13797 13803 + -1.80282 0.00165 0.441 ACTCACA +ACTAAYH DREME-1 chrM 13830 13836 + -1.80282 0.00165 0.441 TCTAACA +ACTAAYH DREME-1 chrM 13858 13864 + -1.80282 0.00165 0.441 ACCAACA +ACTAAYH DREME-1 chrM 14185 14191 + -1.80282 0.00165 0.441 ACCAACA +ACTAAYH DREME-1 chrM 14189 14195 + -1.80282 0.00165 0.441 ACAAACA +ACTAAYH DREME-1 chrM 14548 14554 + -1.80282 0.00165 0.441 AATAACA +ACTAAYH DREME-1 chrM 14569 14575 + -1.80282 0.00165 0.441 GCTAACA +ACTAAYH DREME-1 chrM 15469 15475 + -1.80282 0.00165 0.441 ATTAACA +ACTAAYH DREME-1 chrM 15599 15605 + -1.80282 0.00165 0.441 CCTAACA +ACTAAYH DREME-1 chrM 16227 16233 + -1.80282 0.00165 0.441 ACTATCA +ACTAAYH DREME-1 chrM 16277 16283 + -1.80282 0.00165 0.441 ACCAACA +ACTAAYH DREME-1 chrM 852 858 + -2.01408 0.00177 0.441 ACTAAGC +ACTAAYH DREME-1 chrM 1449 1455 - -2.01408 0.00177 0.441 ACTAAGC +ACTAAYH DREME-1 chrM 4913 4919 + -2.01408 0.00177 0.441 ACTAAAC +ACTAAYH DREME-1 chrM 11278 11284 + -2.01408 0.00177 0.441 ACTAAAC +ACTAAYH DREME-1 chrM 13686 13692 + -2.01408 0.00177 0.441 ACTAAAC +ACTAAYH DREME-1 chrM 14582 14588 + -2.01408 0.00177 0.441 ACTAAAC +ACTAAYH DREME-1 chrM 14636 14642 + -2.01408 0.00177 0.441 ACTAAAC +ACTAAYH DREME-1 chrM 15703 15709 + -2.01408 0.00177 0.441 ACTAAGC +ACTAAYH DREME-1 chrM 152 158 - -2.39437 0.00269 0.441 AATAATA +ACTAAYH DREME-1 chrM 234 240 + -2.39437 0.00269 0.441 AATAATA +ACTAAYH DREME-1 chrM 472 478 + -2.39437 0.00269 0.441 ACTACTA +ACTAAYH DREME-1 chrM 645 651 + -2.39437 0.00269 0.441 ACAAATA +ACTAAYH DREME-1 chrM 671 677 - -2.39437 0.00269 0.441 GCTAATA +ACTAAYH DREME-1 chrM 2305 2311 - -2.39437 0.00269 0.441 ACTTATA +ACTAAYH DREME-1 chrM 2529 2535 - -2.39437 0.00269 0.441 TCTAATA +ACTAAYH DREME-1 chrM 2744 2750 - -2.39437 0.00269 0.441 ATTAATA +ACTAAYH DREME-1 chrM 2880 2886 + -2.39437 0.00269 0.441 ACTACTA +ACTAAYH DREME-1 chrM 4158 4164 + -2.39437 0.00269 0.441 ACTCATA +ACTAAYH DREME-1 chrM 4206 4212 + -2.39437 0.00269 0.441 ACTTATA +ACTAAYH DREME-1 chrM 4301 4307 + -2.39437 0.00269 0.441 AATAATA +ACTAAYH DREME-1 chrM 4679 4685 + -2.39437 0.00269 0.441 TCTAATA +ACTAAYH DREME-1 chrM 4728 4734 + -2.39437 0.00269 0.441 ACCAATA +ACTAAYH DREME-1 chrM 4754 4760 + -2.39437 0.00269 0.441 ATTAATA +ACTAAYH DREME-1 chrM 5036 5042 + -2.39437 0.00269 0.441 AATAATA +ACTAAYH DREME-1 chrM 5103 5109 + -2.39437 0.00269 0.441 ACTACTA +ACTAAYH DREME-1 chrM 5153 5159 + -2.39437 0.00269 0.441 ACTACTA +ACTAAYH DREME-1 chrM 5962 5968 - -2.39437 0.00269 0.441 AATAATA +ACTAAYH DREME-1 chrM 6110 6116 + -2.39437 0.00269 0.441 AGTAATA +ACTAAYH DREME-1 chrM 6155 6161 + -2.39437 0.00269 0.441 CCTAATA +ACTAAYH DREME-1 chrM 6527 6533 + -2.39437 0.00269 0.441 ACTACTA +ACTAAYH DREME-1 chrM 6973 6979 - -2.39437 0.00269 0.441 GCTAATA +ACTAAYH DREME-1 chrM 7295 7301 + -2.39437 0.00269 0.441 AGTAATA +ACTAAYH DREME-1 chrM 7301 7307 + -2.39437 0.00269 0.441 ATTAATA +ACTAAYH DREME-1 chrM 7300 7306 - -2.39437 0.00269 0.441 ATTAATA +ACTAAYH DREME-1 chrM 7349 7355 + -2.39437 0.00269 0.441 CCTAATA +ACTAAYH DREME-1 chrM 7351 7357 - -2.39437 0.00269 0.441 ACTATTA +ACTAAYH DREME-1 chrM 7522 7528 - -2.39437 0.00269 0.441 TCTAATA +ACTAAYH DREME-1 chrM 8739 8745 + -2.39437 0.00269 0.441 ACTAGTA +ACTAAYH DREME-1 chrM 8738 8744 - -2.39437 0.00269 0.441 ACTAGTA +ACTAAYH DREME-1 chrM 8945 8951 - -2.39437 0.00269 0.441 ACTAGTA +ACTAAYH DREME-1 chrM 8982 8988 + -2.39437 0.00269 0.441 ACCAATA +ACTAAYH DREME-1 chrM 9613 9619 - -2.39437 0.00269 0.441 AGTAATA +ACTAAYH DREME-1 chrM 9656 9662 + -2.39437 0.00269 0.441 TCTAATA +ACTAAYH DREME-1 chrM 10055 10061 + -2.39437 0.00269 0.441 AGTAATA +ACTAAYH DREME-1 chrM 10103 10109 + -2.39437 0.00269 0.441 ACTACTA +ACTAAYH DREME-1 chrM 10246 10252 - -2.39437 0.00269 0.441 AATAATA +ACTAAYH DREME-1 chrM 10315 10321 - -2.39437 0.00269 0.441 ACTATTA +ACTAAYH DREME-1 chrM 10336 10342 - -2.39437 0.00269 0.441 ATTAATA +ACTAAYH DREME-1 chrM 10368 10374 - -2.39437 0.00269 0.441 ACTCATA +ACTAAYH DREME-1 chrM 10526 10532 + -2.39437 0.00269 0.441 ACTAGTA +ACTAAYH DREME-1 chrM 10525 10531 - -2.39437 0.00269 0.441 ACTAGTA +ACTAAYH DREME-1 chrM 10574 10580 + -2.39437 0.00269 0.441 AATAATA +ACTAAYH DREME-1 chrM 10657 10663 - -2.39437 0.00269 0.441 ACTAGTA +ACTAAYH DREME-1 chrM 10699 10705 - -2.39437 0.00269 0.441 ACTAGTA +ACTAAYH DREME-1 chrM 10788 10794 - -2.39437 0.00269 0.441 AGTAATA +ACTAAYH DREME-1 chrM 10858 10864 - -2.39437 0.00269 0.441 GCTAATA +ACTAAYH DREME-1 chrM 10954 10960 + -2.39437 0.00269 0.441 CCTAATA +ACTAAYH DREME-1 chrM 11873 11879 + -2.39437 0.00269 0.441 ACTATTA +ACTAAYH DREME-1 chrM 11958 11964 - -2.39437 0.00269 0.441 ACTAGTA +ACTAAYH DREME-1 chrM 12333 12339 + -2.39437 0.00269 0.441 AGTAATA +ACTAAYH DREME-1 chrM 12349 12355 + -2.39437 0.00269 0.441 ACTACTA +ACTAAYH DREME-1 chrM 12425 12431 + -2.39437 0.00269 0.441 ACTCATA +ACTAAYH DREME-1 chrM 12471 12477 - -2.39437 0.00269 0.441 ACTGATA +ACTAAYH DREME-1 chrM 12933 12939 + -2.39437 0.00269 0.441 ACAAATA +ACTAAYH DREME-1 chrM 12972 12978 + -2.39437 0.00269 0.441 ACTACTA +ACTAAYH DREME-1 chrM 13269 13275 + -2.39437 0.00269 0.441 ACTCATA +ACTAAYH DREME-1 chrM 13274 13280 - -2.39437 0.00269 0.441 ACTATTA +ACTAAYH DREME-1 chrM 13566 13572 - -2.39437 0.00269 0.441 AGTAATA +ACTAAYH DREME-1 chrM 14210 14216 + -2.39437 0.00269 0.441 ACTACTA +ACTAAYH DREME-1 chrM 14213 14219 + -2.39437 0.00269 0.441 ACTACTA +ACTAAYH DREME-1 chrM 14251 14257 + -2.39437 0.00269 0.441 ACCAATA +ACTAAYH DREME-1 chrM 14314 14320 + -2.39437 0.00269 0.441 ACTATTA +ACTAAYH DREME-1 chrM 14510 14516 + -2.39437 0.00269 0.441 ACTATTA +ACTAAYH DREME-1 chrM 14545 14551 + -2.39437 0.00269 0.441 AATAATA +ACTAAYH DREME-1 chrM 14773 14779 + -2.39437 0.00269 0.441 CCTAATA +ACTAAYH DREME-1 chrM 15627 15633 - -2.39437 0.00269 0.441 AGTAATA +ACTAAYH DREME-1 chrM 15838 15844 + -2.39437 0.00269 0.441 CCTAATA +ACTAAYH DREME-1 chrM 193 199 + -2.53521 0.0036 0.501 ACTTACT +ACTAAYH DREME-1 chrM 714 720 - -2.53521 0.0036 0.501 ACTCACT +ACTAAYH DREME-1 chrM 1860 1866 + -2.53521 0.0036 0.501 ATTAACT +ACTAAYH DREME-1 chrM 1870 1876 + -2.53521 0.0036 0.501 AATAACT +ACTAAYH DREME-1 chrM 2220 2226 + -2.53521 0.0036 0.501 ACTACCT +ACTAAYH DREME-1 chrM 2901 2907 + -2.53521 0.0036 0.501 AATAACT +ACTAAYH DREME-1 chrM 4154 4160 + -2.53521 0.0036 0.501 ACCAACT +ACTAAYH DREME-1 chrM 4283 4289 - -2.53521 0.0036 0.501 AGTAACT +ACTAAYH DREME-1 chrM 5099 5105 + -2.53521 0.0036 0.501 CCTAACT +ACTAAYH DREME-1 chrM 5156 5162 + -2.53521 0.0036 0.501 ACTATCT +ACTAAYH DREME-1 chrM 5555 5561 - -2.53521 0.0036 0.501 ACTTACT +ACTAAYH DREME-1 chrM 6142 6148 + -2.53521 0.0036 0.501 ACTGACT +ACTAAYH DREME-1 chrM 6678 6684 + -2.53521 0.0036 0.501 ACTTACT +ACTAAYH DREME-1 chrM 7169 7175 + -2.53521 0.0036 0.501 TCTAACT +ACTAAYH DREME-1 chrM 8304 8310 + -2.53521 0.0036 0.501 GCTAACT +ACTAAYH DREME-1 chrM 8456 8462 + -2.53521 0.0036 0.501 ACAAACT +ACTAAYH DREME-1 chrM 8817 8823 + -2.53521 0.0036 0.501 ACTATCT +ACTAAYH DREME-1 chrM 8949 8955 - -2.53521 0.0036 0.501 AATAACT +ACTAAYH DREME-1 chrM 9120 9126 + -2.53521 0.0036 0.501 ACTGACT +ACTAAYH DREME-1 chrM 9852 9858 + -2.53521 0.0036 0.501 ACTATCT +ACTAAYH DREME-1 chrM 10025 10031 + -2.53521 0.0036 0.501 ATTAACT +ACTAAYH DREME-1 chrM 10964 10970 + -2.53521 0.0036 0.501 ACTACCT +ACTAAYH DREME-1 chrM 11293 11299 + -2.53521 0.0036 0.501 ACTCACT +ACTAAYH DREME-1 chrM 11347 11353 + -2.53521 0.0036 0.501 ACTAGCT +ACTAAYH DREME-1 chrM 12226 12232 + -2.53521 0.0036 0.501 GCTAACT +ACTAAYH DREME-1 chrM 12516 12522 - -2.53521 0.0036 0.501 AATAACT +ACTAAYH DREME-1 chrM 13850 13856 + -2.53521 0.0036 0.501 ACTACCT +ACTAAYH DREME-1 chrM 13862 13868 + -2.53521 0.0036 0.501 ACAAACT +ACTAAYH DREME-1 chrM 14206 14212 + -2.53521 0.0036 0.501 AGTAACT +ACTAAYH DREME-1 chrM 15185 15191 + -2.53521 0.0036 0.501 ACAAACT +ACTAAYH DREME-1 chrM 15189 15195 + -2.53521 0.0036 0.501 ACTTACT +ACTAAYH DREME-1 chrM 15603 15609 + -2.53521 0.0036 0.501 ACAAACT +ACTAAYH DREME-1 chrM 15844 15850 + -2.53521 0.0036 0.501 ACCAACT +ACTAAYH DREME-1 chrM 15848 15854 + -2.53521 0.0036 0.501 ACTATCT +ACTAAYH DREME-1 chrM 21 27 + -2.74648 0.00452 0.505 ATTAACC +ACTAAYH DREME-1 chrM 381 387 + -2.74648 0.00452 0.505 CCTAACC +ACTAAYH DREME-1 chrM 529 535 + -2.74648 0.00452 0.505 GCTAACC +ACTAAYH DREME-1 chrM 547 553 + -2.74648 0.00452 0.505 ACCAACC +ACTAAYH DREME-1 chrM 823 829 + -2.74648 0.00452 0.505 ATTAACC +ACTAAYH DREME-1 chrM 873 879 - -2.74648 0.00452 0.505 ACCAACC +ACTAAYH DREME-1 chrM 910 916 + -2.74648 0.00452 0.505 ATTAACC +ACTAAYH DREME-1 chrM 978 984 + -2.74648 0.00452 0.505 ACTCACC +ACTAAYH DREME-1 chrM 1569 1575 - -2.74648 0.00452 0.505 ACTTACC +ACTAAYH DREME-1 chrM 1596 1602 + -2.74648 0.00452 0.505 ACGAACC +ACTAAYH DREME-1 chrM 1991 1997 + -2.74648 0.00452 0.505 ACAAACC +ACTAAYH DREME-1 chrM 2578 2584 + -2.74648 0.00452 0.505 CCTAACC +ACTAAYH DREME-1 chrM 2765 2771 + -2.74648 0.00452 0.505 ACAAACC +ACTAAYH DREME-1 chrM 3031 3037 - -2.74648 0.00452 0.505 ACGAACC +ACTAAYH DREME-1 chrM 3225 3231 - -2.74648 0.00452 0.505 ACAAACC +ACTAAYH DREME-1 chrM 3883 3889 + -2.74648 0.00452 0.505 ACCAACC +ACTAAYH DREME-1 chrM 4101 4107 + -2.74648 0.00452 0.505 TCTAACC +ACTAAYH DREME-1 chrM 4191 4197 + -2.74648 0.00452 0.505 ACTCACC +ACTAAYH DREME-1 chrM 4598 4604 + -2.74648 0.00452 0.505 TCTAACC +ACTAAYH DREME-1 chrM 4874 4880 + -2.74648 0.00452 0.505 ACTAGCC +ACTAAYH DREME-1 chrM 5237 5243 + -2.74648 0.00452 0.505 GCTAACC +ACTAAYH DREME-1 chrM 5839 5845 + -2.74648 0.00452 0.505 CCTAACC +ACTAAYH DREME-1 chrM 5931 5937 + -2.74648 0.00452 0.505 ACAAACC +ACTAAYH DREME-1 chrM 6335 6341 + -2.74648 0.00452 0.505 CCTAACC +ACTAAYH DREME-1 chrM 7228 7234 + -2.74648 0.00452 0.505 ACTACCC +ACTAAYH DREME-1 chrM 7781 7787 + -2.74648 0.00452 0.505 ACTATCC +ACTAAYH DREME-1 chrM 8315 8321 + -2.74648 0.00452 0.505 ATTAACC +ACTAAYH DREME-1 chrM 8508 8514 + -2.74648 0.00452 0.505 ACAAACC +ACTAAYH DREME-1 chrM 8721 8727 + -2.74648 0.00452 0.505 ACGAACC +ACTAAYH DREME-1 chrM 8805 8811 + -2.74648 0.00452 0.505 ACCAACC +ACTAAYH DREME-1 chrM 9003 9009 + -2.74648 0.00452 0.505 CCTAACC +ACTAAYH DREME-1 chrM 9076 9082 + -2.74648 0.00452 0.505 ATTAACC +ACTAAYH DREME-1 chrM 9124 9130 + -2.74648 0.00452 0.505 ACTATCC +ACTAAYH DREME-1 chrM 11548 11554 + -2.74648 0.00452 0.505 ACTATCC +ACTAAYH DREME-1 chrM 11852 11858 + -2.74648 0.00452 0.505 GCTAACC +ACTAAYH DREME-1 chrM 11876 11882 + -2.74648 0.00452 0.505 ATTAACC +ACTAAYH DREME-1 chrM 11905 11911 + -2.74648 0.00452 0.505 AGTAACC +ACTAAYH DREME-1 chrM 12013 12019 + -2.74648 0.00452 0.505 ACTCACC +ACTAAYH DREME-1 chrM 12336 12342 + -2.74648 0.00452 0.505 AATAACC +ACTAAYH DREME-1 chrM 12363 12369 + -2.74648 0.00452 0.505 CCTAACC +ACTAAYH DREME-1 chrM 13295 13301 + -2.74648 0.00452 0.505 ACCAACC +ACTAAYH DREME-1 chrM 13672 13678 + -2.74648 0.00452 0.505 AATAACC +ACTAAYH DREME-1 chrM 13854 13860 + -2.74648 0.00452 0.505 CCTAACC +ACTAAYH DREME-1 chrM 13998 14004 + -2.74648 0.00452 0.505 CCTAACC +ACTAAYH DREME-1 chrM 14124 14130 + -2.74648 0.00452 0.505 CCTAACC +ACTAAYH DREME-1 chrM 14384 14390 + -2.74648 0.00452 0.505 GCTAACC +ACTAAYH DREME-1 chrM 14401 14407 + -2.74648 0.00452 0.505 ACTCACC +ACTAAYH DREME-1 chrM 14624 14630 + -2.74648 0.00452 0.505 ACAAACC +ACTAAYH DREME-1 chrM 14786 14792 + -2.74648 0.00452 0.505 ATTAACC +ACTAAYH DREME-1 chrM 14910 14916 + -2.74648 0.00452 0.505 ACTCACC +ACTAAYH DREME-1 chrM 15193 15199 + -2.74648 0.00452 0.505 ACTATCC +ACTAAYH DREME-1 chrM 15631 15637 + -2.74648 0.00452 0.505 ACTATCC +ACTAAYH DREME-1 chrM 15748 15754 + -2.74648 0.00452 0.505 TCTAACC +ACTAAYH DREME-1 chrM 16066 16072 + -2.74648 0.00452 0.505 ACTCACC +ACTAAYH DREME-1 chrM 16281 16287 + -2.74648 0.00452 0.505 ACAAACC +ACTAAYH DREME-1 chrM 211 217 + -3.12676 0.00543 0.514 ATTAATT +ACTAAYH DREME-1 chrM 210 216 - -3.12676 0.00543 0.514 ATTAATT +ACTAAYH DREME-1 chrM 214 220 - -3.12676 0.00543 0.514 ATTAATT +ACTAAYH DREME-1 chrM 1961 1967 - -3.12676 0.00543 0.514 ACTATTT +ACTAAYH DREME-1 chrM 2188 2194 + -3.12676 0.00543 0.514 ACCAATT +ACTAAYH DREME-1 chrM 3771 3777 - -3.12676 0.00543 0.514 ACTTATT +ACTAAYH DREME-1 chrM 3923 3929 - -3.12676 0.00543 0.514 ACTAGTT +ACTAAYH DREME-1 chrM 4469 4475 - -3.12676 0.00543 0.514 ATTAATT +ACTAAYH DREME-1 chrM 4543 4549 + -3.12676 0.00543 0.514 ACTGATT +ACTAAYH DREME-1 chrM 5085 5091 + -3.12676 0.00543 0.514 ACTATTT +ACTAAYH DREME-1 chrM 6146 6152 + -3.12676 0.00543 0.514 ACTAGTT +ACTAAYH DREME-1 chrM 7087 7093 + -3.12676 0.00543 0.514 ACTGATT +ACTAAYH DREME-1 chrM 7304 7310 + -3.12676 0.00543 0.514 AATAATT +ACTAAYH DREME-1 chrM 8041 8047 + -3.12676 0.00543 0.514 AATAATT +ACTAAYH DREME-1 chrM 8221 8227 + -3.12676 0.00543 0.514 ATTAATT +ACTAAYH DREME-1 chrM 8220 8226 - -3.12676 0.00543 0.514 ATTAATT +ACTAAYH DREME-1 chrM 8795 8801 + -3.12676 0.00543 0.514 ACTCATT +ACTAAYH DREME-1 chrM 8946 8952 + -3.12676 0.00543 0.514 ACTAGTT +ACTAAYH DREME-1 chrM 8973 8979 + -3.12676 0.00543 0.514 ACTCATT +ACTAAYH DREME-1 chrM 9042 9048 + -3.12676 0.00543 0.514 CCTAATT +ACTAAYH DREME-1 chrM 9111 9117 + -3.12676 0.00543 0.514 TCTAATT +ACTAAYH DREME-1 chrM 9538 9544 - -3.12676 0.00543 0.514 CCTAATT +ACTAAYH DREME-1 chrM 9680 9686 + -3.12676 0.00543 0.514 AATAATT +ACTAAYH DREME-1 chrM 9953 9959 + -3.12676 0.00543 0.514 ACTATTT +ACTAAYH DREME-1 chrM 10004 10010 - -3.12676 0.00543 0.514 ACTATTT +ACTAAYH DREME-1 chrM 10029 10035 + -3.12676 0.00543 0.514 ACTAGTT +ACTAAYH DREME-1 chrM 10028 10034 - -3.12676 0.00543 0.514 ACTAGTT +ACTAAYH DREME-1 chrM 10109 10115 + -3.12676 0.00543 0.514 AATAATT +ACTAAYH DREME-1 chrM 10112 10118 - -3.12676 0.00543 0.514 AATAATT +ACTAAYH DREME-1 chrM 10402 10408 - -3.12676 0.00543 0.514 ACCAATT +ACTAAYH DREME-1 chrM 10438 10444 + -3.12676 0.00543 0.514 ACTCATT +ACTAAYH DREME-1 chrM 10852 10858 + -3.12676 0.00543 0.514 CCTAATT +ACTAAYH DREME-1 chrM 10855 10861 - -3.12676 0.00543 0.514 AATAATT +ACTAAYH DREME-1 chrM 10876 10882 + -3.12676 0.00543 0.514 ACTATTT +ACTAAYH DREME-1 chrM 11500 11506 + -3.12676 0.00543 0.514 ACTCATT +ACTAAYH DREME-1 chrM 12378 12384 + -3.12676 0.00543 0.514 CCTAATT +ACTAAYH DREME-1 chrM 12584 12590 + -3.12676 0.00543 0.514 ACTACTT +ACTAAYH DREME-1 chrM 12679 12685 - -3.12676 0.00543 0.514 ACTGATT +ACTAAYH DREME-1 chrM 12708 12714 + -3.12676 0.00543 0.514 CCTAATT +ACTAAYH DREME-1 chrM 13013 13019 - -3.12676 0.00543 0.514 CCTAATT +ACTAAYH DREME-1 chrM 13350 13356 + -3.12676 0.00543 0.514 ACTATTT +ACTAAYH DREME-1 chrM 13611 13617 + -3.12676 0.00543 0.514 AATAATT +ACTAAYH DREME-1 chrM 14296 14302 - -3.12676 0.00543 0.514 AATAATT +ACTAAYH DREME-1 chrM 14782 14788 + -3.12676 0.00543 0.514 ATTAATT +ACTAAYH DREME-1 chrM 14781 14787 - -3.12676 0.00543 0.514 ATTAATT +ACTAAYH DREME-1 chrM 14793 14799 + -3.12676 0.00543 0.514 ACTCATT +ACTAAYH DREME-1 chrM 15178 15184 + -3.12676 0.00543 0.514 AGTAATT +ACTAAYH DREME-1 chrM 15856 15862 + -3.12676 0.00543 0.514 CCTAATT +ACTAAYH DREME-1 chrM 16003 16009 + -3.12676 0.00543 0.514 TCTAATT +ACTAAYH DREME-1 chrM 1074 1080 - -3.33803 0.00635 0.514 TCTAATC +ACTAAYH DREME-1 chrM 2270 2276 + -3.33803 0.00635 0.514 ACCAATC +ACTAAYH DREME-1 chrM 3081 3087 + -3.33803 0.00635 0.514 AGTAATC +ACTAAYH DREME-1 chrM 3345 3351 + -3.33803 0.00635 0.514 TCTAATC +ACTAAYH DREME-1 chrM 3824 3830 - -3.33803 0.00635 0.514 AGTAATC +ACTAAYH DREME-1 chrM 3924 3930 + -3.33803 0.00635 0.514 ACTAGTC +ACTAAYH DREME-1 chrM 4470 4476 + -3.33803 0.00635 0.514 ATTAATC +ACTAAYH DREME-1 chrM 4520 4526 + -3.33803 0.00635 0.514 ACTCATC +ACTAAYH DREME-1 chrM 4737 4743 + -3.33803 0.00635 0.514 ACCAATC +ACTAAYH DREME-1 chrM 4747 4753 + -3.33803 0.00635 0.514 ACTCATC +ACTAAYH DREME-1 chrM 4757 4763 + -3.33803 0.00635 0.514 AATAATC +ACTAAYH DREME-1 chrM 5120 5126 + -3.33803 0.00635 0.514 ACTACTC +ACTAAYH DREME-1 chrM 5354 5360 + -3.33803 0.00635 0.514 CCTAATC +ACTAAYH DREME-1 chrM 5378 5384 + -3.33803 0.00635 0.514 ACTACTC +ACTAAYH DREME-1 chrM 5453 5459 + -3.33803 0.00635 0.514 ACTCATC +ACTAAYH DREME-1 chrM 5501 5507 + -3.33803 0.00635 0.514 AATAATC +ACTAAYH DREME-1 chrM 5707 5713 + -3.33803 0.00635 0.514 CCTAATC +ACTAAYH DREME-1 chrM 5921 5927 + -3.33803 0.00635 0.514 ACTATTC +ACTAAYH DREME-1 chrM 6095 6101 + -3.33803 0.00635 0.514 AATAATC +ACTAAYH DREME-1 chrM 6145 6151 - -3.33803 0.00635 0.514 ACTAGTC +ACTAAYH DREME-1 chrM 6158 6164 + -3.33803 0.00635 0.514 AATAATC +ACTAAYH DREME-1 chrM 6307 6313 + -3.33803 0.00635 0.514 ACTACTC +ACTAAYH DREME-1 chrM 6467 6473 + -3.33803 0.00635 0.514 CCTAATC +ACTAAYH DREME-1 chrM 6659 6665 + -3.33803 0.00635 0.514 AATAATC +ACTAAYH DREME-1 chrM 6682 6688 + -3.33803 0.00635 0.514 ACTACTC +ACTAAYH DREME-1 chrM 6982 6988 + -3.33803 0.00635 0.514 ACTCATC +ACTAAYH DREME-1 chrM 8007 8013 - -3.33803 0.00635 0.514 ACTACTC +ACTAAYH DREME-1 chrM 8422 8428 + -3.33803 0.00635 0.514 ACTATTC +ACTAAYH DREME-1 chrM 8589 8595 + -3.33803 0.00635 0.514 ACTGATC +ACTAAYH DREME-1 chrM 9093 9099 + -3.33803 0.00635 0.514 ACTTATC +ACTAAYH DREME-1 chrM 9214 9220 + -3.33803 0.00635 0.514 ACCAATC +ACTAAYH DREME-1 chrM 10079 10085 + -3.33803 0.00635 0.514 AATAATC +ACTAAYH DREME-1 chrM 10337 10343 + -3.33803 0.00635 0.514 ATTAATC +ACTAAYH DREME-1 chrM 10387 10393 - -3.33803 0.00635 0.514 TCTAATC +ACTAAYH DREME-1 chrM 10658 10664 + -3.33803 0.00635 0.514 ACTAGTC +ACTAAYH DREME-1 chrM 10700 10706 + -3.33803 0.00635 0.514 ACTAGTC +ACTAAYH DREME-1 chrM 11007 11013 + -3.33803 0.00635 0.514 ACTTATC +ACTAAYH DREME-1 chrM 11065 11071 + -3.33803 0.00635 0.514 ACAAATC +ACTAAYH DREME-1 chrM 11134 11140 + -3.33803 0.00635 0.514 ACTTATC +ACTAAYH DREME-1 chrM 11239 11245 + -3.33803 0.00635 0.514 ACTCATC +ACTAAYH DREME-1 chrM 11290 11296 + -3.33803 0.00635 0.514 ACTACTC +ACTAAYH DREME-1 chrM 11734 11740 + -3.33803 0.00635 0.514 ACTATTC +ACTAAYH DREME-1 chrM 11959 11965 + -3.33803 0.00635 0.514 ACTAGTC +ACTAAYH DREME-1 chrM 12676 12682 + -3.33803 0.00635 0.514 ATTAATC +ACTAAYH DREME-1 chrM 12699 12705 + -3.33803 0.00635 0.514 ACTCATC +ACTAAYH DREME-1 chrM 12952 12958 + -3.33803 0.00635 0.514 GCTAATC +ACTAAYH DREME-1 chrM 13113 13119 + -3.33803 0.00635 0.514 ACTCATC +ACTAAYH DREME-1 chrM 13419 13425 + -3.33803 0.00635 0.514 ACTACTC +ACTAAYH DREME-1 chrM 14118 14124 + -3.33803 0.00635 0.514 ACTCATC +ACTAAYH DREME-1 chrM 14136 14142 + -3.33803 0.00635 0.514 CCTAATC +ACTAAYH DREME-1 chrM 14366 14372 + -3.33803 0.00635 0.514 ACCAATC +ACTAAYH DREME-1 chrM 14890 14896 + -3.33803 0.00635 0.514 ACTATTC +ACTAAYH DREME-1 chrM 14907 14913 + -3.33803 0.00635 0.514 ACTACTC +ACTAAYH DREME-1 chrM 15475 15481 + -3.33803 0.00635 0.514 ACTATTC +ACTAAYH DREME-1 chrM 15652 15658 + -3.33803 0.00635 0.514 AATAATC +ACTAAYH DREME-1 chrM 15832 15838 + -3.33803 0.00635 0.514 CCTAATC +ACTAAYH DREME-1 chrM 15951 15957 + -3.33803 0.00635 0.514 ACAAATC +ACTAAYH DREME-1 chrM 16013 16019 + -3.33803 0.00635 0.514 ACTATTC +ACTAAYH DREME-1 chrM 197 203 + -13.9718 0.00647 0.521 ACTAAAG +ACTAAYH DREME-1 chrM 8713 8719 + -13.9718 0.00647 0.521 ACTAAAG +ACTAAYH DREME-1 chrM 28 34 + -14.7042 0.00739 0.559 ACTCACG +ACTAAYH DREME-1 chrM 1322 1328 - -14.7042 0.00739 0.559 CCTAACG +ACTAAYH DREME-1 chrM 2910 2916 + -14.7042 0.00739 0.559 ACCAACG +ACTAAYH DREME-1 chrM 3035 3041 - -14.7042 0.00739 0.559 ACAAACG +ACTAAYH DREME-1 chrM 5106 5112 + -14.7042 0.00739 0.559 ACTACCG +ACTAAYH DREME-1 chrM 7218 7224 - -14.7042 0.00739 0.559 AGTAACG +ACTAAYH DREME-1 chrM 8381 8387 + -14.7042 0.00739 0.559 ACTACCG +ACTAAYH DREME-1 chrM 10580 10586 + -14.7042 0.00739 0.559 ACTATCG +ACTAAYH DREME-1 chrM 11760 11766 + -14.7042 0.00739 0.559 ACGAACG +ACTAAYH DREME-1 chrM 13546 13552 + -14.7042 0.00739 0.559 ACAAACG +ACTAAYH DREME-1 chrM 13663 13669 + -14.7042 0.00739 0.559 ATTAACG +ACTAAYH DREME-1 chrM 57 63 - -15.0563 0.00922 0.559 ACGAAAA +ACTAAYH DREME-1 chrM 284 290 + -15.0563 0.00922 0.559 ACAAAAA +ACTAAYH DREME-1 chrM 331 337 + -15.0563 0.00922 0.559 ACTTAAA +ACTAAYH DREME-1 chrM 361 367 + -15.0563 0.00922 0.559 ACAAAGA +ACTAAYH DREME-1 chrM 608 614 + -15.0563 0.00922 0.559 ACTGAAA +ACTAAYH DREME-1 chrM 682 688 + -15.0563 0.00922 0.559 AGTAAGA +ACTAAYH DREME-1 chrM 946 952 - -15.0563 0.00922 0.559 TCTAAAA +ACTAAYH DREME-1 chrM 972 978 + -15.0563 0.00922 0.559 GCTAAAA +ACTAAYH DREME-1 chrM 1019 1025 + -15.0563 0.00922 0.559 ACTACGA +ACTAAYH DREME-1 chrM 1057 1063 + -15.0563 0.00922 0.559 GCTAAGA +ACTAAYH DREME-1 chrM 1142 1148 + -15.0563 0.00922 0.559 ACTACGA +ACTAAYH DREME-1 chrM 1162 1168 + -15.0563 0.00922 0.559 ACTCAAA +ACTAAYH DREME-1 chrM 1384 1390 + -15.0563 0.00922 0.559 ACTACGA +ACTAAYH DREME-1 chrM 1864 1870 + -15.0563 0.00922 0.559 ACTAGAA +ACTAAYH DREME-1 chrM 1894 1900 + -15.0563 0.00922 0.559 GCTAAGA +ACTAAYH DREME-1 chrM 1922 1928 + -15.0563 0.00922 0.559 CCTAAGA +ACTAAYH DREME-1 chrM 1932 1938 + -15.0563 0.00922 0.559 GCTAAAA +ACTAAYH DREME-1 chrM 2124 2130 + -15.0563 0.00922 0.559 ACTAGGA +ACTAAYH DREME-1 chrM 2148 2154 + -15.0563 0.00922 0.559 AGTAAAA +ACTAAYH DREME-1 chrM 2175 2181 + -15.0563 0.00922 0.559 CCTAAAA +ACTAAYH DREME-1 chrM 2192 2198 + -15.0563 0.00922 0.559 ATTAAGA +ACTAAYH DREME-1 chrM 2224 2230 + -15.0563 0.00922 0.559 CCTAAAA +ACTAAYH DREME-1 chrM 2350 2356 + -15.0563 0.00922 0.559 ATTAAAA +ACTAAYH DREME-1 chrM 2463 2469 + -15.0563 0.00922 0.559 AGTAAAA +ACTAAYH DREME-1 chrM 2500 2506 + -15.0563 0.00922 0.559 ACCAAAA +ACTAAYH DREME-1 chrM 2658 2664 - -15.0563 0.00922 0.559 AGTAAGA +ACTAAYH DREME-1 chrM 2798 2804 + -15.0563 0.00922 0.559 ATTAAAA +ACTAAYH DREME-1 chrM 2855 2861 + -15.0563 0.00922 0.559 GCTAAGA +ACTAAYH DREME-1 chrM 3065 3071 - -15.0563 0.00922 0.559 ACTCAGA +ACTAAYH DREME-1 chrM 3262 3268 + -15.0563 0.00922 0.559 ACTTAAA +ACTAAYH DREME-1 chrM 3378 3384 + -15.0563 0.00922 0.559 ACGAAAA +ACTAAYH DREME-1 chrM 3441 3447 + -15.0563 0.00922 0.559 ACTACAA +ACTAAYH DREME-1 chrM 3486 3492 + -15.0563 0.00922 0.559 CCTAAAA +ACTAAYH DREME-1 chrM 3558 3564 + -15.0563 0.00922 0.559 ACTATGA +ACTAAYH DREME-1 chrM 3677 3683 + -15.0563 0.00922 0.559 ACTCAAA +ACTAAYH DREME-1 chrM 4021 4027 + -15.0563 0.00922 0.559 ACTACAA +ACTAAYH DREME-1 chrM 4087 4093 + -15.0563 0.00922 0.559 ACCAAGA +ACTAAYH DREME-1 chrM 4259 4265 + -15.0563 0.00922 0.559 CCTAAGA +ACTAAYH DREME-1 chrM 4334 4340 + -15.0563 0.00922 0.559 ACTATGA +ACTAAYH DREME-1 chrM 4586 4592 - -15.0563 0.00922 0.559 AATAAAA +ACTAAYH DREME-1 chrM 4602 4608 + -15.0563 0.00922 0.559 ACCAAAA +ACTAAYH DREME-1 chrM 4778 4784 + -15.0563 0.00922 0.559 AATAAAA +ACTAAYH DREME-1 chrM 4784 4790 + -15.0563 0.00922 0.559 ACTAGGA +ACTAAYH DREME-1 chrM 4807 4813 - -15.0563 0.00922 0.559 ACTCAGA +ACTAAYH DREME-1 chrM 4868 4874 + -15.0563 0.00922 0.559 ACAAAAA +ACTAAYH DREME-1 chrM 5002 5008 - -15.0563 0.00922 0.559 GCTAAGA +ACTAAYH DREME-1 chrM 5075 5081 - -15.0563 0.00922 0.559 ATTAAGA +ACTAAYH DREME-1 chrM 5128 5134 + -15.0563 0.00922 0.559 ACTTAAA +ACTAAYH DREME-1 chrM 5280 5286 + -15.0563 0.00922 0.559 ACAAAAA +ACTAAYH DREME-1 chrM 5405 5411 + -15.0563 0.00922 0.559 AATAAAA +ACTAAYH DREME-1 chrM 5533 5539 + -15.0563 0.00922 0.559 ACCAAGA +ACTAAYH DREME-1 chrM 5670 5676 + -15.0563 0.00922 0.559 ACTTAAA +ACTAAYH DREME-1 chrM 5938 5944 + -15.0563 0.00922 0.559 ACAAAGA +ACTAAYH DREME-1 chrM 6106 6112 - -15.0563 0.00922 0.559 ACTATGA +ACTAAYH DREME-1 chrM 6376 6382 - -15.0563 0.00922 0.559 CCTAAGA +ACTAAYH DREME-1 chrM 6451 6457 - -15.0563 0.00922 0.559 ACGAAGA +ACTAAYH DREME-1 chrM 7445 7451 + -15.0563 0.00922 0.559 ACAAAAA +ACTAAYH DREME-1 chrM 7581 7587 - -15.0563 0.00922 0.559 ATTAAGA +ACTAAYH DREME-1 chrM 7692 7698 - -15.0563 0.00922 0.559 ACTAGGA +ACTAAYH DREME-1 chrM 7800 7806 - -15.0563 0.00922 0.559 ACTAGGA +ACTAAYH DREME-1 chrM 8230 8236 + -15.0563 0.00922 0.559 CCTAAAA +ACTAAYH DREME-1 chrM 8323 8329 - -15.0563 0.00922 0.559 ACTTAAA +ACTAAYH DREME-1 chrM 8335 8341 + -15.0563 0.00922 0.559 ATTAAGA +ACTAAYH DREME-1 chrM 8494 8500 + -15.0563 0.00922 0.559 AATAAAA +ACTAAYH DREME-1 chrM 8521 8527 + -15.0563 0.00922 0.559 ACCAAAA +ACTAAYH DREME-1 chrM 8531 8537 + -15.0563 0.00922 0.559 ACGAAAA +ACTAAYH DREME-1 chrM 8757 8763 - -15.0563 0.00922 0.559 AATAAAA +ACTAAYH DREME-1 chrM 8881 8887 + -15.0563 0.00922 0.559 TCTAAGA +ACTAAYH DREME-1 chrM 8887 8893 + -15.0563 0.00922 0.559 ATTAAAA +ACTAAYH DREME-1 chrM 9173 9179 - -15.0563 0.00922 0.559 ACTAGAA +ACTAAYH DREME-1 chrM 9236 9242 + -15.0563 0.00922 0.559 AGTAAAA +ACTAAYH DREME-1 chrM 9706 9712 - -15.0563 0.00922 0.559 AGTAAAA +ACTAAYH DREME-1 chrM 9796 9802 - -15.0563 0.00922 0.559 ACAAAAA +ACTAAYH DREME-1 chrM 9987 9993 - -15.0563 0.00922 0.559 AGTAAGA +ACTAAYH DREME-1 chrM 10075 10081 - -15.0563 0.00922 0.559 ATTAAAA +ACTAAYH DREME-1 chrM 10243 10249 - -15.0563 0.00922 0.559 AATAAGA +ACTAAYH DREME-1 chrM 10333 10339 - -15.0563 0.00922 0.559 AATAAGA +ACTAAYH DREME-1 chrM 10376 10382 + -15.0563 0.00922 0.559 ACTACAA +ACTAAYH DREME-1 chrM 10379 10385 + -15.0563 0.00922 0.559 ACAAAAA +ACTAAYH DREME-1 chrM 10630 10636 - -15.0563 0.00922 0.559 GCTAAGA +ACTAAYH DREME-1 chrM 10762 10768 + -15.0563 0.00922 0.559 GCTAAAA +ACTAAYH DREME-1 chrM 11029 11035 + -15.0563 0.00922 0.559 ACGAAAA +ACTAAYH DREME-1 chrM 11367 11373 - -15.0563 0.00922 0.559 ACTATAA +ACTAAYH DREME-1 chrM 11602 11608 + -15.0563 0.00922 0.559 CCTAAAA +ACTAAYH DREME-1 chrM 11646 11652 - -15.0563 0.00922 0.559 ACTACGA +ACTAAYH DREME-1 chrM 11751 11757 + -15.0563 0.00922 0.559 ACTCAAA +ACTAAYH DREME-1 chrM 11757 11763 + -15.0563 0.00922 0.559 ACTACGA +ACTAAYH DREME-1 chrM 12152 12158 + -15.0563 0.00922 0.559 ACCAAAA +ACTAAYH DREME-1 chrM 12295 12301 - -15.0563 0.00922 0.559 CCTAAGA +ACTAAYH DREME-1 chrM 12311 12317 - -15.0563 0.00922 0.559 ACCAAAA +ACTAAYH DREME-1 chrM 12327 12333 + -15.0563 0.00922 0.559 AATAAAA +ACTAAYH DREME-1 chrM 12352 12358 + -15.0563 0.00922 0.559 ACTATAA +ACTAAYH DREME-1 chrM 12416 12422 + -15.0563 0.00922 0.559 ACAAAAA +ACTAAYH DREME-1 chrM 12509 12515 + -15.0563 0.00922 0.559 ACCAAGA +ACTAAYH DREME-1 chrM 12662 12668 + -15.0563 0.00922 0.559 ACTCAGA +ACTAAYH DREME-1 chrM 13109 13115 - -15.0563 0.00922 0.559 AGTAAGA +ACTAAYH DREME-1 chrM 13263 13269 + -15.0563 0.00922 0.559 ACTAGGA +ACTAAYH DREME-1 chrM 13422 13428 + -15.0563 0.00922 0.559 ACTCAAA +ACTAAYH DREME-1 chrM 13667 13673 + -15.0563 0.00922 0.559 ACGAAAA +ACTAAYH DREME-1 chrM 13791 13797 + -15.0563 0.00922 0.559 CCTAAAA +ACTAAYH DREME-1 chrM 13866 13872 + -15.0563 0.00922 0.559 ACTTAAA +ACTAAYH DREME-1 chrM 13872 13878 + -15.0563 0.00922 0.559 AATAAAA +ACTAAYH DREME-1 chrM 13894 13900 - -15.0563 0.00922 0.559 AATAAAA +ACTAAYH DREME-1 chrM 14007 14013 + -15.0563 0.00922 0.559 ACTAGAA +ACTAAYH DREME-1 chrM 14023 14029 + -15.0563 0.00922 0.559 CCTAAAA +ACTAAYH DREME-1 chrM 14405 14411 + -15.0563 0.00922 0.559 ACCAAGA +ACTAAYH DREME-1 chrM 14501 14507 + -15.0563 0.00922 0.559 ATTAAAA +ACTAAYH DREME-1 chrM 14687 14693 + -15.0563 0.00922 0.559 ACTACAA +ACTAAYH DREME-1 chrM 14732 14738 + -15.0563 0.00922 0.559 ACTACAA +ACTAAYH DREME-1 chrM 14776 14782 + -15.0563 0.00922 0.559 AATAAAA +ACTAAYH DREME-1 chrM 15072 15078 + -15.0563 0.00922 0.559 ACTCAGA +ACTAAYH DREME-1 chrM 15607 15613 + -15.0563 0.00922 0.559 ACTAGGA +ACTAAYH DREME-1 chrM 15874 15880 + -15.0563 0.00922 0.559 ACTCAAA +ACTAAYH DREME-1 chrM 15892 15898 - -15.0563 0.00922 0.559 ACTACAA +ACTAAYH DREME-1 chrM 15995 16001 + -15.0563 0.00922 0.559 GCTAAGA +ACTAAYH DREME-1 chrM 16269 16275 + -15.0563 0.00922 0.559 ACTAGGA +ACTAAYH DREME-1 chrM 16553 16559 + -15.0563 0.00922 0.559 AATAAGA
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/fimo_output_test3.xml Thu May 17 14:11:00 2018 -0400 @@ -0,0 +1,56 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Begin document body --> +<fimo version="4.12.0" release="Tue Jun 27 16:22:50 2017 -0700"> + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation= xmlns:fimo="http://noble.gs.washington.edu/schema/fimo" +> +<command-line>fimo -o ./fimo_test4_out --thresh 0.01 --bgfile --uniform-- --max-stored-scores 100000 --motif ACTAAYH --motif-pseudo 0.1 dreme_fimo_input_1.xml hsa_chrM.fa</command-line> +<settings> +<setting name="output directory">./fimo_test4_out</setting> +<setting name="MEME file name">dreme_fimo_input_1.xml</setting> +<setting name="sequence file name">hsa_chrM.fa</setting> +<setting name="background file name">--uniform--</setting> +<setting name="allow clobber">false</setting> +<setting name="compute q-values">true</setting> +<setting name="parse genomic coord.">false</setting> +<setting name="text only">false</setting> +<setting name="scan both strands">true</setting> +<setting name="output threshold">0.01</setting> +<setting name="threshold type">p-value</setting> +<setting name="max stored scores">100000</setting> +<setting name="pseudocount">0.1</setting> +<setting name="verbosity">2</setting> +<setting name="selected motif">ACTAAYH</setting> +</settings> +<sequence-data num-sequences="1" num-residues="16569" /> +<alphabet name="DNA" like="dna"> +<letter id="A" symbol="A" complement="T" name="Adenine" colour="CC0000"/> +<letter id="C" symbol="C" complement="G" name="Cytosine" colour="0000CC"/> +<letter id="G" symbol="G" complement="C" name="Guanine" colour="FFB300"/> +<letter id="T" symbol="T" aliases="U" complement="A" name="Thymine" colour="008000"/> +<letter id="N" symbol="N" aliases="X." equals="ACGT" name="Any base"/> +<letter id="V" symbol="V" equals="ACG" name="Not T"/> +<letter id="H" symbol="H" equals="ACT" name="Not G"/> +<letter id="D" symbol="D" equals="AGT" name="Not C"/> +<letter id="B" symbol="B" equals="CGT" name="Not A"/> +<letter id="M" symbol="M" equals="AC" name="Amino"/> +<letter id="R" symbol="R" equals="AG" name="Purine"/> +<letter id="W" symbol="W" equals="AT" name="Weak"/> +<letter id="S" symbol="S" equals="CG" name="Strong"/> +<letter id="Y" symbol="Y" equals="CT" name="Pyrimidine"/> +<letter id="K" symbol="K" equals="GT" name="Keto"/> +</alphabet> +<motif name="ACTAAYH" alt="DREME-1" width="7" best-possible-match="ACTAACA"/> +<motif name="YTAACA" alt="DREME-2" width="6" best-possible-match="TTAACA"/> +<motif name="TCTGT" alt="DREME-3" width="5" best-possible-match="TCTGT"/> +<motif name="SCCAGG" alt="DREME-4" width="6" best-possible-match="CCCAGG"/> +<motif name="CCAGCAY" alt="DREME-5" width="7" best-possible-match="CCAGCAC"/> +<motif name="GMATGT" alt="DREME-6" width="6" best-possible-match="GAATGT"/> +<background source="--uniform--"> +<value letter="A">0.250</value> +<value letter="C">0.250</value> +<value letter="G">0.250</value> +<value letter="T">0.250</value> +</background> +<cisml-file>cisml.xml</cisml-file> +</fimo>
--- a/test-data/fimo_output_txt_1.txt Wed Apr 25 12:12:47 2018 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,100 +0,0 @@ -#pattern name sequence name start stop strand score p-value q-value matched sequence -1 phiX174 1388 1398 + 29.4024 6.36e-11 1.25e-09 AATATCTATAA -1 phiX174 847 857 + 29.122 7.02e-11 1.25e-09 AATGTCTAAAG -1 phiX174 2301 2311 + 27.6463 1.08e-10 1.29e-09 AGGTTATAACG -1 phiX174 5063 5073 + 25.5366 2.73e-10 2.25e-09 AGGAGCTAAAG -1 phiX174 989 999 + 25.3049 3.15e-10 2.25e-09 TGAGGATAAAT -1 phiX174 4713 4723 + 23.622 7.74e-10 3.48e-09 GACTGCTATCA -1 phiX174 5048 5058 + 23.3293 8.51e-10 3.48e-09 TGCTGCTAAAG -1 phiX174 855 865 + 23.3049 8.64e-10 3.48e-09 AAGGTAAAAAA -1 phiX174 3155 3165 + 23.0366 9.76e-10 3.48e-09 TATGGCTAAAG -1 phiX174 5009 5019 + 23.0366 9.76e-10 3.48e-09 TGTGGCTAAAT -1 phiX174 814 824 + 22.5854 1.28e-09 4.14e-09 TGCGTCAAAAA -1 phiX174 2832 2842 + 22.3415 1.42e-09 4.23e-09 TTGGTCTAACT -1 phiX174 3830 3840 + 21.8293 1.7e-09 4.68e-09 TATTGATAAAG -1 phiX174 3560 3570 + 21.5976 1.89e-09 4.82e-09 TGCGTCTATTA -1 phiX174 2882 2892 + 21.1951 2.29e-09 5.46e-09 AGGTTATTAAA -1 phiX174 4453 4463 + 20.8902 2.58e-09 5.75e-09 AAGGTATTAAG -1 phiX174 2493 2503 + 20.3415 3.06e-09 5.79e-09 GACACCTAAAG -1 phiX174 4104 4114 + 20.3171 3.08e-09 5.79e-09 GGCTTCCATAA -1 phiX174 4955 4965 + 20.3171 3.08e-09 5.79e-09 TGATGCTAAAG -1 phiX174 1885 1895 + 19.9268 3.61e-09 6.45e-09 TGCGACTAAAG -1 phiX174 3376 3386 + 19.7683 3.81e-09 6.48e-09 AGAATCAAAAA -1 phiX174 52 62 + 19.5732 4.06e-09 6.58e-09 TGAGTCGAAAA -1 phiX174 1390 1400 + 19.378 4.26e-09 6.61e-09 TATCTATAACA -1 phiX174 2017 2027 + 19.0854 4.6e-09 6.85e-09 TTCGTCTAAGA -1 phiX174 1000 1010 + 18.878 4.88e-09 6.97e-09 TATGTCTAATA -1 phiX174 1555 1565 + 18.439 5.58e-09 7.37e-09 GACTTCTACCA -1 phiX174 4430 4440 + 18.4268 5.62e-09 7.37e-09 TGAGTATAATT -1 phiX174 1927 1937 + 18.2927 5.82e-09 7.37e-09 GACTTATACCG -1 phiX174 2981 2991 + 18.0732 6.13e-09 7.37e-09 CATGTCTAAAT -1 phiX174 4203 4213 + 17.9268 6.34e-09 7.37e-09 GACGGCCATAA -1 phiX174 1669 1679 + 17.8659 6.4e-09 7.37e-09 TGGAGGTAAAA -1 phiX174 3260 3270 + 17.5 7.01e-09 7.82e-09 CGCTGATAAAG -1 phiX174 3047 3057 + 17.2805 7.4e-09 7.85e-09 TACCGATAACA -1 phiX174 4176 4186 + 17.1829 7.6e-09 7.85e-09 GAGTTCGATAA -1 phiX174 4118 4128 + 17.1341 7.7e-09 7.85e-09 GATGGATAACC -1 phiX174 5370 5380 + 16.9878 8.03e-09 7.87e-09 GGCGTATCCAA -1 phiX174 1242 1252 + 16.5122 8.94e-09 7.87e-09 AGTGGATTAAG -1 phiX174 2583 2593 + 16.5122 8.94e-09 7.87e-09 TACATCTGTCA -1 phiX174 698 708 + 16.4146 9.13e-09 7.87e-09 TACGGAAAACA -1 phiX174 2299 2309 + 16.3537 9.26e-09 7.87e-09 TGAGGTTATAA -1 phiX174 4189 4199 + 16.1707 9.69e-09 7.87e-09 GTGATATGTAT -1 phiX174 275 285 + 16.0976 9.85e-09 7.87e-09 GGTTTAGATAT -1 phiX174 1801 1811 + 16.0366 1e-08 7.87e-09 GACCTATAAAC -1 phiX174 1386 1396 + 15.9268 1.03e-08 7.87e-09 TGAATATCTAT -1 phiX174 1303 1313 + 15.9024 1.03e-08 7.87e-09 TGGTTATATTG -1 phiX174 3772 3782 + 15.878 1.04e-08 7.87e-09 AGGATATTTCT -1 phiX174 1288 1298 + 15.8659 1.04e-08 7.87e-09 GACTGTTAACA -1 phiX174 2577 2587 + 15.7683 1.08e-08 7.87e-09 GATGGATACAT -1 phiX174 937 947 + 15.7561 1.08e-08 7.87e-09 TTGGTATGTAG -1 phiX174 904 914 + 15.6585 1.11e-08 7.93e-09 AGGTACTAAAG -1 phiX174 2279 2289 + 15.5854 1.13e-08 7.93e-09 TCGTGATAAAA -1 phiX174 3164 3174 + 15.5 1.16e-08 7.98e-09 AGCTGGTAAAG -1 phiX174 24 34 + 15.3293 1.23e-08 8.24e-09 AGAAGTTAACA -1 phiX174 838 848 + 15.2561 1.27e-08 8.24e-09 GAGTGATGTAA -1 phiX174 853 863 + 15.2561 1.27e-08 8.24e-09 TAAAGGTAAAA -1 phiX174 1984 1994 + 15.0244 1.36e-08 8.68e-09 AATTTCTATGA -1 phiX174 1 11 + 14.8293 1.46e-08 9.05e-09 GAGTTTTATCG -1 phiX174 4307 4317 + 14.7927 1.47e-08 9.05e-09 TATTAATAACA -1 phiX174 4303 4313 + 14.6585 1.52e-08 9.19e-09 TTGATATTAAT -1 phiX174 5033 5043 + 14.561 1.58e-08 9.41e-09 GTCAGATATGG -1 phiX174 2579 2589 + 14.2927 1.73e-08 1.01e-08 TGGATACATCT -1 phiX174 322 332 + 14.1951 1.82e-08 1.05e-08 GACATTTTAAA -1 phiX174 5001 5011 + 13.8902 2.09e-08 1.19e-08 GGTTTCTATGT -1 phiX174 4217 4227 + 13.8171 2.15e-08 1.2e-08 TGCTTCTGACG -1 phiX174 4262 4272 + 13.7805 2.18e-08 1.2e-08 AATGGATGAAT -1 phiX174 3569 3579 + 13.7073 2.26e-08 1.22e-08 TATGGAAAACA -1 phiX174 194 204 + 13.6829 2.29e-08 1.22e-08 ATCAACTAACG -1 phiX174 131 141 + 13.4756 2.49e-08 1.31e-08 AAATGAGAAAA -1 phiX174 1491 1501 + 13.4024 2.55e-08 1.32e-08 GCCATCTCAAA -1 phiX174 434 444 + 13.2805 2.67e-08 1.36e-08 GGCCTCTATTA -1 phiX174 4565 4575 + 13.2439 2.73e-08 1.36e-08 TTGGTTTATCG -1 phiX174 102 112 + 13.2195 2.75e-08 1.36e-08 GAATTAAATCG -1 phiX174 903 913 + 13.1463 2.82e-08 1.38e-08 GAGGTACTAAA -1 phiX174 4748 4758 + 12.9756 3.01e-08 1.45e-08 TACAGCTAATG -1 phiX174 2622 2632 + 12.8659 3.16e-08 1.5e-08 TGCTGATATTG -1 phiX174 467 477 + 12.7317 3.35e-08 1.57e-08 TTTGGATTTAA -1 phiX174 4033 4043 + 12.6829 3.44e-08 1.58e-08 AGCGTATCGAG -1 phiX174 1348 1358 + 12.6707 3.46e-08 1.58e-08 TACCAATAAAA -1 phiX174 239 249 + 12.5732 3.62e-08 1.64e-08 AGTGGCTTAAT -1 phiX174 500 510 + 12.4634 3.84e-08 1.71e-08 GACGAGTAACA -1 phiX174 3001 3011 + 12.4146 3.93e-08 1.73e-08 GCGGTCAAAAA -1 phiX174 3776 3786 + 12.378 3.98e-08 1.73e-08 TATTTCTAATG -1 phiX174 2026 2036 + 12.3293 4.06e-08 1.75e-08 GAAGTTTAAGA -1 phiX174 4237 4247 + 12.3049 4.12e-08 1.75e-08 AGTTTGTATCT -1 phiX174 803 813 + 12.2439 4.24e-08 1.78e-08 AGAAGAAAACG -1 phiX174 3770 3780 + 12.1829 4.35e-08 1.81e-08 AAAGGATATTT -1 phiX174 3429 3439 + 12.122 4.45e-08 1.82e-08 GAGATGCAAAA -1 phiX174 99 109 + 12.1098 4.48e-08 1.82e-08 TACGAATTAAA -1 phiX174 67 77 + 11.9268 4.78e-08 1.92e-08 TCTTGATAAAG -1 phiX174 5332 5342 + 11.7195 5.13e-08 2.01e-08 ATCTGCTCAAA -1 phiX174 277 287 + 11.7073 5.14e-08 2.01e-08 TTTAGATATGA -1 phiX174 4338 4348 + 11.6951 5.18e-08 2.01e-08 GGGGACGAAAA -1 phiX174 3812 3822 + 11.6585 5.28e-08 2.03e-08 GGTTGATATTT -1 phiX174 1909 1919 + 11.5488 5.51e-08 2.08e-08 TAACGCTAAAG -1 phiX174 3000 3010 + 11.5366 5.54e-08 2.08e-08 GGCGGTCAAAA -1 phiX174 3891 3901 + 11.439 5.75e-08 2.11e-08 ATTGGCTCTAA -1 phiX174 3079 3089 + 11.4268 5.76e-08 2.11e-08 CTGGTATTAAA -1 phiX174 37 47 + 11.4146 5.79e-08 2.11e-08 TTCGGATATTT -1 phiX174 380 390 + 11.3293 6.01e-08 2.17e-08 GTAAGAAATCA
--- a/test-data/fimo_output_txt_2.txt Wed Apr 25 12:12:47 2018 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,100 +0,0 @@ -#pattern name sequence name start stop strand score p-value q-value matched sequence -1 phiX174 1388 1398 + 29.4024 6.36e-11 0 AATATCTATAA -1 phiX174 847 857 + 29.122 7.02e-11 0 AATGTCTAAAG -1 phiX174 2301 2311 + 27.6463 1.08e-10 0 AGGTTATAACG -1 phiX174 5063 5073 + 25.5366 2.73e-10 0 AGGAGCTAAAG -1 phiX174 989 999 + 25.3049 3.15e-10 0 TGAGGATAAAT -1 phiX174 4713 4723 + 23.622 7.74e-10 0 GACTGCTATCA -1 phiX174 5048 5058 + 23.3293 8.51e-10 0 TGCTGCTAAAG -1 phiX174 855 865 + 23.3049 8.64e-10 0 AAGGTAAAAAA -1 phiX174 3155 3165 + 23.0366 9.76e-10 0 TATGGCTAAAG -1 phiX174 5009 5019 + 23.0366 9.76e-10 0 TGTGGCTAAAT -1 phiX174 814 824 + 22.5854 1.28e-09 0 TGCGTCAAAAA -1 phiX174 2832 2842 + 22.3415 1.42e-09 0 TTGGTCTAACT -1 phiX174 3830 3840 + 21.8293 1.7e-09 0 TATTGATAAAG -1 phiX174 3560 3570 + 21.5976 1.89e-09 0 TGCGTCTATTA -1 phiX174 2882 2892 + 21.1951 2.29e-09 0 AGGTTATTAAA -1 phiX174 4453 4463 + 20.8902 2.58e-09 0 AAGGTATTAAG -1 phiX174 2493 2503 + 20.3415 3.06e-09 0 GACACCTAAAG -1 phiX174 4104 4114 + 20.3171 3.08e-09 0 GGCTTCCATAA -1 phiX174 4955 4965 + 20.3171 3.08e-09 0 TGATGCTAAAG -1 phiX174 1885 1895 + 19.9268 3.61e-09 0 TGCGACTAAAG -1 phiX174 3376 3386 + 19.7683 3.81e-09 0 AGAATCAAAAA -1 phiX174 52 62 + 19.5732 4.06e-09 0 TGAGTCGAAAA -1 phiX174 1390 1400 + 19.378 4.26e-09 0 TATCTATAACA -1 phiX174 2017 2027 + 19.0854 4.6e-09 0 TTCGTCTAAGA -1 phiX174 1000 1010 + 18.878 4.88e-09 0 TATGTCTAATA -1 phiX174 1555 1565 + 18.439 5.58e-09 0 GACTTCTACCA -1 phiX174 4430 4440 + 18.4268 5.62e-09 0 TGAGTATAATT -1 phiX174 1927 1937 + 18.2927 5.82e-09 0 GACTTATACCG -1 phiX174 2981 2991 + 18.0732 6.13e-09 0 CATGTCTAAAT -1 phiX174 4203 4213 + 17.9268 6.34e-09 0 GACGGCCATAA -1 phiX174 1669 1679 + 17.8659 6.4e-09 0 TGGAGGTAAAA -1 phiX174 3260 3270 + 17.5 7.01e-09 0 CGCTGATAAAG -1 phiX174 3047 3057 + 17.2805 7.4e-09 0 TACCGATAACA -1 phiX174 4176 4186 + 17.1829 7.6e-09 0 GAGTTCGATAA -1 phiX174 4118 4128 + 17.1341 7.7e-09 0 GATGGATAACC -1 phiX174 5370 5380 + 16.9878 8.03e-09 0 GGCGTATCCAA -1 phiX174 1242 1252 + 16.5122 8.94e-09 0 AGTGGATTAAG -1 phiX174 2583 2593 + 16.5122 8.94e-09 0 TACATCTGTCA -1 phiX174 698 708 + 16.4146 9.13e-09 0 TACGGAAAACA -1 phiX174 2299 2309 + 16.3537 9.26e-09 0 TGAGGTTATAA -1 phiX174 4189 4199 + 16.1707 9.69e-09 0 GTGATATGTAT -1 phiX174 275 285 + 16.0976 9.85e-09 0 GGTTTAGATAT -1 phiX174 1801 1811 + 16.0366 1e-08 0 GACCTATAAAC -1 phiX174 1386 1396 + 15.9268 1.03e-08 0 TGAATATCTAT -1 phiX174 1303 1313 + 15.9024 1.03e-08 0 TGGTTATATTG -1 phiX174 3772 3782 + 15.878 1.04e-08 0 AGGATATTTCT -1 phiX174 1288 1298 + 15.8659 1.04e-08 0 GACTGTTAACA -1 phiX174 2577 2587 + 15.7683 1.08e-08 0 GATGGATACAT -1 phiX174 937 947 + 15.7561 1.08e-08 0 TTGGTATGTAG -1 phiX174 904 914 + 15.6585 1.11e-08 0 AGGTACTAAAG -1 phiX174 2279 2289 + 15.5854 1.13e-08 0 TCGTGATAAAA -1 phiX174 3164 3174 + 15.5 1.16e-08 0 AGCTGGTAAAG -1 phiX174 24 34 + 15.3293 1.23e-08 0 AGAAGTTAACA -1 phiX174 838 848 + 15.2561 1.27e-08 0 GAGTGATGTAA -1 phiX174 853 863 + 15.2561 1.27e-08 0 TAAAGGTAAAA -1 phiX174 1984 1994 + 15.0244 1.36e-08 0 AATTTCTATGA -1 phiX174 1 11 + 14.8293 1.46e-08 0 GAGTTTTATCG -1 phiX174 4307 4317 + 14.7927 1.47e-08 0 TATTAATAACA -1 phiX174 4303 4313 + 14.6585 1.52e-08 0 TTGATATTAAT -1 phiX174 5033 5043 + 14.561 1.58e-08 0 GTCAGATATGG -1 phiX174 2579 2589 + 14.2927 1.73e-08 0 TGGATACATCT -1 phiX174 322 332 + 14.1951 1.82e-08 0 GACATTTTAAA -1 phiX174 5001 5011 + 13.8902 2.09e-08 0 GGTTTCTATGT -1 phiX174 4217 4227 + 13.8171 2.15e-08 0 TGCTTCTGACG -1 phiX174 4262 4272 + 13.7805 2.18e-08 0 AATGGATGAAT -1 phiX174 3569 3579 + 13.7073 2.26e-08 0 TATGGAAAACA -1 phiX174 194 204 + 13.6829 2.29e-08 0 ATCAACTAACG -1 phiX174 131 141 + 13.4756 2.49e-08 0 AAATGAGAAAA -1 phiX174 1491 1501 + 13.4024 2.55e-08 0 GCCATCTCAAA -1 phiX174 434 444 + 13.2805 2.67e-08 0 GGCCTCTATTA -1 phiX174 4565 4575 + 13.2439 2.73e-08 0 TTGGTTTATCG -1 phiX174 102 112 + 13.2195 2.75e-08 0 GAATTAAATCG -1 phiX174 903 913 + 13.1463 2.82e-08 0 GAGGTACTAAA -1 phiX174 4748 4758 + 12.9756 3.01e-08 0 TACAGCTAATG -1 phiX174 2622 2632 + 12.8659 3.16e-08 0 TGCTGATATTG -1 phiX174 467 477 + 12.7317 3.35e-08 0 TTTGGATTTAA -1 phiX174 4033 4043 + 12.6829 3.44e-08 0 AGCGTATCGAG -1 phiX174 1348 1358 + 12.6707 3.46e-08 0 TACCAATAAAA -1 phiX174 239 249 + 12.5732 3.62e-08 0 AGTGGCTTAAT -1 phiX174 500 510 + 12.4634 3.84e-08 0 GACGAGTAACA -1 phiX174 3001 3011 + 12.4146 3.93e-08 0 GCGGTCAAAAA -1 phiX174 3776 3786 + 12.378 3.98e-08 0 TATTTCTAATG -1 phiX174 2026 2036 + 12.3293 4.06e-08 0 GAAGTTTAAGA -1 phiX174 4237 4247 + 12.3049 4.12e-08 0 AGTTTGTATCT -1 phiX174 803 813 + 12.2439 4.24e-08 0 AGAAGAAAACG -1 phiX174 3770 3780 + 12.1829 4.35e-08 0 AAAGGATATTT -1 phiX174 3429 3439 + 12.122 4.45e-08 0 GAGATGCAAAA -1 phiX174 99 109 + 12.1098 4.48e-08 0 TACGAATTAAA -1 phiX174 67 77 + 11.9268 4.78e-08 0 TCTTGATAAAG -1 phiX174 5332 5342 + 11.7195 5.13e-08 0 ATCTGCTCAAA -1 phiX174 277 287 + 11.7073 5.14e-08 0 TTTAGATATGA -1 phiX174 4338 4348 + 11.6951 5.18e-08 0 GGGGACGAAAA -1 phiX174 3812 3822 + 11.6585 5.28e-08 0 GGTTGATATTT -1 phiX174 1909 1919 + 11.5488 5.51e-08 0 TAACGCTAAAG -1 phiX174 3000 3010 + 11.5366 5.54e-08 0 GGCGGTCAAAA -1 phiX174 3891 3901 + 11.439 5.75e-08 0 ATTGGCTCTAA -1 phiX174 3079 3089 + 11.4268 5.76e-08 0 CTGGTATTAAA -1 phiX174 37 47 + 11.4146 5.79e-08 0 TTCGGATATTT -1 phiX174 380 390 + 11.3293 6.01e-08 0 GTAAGAAATCA
--- a/test-data/fimo_output_xml_1.xml Wed Apr 25 12:12:47 2018 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,66 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Begin document body --> -<settings> -<setting name="allow clobber">false</setting> -<setting name="compute q-values">true</setting> -<setting name="parse genomic coord.">false</setting> -<setting name="text only">false</setting> -<setting name="scan both strands">false</setting> -<setting name="output threshold">0.0001</setting> -<setting name="threshold type">p-value</setting> -<setting name="max stored scores">100000</setting> -<setting name="pseudocount">0.1</setting> -<setting name="verbosity">1</setting> -</settings> -<sequence-data num-sequences="1" num-residues="5386" /> -<alphabet name="Protein" like="protein"> -<letter id="A" symbol="A" name="Alanine" colour="0000CC"/> -<letter id="C" symbol="C" name="Cysteine" colour="0000CC"/> -<letter id="D" symbol="D" name="Aspartic acid" colour="FF00FF"/> -<letter id="E" symbol="E" name="Glutamic acid" colour="FF00FF"/> -<letter id="F" symbol="F" name="Phenylalanine" colour="0000CC"/> -<letter id="G" symbol="G" name="Glycine" colour="FFB300"/> -<letter id="H" symbol="H" name="Histidine" colour="FFCCCC"/> -<letter id="I" symbol="I" name="Isoleucine" colour="0000CC"/> -<letter id="K" symbol="K" name="Lysine" colour="CC0000"/> -<letter id="L" symbol="L" name="Leucine" colour="0000CC"/> -<letter id="M" symbol="M" name="Methionine" colour="0000CC"/> -<letter id="N" symbol="N" name="Asparagine" colour="008000"/> -<letter id="P" symbol="P" name="Proline" colour="FFFF00"/> -<letter id="Q" symbol="Q" name="Glutamine" colour="008000"/> -<letter id="R" symbol="R" name="Arginine" colour="CC0000"/> -<letter id="S" symbol="S" name="Serine" colour="008000"/> -<letter id="T" symbol="T" name="Threonine" colour="008000"/> -<letter id="V" symbol="V" name="Valine" colour="0000CC"/> -<letter id="W" symbol="W" name="Tryptophan" colour="0000CC"/> -<letter id="Y" symbol="Y" name="Tyrosine" colour="33E6CC"/> -<letter id="X" symbol="X" aliases="*." equals="ACDEFGHIKLMNPQRSTVWY" name="Any amino acid"/> -<letter id="B" symbol="B" equals="DN" name="Asparagine or Aspartic acid"/> -<letter id="Z" symbol="Z" equals="EQ" name="Glutamine or Glutamic acid"/> -<letter id="J" symbol="J" equals="IL" name="Leucine or Isoleucine"/> -</alphabet> -<motif name="1" width="11" best-possible-match="GGGGTATAAAA"/> -<background source="non-redundant database"> -<value letter="A">0.073</value> -<value letter="C">0.018</value> -<value letter="D">0.052</value> -<value letter="E">0.062</value> -<value letter="F">0.040</value> -<value letter="G">0.069</value> -<value letter="H">0.022</value> -<value letter="I">0.056</value> -<value letter="K">0.058</value> -<value letter="L">0.092</value> -<value letter="M">0.023</value> -<value letter="N">0.046</value> -<value letter="P">0.051</value> -<value letter="Q">0.041</value> -<value letter="R">0.052</value> -<value letter="S">0.074</value> -<value letter="T">0.059</value> -<value letter="V">0.064</value> -<value letter="W">0.013</value> -<value letter="Y">0.033</value> -</background> -<cisml-file>cisml.xml</cisml-file> -</fimo>
--- a/test-data/fimo_output_xml_2.xml Wed Apr 25 12:12:47 2018 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,65 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Begin document body --> -<settings> -<setting name="allow clobber">false</setting> -<setting name="compute q-values">false</setting> -<setting name="text only">false</setting> -<setting name="scan both strands">false</setting> -<setting name="output threshold">0.0001</setting> -<setting name="threshold type">p-value</setting> -<setting name="max stored scores">100000</setting> -<setting name="pseudocount">0.1</setting> -<setting name="verbosity">1</setting> -</settings> -<sequence-data num-sequences="1" num-residues="5386" /> -<alphabet name="Protein" like="protein"> -<letter id="A" symbol="A" name="Alanine" colour="0000CC"/> -<letter id="C" symbol="C" name="Cysteine" colour="0000CC"/> -<letter id="D" symbol="D" name="Aspartic acid" colour="FF00FF"/> -<letter id="E" symbol="E" name="Glutamic acid" colour="FF00FF"/> -<letter id="F" symbol="F" name="Phenylalanine" colour="0000CC"/> -<letter id="G" symbol="G" name="Glycine" colour="FFB300"/> -<letter id="H" symbol="H" name="Histidine" colour="FFCCCC"/> -<letter id="I" symbol="I" name="Isoleucine" colour="0000CC"/> -<letter id="K" symbol="K" name="Lysine" colour="CC0000"/> -<letter id="L" symbol="L" name="Leucine" colour="0000CC"/> -<letter id="M" symbol="M" name="Methionine" colour="0000CC"/> -<letter id="N" symbol="N" name="Asparagine" colour="008000"/> -<letter id="P" symbol="P" name="Proline" colour="FFFF00"/> -<letter id="Q" symbol="Q" name="Glutamine" colour="008000"/> -<letter id="R" symbol="R" name="Arginine" colour="CC0000"/> -<letter id="S" symbol="S" name="Serine" colour="008000"/> -<letter id="T" symbol="T" name="Threonine" colour="008000"/> -<letter id="V" symbol="V" name="Valine" colour="0000CC"/> -<letter id="W" symbol="W" name="Tryptophan" colour="0000CC"/> -<letter id="Y" symbol="Y" name="Tyrosine" colour="33E6CC"/> -<letter id="X" symbol="X" aliases="*." equals="ACDEFGHIKLMNPQRSTVWY" name="Any amino acid"/> -<letter id="B" symbol="B" equals="DN" name="Asparagine or Aspartic acid"/> -<letter id="Z" symbol="Z" equals="EQ" name="Glutamine or Glutamic acid"/> -<letter id="J" symbol="J" equals="IL" name="Leucine or Isoleucine"/> -</alphabet> -<motif name="1" width="11" best-possible-match="GGGGTATAAAA"/> -<background source="non-redundant database"> -<value letter="A">0.073</value> -<value letter="C">0.018</value> -<value letter="D">0.052</value> -<value letter="E">0.062</value> -<value letter="F">0.040</value> -<value letter="G">0.069</value> -<value letter="H">0.022</value> -<value letter="I">0.056</value> -<value letter="K">0.058</value> -<value letter="L">0.092</value> -<value letter="M">0.023</value> -<value letter="N">0.046</value> -<value letter="P">0.051</value> -<value letter="Q">0.041</value> -<value letter="R">0.052</value> -<value letter="S">0.074</value> -<value letter="T">0.059</value> -<value letter="V">0.064</value> -<value letter="W">0.013</value> -<value letter="Y">0.033</value> -</background> -<cisml-file>cisml.xml</cisml-file> -</fimo>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/hsa_chrM.fa Thu May 17 14:11:00 2018 -0400 @@ -0,0 +1,238 @@ +>chrM +GATCACAGGTCTATCACCCTATTAACCACTCACGGGAGCTCTCCATGCATTTGGTATTTTCGTCTGGGGG +GTATGCACGCGATAGCATTGCGAGACGCTGGAGCCGGAGCACCCTATGTCGCAGTATCTGTCTTTGATTC +CTGCCTCATCCTATTATTTATCGCACCTACGTTCAATATTACAGGCGAACATACTTACTAAAGTGTGTTA +ATTAATTAATGCTTGTAGGACATAATAATAACAATTGAATGTCTGCACAGCCACTTTCCACACAGACATC +ATAACAAAAAATTTCCACCAAACCCCCCCTCCCCCGCTTCTGGCCACAGCACTTAAACACATCTCTGCCA +AACCCCAAAAACAAAGAACCCTAACACCAGCCTAACCAGATTTCAAATTTTATCTTTTGGCGGTATGCAC +TTTTAACAGTCACCCCCCAACTAACACATTATTTTCCCCTCCCACTCCCATACTACTAATCTCATCAATA +CAACCCCCGCCCATCCTACCCAGCACACACACACCGCTGCTAACCCCATACCCCGAACCAACCAAACCCC +AAAGACACCCCCCACAGTTTATGTAGCTTACCTCCTCAAAGCAATACACTGAAAATGTTTAGACGGGCTC +ACATCACCCCATAAACAAATAGGTTTGGTCCTAGCCTTTCTATTAGCTCTTAGTAAGATTACACATGCAA +GCATCCCCGTTCCAGTGAGTTCACCCTCTAAATCACCACGATCAAAAGGAACAAGCATCAAGCACGCAGC +AATGCAGCTCAAAACGCTTAGCCTAGCCACACCCCCACGGGAAACAGCAGTGATTAACCTTTAGCAATAA +ACGAAAGTTTAACTAAGCTATACTAACCCCAGGGTTGGTCAATTTCGTGCCAGCCACCGCGGTCACACGA +TTAACCCAAGTCAATAGAAGCCGGCGTAAAGAGTGTTTTAGATCACCCCCTCCCCAATAAAGCTAAAACT +CACCTGAGTTGTAAAAAACTCCAGTTGACACAAAATAGACTACGAAAGTGGCTTTAACATATCTGAACAC +ACAATAGCTAAGACCCAAACTGGGATTAGATACCCCACTATGCTTAGCCCTAAACCTCAACAGTTAAATC +AACAAAACTGCTCGCCAGAACACTACGAGCCACAGCTTAAAACTCAAAGGACCTGGCGGTGCTTCATATC +CCTCTAGAGGAGCCTGTTCTGTAATCGATAAACCCCGATCAACCTCACCACCTCTTGCTCAGCCTATATA +CCGCCATCTTCAGCAAACCCTGATGAAGGCTACAAAGTAAGCGCAAGTACCCACGTAAAGACGTTAGGTC +AAGGTGTAGCCCATGAGGTGGCAAGAAATGGGCTACATTTTCTACCCCAGAAAACTACGATAGCCCTTAT +GAAACTTAAGGGTCGAAGGTGGATTTAGCAGTAAACTAAGAGTAGAGTGCTTAGTTGAACAGGGCCCTGA +AGCGCGTACACACCGCCCGTCACCCTCCTCAAGTATACTTCAAAGGACATTTAACTAAAACCCCTACGCA +TTTATATAGAGGAGACAAGTCGTAACATGGTAAGTGTACTGGAAAGTGCACTTGGACGAACCAGAGTGTA +GCTTAACACAAAGCACCCAACTTACACTTAGGAGATTTCAACTTAACTTGACCGCTCTGAGCTAAACCTA +GCCCCAAACCCACTCCACCTTACTACCAGACAACCTTAGCCAAACCATTTACCCAAATAAAGTATAGGCG +ATAGAAATTGAAACCTGGCGCAATAGATATAGTACCGCAAGGGAAAGATGAAAAATTATAACCAAGCATA +ATATAGCAAGGACTAACCCCTATACCTTCTGCATAATGAATTAACTAGAAATAACTTTGCAAGGAGAGCC +AAAGCTAAGACCCCCGAAACCAGACGAGCTACCTAAGAACAGCTAAAAGAGCACACCCGTCTATGTAGCA +AAATAGTGGGAAGATTTATAGGTAGAGGCGACAAACCTACCGAGCCTGGTGATAGCTGGTTGTCCAAGAT +AGAATCTTAGTTCAACTTTAAATTTGCCCACAGAACCCTCTAAATCCCCTTGTAAATTTAACTGTTAGTC +CAAAGAGGAACAGCTCTTTGGACACTAGGAAAAAACCTTGTAGAGAGAGTAAAAAATTTAACACCCATAG +TAGGCCTAAAAGCAGCCACCAATTAAGAAAGCGTTCAAGCTCAACACCCACTACCTAAAAAATCCCAAAC +ATATAACTGAACTCCTCACACCCAATTGGACCAATCTATCACCCTATAGAAGAACTAATGTTAGTATAAG +TAACATGAAAACATTCTCCTCCGCATAAGCCTGCGTCAGATTAAAACACTGAACTGACAATTAACAGCCC +AATATCTACAATCAACCAACAAGTCATTATTACCCTCACTGTCAACCCAACACAGGCATGCTCATAAGGA +AAGGTTAAAAAAAGTAAAAGGAACTCGGCAAATCTTACCCCGCCTGTTTACCAAAAACATCACCTCTAGC +ATCACCAGTATTAGAGGCACCGCCTGCCCAGTGACACATGTTTAACGGCCGCGGTACCCTAACCGTGCAA +AGGTAGCATAATCACTTGTTCCTTAAATAGGGACCTGTATGAATGGCTCCACGAGGGTTCAGCTGTCTCT +TACTTTTAACCAGTGAAATTGACCTGCCCGTGAAGAGGCGGGCATAACACAGCAAGACGAGAAGACCCTA +TGGAGCTTTAATTTATTAATGCAAACAGTACCTAACAAACCCACAGGTCCTAAACTACCAAACCTGCATT +AAAAATTTCGGTTGGGGCGACCTCGGAGCAGAACCCAACCTCCGAGCAGTACATGCTAAGACTTCACCAG +TCAAAGCGAACTACTATACTCAATTGATCCAATAACTTGACCAACGGAACAAGTTACCCTAGGGATAACA +GCGCAATCCTATTCTAGAGTCCATATCAACAATAGGGTTTACGACCTCGATGTTGGATCAGGACATCCCG +ATGGTGCAGCCGCTATTAAAGGTTCGTTTGTTCAACGATTAAAGTCCTACGTGATCTGAGTTCAGACCGG +AGTAATCCAGGTCGGTTTCTATCTACNTTCAAATTCCTCCCTGTACGAAAGGACAAGAGAAATAAGGCCT +ACTTCACAAAGCGCCTTCCCCCGTAAATGATATCATCTCAACTTAGTATTATACCCACACCCACCCAAGA +ACAGGGTTTGTTAAGATGGCAGAGCCCGGTAATCGCATAAAACTTAAAACTTTACAGTCAGAGGTTCAAT +TCCTCTTCTTAACAACATACCCATGGCCAACCTCCTACTCCTCATTGTACCCATTCTAATCGCAATGGCA +TTCCTAATGCTTACCGAACGAAAAATTCTAGGCTATATACAACTACGCAAAGGCCCCAACGTTGTAGGCC +CCTACGGGCTACTACAACCCTTCGCTGACGCCATAAAACTCTTCACCAAAGAGCCCCTAAAACCCGCCAC +ATCTACCATCACCCTCTACATCACCGCCCCGACCTTAGCTCTCACCATCGCTCTTCTACTATGAACCCCC +CTCCCCATACCCAACCCCCTGGTCAACCTCAACCTAGGCCTCCTATTTATTCTAGCCACCTCTAGCCTAG +CCGTTTACTCAATCCTCTGATCAGGGTGAGCATCAAACTCAAACTACGCCCTGATCGGCGCACTGCGAGC +AGTAGCCCAAACAATCTCATATGAAGTCACCCTAGCCATCATTCTACTATCAACATTACTAATAAGTGGC +TCCTTTAACCTCTCCACCCTTATCACAACACAAGAACACCTCTGATTACTCCTGCCATCATGACCCTTGG +CCATAATATGATTTATCTCCACACTAGCAGAGACCAACCGAACCCCCTTCGACCTTGCCGAAGGGGAGTC +CGAACTAGTCTCAGGCTTCAACATCGAATACGCCGCAGGCCCCTTCGCCCTATTCTTCATAGCCGAATAC +ACAAACATTATTATAATAAACACCCTCACCACTACAATCTTCCTAGGAACAACATATGACGCACTCTCCC +CTGAACTCTACACAACATATTTTGTCACCAAGACCCTACTTCTAACCTCCCTGTTCTTATGAATTCGAAC +AGCATACCCCCGATTCCGCTACGACCAACTCATACACCTCCTATGAAAAAACTTCCTACCACTCACCCTA +GCATTACTTATATGATATGTCTCCATACCCATTACAATCTCCAGCATTCCCCCTCAAACCTAAGAAATAT +GTCTGATAAAAGAGTTACTTTGATAGAGTAAATAATAGGAGCTTAAACCCCCTTATTTCTAGGACTATGA +GAATCGAACCCATCCCTGAGAATCCAAAATTCTCCGTGCCACCTATCACACCCCATCCTAAAGTAAGGTC +AGCTAAATAAGCTATCGGGCCCATACCCCGAAAATGTTGGTTATACCCTTCCCGTACTAATTAATCCCCT +GGCCCAACCCGTCATCTACTCTACCATCTTTGCAGGCACACTCATCACAGCGCTAAGCTCGCACTGATTT +TTTACCTGAGTAGGCCTAGAAATAAACATGCTAGCTTTTATTCCAGTTCTAACCAAAAAAATAAACCCTC +GTTCCACAGAAGCTGCCATCAAGTATTTCCTCACGCAAGCAACCGCATCCATAATCCTTCTAATAGCTAT +CCTCTTCAACAATATACTCTCCGGACAATGAACCATAACCAATACTACCAATCAATACTCATCATTAATA +ATCATAATAGCTATAGCAATAAAACTAGGAATAGCCCCCTTTCACTTCTGAGTCCCAGAGGTTACCCAAG +GCACCCCTCTGACATCCGGCCTGCTTCTTCTCACATGACAAAAACTAGCCCCCATCTCAATCATATACCA +AATCTCTCCCTCACTAAACGTAAGCCTTCTCCTCACTCTCTCAATCTTATCCATCATAGCAGGCAGTTGA +GGTGGATTAAACCAAACCCAGCTACGCAAAATCTTAGCATACTCCTCAATTACCCACATAGGATGAATAA +TAGCAGTTCTACCGTACAACCCTAACATAACCATTCTTAATTTAACTATTTATATTATCCTAACTACTAC +CGCATTCCTACTACTCAACTTAAACTCCAGCACCACGACCCTACTACTATCTCGCACCTGAAACAAGCTA +ACATGACTAACACCCTTAATTCCATCCACCCTCCTCTCCCTAGGAGGCCTGCCCCCGCTAACCGGCTTTT +TGCCCAAATGGGCCATTATCGAAGAATTCACAAAAAACAATAGCCTCATCATCCCCACCATCATAGCCAC +CATCACCCTCCTTAACCTCTACTTCTACCTACGCCTAATCTACTCCACCTCAATCACACTACTCCCCATA +TCTAACAACGTAAAAATAAAATGACAGTTTGAACATACAAAACCCACCCCATTCCTCCCCACACTCATCG +CCCTTACCACGCTACTCCTACCTATCTCCCCTTTTATACTAATAATCTTATAGAAATTTAGGTTAAATAC +AGACCAAGAGCCTTCAAAGCCCTCAGTAAGTTGCAATACTTAATTTCTGTAACAGCTAAGGACTGCAAAA +CCCCACTCTGCATCAACTGAACGCAAATCAGCCACTTTAATTAAGCTAAGCCCTTACTAGACCAATGGGA +CTTAAACCCACAAACACTTAGTTAACAGCTAAGCACCCTAATCAACTGGCTTCAATCTACTTCTCCCGCC +GCCGGGAAAAAAGGCGGGAGAAGCCCCGGCAGGTTTGAAGCTGCTTCTTCGAATTTGCAATTCAATATGA +AAATCACCTCGGAGCTGGTAAAAAGAGGCCTAACCCCTGTCTTTAGATTTACAGTCCAATGCTTCACTCA +GCCATTTTACCTCACCCCCACTGATGTTCGCCGACCGTTGACTATTCTCTACAAACCACAAAGACATTGG +AACACTATACCTATTATTCGGCGCATGAGCTGGAGTCCTAGGCACAGCTCTAAGCCTCCTTATTCGAGCC +GAGCTGGGCCAGCCAGGCAACCTTCTAGGTAACGACCACATCTACAACGTTATCGTCACAGCCCATGCAT +TTGTAATAATCTTCTTCATAGTAATACCCATCATAATCGGAGGCTTTGGCAACTGACTAGTTCCCCTAAT +AATCGGTGCCCCCGATATGGCGTTTCCCCGCATAAACAACATAAGCTTCTGACTCTTACCTCCCTCTCTC +CTACTCCTGCTCGCATCTGCTATAGTGGAGGCCGGAGCAGGAACAGGTTGAACAGTCTACCCTCCCTTAG +CAGGGAACTACTCCCACCCTGGAGCCTCCGTAGACCTAACCATCTTCTCCTTACACCTAGCAGGTGTCTC +CTCTATCTTAGGGGCCATCAATTTCATCACAACAATTATCAATATAAAACCCCCTGCCATAACCCAATAC +CAAACGCCCCTCTTCGTCTGATCCGTCCTAATCACAGCAGTCCTACTTCTCCTATCTCTCCCAGTCCTAG +CTGCTGGCATCACTATACTACTAACAGACCGCAACCTCAACACCACCTTCTTCGACCCCGCCGGAGGAGG +AGACCCCATTCTATACCAACACCTATTCTGATTTTTCGGTCACCCTGAAGTTTATATTCTTATCCTACCA +GGCTTCGGAATAATCTCCCATATTGTAACTTACTACTCCGGAAAAAAAGAACCATTTGGATACATAGGTA +TGGTCTGAGCTATGATATCAATTGGCTTCCTAGGGTTTATCGTGTGAGCACACCATATATTTACAGTAGG +AATAGACGTAGACACACGAGCATATTTCACCTCCGCTACCATAATCATCGCTATCCCCACCGGCGTCAAA +GTATTTAGCTGACTCGCCACACTCCACGGAAGCAATATGAAATGATCTGCTGCAGTGCTCTGAGCCCTAG +GATTCATCTTTCTTTTCACCGTAGGTGGCCTGACTGGCATTGTATTAGCAAACTCATCACTAGACATCGT +ACTACACGACACGTACTACGTTGTAGCCCACTTCCACTATGTCCTATCAATAGGAGCTGTATTTGCCATC +ATAGGAGGCTTCATTCACTGATTTCCCCTATTCTCAGGCTACACCCTAGACCAAACCTACGCCAAAATCC +ATTTCACTATCATATTCATCGGCGTAAATCTAACTTTCTTCCCACAACACTTTCTCGGCCTATCCGGAAT +GCCCCGACGTTACTCGGACTACCCCGATGCATACACCACATGAAACATCCTATCATCTGTAGGCTCATTC +ATTTCTCTAACAGCAGTAATATTAATAATTTTCATGATTTGAGAAGCCTTCGCTTCGAAGCGAAAAGTCC +TAATAGTAGAAGAACCCTCCATAAACCTGGAGTGACTATATGGATGCCCCCCACCCTACCACACATTCGA +AGAACCCGTATACATAAAATCTAGACAAAAAAGGAAGGAATCGAACCCCCCAAAGCTGGTTTCAAGCCAA +CCCCATGGCCTCCATGACTTTTTCAAAAAGGTATTAGAAAAACCATTTCATAACTTTGTCAAAGTTAAAT +TATAGGCTAAATCCTATATATCTTAATGGCACATGCAGCGCAAGTAGGTCTACAAGACGCTACTTCCCCT +ATCATAGAAGAGCTTATCACCTTTCATGATCACGCCCTCATAATCATTTTCCTTATCTGCTTCCTAGTCC +TGTATGCCCTTTTCCTAACACTCACAACAAAACTAACTAATACTAACATCTCAGACGCTCAGGAAATAGA +AACCGTCTGAACTATCCTGCCCGCCATCATCCTAGTCCTCATCGCCCTCCCATCCCTACGCATCCTTTAC +ATAACAGACGAGGTCAACGATCCCTCCCTTACCATCAAATCAATTGGCCACCAATGGTACTGAACCTACG +AGTACACCGACTACGGCGGACTAATCTTCAACTCCTACATACTTCCCCCATTATTCCTAGAACCAGGCGA +CCTGCGACTCCTTGACGTTGACAATCGAGTAGTACTCCCGATTGAAGCCCCCATTCGTATAATAATTACA +TCACAAGACGTCTTGCACTCATGAGCTGTCCCCACATTAGGCTTAAAAACAGATGCAATTCCCGGACGTC +TAAACCAAACCACTTTCACCGCTACACGACCGGGGGTATACTACGGTCAATGCTCTGAAATCTGTGGAGC +AAACCACAGTTTCATGCCCATCGTCCTAGAATTAATTCCCCTAAAAATCTTTGAAATAGGGCCCGTATTT +ACCCTATAGCACCCCCTCTACCCCCTCTAGAGCCCACTGTAAAGCTAACTTAGCATTAACCTTTTAAGTT +AAAGATTAAGAGAACCAACACCTCTTTACAGTGAAATGCCCCAACTAAATACTACCGTATGGCCCACCAT +AATTACCCCCATACTCCTTACACTATTCCTCATCACCCAACTAAAAATATTAAACACAAACTACCACCTA +CCTCCCTCACCAAAGCCCATAAAAATAAAAAATTATAACAAACCCTGAGAACCAAAATGAACGAAAATCT +GTTCGCTTCATTCATTGCCCCCACAATCCTAGGCCTACCCGCCGCAGTACTGATCATTCTATTTCCCCCT +CTATTGATCCCCACCTCCAAATATCTCATCAACAACCGACTAATCACCACCCAACAATGACTAATCAAAC +TAACCTCAAAACAAATGATAACCATACACAACACTAAAGGACGAACCTGATCTCTTATACTAGTATCCTT +AATCATTTTTATTGCCACAACTAACCTCCTCGGACTCCTGCCTCACTCATTTACACCAACCACCCAACTA +TCTATAAACCTAGCCATGGCCATCCCCTTATGAGCGGGCACAGTGATTATAGGCTTTCGCTCTAAGATTA +AAAATGCCCTAGCCCACTTCTTACCACAAGGCACACCTACACCCCTTATCCCCATACTAGTTATTATCGA +AACCATCAGCCTACTCATTCAACCAATAGCCCTGGCCGTACGCCTAACCGCTAACATTACTGCAGGCCAC +CTACTCATGCACCTAATTGGAAGCGCCACCCTAGCAATATCAACCATTAACCTTCCCTCTACACTTATCA +TCTTCACAATTCTAATTCTACTGACTATCCTAGAAATCGCTGTCGCCTTAATCCAAGCCTACGTTTTCAC +ACTTCTAGTAAGCCTCTACCTGCACGACAACACATAATGACCCACCAATCACATGCCTATCATATAGTAA +AACCCAGCCCATGACCCCTAACAGGGGCCCTCTCAGCCCTCCTAATGACCTCCGGCCTAGCCATGTGATT +TCACTTCCACTCCATAACGCTCCTCATACTAGGCCTACTAACCAACACACTAACCATATACCAATGATGG +CGCGATGTAACACGAGAAAGCACATACCAAGGCCACCACACACCACCTGTCCAAAAAGGCCTTCGATACG +GGATAATCCTATTTATTACCTCAGAAGTTTTTTTCTTCGCAGGATTTTTCTGAGCCTTTTACCACTCCAG +CCTAGCCCCTACCCCCCAATTAGGAGGGCACTGGCCCCCAACAGGCATCACCCCGCTAAATCCCCTAGAA +GTCCCACTCCTAAACACATCCGTATTACTCGCATCAGGAGTATCAATCACCTGAGCTCACCATAGTCTAA +TAGAAAACAACCGAAACCAAATAATTCAAGCACTGCTTATTACAATTTTACTGGGTCTCTATTTTACCCT +CCTACAAGCCTCAGAGTACTTCGAGTCTCCCTTCACCATTTCCGACGGCATCTACGGCTCAACATTTTTT +GTAGCCACAGGCTTCCACGGACTTCACGTCATTATTGGCTCAACTTTCCTCACTATCTGCTTCATCCGCC +AACTAATATTTCACTTTACATCCAAACATCACTTTGGCTTCGAAGCCGCCGCCTGATACTGGCATTTTGT +AGATGTGGTTTGACTATTTCTGTATGTCTCCATCTATTGATGAGGGTCTTACTCTTTTAGTATAAATAGT +ACCGTTAACTTCCAATTAACTAGTTTTGACAACATTCAAAAAAGAGTAATAAACTTCGCCTTAATTTTAA +TAATCAACACCCTCCTAGCCTTACTACTAATAATTATTACATTTTGACTACCACAACTCAACGGCTACAT +AGAAAAATCCACCCCTTACGAGTGCGGCTTCGACCCTATATCCCCCGCCCGCGTCCCTTTCTCCATAAAA +TTCTTCTTAGTAGCTATTACCTTCTTATTATTTGATCTAGAAATTGCCCTCCTTTTACCCCTACCATGAG +CCCTACAAACAACTAACCTGCCACTAATAGTTATGTCATCCCTCTTATTAATCATCATCCTAGCCCTAAG +TCTGGCCTATGAGTGACTACAAAAAGGATTAGACTGAACCGAATTGGTATATAGTTTAAACAAAACGAAT +GATTTCGACTCATTAAATTATGATAATCATATTTACCAAATGCCCCTCATTTACATAAATATTATACTAG +CATTTACCATCTCACTTCTAGGAATACTAGTATATCGCTCACACCTCATATCCTCCCTACTATGCCTAGA +AGGAATAATACTATCGCTGTTCATTATAGCTACTCTCATAACCCTCAACACCCACTCCCTCTTAGCCAAT +ATTGTGCCTATTGCCATACTAGTCTTTGCCGCCTGCGAAGCAGCGGTGGGCCTAGCCCTACTAGTCTCAA +TCTCCAACACATATGGCCTAGACTACGTACATAACCTAAACCTACTCCAATGCTAAAACTAATCGTCCCA +ACAATTATATTACTACCACTGACATGACTTTCCAAAAAACACATAATTTGAATCAACACAACCACCCACA +GCCTAATTATTAGCATCATCCCTCTACTATTTTTTAACCAAATCAACAACAACCTATTTAGCTGTTCCCC +AACCTTTTCCTCCGACCCCCTAACAACCCCCCTCCTAATACTAACTACCTGACTCCTACCCCTCACAATC +ATGGCAAGCCAACGCCACTTATCCAGTGAACCACTATCACGAAAAAAACTCTACCTCTCTATACTAATCT +CCCTACAAATCTCCTTAATTATAACATTCACAGCCACAGAACTAATCATATTTTATATCTTCTTCGAAAC +CACACTTATCCCCACCTTGGCTATCATCACCCGATGAGGCAACCAGCCAGAACGCCTGAACGCAGGCACA +TACTTCCTATTCTACACCCTAGTAGGCTCCCTTCCCCTACTCATCGCACTAATTTACACTCACAACACCC +TAGGCTCACTAAACATTCTACTACTCACTCTCACTGCCCAAGAACTATCAAACTCCTGAGCCAACAACTT +AATATGACTAGCTTACACAATAGCTTTTATAGTAAAGATACCTCTTTACGGACTCCACTTATGACTCCCT +AAAGCCCATGTCGAAGCCCCCATCGCTGGGTCAATAGTACTTGCCGCAGTACTCTTAAAACTAGGCGGCT +ATGGTATAATACGCCTCACACTCATTCTCAACCCCCTGACAAAACACATAGCCTACCCCTTCCTTGTACT +ATCCCTATGAGGCATAATTATAACAAGCTCCATCTGCCTACGACAAACAGACCTAAAATCGCTCATTGCA +TACTCTTCAATCAGCCACATAGCCCTCGTAGTAACAGCCATTCTCATCCAAACCCCCTGAAGCTTCACCG +GCGCAGTCATTCTCATAATCGCCCACGGGCTTACATCCTCATTACTATTCTGCCTAGCAAACTCAAACTA +CGAACGCACTCACAGTCGCATCATAATCCTCTCTCAAGGACTTCAAACTCTACTCCCACTAATAGCTTTT +TGATGACTTCTAGCAAGCCTCGCTAACCTCGCCTTACCCCCCACTATTAACCTACTGGGAGAACTCTCTG +TGCTAGTAACCACGTTCTCCTGATCAAATATCACTCTCCTACTTACAGGACTCAACATACTAGTCACAGC +CCTATACTCCCTCTACATATTTACCACAACACAATGGGGCTCACTCACCCACCACATTAACAACATAAAA +CCCTCATTCACACGAGAAAACACCCTCATGTTCATACACCTATCCCCCATTCTCCTCCTATCCCTCAACC +CCGACATCATTACCGGGTTTTCCTCTTGTAAATATAGTTTAACCAAAACATCAGATTGTGAATCTGACAA +CAGAGGCTTACGACCCCTTATTTACCGAGAAAGCTCACAAGAACTGCTAACTCATGCCCCCATGTCTAAC +AACATGGCTTTCTCAACTTTTAAAGGATAACAGCTATCCATTGGTCTTAGGCCCCAAAAATTTTGGTGCA +ACTCCAAATAAAAGTAATAACCATGCACACTACTATAACCACCCTAACCCTGACTTCCCTAATTCCCCCC +ATCCTTACCACCCTCGTTAACCCTAACAAAAAAAACTCATACCCCCATTATGTAAAATCCATTGTCGCAT +CCACCTTTATTATCAGTCTCTTCCCCACAACAATATTCATGTGCCTAGACCAAGAAGTTATTATCTCGAA +CTGACACTGAGCCACAACCCAAACAACCCAGCTCTCCCTAAGCTTCAAACTAGACTACTTCTCCATAATA +TTCATCCCTGTAGCATTGTTCGTTACATGGTCCATCATAGAATTCTCACTGTGATATATAAACTCAGACC +CAAACATTAATCAGTTCTTCAAATATCTACTCATCTTCCTAATTACCATACTAATCTTAGTTACCGCTAA +CAACCTATTCCAACTGTTCATCGGCTGAGAGGGCGTAGGAATTATATCCTTCTTGCTCATCAGTTGATGA +TACGCCCGAGCAGATGCCAACACAGCAGCCATTCAAGCAATCCTATACAACCGTATCGGCGATATCGGTT +TCATCCTCGCCTTAGCATGATTTATCCTACACTCCAACTCATGAGACCCACAACAAATAGCCCTTCTAAA +CGCTAATCCAAGCCTCACCCCACTACTAGGCCTCCTCCTAGCAGCAGCAGGCAAATCAGCCCAATTAGGT +CTCCACCCCTGACTCCCCTCAGCCATAGAAGGCCCCACCCCAGTCTCAGCCCTACTCCACTCAAGCACTA +TAGTTGTAGCAGGAATCTTCTTACTCATCCGCTTCCACCCCCTAGCAGAAAATAGCCCACTAATCCAAAC +TCTAACACTATGCTTAGGCGCTATCACCACTCTGTTCGCAGCAGTCTGCGCCCTTACACAAAATGACATC +AAAAAAATCGTAGCCTTCTCCACTTCAAGTCAACTAGGACTCATAATAGTTACAATCGGCATCAACCAAC +CACACCTAGCATTCCTGCACATCTGTACCCACGCCTTCTTCAAAGCCATACTATTTATGTGCTCCGGGTC +CATCATCCACAACCTTAACAATGAACAAGATATTCGAAAAATAGGAGGACTACTCAAAACCATACCTCTC +ACTTCAACCTCCCTCACCATTGGCAGCCTAGCATTAGCAGGAATACCTTTCCTCACAGGTTTCTACTCCA +AAGACCACATCATCGAAACCGCAAACATATCATACACAAACGCCTGAGCCCTATCTATTACTCTCATCGC +TACCTCCCTGACAAGCGCCTATAGCACTCGAATAATTCTTCTCACCCTAACAGGTCAACCTCGCTTCCCC +ACCCTTACTAACATTAACGAAAATAACCCCACCCTACTAAACCCCATTAAACGCCTGGCAGCCGGAAGCC +TATTCGCAGGATTTCTCATTACTAACAACATTTCCCCCGCATCCCCCTTCCAAACAACAATCCCCCTCTA +CCTAAAACTCACAGCCCTCGCTGTCACTTTCCTAGGACTTCTAACAGCCCTAGACCTCAACTACCTAACC +AACAAACTTAAAATAAAATCCCCACTATGCACATTTTATTTCTCCAACATACTCGGATTCTACCCTAGCA +TCACACACCGCACAATCCCCTATCTAGGCCTTCTTACGAGCCAAAACCTGCCCCTACTCCTCCTAGACCT +AACCTGACTAGAAAAGCTATTACCTAAAACAATTTCACAGCACCAAATCTCCACCTCCATCATCACCTCA +ACCCAAAAAGGCATAATTAAACTTTACTTCCTCTCTTTCTTCTTCCCACTCATCCTAACCCTACTCCTAA +TCACATAACCTATTCCCCCGAGCAATCTCAATTACAATATATACACCAACAAACAATGTTCAACCAGTAA +CTACTACTAATCAACGCCCATAATCATACAAAGCCCCCGCACCAATAGGATCCTCCCGAATCAACCCTGA +CCCCTCTCCTTCATAAATTATTCAGCTTCCTACACTATTAAAGTTTACCACAACCACCACCCCATCATAC +TCTTTCACCCACAGCACCAATCCTACCTCCATCGCTAACCCCACTAAAACACTCACCAAGACCTCAACCC +CTGACCCCCATGCCTCAGGATACTCCTCAATAGCCATCGCTGTAGTATATCCAAAGACAACCATCATTCC +CCCTAAATAAATTAAAAAAACTATTAAACCCATATAACCTCCCCCAAAATTCAGAATAATAACACACCCG +ACCACACCGCTAACAATCAATACTAAACCCCCATAAATAGGAGAAGGCTTAGAAGAAAACCCCACAAACC +CCATTACTAAACCCACACTCAACAGAAACAAAGCATACATCATTATTCTCGCACGGACTACAACCACGAC +CAATGATATGAAAAACCATCGTTGTATTTCAACTACAAGAACACCAATGACCCCAATACGCAAAACTAAC +CCCCTAATAAAATTAATTAACCACTCATTCATCGACCTCCCCACCCCATCCAACATCTCCGCATGATGAA +ACTTCGGCTCACTCCTTGGCGCCTGCCTGATCCTCCAAATCACCACAGGACTATTCCTAGCCATGCACTA +CTCACCAGACGCCTCAACCGCCTTTTCATCAATCGCCCACATCACTCGAGACGTAAATTATGGCTGAATC +ATCCGCTACCTTCACGCCAATGGCGCCTCAATATTCTTTATCTGCCTCTTCCTACACATCGGGCGAGGCC +TATATTACGGATCATTTCTCTACTCAGAAACCTGAAACATCGGCATTATCCTCCTGCTTGCAACTATAGC +AACAGCCTTCATAGGCTATGTCCTCCCGTGAGGCCAAATATCATTCTGAGGGGCCACAGTAATTACAAAC +TTACTATCCGCCATCCCATACATTGGGACAGACCTAGTTCAATGAATCTGAGGAGGCTACTCAGTAGACA +GTCCCACCCTCACACGATTCTTTACCTTTCACTTCATCTTGCCCTTCATTATTGCAGCCCTAGCAACACT +CCACCTCCTATTCTTGCACGAAACGGGATCAAACAACCCCCTAGGAATCACCTCCCATTCCGATAAAATC +ACCTTCCACCCTTACTACACAATCAAAGACGCCCTCGGCTTACTTCTCTTCCTTCTCTCCTTAATGACAT +TAACACTATTCTCACCAGACCTCCTAGGCGACCCAGACAATTATACCCTAGCCAACCCCTTAAACACCCC +TCCCCACATCAAGCCCGAATGATATTTCCTATTCGCCTACACAATTCTCCGATCCGTCCCTAACAAACTA +GGAGGCGTCCTTGCCCTATTACTATCCATCCTCATCCTAGCAATAATCCCCATCCTCCATATATCCAAAC +AACAAAGCATAATATTTCGCCCACTAAGCCAATCACTTTATTGACTCCTAGCCGCAGACCTCCTCATTCT +AACCTGAATCGGAGGACAACCAGTAAGCTACCCTTTTACCATCATTGGACAAGTAGCATCCGTACTATAC +TTCACAACAATCCTAATCCTAATACCAACTATCTCCCTAATTGAAAACAAAATACTCAAATGGGCCTGTC +CTTGTAGTATAAACTAATACACCAGTCTTGTAAACCGGAGATGAAAACCTTTTTCCAAGGACAAATCAGA +GAAAAAGTCTTTAACTCCACCATTAGCACCCAAAGCTAAGATTCTAATTTAAACTATTCTCTGTTCTTTC +ATGGGGAAGCAGATTTGGGTACCACCCAAGTATTGACTCACCCATCAACAACCGCTATGTATTTCGTACA +TTACTGCCAGCCACCATGAATATTGTACGGTACCATAAATACTTGACCACCTGTAGTACATAAAAACCCA +ATCCACATCAAAACCCCCTCCCCATGCTTACAAGCAAGTACAGCAATCAACCCTCAACTATCACACATCA +ACTGCAACTCCAAAGCCACCCCTCACCCACTAGGATACCAACAAACCTACCCACCCTTAACAGTACATAG +TACATAAAGCCATTTACCGTACATAGCACATTACAGTCAAATCCCTTCTCGTCCCCATGGATGACCCCCC +TCAGATAGGGGTCCCTTGACCACCATCCTCCGTGAAATCAATATCCCGCACAAGAGTGCTACTCTCCTCG +CTCCGGGCCCATAACACTTGGGGGTAGCTAAAGTGAACTGTATCCGACATCTGGTTCCTACTTCAGGGTC +ATAAAGCCTAAATAGCCCACACGTTCCCCTTAAATAAGACATCACGATG
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/meme_fimo_input_1.xml Thu May 17 14:11:00 2018 -0400 @@ -0,0 +1,8739 @@ +<?xml version='1.0' encoding='UTF-8' standalone='yes'?> +<!-- Document definition --> +<!DOCTYPE MEME[ +<!ELEMENT MEME ( + training_set, + model, + motifs, + scanned_sites_summary? +)> +<!ATTLIST MEME + version CDATA #REQUIRED + release CDATA #REQUIRED +> +<!-- Training-set elements --> +<!ELEMENT training_set (alphabet, ambigs, sequence*, letter_frequencies)> +<!ATTLIST training_set datafile CDATA #REQUIRED length CDATA #REQUIRED> +<!ELEMENT alphabet (letter*)> +<!ATTLIST alphabet name CDATA #REQUIRED> +<!ELEMENT ambigs (letter*)> +<!ELEMENT letter EMPTY> +<!ATTLIST letter id ID #REQUIRED> +<!ATTLIST letter symbol CDATA #REQUIRED> +<!ATTLIST letter equals CDATA #IMPLIED> +<!ATTLIST letter aliases CDATA #IMPLIED> +<!ATTLIST letter complement CDATA #IMPLIED> +<!ATTLIST letter name CDATA #IMPLIED> +<!ATTLIST letter colour CDATA #IMPLIED> +<!ELEMENT sequence EMPTY> +<!ATTLIST sequence id ID #REQUIRED + name CDATA #REQUIRED + length CDATA #REQUIRED + weight CDATA #REQUIRED +> +<!ELEMENT letter_frequencies (alphabet_array)> + +<!-- Model elements --> +<!ELEMENT model ( + command_line, + host, + type, + nmotifs, + evalue_threshold, + object_function, + spfun, + min_width, + max_width, + wg, + ws, + endgaps, + minsites, + maxsites, + wnsites, + spmap, + spfuzz, + prior, + beta, + maxiter, + distance, + num_sequences, + num_positions, + seed, + hsfrac, + maxwords, + maxsize, + csites, + strands, + priors_file, + reason_for_stopping, + back_order, + background_frequencies +)> +<!ELEMENT command_line (#PCDATA)*> +<!ELEMENT host (#PCDATA)*> +<!ELEMENT type (#PCDATA)*> +<!ELEMENT nmotifs (#PCDATA)*> +<!ELEMENT evalue_threshold (#PCDATA)*> +<!ELEMENT object_function (#PCDATA)*> +<!ELEMENT spfun (#PCDATA)*> +<!ELEMENT min_width (#PCDATA)*> +<!ELEMENT max_width (#PCDATA)*> +<!ELEMENT wg (#PCDATA)*> +<!ELEMENT ws (#PCDATA)*> +<!ELEMENT endgaps (#PCDATA)*> +<!ELEMENT minsites (#PCDATA)*> +<!ELEMENT maxsites (#PCDATA)*> +<!ELEMENT wnsites (#PCDATA)*> +<!ELEMENT spmap (#PCDATA)*> +<!ELEMENT spfuzz (#PCDATA)*> +<!ELEMENT prior (#PCDATA)*> +<!ELEMENT beta (#PCDATA)*> +<!ELEMENT maxiter (#PCDATA)*> +<!ELEMENT distance (#PCDATA)*> +<!ELEMENT num_sequences (#PCDATA)*> +<!ELEMENT num_positions (#PCDATA)*> +<!ELEMENT seed (#PCDATA)*> +<!ELEMENT hsfrac (#PCDATA)*> +<!ELEMENT maxwords (#PCDATA)*> +<!ELEMENT maxsites (#PCDATA)*> +<!ELEMENT csites (#PCDATA)*> +<!ELEMENT strands (#PCDATA)*> +<!ELEMENT priors_file (#PCDATA)*> +<!ELEMENT reason_for_stopping (#PCDATA)*> +<!ELEMENT back_order (#PCDATA)*> +<!ELEMENT background_frequencies (alphabet_array)> +<!ATTLIST background_frequencies source CDATA #REQUIRED> + +<!-- Motif elements --> +<!ELEMENT motifs (motif*)> +<!ELEMENT motif (scores, probabilities, regular_expression?, contributing_sites)> +<!ATTLIST motif id ID #REQUIRED + name CDATA #REQUIRED + alt CDATA "" + width CDATA #REQUIRED + sites CDATA #REQUIRED + llr CDATA #REQUIRED + ic CDATA #REQUIRED + re CDATA #REQUIRED + bayes_threshold CDATA #REQUIRED + e_value CDATA #REQUIRED + elapsed_time CDATA #REQUIRED + url CDATA "" +> +<!ELEMENT scores (alphabet_matrix)> +<!ELEMENT probabilities (alphabet_matrix)> +<!ELEMENT regular_expression (#PCDATA)*> + +<!-- Contributing site elements --> +<!-- Contributing sites are motif occurences found during the motif discovery phase --> +<!ELEMENT contributing_sites (contributing_site*)> +<!ELEMENT contributing_site (left_flank, site, right_flank)> +<!ATTLIST contributing_site sequence_id IDREF #REQUIRED + position CDATA #REQUIRED + strand (plus|minus|none) 'none' + pvalue CDATA #REQUIRED +> +<!-- The left_flank contains the sequence for 10 bases to the left of the motif start --> +<!ELEMENT left_flank (#PCDATA)> +<!-- The site contains the sequence for the motif instance --> +<!ELEMENT site (letter_ref*)> +<!-- The right_flank contains the sequence for 10 bases to the right of the motif end --> +<!ELEMENT right_flank (#PCDATA)> + +<!-- Scanned site elements --> +<!-- Scanned sites are motif occurences found during the sequence scan phase --> +<!ELEMENT scanned_sites_summary (scanned_sites*)> +<!ATTLIST scanned_sites_summary p_thresh CDATA #REQUIRED> +<!ELEMENT scanned_sites (scanned_site*)> +<!ATTLIST scanned_sites sequence_id IDREF #REQUIRED + pvalue CDATA #REQUIRED + num_sites CDATA #REQUIRED> +<!ELEMENT scanned_site EMPTY> +<!ATTLIST scanned_site motif_id IDREF #REQUIRED + strand (plus|minus|none) 'none' + position CDATA #REQUIRED + pvalue CDATA #REQUIRED> + +<!-- Utility elements --> +<!-- A reference to a letter in the alphabet --> +<!ELEMENT letter_ref EMPTY> +<!ATTLIST letter_ref letter_id IDREF #REQUIRED> +<!-- A alphabet-array contains one floating point value for each letter in an alphabet --> +<!ELEMENT alphabet_array (value*)> +<!ELEMENT value (#PCDATA)> +<!ATTLIST value letter_id IDREF #REQUIRED> + +<!-- A alphabet_matrix contains one alphabet_array for each position in a motif --> +<!ELEMENT alphabet_matrix (alphabet_array*)> + +]> +<!-- Begin document body --> +<MEME version="4.12.0" release="Tue Jun 27 16:22:50 2017 -0700"> +<training_set datafile="meme_inputx.fa" length="1000"> +<alphabet name="DNA" like="dna"> +<letter id="A" symbol="A" complement="T" name="Adenine" colour="CC0000"/> +<letter id="C" symbol="C" complement="G" name="Cytosine" colour="0000CC"/> +<letter id="G" symbol="G" complement="C" name="Guanine" colour="FFB300"/> +<letter id="T" symbol="T" aliases="U" complement="A" name="Thymine" colour="008000"/> +<letter id="N" symbol="N" aliases="X." equals="ACGT" name="Any base"/> +<letter id="V" symbol="V" equals="ACG" name="Not T"/> +<letter id="H" symbol="H" equals="ACT" name="Not G"/> +<letter id="D" symbol="D" equals="AGT" name="Not C"/> +<letter id="B" symbol="B" equals="CGT" name="Not A"/> +<letter id="M" symbol="M" equals="AC" name="Amino"/> +<letter id="R" symbol="R" equals="AG" name="Purine"/> +<letter id="W" symbol="W" equals="AT" name="Weak"/> +<letter id="S" symbol="S" equals="CG" name="Strong"/> +<letter id="Y" symbol="Y" equals="CT" name="Pyrimidine"/> +<letter id="K" symbol="K" equals="GT" name="Keto"/> +</alphabet> +<sequence id="sequence_0" name="QKI_HepG2_rep01_29358" length="81" weight="1.000000" /> +<sequence id="sequence_1" name="QKI_HepG2_rep01_15042" length="81" weight="1.000000" /> +<sequence id="sequence_2" name="QKI_HepG2_rep01_48178" length="81" weight="1.000000" /> +<sequence id="sequence_3" name="QKI_HepG2_rep01_43658" length="81" weight="1.000000" /> +<sequence id="sequence_4" name="QKI_HepG2_rep01_33613" length="81" weight="1.000000" /> +<sequence id="sequence_5" name="QKI_HepG2_rep01_54213" length="81" weight="1.000000" /> +<sequence id="sequence_6" name="QKI_HepG2_rep01_9280" length="81" weight="1.000000" /> +<sequence id="sequence_7" name="QKI_HepG2_rep01_38176" length="81" weight="1.000000" /> +<sequence id="sequence_8" name="QKI_HepG2_rep01_5190" length="81" weight="1.000000" /> +<sequence id="sequence_9" name="QKI_HepG2_rep01_46364" length="81" weight="1.000000" /> +<sequence id="sequence_10" name="QKI_HepG2_rep01_35016" length="81" weight="1.000000" /> +<sequence id="sequence_11" name="QKI_HepG2_rep01_30752" length="81" weight="1.000000" /> +<sequence id="sequence_12" name="QKI_HepG2_rep01_30905" length="81" weight="1.000000" /> +<sequence id="sequence_13" name="QKI_HepG2_rep01_54108" length="81" weight="1.000000" /> +<sequence id="sequence_14" name="QKI_HepG2_rep01_4260" length="81" weight="1.000000" /> +<sequence id="sequence_15" name="QKI_HepG2_rep01_1449" length="81" weight="1.000000" /> +<sequence id="sequence_16" name="QKI_HepG2_rep01_54286" length="81" weight="1.000000" /> +<sequence id="sequence_17" name="QKI_HepG2_rep01_25178" length="81" weight="1.000000" /> +<sequence id="sequence_18" name="QKI_HepG2_rep01_51192" length="81" weight="1.000000" /> +<sequence id="sequence_19" name="QKI_HepG2_rep01_51768" length="81" weight="1.000000" /> +<sequence id="sequence_20" name="QKI_HepG2_rep01_50149" length="81" weight="1.000000" /> +<sequence id="sequence_21" name="QKI_HepG2_rep01_32123" length="81" weight="1.000000" /> +<sequence id="sequence_22" name="QKI_HepG2_rep01_15070" length="81" weight="1.000000" /> +<sequence id="sequence_23" name="QKI_HepG2_rep01_31017" length="81" weight="1.000000" /> +<sequence id="sequence_24" name="QKI_HepG2_rep01_44156" length="81" weight="1.000000" /> +<sequence id="sequence_25" name="QKI_HepG2_rep01_46738" length="81" weight="1.000000" /> +<sequence id="sequence_26" name="QKI_HepG2_rep01_7558" length="81" weight="1.000000" /> +<sequence id="sequence_27" name="QKI_HepG2_rep01_51260" length="81" weight="1.000000" /> +<sequence id="sequence_28" name="QKI_HepG2_rep01_17486" length="81" weight="1.000000" /> +<sequence id="sequence_29" name="QKI_HepG2_rep01_14960" length="81" weight="1.000000" /> +<sequence id="sequence_30" name="QKI_HepG2_rep01_33496" length="81" weight="1.000000" /> +<sequence id="sequence_31" name="QKI_HepG2_rep01_34434" length="81" weight="1.000000" /> +<sequence id="sequence_32" name="QKI_HepG2_rep01_52171" length="81" weight="1.000000" /> +<sequence id="sequence_33" name="QKI_HepG2_rep01_43488" length="81" weight="1.000000" /> +<sequence id="sequence_34" name="QKI_HepG2_rep01_21553" length="81" weight="1.000000" /> +<sequence id="sequence_35" name="QKI_HepG2_rep01_32206" length="81" weight="1.000000" /> +<sequence id="sequence_36" name="QKI_HepG2_rep01_49099" length="81" weight="1.000000" /> +<sequence id="sequence_37" name="QKI_HepG2_rep01_54516" length="81" weight="1.000000" /> +<sequence id="sequence_38" name="QKI_HepG2_rep01_41364" length="81" weight="1.000000" /> +<sequence id="sequence_39" name="QKI_HepG2_rep01_42776" length="81" weight="1.000000" /> +<sequence id="sequence_40" name="QKI_HepG2_rep01_33728" length="81" weight="1.000000" /> +<sequence id="sequence_41" name="QKI_HepG2_rep01_34426" length="81" weight="1.000000" /> +<sequence id="sequence_42" name="QKI_HepG2_rep01_49317" length="81" weight="1.000000" /> +<sequence id="sequence_43" name="QKI_HepG2_rep01_2721" length="81" weight="1.000000" /> +<sequence id="sequence_44" name="QKI_HepG2_rep01_70" length="81" weight="1.000000" /> +<sequence id="sequence_45" name="QKI_HepG2_rep01_3629" length="81" weight="1.000000" /> +<sequence id="sequence_46" name="QKI_HepG2_rep01_32675" length="81" weight="1.000000" /> +<sequence id="sequence_47" name="QKI_HepG2_rep01_29195" length="81" weight="1.000000" /> +<sequence id="sequence_48" name="QKI_HepG2_rep01_10867" length="81" weight="1.000000" /> +<sequence id="sequence_49" name="QKI_HepG2_rep01_54614" length="81" weight="1.000000" /> +<sequence id="sequence_50" name="QKI_HepG2_rep01_23039" length="81" weight="1.000000" /> +<sequence id="sequence_51" name="QKI_HepG2_rep01_12802" length="81" weight="1.000000" /> +<sequence id="sequence_52" name="QKI_HepG2_rep01_40580" length="81" weight="1.000000" /> +<sequence id="sequence_53" name="QKI_HepG2_rep01_53980" length="81" weight="1.000000" /> +<sequence id="sequence_54" name="QKI_HepG2_rep01_23257" length="81" weight="1.000000" /> +<sequence id="sequence_55" name="QKI_HepG2_rep01_46894" length="81" weight="1.000000" /> +<sequence id="sequence_56" name="QKI_HepG2_rep01_33658" length="81" weight="1.000000" /> +<sequence id="sequence_57" name="QKI_HepG2_rep01_29155" length="81" weight="1.000000" /> +<sequence id="sequence_58" name="QKI_HepG2_rep01_52906" length="81" weight="1.000000" /> +<sequence id="sequence_59" name="QKI_HepG2_rep01_7114" length="81" weight="1.000000" /> +<sequence id="sequence_60" name="QKI_HepG2_rep01_48212" length="81" weight="1.000000" /> +<sequence id="sequence_61" name="QKI_HepG2_rep01_51052" length="81" weight="1.000000" /> +<sequence id="sequence_62" name="QKI_HepG2_rep01_36331" length="81" weight="1.000000" /> +<sequence id="sequence_63" name="QKI_HepG2_rep01_17037" length="81" weight="1.000000" /> +<sequence id="sequence_64" name="QKI_HepG2_rep01_6482" length="81" weight="1.000000" /> +<sequence id="sequence_65" name="QKI_HepG2_rep01_54284" length="81" weight="1.000000" /> +<sequence id="sequence_66" name="QKI_HepG2_rep01_8241" length="81" weight="1.000000" /> +<sequence id="sequence_67" name="QKI_HepG2_rep01_30440" length="81" weight="1.000000" /> +<sequence id="sequence_68" name="QKI_HepG2_rep01_30966" length="81" weight="1.000000" /> +<sequence id="sequence_69" name="QKI_HepG2_rep01_25446" length="81" weight="1.000000" /> +<sequence id="sequence_70" name="QKI_HepG2_rep01_10821" length="81" weight="1.000000" /> +<sequence id="sequence_71" name="QKI_HepG2_rep01_548" length="81" weight="1.000000" /> +<sequence id="sequence_72" name="QKI_HepG2_rep01_38109" length="81" weight="1.000000" /> +<sequence id="sequence_73" name="QKI_HepG2_rep01_16917" length="81" weight="1.000000" /> +<sequence id="sequence_74" name="QKI_HepG2_rep01_44144" length="81" weight="1.000000" /> +<sequence id="sequence_75" name="QKI_HepG2_rep01_41444" length="81" weight="1.000000" /> +<sequence id="sequence_76" name="QKI_HepG2_rep01_18540" length="81" weight="1.000000" /> +<sequence id="sequence_77" name="QKI_HepG2_rep01_1716" length="81" weight="1.000000" /> +<sequence id="sequence_78" name="QKI_HepG2_rep01_42433" length="81" weight="1.000000" /> +<sequence id="sequence_79" name="QKI_HepG2_rep01_12479" length="81" weight="1.000000" /> +<sequence id="sequence_80" name="QKI_HepG2_rep01_23479" length="81" weight="1.000000" /> +<sequence id="sequence_81" name="QKI_HepG2_rep01_44834" length="81" weight="1.000000" /> +<sequence id="sequence_82" name="QKI_HepG2_rep01_16900" length="81" weight="1.000000" /> +<sequence id="sequence_83" name="QKI_HepG2_rep01_27817" length="81" weight="1.000000" /> +<sequence id="sequence_84" name="QKI_HepG2_rep01_6121" length="81" weight="1.000000" /> +<sequence id="sequence_85" name="QKI_HepG2_rep01_50364" length="81" weight="1.000000" /> +<sequence id="sequence_86" name="QKI_HepG2_rep01_12788" length="81" weight="1.000000" /> +<sequence id="sequence_87" name="QKI_HepG2_rep01_39967" length="81" weight="1.000000" /> +<sequence id="sequence_88" name="QKI_HepG2_rep01_18638" length="81" weight="1.000000" /> +<sequence id="sequence_89" name="QKI_HepG2_rep01_34838" length="81" weight="1.000000" /> +<sequence id="sequence_90" name="QKI_HepG2_rep01_53002" length="81" weight="1.000000" /> +<sequence id="sequence_91" name="QKI_HepG2_rep01_42554" length="81" weight="1.000000" /> +<sequence id="sequence_92" name="QKI_HepG2_rep01_448" length="81" weight="1.000000" /> +<sequence id="sequence_93" name="QKI_HepG2_rep01_46295" length="81" weight="1.000000" /> +<sequence id="sequence_94" name="QKI_HepG2_rep01_40447" length="81" weight="1.000000" /> +<sequence id="sequence_95" name="QKI_HepG2_rep01_6188" length="81" weight="1.000000" /> +<sequence id="sequence_96" name="QKI_HepG2_rep01_23569" length="81" weight="1.000000" /> +<sequence id="sequence_97" name="QKI_HepG2_rep01_43854" length="81" weight="1.000000" /> +<sequence id="sequence_98" name="QKI_HepG2_rep01_39137" length="81" weight="1.000000" /> +<sequence id="sequence_99" name="QKI_HepG2_rep01_46196" length="81" weight="1.000000" /> +<sequence id="sequence_100" name="QKI_HepG2_rep01_13287" length="81" weight="1.000000" /> +<sequence id="sequence_101" name="QKI_HepG2_rep01_12881" length="81" weight="1.000000" /> +<sequence id="sequence_102" name="QKI_HepG2_rep01_50598" length="81" weight="1.000000" /> +<sequence id="sequence_103" name="QKI_HepG2_rep01_8300" length="81" weight="1.000000" /> +<sequence id="sequence_104" name="QKI_HepG2_rep01_19971" length="81" weight="1.000000" /> +<sequence id="sequence_105" name="QKI_HepG2_rep01_15093" length="81" weight="1.000000" /> +<sequence id="sequence_106" name="QKI_HepG2_rep01_49200" length="81" weight="1.000000" /> +<sequence id="sequence_107" name="QKI_HepG2_rep01_6452" length="81" weight="1.000000" /> +<sequence id="sequence_108" name="QKI_HepG2_rep01_1453" length="81" weight="1.000000" /> +<sequence id="sequence_109" name="QKI_HepG2_rep01_26845" length="81" weight="1.000000" /> +<sequence id="sequence_110" name="QKI_HepG2_rep01_23241" length="81" weight="1.000000" /> +<sequence id="sequence_111" name="QKI_HepG2_rep01_40564" length="81" weight="1.000000" /> +<sequence id="sequence_112" name="QKI_HepG2_rep01_32280" length="81" weight="1.000000" /> +<sequence id="sequence_113" name="QKI_HepG2_rep01_44482" length="81" weight="1.000000" /> +<sequence id="sequence_114" name="QKI_HepG2_rep01_32445" length="81" weight="1.000000" /> +<sequence id="sequence_115" name="QKI_HepG2_rep01_48076" length="81" weight="1.000000" /> +<sequence id="sequence_116" name="QKI_HepG2_rep01_18808" length="81" weight="1.000000" /> +<sequence id="sequence_117" name="QKI_HepG2_rep01_42678" length="81" weight="1.000000" /> +<sequence id="sequence_118" name="QKI_HepG2_rep01_32315" length="81" weight="1.000000" /> +<sequence id="sequence_119" name="QKI_HepG2_rep01_51799" length="81" weight="1.000000" /> +<sequence id="sequence_120" name="QKI_HepG2_rep01_53264" length="81" weight="1.000000" /> +<sequence id="sequence_121" name="QKI_HepG2_rep01_21602" length="81" weight="1.000000" /> +<sequence id="sequence_122" name="QKI_HepG2_rep01_17440" length="81" weight="1.000000" /> +<sequence id="sequence_123" name="QKI_HepG2_rep01_41518" length="81" weight="1.000000" /> +<sequence id="sequence_124" name="QKI_HepG2_rep01_41640" length="81" weight="1.000000" /> +<sequence id="sequence_125" name="QKI_HepG2_rep01_39041" length="81" weight="1.000000" /> +<sequence id="sequence_126" name="QKI_HepG2_rep01_43211" length="81" weight="1.000000" /> +<sequence id="sequence_127" name="QKI_HepG2_rep01_46759" length="81" weight="1.000000" /> +<sequence id="sequence_128" name="QKI_HepG2_rep01_12411" length="81" weight="1.000000" /> +<sequence id="sequence_129" name="QKI_HepG2_rep01_46195" length="81" weight="1.000000" /> +<sequence id="sequence_130" name="QKI_HepG2_rep01_48269" length="81" weight="1.000000" /> +<sequence id="sequence_131" name="QKI_HepG2_rep01_36756" length="81" weight="1.000000" /> +<sequence id="sequence_132" name="QKI_HepG2_rep01_52674" length="81" weight="1.000000" /> +<sequence id="sequence_133" name="QKI_HepG2_rep01_38140" length="81" weight="1.000000" /> +<sequence id="sequence_134" name="QKI_HepG2_rep01_34461" length="81" weight="1.000000" /> +<sequence id="sequence_135" name="QKI_HepG2_rep01_17472" length="81" weight="1.000000" /> +<sequence id="sequence_136" name="QKI_HepG2_rep01_32086" length="81" weight="1.000000" /> +<sequence id="sequence_137" name="QKI_HepG2_rep01_4337" length="81" weight="1.000000" /> +<sequence id="sequence_138" name="QKI_HepG2_rep01_25316" length="81" weight="1.000000" /> +<sequence id="sequence_139" name="QKI_HepG2_rep01_40699" length="81" weight="1.000000" /> +<sequence id="sequence_140" name="QKI_HepG2_rep01_53037" length="81" weight="1.000000" /> +<sequence id="sequence_141" name="QKI_HepG2_rep01_9407" length="81" weight="1.000000" /> +<sequence id="sequence_142" name="QKI_HepG2_rep01_7112" length="81" weight="1.000000" /> +<sequence id="sequence_143" name="QKI_HepG2_rep01_33550" length="81" weight="1.000000" /> +<sequence id="sequence_144" name="QKI_HepG2_rep01_17382" length="81" weight="1.000000" /> +<sequence id="sequence_145" name="QKI_HepG2_rep01_47026" length="81" weight="1.000000" /> +<sequence id="sequence_146" name="QKI_HepG2_rep01_34413" length="81" weight="1.000000" /> +<sequence id="sequence_147" name="QKI_HepG2_rep01_17034" length="81" weight="1.000000" /> +<sequence id="sequence_148" name="QKI_HepG2_rep01_34406" length="81" weight="1.000000" /> +<sequence id="sequence_149" name="QKI_HepG2_rep01_49" length="81" weight="1.000000" /> +<sequence id="sequence_150" name="QKI_HepG2_rep01_30669" length="81" weight="1.000000" /> +<sequence id="sequence_151" name="QKI_HepG2_rep01_45963" length="81" weight="1.000000" /> +<sequence id="sequence_152" name="QKI_HepG2_rep01_46709" length="81" weight="1.000000" /> +<sequence id="sequence_153" name="QKI_HepG2_rep01_20068" length="81" weight="1.000000" /> +<sequence id="sequence_154" name="QKI_HepG2_rep01_27145" length="81" weight="1.000000" /> +<sequence id="sequence_155" name="QKI_HepG2_rep01_3753" length="81" weight="1.000000" /> +<sequence id="sequence_156" name="QKI_HepG2_rep01_29049" length="81" weight="1.000000" /> +<sequence id="sequence_157" name="QKI_HepG2_rep01_41244" length="81" weight="1.000000" /> +<sequence id="sequence_158" name="QKI_HepG2_rep01_18493" length="81" weight="1.000000" /> +<sequence id="sequence_159" name="QKI_HepG2_rep01_6173" length="81" weight="1.000000" /> +<sequence id="sequence_160" name="QKI_HepG2_rep01_51123" length="81" weight="1.000000" /> +<sequence id="sequence_161" name="QKI_HepG2_rep01_21867" length="81" weight="1.000000" /> +<sequence id="sequence_162" name="QKI_HepG2_rep01_15590" length="81" weight="1.000000" /> +<sequence id="sequence_163" name="QKI_HepG2_rep01_40510" length="81" weight="1.000000" /> +<sequence id="sequence_164" name="QKI_HepG2_rep01_34436" length="81" weight="1.000000" /> +<sequence id="sequence_165" name="QKI_HepG2_rep01_7607" length="81" weight="1.000000" /> +<sequence id="sequence_166" name="QKI_HepG2_rep01_36389" length="81" weight="1.000000" /> +<sequence id="sequence_167" name="QKI_HepG2_rep01_5006" length="81" weight="1.000000" /> +<sequence id="sequence_168" name="QKI_HepG2_rep01_36653" length="81" weight="1.000000" /> +<sequence id="sequence_169" name="QKI_HepG2_rep01_53297" length="81" weight="1.000000" /> +<sequence id="sequence_170" name="QKI_HepG2_rep01_53243" length="81" weight="1.000000" /> +<sequence id="sequence_171" name="QKI_HepG2_rep01_43531" length="81" weight="1.000000" /> +<sequence id="sequence_172" name="QKI_HepG2_rep01_226" length="81" weight="1.000000" /> +<sequence id="sequence_173" name="QKI_HepG2_rep01_3123" length="81" weight="1.000000" /> +<sequence id="sequence_174" name="QKI_HepG2_rep01_30934" length="81" weight="1.000000" /> +<sequence id="sequence_175" name="QKI_HepG2_rep01_12601" length="81" weight="1.000000" /> +<sequence id="sequence_176" name="QKI_HepG2_rep01_54487" length="81" weight="1.000000" /> +<sequence id="sequence_177" name="QKI_HepG2_rep01_25310" length="81" weight="1.000000" /> +<sequence id="sequence_178" name="QKI_HepG2_rep01_43728" length="81" weight="1.000000" /> +<sequence id="sequence_179" name="QKI_HepG2_rep01_25018" length="81" weight="1.000000" /> +<sequence id="sequence_180" name="QKI_HepG2_rep01_33995" length="81" weight="1.000000" /> +<sequence id="sequence_181" name="QKI_HepG2_rep01_32213" length="81" weight="1.000000" /> +<sequence id="sequence_182" name="QKI_HepG2_rep01_25443" length="81" weight="1.000000" /> +<sequence id="sequence_183" name="QKI_HepG2_rep01_29144" length="81" weight="1.000000" /> +<sequence id="sequence_184" name="QKI_HepG2_rep01_43271" length="81" weight="1.000000" /> +<sequence id="sequence_185" name="QKI_HepG2_rep01_18924" length="81" weight="1.000000" /> +<sequence id="sequence_186" name="QKI_HepG2_rep01_14935" length="81" weight="1.000000" /> +<sequence id="sequence_187" name="QKI_HepG2_rep01_26838" length="81" weight="1.000000" /> +<sequence id="sequence_188" name="QKI_HepG2_rep01_7597" length="81" weight="1.000000" /> +<sequence id="sequence_189" name="QKI_HepG2_rep01_6373" length="81" weight="1.000000" /> +<sequence id="sequence_190" name="QKI_HepG2_rep01_10972" length="81" weight="1.000000" /> +<sequence id="sequence_191" name="QKI_HepG2_rep01_36641" length="81" weight="1.000000" /> +<sequence id="sequence_192" name="QKI_HepG2_rep01_1524" length="81" weight="1.000000" /> +<sequence id="sequence_193" name="QKI_HepG2_rep01_23520" length="81" weight="1.000000" /> +<sequence id="sequence_194" name="QKI_HepG2_rep01_15280" length="81" weight="1.000000" /> +<sequence id="sequence_195" name="QKI_HepG2_rep01_32030" length="81" weight="1.000000" /> +<sequence id="sequence_196" name="QKI_HepG2_rep01_48184" length="81" weight="1.000000" /> +<sequence id="sequence_197" name="QKI_HepG2_rep01_52683" length="81" weight="1.000000" /> +<sequence id="sequence_198" name="QKI_HepG2_rep01_29216" length="81" weight="1.000000" /> +<sequence id="sequence_199" name="QKI_HepG2_rep01_2722" length="81" weight="1.000000" /> +<sequence id="sequence_200" name="QKI_HepG2_rep01_44151" length="81" weight="1.000000" /> +<sequence id="sequence_201" name="QKI_HepG2_rep01_51202" length="81" weight="1.000000" /> +<sequence id="sequence_202" name="QKI_HepG2_rep01_9410" length="81" weight="1.000000" /> +<sequence id="sequence_203" name="QKI_HepG2_rep01_4309" length="81" weight="1.000000" /> +<sequence id="sequence_204" name="QKI_HepG2_rep01_44128" length="81" weight="1.000000" /> +<sequence id="sequence_205" name="QKI_HepG2_rep01_12506" length="81" weight="1.000000" /> +<sequence id="sequence_206" name="QKI_HepG2_rep01_7358" length="81" weight="1.000000" /> +<sequence id="sequence_207" name="QKI_HepG2_rep01_39831" length="81" weight="1.000000" /> +<sequence id="sequence_208" name="QKI_HepG2_rep01_13247" length="81" weight="1.000000" /> +<sequence id="sequence_209" name="QKI_HepG2_rep01_4807" length="81" weight="1.000000" /> +<sequence id="sequence_210" name="QKI_HepG2_rep01_48309" length="81" weight="1.000000" /> +<sequence id="sequence_211" name="QKI_HepG2_rep01_15365" length="81" weight="1.000000" /> +<sequence id="sequence_212" name="QKI_HepG2_rep01_6430" length="81" weight="1.000000" /> +<sequence id="sequence_213" name="QKI_HepG2_rep01_43798" length="81" weight="1.000000" /> +<sequence id="sequence_214" name="QKI_HepG2_rep01_48074" length="81" weight="1.000000" /> +<sequence id="sequence_215" name="QKI_HepG2_rep01_49379" length="81" weight="1.000000" /> +<sequence id="sequence_216" name="QKI_HepG2_rep01_54403" length="81" weight="1.000000" /> +<sequence id="sequence_217" name="QKI_HepG2_rep01_4336" length="81" weight="1.000000" /> +<sequence id="sequence_218" name="QKI_HepG2_rep01_19802" length="81" weight="1.000000" /> +<sequence id="sequence_219" name="QKI_HepG2_rep01_13069" length="81" weight="1.000000" /> +<sequence id="sequence_220" name="QKI_HepG2_rep01_222" length="81" weight="1.000000" /> +<sequence id="sequence_221" name="QKI_HepG2_rep01_49266" length="81" weight="1.000000" /> +<sequence id="sequence_222" name="QKI_HepG2_rep01_43823" length="81" weight="1.000000" /> +<sequence id="sequence_223" name="QKI_HepG2_rep01_54631" length="81" weight="1.000000" /> +<sequence id="sequence_224" name="QKI_HepG2_rep01_38114" length="81" weight="1.000000" /> +<sequence id="sequence_225" name="QKI_HepG2_rep01_41725" length="81" weight="1.000000" /> +<sequence id="sequence_226" name="QKI_HepG2_rep01_29209" length="81" weight="1.000000" /> +<sequence id="sequence_227" name="QKI_HepG2_rep01_5966" length="81" weight="1.000000" /> +<sequence id="sequence_228" name="QKI_HepG2_rep01_46685" length="81" weight="1.000000" /> +<sequence id="sequence_229" name="QKI_HepG2_rep01_46084" length="81" weight="1.000000" /> +<sequence id="sequence_230" name="QKI_HepG2_rep01_18787" length="81" weight="1.000000" /> +<sequence id="sequence_231" name="QKI_HepG2_rep01_36669" length="81" weight="1.000000" /> +<sequence id="sequence_232" name="QKI_HepG2_rep01_45983" length="81" weight="1.000000" /> +<sequence id="sequence_233" name="QKI_HepG2_rep01_22" length="81" weight="1.000000" /> +<sequence id="sequence_234" name="QKI_HepG2_rep01_54541" length="81" weight="1.000000" /> +<sequence id="sequence_235" name="QKI_HepG2_rep01_37823" length="81" weight="1.000000" /> +<sequence id="sequence_236" name="QKI_HepG2_rep01_15007" length="81" weight="1.000000" /> +<sequence id="sequence_237" name="QKI_HepG2_rep01_7532" length="81" weight="1.000000" /> +<sequence id="sequence_238" name="QKI_HepG2_rep01_8999" length="81" weight="1.000000" /> +<sequence id="sequence_239" name="QKI_HepG2_rep01_44097" length="81" weight="1.000000" /> +<sequence id="sequence_240" name="QKI_HepG2_rep01_43656" length="81" weight="1.000000" /> +<sequence id="sequence_241" name="QKI_HepG2_rep01_36654" length="81" weight="1.000000" /> +<sequence id="sequence_242" name="QKI_HepG2_rep01_21676" length="81" weight="1.000000" /> +<sequence id="sequence_243" name="QKI_HepG2_rep01_18478" length="81" weight="1.000000" /> +<sequence id="sequence_244" name="QKI_HepG2_rep01_2491" length="81" weight="1.000000" /> +<sequence id="sequence_245" name="QKI_HepG2_rep01_46403" length="81" weight="1.000000" /> +<sequence id="sequence_246" name="QKI_HepG2_rep01_4887" length="81" weight="1.000000" /> +<sequence id="sequence_247" name="QKI_HepG2_rep01_4227" length="81" weight="1.000000" /> +<sequence id="sequence_248" name="QKI_HepG2_rep01_14961" length="81" weight="1.000000" /> +<sequence id="sequence_249" name="QKI_HepG2_rep01_13257" length="81" weight="1.000000" /> +<sequence id="sequence_250" name="QKI_HepG2_rep01_38121" length="81" weight="1.000000" /> +<sequence id="sequence_251" name="QKI_HepG2_rep01_50899" length="81" weight="1.000000" /> +<sequence id="sequence_252" name="QKI_HepG2_rep01_1468" length="81" weight="1.000000" /> +<sequence id="sequence_253" name="QKI_HepG2_rep01_44014" length="81" weight="1.000000" /> +<sequence id="sequence_254" name="QKI_HepG2_rep01_38180" length="81" weight="1.000000" /> +<sequence id="sequence_255" name="QKI_HepG2_rep01_10679" length="81" weight="1.000000" /> +<sequence id="sequence_256" name="QKI_HepG2_rep01_43795" length="81" weight="1.000000" /> +<sequence id="sequence_257" name="QKI_HepG2_rep01_51046" length="81" weight="1.000000" /> +<sequence id="sequence_258" name="QKI_HepG2_rep01_36293" length="81" weight="1.000000" /> +<sequence id="sequence_259" name="QKI_HepG2_rep01_39703" length="81" weight="1.000000" /> +<sequence id="sequence_260" name="QKI_HepG2_rep01_44554" length="81" weight="1.000000" /> +<sequence id="sequence_261" name="QKI_HepG2_rep01_7448" length="81" weight="1.000000" /> +<sequence id="sequence_262" name="QKI_HepG2_rep01_46704" length="81" weight="1.000000" /> +<sequence id="sequence_263" name="QKI_HepG2_rep01_51083" length="81" weight="1.000000" /> +<sequence id="sequence_264" name="QKI_HepG2_rep01_21347" length="81" weight="1.000000" /> +<sequence id="sequence_265" name="QKI_HepG2_rep01_52651" length="81" weight="1.000000" /> +<sequence id="sequence_266" name="QKI_HepG2_rep01_7352" length="81" weight="1.000000" /> +<sequence id="sequence_267" name="QKI_HepG2_rep01_40435" length="81" weight="1.000000" /> +<sequence id="sequence_268" name="QKI_HepG2_rep01_25011" length="81" weight="1.000000" /> +<sequence id="sequence_269" name="QKI_HepG2_rep01_3246" length="81" weight="1.000000" /> +<sequence id="sequence_270" name="QKI_HepG2_rep01_18798" length="81" weight="1.000000" /> +<sequence id="sequence_271" name="QKI_HepG2_rep01_4775" length="81" weight="1.000000" /> +<sequence id="sequence_272" name="QKI_HepG2_rep01_17115" length="81" weight="1.000000" /> +<sequence id="sequence_273" name="QKI_HepG2_rep01_7538" length="81" weight="1.000000" /> +<sequence id="sequence_274" name="QKI_HepG2_rep01_49261" length="81" weight="1.000000" /> +<sequence id="sequence_275" name="QKI_HepG2_rep01_12817" length="81" weight="1.000000" /> +<sequence id="sequence_276" name="QKI_HepG2_rep01_37820" length="81" weight="1.000000" /> +<sequence id="sequence_277" name="QKI_HepG2_rep01_23200" length="81" weight="1.000000" /> +<sequence id="sequence_278" name="QKI_HepG2_rep01_32680" length="81" weight="1.000000" /> +<sequence id="sequence_279" name="QKI_HepG2_rep01_52122" length="81" weight="1.000000" /> +<sequence id="sequence_280" name="QKI_HepG2_rep01_38726" length="81" weight="1.000000" /> +<sequence id="sequence_281" name="QKI_HepG2_rep01_15005" length="81" weight="1.000000" /> +<sequence id="sequence_282" name="QKI_HepG2_rep01_30925" length="81" weight="1.000000" /> +<sequence id="sequence_283" name="QKI_HepG2_rep01_8088" length="81" weight="1.000000" /> +<sequence id="sequence_284" name="QKI_HepG2_rep01_51189" length="81" weight="1.000000" /> +<sequence id="sequence_285" name="QKI_HepG2_rep01_33659" length="81" weight="1.000000" /> +<sequence id="sequence_286" name="QKI_HepG2_rep01_12953" length="81" weight="1.000000" /> +<sequence id="sequence_287" name="QKI_HepG2_rep01_54235" length="81" weight="1.000000" /> +<sequence id="sequence_288" name="QKI_HepG2_rep01_1821" length="81" weight="1.000000" /> +<sequence id="sequence_289" name="QKI_HepG2_rep01_18599" length="81" weight="1.000000" /> +<sequence id="sequence_290" name="QKI_HepG2_rep01_32175" length="81" weight="1.000000" /> +<sequence id="sequence_291" name="QKI_HepG2_rep01_50607" length="81" weight="1.000000" /> +<sequence id="sequence_292" name="QKI_HepG2_rep01_43259" length="81" weight="1.000000" /> +<sequence id="sequence_293" name="QKI_HepG2_rep01_34519" length="81" weight="1.000000" /> +<sequence id="sequence_294" name="QKI_HepG2_rep01_32279" length="81" weight="1.000000" /> +<sequence id="sequence_295" name="QKI_HepG2_rep01_42234" length="81" weight="1.000000" /> +<sequence id="sequence_296" name="QKI_HepG2_rep01_15325" length="81" weight="1.000000" /> +<sequence id="sequence_297" name="QKI_HepG2_rep01_21948" length="81" weight="1.000000" /> +<sequence id="sequence_298" name="QKI_HepG2_rep01_43212" length="81" weight="1.000000" /> +<sequence id="sequence_299" name="QKI_HepG2_rep01_20005" length="81" weight="1.000000" /> +<sequence id="sequence_300" name="QKI_HepG2_rep01_9170" length="81" weight="1.000000" /> +<sequence id="sequence_301" name="QKI_HepG2_rep01_6218" length="81" weight="1.000000" /> +<sequence id="sequence_302" name="QKI_HepG2_rep01_49891" length="81" weight="1.000000" /> +<sequence id="sequence_303" name="QKI_HepG2_rep01_46591" length="81" weight="1.000000" /> +<sequence id="sequence_304" name="QKI_HepG2_rep01_40428" length="81" weight="1.000000" /> +<sequence id="sequence_305" name="QKI_HepG2_rep01_34850" length="81" weight="1.000000" /> +<sequence id="sequence_306" name="QKI_HepG2_rep01_49125" length="81" weight="1.000000" /> +<sequence id="sequence_307" name="QKI_HepG2_rep01_51746" length="81" weight="1.000000" /> +<sequence id="sequence_308" name="QKI_HepG2_rep01_9169" length="81" weight="1.000000" /> +<sequence id="sequence_309" name="QKI_HepG2_rep01_44679" length="81" weight="1.000000" /> +<sequence id="sequence_310" name="QKI_HepG2_rep01_50456" length="81" weight="1.000000" /> +<sequence id="sequence_311" name="QKI_HepG2_rep01_12538" length="81" weight="1.000000" /> +<sequence id="sequence_312" name="QKI_HepG2_rep01_8540" length="81" weight="1.000000" /> +<sequence id="sequence_313" name="QKI_HepG2_rep01_44196" length="81" weight="1.000000" /> +<sequence id="sequence_314" name="QKI_HepG2_rep01_14827" length="81" weight="1.000000" /> +<sequence id="sequence_315" name="QKI_HepG2_rep01_6349" length="81" weight="1.000000" /> +<sequence id="sequence_316" name="QKI_HepG2_rep01_15433" length="81" weight="1.000000" /> +<sequence id="sequence_317" name="QKI_HepG2_rep01_30393" length="81" weight="1.000000" /> +<sequence id="sequence_318" name="QKI_HepG2_rep01_26886" length="81" weight="1.000000" /> +<sequence id="sequence_319" name="QKI_HepG2_rep01_34021" length="81" weight="1.000000" /> +<sequence id="sequence_320" name="QKI_HepG2_rep01_32567" length="81" weight="1.000000" /> +<sequence id="sequence_321" name="QKI_HepG2_rep01_24987" length="81" weight="1.000000" /> +<sequence id="sequence_322" name="QKI_HepG2_rep01_51095" length="81" weight="1.000000" /> +<sequence id="sequence_323" name="QKI_HepG2_rep01_41524" length="81" weight="1.000000" /> +<sequence id="sequence_324" name="QKI_HepG2_rep01_18449" length="81" weight="1.000000" /> +<sequence id="sequence_325" name="QKI_HepG2_rep01_7572" length="81" weight="1.000000" /> +<sequence id="sequence_326" name="QKI_HepG2_rep01_8516" length="81" weight="1.000000" /> +<sequence id="sequence_327" name="QKI_HepG2_rep01_52167" length="81" weight="1.000000" /> +<sequence id="sequence_328" name="QKI_HepG2_rep01_34855" length="81" weight="1.000000" /> +<sequence id="sequence_329" name="QKI_HepG2_rep01_41657" length="81" weight="1.000000" /> +<sequence id="sequence_330" name="QKI_HepG2_rep01_3211" length="81" weight="1.000000" /> +<sequence id="sequence_331" name="QKI_HepG2_rep01_30567" length="81" weight="1.000000" /> +<sequence id="sequence_332" name="QKI_HepG2_rep01_1351" length="81" weight="1.000000" /> +<sequence id="sequence_333" name="QKI_HepG2_rep01_34904" length="81" weight="1.000000" /> +<sequence id="sequence_334" name="QKI_HepG2_rep01_18626" length="81" weight="1.000000" /> +<sequence id="sequence_335" name="QKI_HepG2_rep01_38829" length="81" weight="1.000000" /> +<sequence id="sequence_336" name="QKI_HepG2_rep01_15248" length="81" weight="1.000000" /> +<sequence id="sequence_337" name="QKI_HepG2_rep01_43779" length="81" weight="1.000000" /> +<sequence id="sequence_338" name="QKI_HepG2_rep01_16955" length="81" weight="1.000000" /> +<sequence id="sequence_339" name="QKI_HepG2_rep01_3220" length="81" weight="1.000000" /> +<sequence id="sequence_340" name="QKI_HepG2_rep01_32247" length="81" weight="1.000000" /> +<sequence id="sequence_341" name="QKI_HepG2_rep01_49862" length="81" weight="1.000000" /> +<sequence id="sequence_342" name="QKI_HepG2_rep01_21820" length="81" weight="1.000000" /> +<sequence id="sequence_343" name="QKI_HepG2_rep01_44070" length="81" weight="1.000000" /> +<sequence id="sequence_344" name="QKI_HepG2_rep01_51990" length="81" weight="1.000000" /> +<sequence id="sequence_345" name="QKI_HepG2_rep01_19751" length="81" weight="1.000000" /> +<sequence id="sequence_346" name="QKI_HepG2_rep01_2527" length="81" weight="1.000000" /> +<sequence id="sequence_347" name="QKI_HepG2_rep01_36791" length="81" weight="1.000000" /> +<sequence id="sequence_348" name="QKI_HepG2_rep01_25384" length="81" weight="1.000000" /> +<sequence id="sequence_349" name="QKI_HepG2_rep01_32579" length="81" weight="1.000000" /> +<sequence id="sequence_350" name="QKI_HepG2_rep01_2610" length="81" weight="1.000000" /> +<sequence id="sequence_351" name="QKI_HepG2_rep01_48992" length="81" weight="1.000000" /> +<sequence id="sequence_352" name="QKI_HepG2_rep01_50820" length="81" weight="1.000000" /> +<sequence id="sequence_353" name="QKI_HepG2_rep01_6227" length="81" weight="1.000000" /> +<sequence id="sequence_354" name="QKI_HepG2_rep01_33758" length="81" weight="1.000000" /> +<sequence id="sequence_355" name="QKI_HepG2_rep01_18486" length="81" weight="1.000000" /> +<sequence id="sequence_356" name="QKI_HepG2_rep01_14847" length="81" weight="1.000000" /> +<sequence id="sequence_357" name="QKI_HepG2_rep01_34971" length="81" weight="1.000000" /> +<sequence id="sequence_358" name="QKI_HepG2_rep01_634" length="81" weight="1.000000" /> +<sequence id="sequence_359" name="QKI_HepG2_rep01_25447" length="81" weight="1.000000" /> +<sequence id="sequence_360" name="QKI_HepG2_rep01_50194" length="81" weight="1.000000" /> +<sequence id="sequence_361" name="QKI_HepG2_rep01_34063" length="81" weight="1.000000" /> +<sequence id="sequence_362" name="QKI_HepG2_rep01_52082" length="81" weight="1.000000" /> +<sequence id="sequence_363" name="QKI_HepG2_rep01_5211" length="81" weight="1.000000" /> +<sequence id="sequence_364" name="QKI_HepG2_rep01_17280" length="81" weight="1.000000" /> +<sequence id="sequence_365" name="QKI_HepG2_rep01_34912" length="81" weight="1.000000" /> +<sequence id="sequence_366" name="QKI_HepG2_rep01_42520" length="81" weight="1.000000" /> +<sequence id="sequence_367" name="QKI_HepG2_rep01_27543" length="81" weight="1.000000" /> +<sequence id="sequence_368" name="QKI_HepG2_rep01_7534" length="81" weight="1.000000" /> +<sequence id="sequence_369" name="QKI_HepG2_rep01_24986" length="81" weight="1.000000" /> +<sequence id="sequence_370" name="QKI_HepG2_rep01_6351" length="81" weight="1.000000" /> +<sequence id="sequence_371" name="QKI_HepG2_rep01_9066" length="81" weight="1.000000" /> +<sequence id="sequence_372" name="QKI_HepG2_rep01_51292" length="81" weight="1.000000" /> +<sequence id="sequence_373" name="QKI_HepG2_rep01_23187" length="81" weight="1.000000" /> +<sequence id="sequence_374" name="QKI_HepG2_rep01_114" length="81" weight="1.000000" /> +<sequence id="sequence_375" name="QKI_HepG2_rep01_3641" length="81" weight="1.000000" /> +<sequence id="sequence_376" name="QKI_HepG2_rep01_20287" length="81" weight="1.000000" /> +<sequence id="sequence_377" name="QKI_HepG2_rep01_15146" length="81" weight="1.000000" /> +<sequence id="sequence_378" name="QKI_HepG2_rep01_9398" length="81" weight="1.000000" /> +<sequence id="sequence_379" name="QKI_HepG2_rep01_14871" length="81" weight="1.000000" /> +<sequence id="sequence_380" name="QKI_HepG2_rep01_31010" length="81" weight="1.000000" /> +<sequence id="sequence_381" name="QKI_HepG2_rep01_30596" length="81" weight="1.000000" /> +<sequence id="sequence_382" name="QKI_HepG2_rep01_31874" length="81" weight="1.000000" /> +<sequence id="sequence_383" name="QKI_HepG2_rep01_13255" length="81" weight="1.000000" /> +<sequence id="sequence_384" name="QKI_HepG2_rep01_34527" length="81" weight="1.000000" /> +<sequence id="sequence_385" name="QKI_HepG2_rep01_27086" length="81" weight="1.000000" /> +<sequence id="sequence_386" name="QKI_HepG2_rep01_7571" length="81" weight="1.000000" /> +<sequence id="sequence_387" name="QKI_HepG2_rep01_43183" length="81" weight="1.000000" /> +<sequence id="sequence_388" name="QKI_HepG2_rep01_34044" length="81" weight="1.000000" /> +<sequence id="sequence_389" name="QKI_HepG2_rep01_41473" length="81" weight="1.000000" /> +<sequence id="sequence_390" name="QKI_HepG2_rep01_15565" length="81" weight="1.000000" /> +<sequence id="sequence_391" name="QKI_HepG2_rep01_10952" length="81" weight="1.000000" /> +<sequence id="sequence_392" name="QKI_HepG2_rep01_7396" length="81" weight="1.000000" /> +<sequence id="sequence_393" name="QKI_HepG2_rep01_32015" length="81" weight="1.000000" /> +<sequence id="sequence_394" name="QKI_HepG2_rep01_36749" length="81" weight="1.000000" /> +<sequence id="sequence_395" name="QKI_HepG2_rep01_8127" length="81" weight="1.000000" /> +<sequence id="sequence_396" name="QKI_HepG2_rep01_12460" length="81" weight="1.000000" /> +<sequence id="sequence_397" name="QKI_HepG2_rep01_36408" length="81" weight="1.000000" /> +<sequence id="sequence_398" name="QKI_HepG2_rep01_53184" length="81" weight="1.000000" /> +<sequence id="sequence_399" name="QKI_HepG2_rep01_2560" length="81" weight="1.000000" /> +<sequence id="sequence_400" name="QKI_HepG2_rep01_39862" length="81" weight="1.000000" /> +<sequence id="sequence_401" name="QKI_HepG2_rep01_30941" length="81" weight="1.000000" /> +<sequence id="sequence_402" name="QKI_HepG2_rep01_23166" length="81" weight="1.000000" /> +<sequence id="sequence_403" name="QKI_HepG2_rep01_30746" length="81" weight="1.000000" /> +<sequence id="sequence_404" name="QKI_HepG2_rep01_16977" length="81" weight="1.000000" /> +<sequence id="sequence_405" name="QKI_HepG2_rep01_25252" length="81" weight="1.000000" /> +<sequence id="sequence_406" name="QKI_HepG2_rep01_54449" length="81" weight="1.000000" /> +<sequence id="sequence_407" name="QKI_HepG2_rep01_34390" length="81" weight="1.000000" /> +<sequence id="sequence_408" name="QKI_HepG2_rep01_29067" length="81" weight="1.000000" /> +<sequence id="sequence_409" name="QKI_HepG2_rep01_46713" length="81" weight="1.000000" /> +<sequence id="sequence_410" name="QKI_HepG2_rep01_30150" length="81" weight="1.000000" /> +<sequence id="sequence_411" name="QKI_HepG2_rep01_18329" length="81" weight="1.000000" /> +<sequence id="sequence_412" name="QKI_HepG2_rep01_8124" length="81" weight="1.000000" /> +<sequence id="sequence_413" name="QKI_HepG2_rep01_51138" length="81" weight="1.000000" /> +<sequence id="sequence_414" name="QKI_HepG2_rep01_46312" length="81" weight="1.000000" /> +<sequence id="sequence_415" name="QKI_HepG2_rep01_21882" length="81" weight="1.000000" /> +<sequence id="sequence_416" name="QKI_HepG2_rep01_54063" length="81" weight="1.000000" /> +<sequence id="sequence_417" name="QKI_HepG2_rep01_48213" length="81" weight="1.000000" /> +<sequence id="sequence_418" name="QKI_HepG2_rep01_51797" length="81" weight="1.000000" /> +<sequence id="sequence_419" name="QKI_HepG2_rep01_17273" length="81" weight="1.000000" /> +<sequence id="sequence_420" name="QKI_HepG2_rep01_20034" length="81" weight="1.000000" /> +<sequence id="sequence_421" name="QKI_HepG2_rep01_17293" length="81" weight="1.000000" /> +<sequence id="sequence_422" name="QKI_HepG2_rep01_38970" length="81" weight="1.000000" /> +<sequence id="sequence_423" name="QKI_HepG2_rep01_7183" length="81" weight="1.000000" /> +<sequence id="sequence_424" name="QKI_HepG2_rep01_7302" length="81" weight="1.000000" /> +<sequence id="sequence_425" name="QKI_HepG2_rep01_36208" length="81" weight="1.000000" /> +<sequence id="sequence_426" name="QKI_HepG2_rep01_53266" length="81" weight="1.000000" /> +<sequence id="sequence_427" name="QKI_HepG2_rep01_49174" length="81" weight="1.000000" /> +<sequence id="sequence_428" name="QKI_HepG2_rep01_53346" length="81" weight="1.000000" /> +<sequence id="sequence_429" name="QKI_HepG2_rep01_15180" length="81" weight="1.000000" /> +<sequence id="sequence_430" name="QKI_HepG2_rep01_17537" length="81" weight="1.000000" /> +<sequence id="sequence_431" name="QKI_HepG2_rep01_53162" length="81" weight="1.000000" /> +<sequence id="sequence_432" name="QKI_HepG2_rep01_10807" length="81" weight="1.000000" /> +<sequence id="sequence_433" name="QKI_HepG2_rep01_21619" length="81" weight="1.000000" /> +<sequence id="sequence_434" name="QKI_HepG2_rep01_41231" length="81" weight="1.000000" /> +<sequence id="sequence_435" name="QKI_HepG2_rep01_53251" length="81" weight="1.000000" /> +<sequence id="sequence_436" name="QKI_HepG2_rep01_27098" length="81" weight="1.000000" /> +<sequence id="sequence_437" name="QKI_HepG2_rep01_30789" length="81" weight="1.000000" /> +<sequence id="sequence_438" name="QKI_HepG2_rep01_46695" length="81" weight="1.000000" /> +<sequence id="sequence_439" name="QKI_HepG2_rep01_52025" length="81" weight="1.000000" /> +<sequence id="sequence_440" name="QKI_HepG2_rep01_43787" length="81" weight="1.000000" /> +<sequence id="sequence_441" name="QKI_HepG2_rep01_36859" length="81" weight="1.000000" /> +<sequence id="sequence_442" name="QKI_HepG2_rep01_4976" length="81" weight="1.000000" /> +<sequence id="sequence_443" name="QKI_HepG2_rep01_44559" length="81" weight="1.000000" /> +<sequence id="sequence_444" name="QKI_HepG2_rep01_23429" length="81" weight="1.000000" /> +<sequence id="sequence_445" name="QKI_HepG2_rep01_29077" length="81" weight="1.000000" /> +<sequence id="sequence_446" name="QKI_HepG2_rep01_1703" length="81" weight="1.000000" /> +<sequence id="sequence_447" name="QKI_HepG2_rep01_51945" length="81" weight="1.000000" /> +<sequence id="sequence_448" name="QKI_HepG2_rep01_36262" length="81" weight="1.000000" /> +<sequence id="sequence_449" name="QKI_HepG2_rep01_29108" length="81" weight="1.000000" /> +<sequence id="sequence_450" name="QKI_HepG2_rep01_12428" length="81" weight="1.000000" /> +<sequence id="sequence_451" name="QKI_HepG2_rep01_42515" length="81" weight="1.000000" /> +<sequence id="sequence_452" name="QKI_HepG2_rep01_23209" length="81" weight="1.000000" /> +<sequence id="sequence_453" name="QKI_HepG2_rep01_15332" length="81" weight="1.000000" /> +<sequence id="sequence_454" name="QKI_HepG2_rep01_29340" length="81" weight="1.000000" /> +<sequence id="sequence_455" name="QKI_HepG2_rep01_45763" length="81" weight="1.000000" /> +<sequence id="sequence_456" name="QKI_HepG2_rep01_2613" length="81" weight="1.000000" /> +<sequence id="sequence_457" name="QKI_HepG2_rep01_20497" length="81" weight="1.000000" /> +<sequence id="sequence_458" name="QKI_HepG2_rep01_43173" length="81" weight="1.000000" /> +<sequence id="sequence_459" name="QKI_HepG2_rep01_7539" length="81" weight="1.000000" /> +<sequence id="sequence_460" name="QKI_HepG2_rep01_53014" length="81" weight="1.000000" /> +<sequence id="sequence_461" name="QKI_HepG2_rep01_42648" length="81" weight="1.000000" /> +<sequence id="sequence_462" name="QKI_HepG2_rep01_13303" length="81" weight="1.000000" /> +<sequence id="sequence_463" name="QKI_HepG2_rep01_14905" length="81" weight="1.000000" /> +<sequence id="sequence_464" name="QKI_HepG2_rep01_23218" length="81" weight="1.000000" /> +<sequence id="sequence_465" name="QKI_HepG2_rep01_1844" length="81" weight="1.000000" /> +<sequence id="sequence_466" name="QKI_HepG2_rep01_10918" length="81" weight="1.000000" /> +<sequence id="sequence_467" name="QKI_HepG2_rep01_20199" length="81" weight="1.000000" /> +<sequence id="sequence_468" name="QKI_HepG2_rep01_21437" length="81" weight="1.000000" /> +<sequence id="sequence_469" name="QKI_HepG2_rep01_9414" length="81" weight="1.000000" /> +<sequence id="sequence_470" name="QKI_HepG2_rep01_36839" length="81" weight="1.000000" /> +<sequence id="sequence_471" name="QKI_HepG2_rep01_23072" length="81" weight="1.000000" /> +<sequence id="sequence_472" name="QKI_HepG2_rep01_23442" length="81" weight="1.000000" /> +<sequence id="sequence_473" name="QKI_HepG2_rep01_46307" length="81" weight="1.000000" /> +<sequence id="sequence_474" name="QKI_HepG2_rep01_32419" length="81" weight="1.000000" /> +<sequence id="sequence_475" name="QKI_HepG2_rep01_23069" length="81" weight="1.000000" /> +<sequence id="sequence_476" name="QKI_HepG2_rep01_53105" length="81" weight="1.000000" /> +<sequence id="sequence_477" name="QKI_HepG2_rep01_5243" length="81" weight="1.000000" /> +<sequence id="sequence_478" name="QKI_HepG2_rep01_1729" length="81" weight="1.000000" /> +<sequence id="sequence_479" name="QKI_HepG2_rep01_36415" length="81" weight="1.000000" /> +<sequence id="sequence_480" name="QKI_HepG2_rep01_34865" length="81" weight="1.000000" /> +<sequence id="sequence_481" name="QKI_HepG2_rep01_48181" length="81" weight="1.000000" /> +<sequence id="sequence_482" name="QKI_HepG2_rep01_25435" length="81" weight="1.000000" /> +<sequence id="sequence_483" name="QKI_HepG2_rep01_20335" length="81" weight="1.000000" /> +<sequence id="sequence_484" name="QKI_HepG2_rep01_22994" length="81" weight="1.000000" /> +<sequence id="sequence_485" name="QKI_HepG2_rep01_8206" length="81" weight="1.000000" /> +<sequence id="sequence_486" name="QKI_HepG2_rep01_48408" length="81" weight="1.000000" /> +<sequence id="sequence_487" name="QKI_HepG2_rep01_43537" length="81" weight="1.000000" /> +<sequence id="sequence_488" name="QKI_HepG2_rep01_21629" length="81" weight="1.000000" /> +<sequence id="sequence_489" name="QKI_HepG2_rep01_54303" length="81" weight="1.000000" /> +<sequence id="sequence_490" name="QKI_HepG2_rep01_41271" length="81" weight="1.000000" /> +<sequence id="sequence_491" name="QKI_HepG2_rep01_2391" length="81" weight="1.000000" /> +<sequence id="sequence_492" name="QKI_HepG2_rep01_39811" length="81" weight="1.000000" /> +<sequence id="sequence_493" name="QKI_HepG2_rep01_29375" length="81" weight="1.000000" /> +<sequence id="sequence_494" name="QKI_HepG2_rep01_5026" length="81" weight="1.000000" /> +<sequence id="sequence_495" name="QKI_HepG2_rep01_179" length="81" weight="1.000000" /> +<sequence id="sequence_496" name="QKI_HepG2_rep01_19993" length="81" weight="1.000000" /> +<sequence id="sequence_497" name="QKI_HepG2_rep01_23622" length="81" weight="1.000000" /> +<sequence id="sequence_498" name="QKI_HepG2_rep01_43966" length="81" weight="1.000000" /> +<sequence id="sequence_499" name="QKI_HepG2_rep01_49864" length="81" weight="1.000000" /> +<sequence id="sequence_500" name="QKI_HepG2_rep01_52819" length="81" weight="1.000000" /> +<sequence id="sequence_501" name="QKI_HepG2_rep01_14968" length="81" weight="1.000000" /> +<sequence id="sequence_502" name="QKI_HepG2_rep01_26879" length="81" weight="1.000000" /> +<sequence id="sequence_503" name="QKI_HepG2_rep01_13250" length="81" weight="1.000000" /> +<sequence id="sequence_504" name="QKI_HepG2_rep01_10935" length="81" weight="1.000000" /> +<sequence id="sequence_505" name="QKI_HepG2_rep01_53990" length="81" weight="1.000000" /> +<sequence id="sequence_506" name="QKI_HepG2_rep01_12898" length="81" weight="1.000000" /> +<sequence id="sequence_507" name="QKI_HepG2_rep01_51803" length="81" weight="1.000000" /> +<sequence id="sequence_508" name="QKI_HepG2_rep01_6489" length="81" weight="1.000000" /> +<sequence id="sequence_509" name="QKI_HepG2_rep01_1345" length="81" weight="1.000000" /> +<sequence id="sequence_510" name="QKI_HepG2_rep01_54267" length="81" weight="1.000000" /> +<sequence id="sequence_511" name="QKI_HepG2_rep01_30335" length="81" weight="1.000000" /> +<sequence id="sequence_512" name="QKI_HepG2_rep01_53993" length="81" weight="1.000000" /> +<sequence id="sequence_513" name="QKI_HepG2_rep01_51726" length="81" weight="1.000000" /> +<sequence id="sequence_514" name="QKI_HepG2_rep01_2452" length="81" weight="1.000000" /> +<sequence id="sequence_515" name="QKI_HepG2_rep01_15418" length="81" weight="1.000000" /> +<sequence id="sequence_516" name="QKI_HepG2_rep01_17149" length="81" weight="1.000000" /> +<sequence id="sequence_517" name="QKI_HepG2_rep01_17442" length="81" weight="1.000000" /> +<sequence id="sequence_518" name="QKI_HepG2_rep01_14721" length="81" weight="1.000000" /> +<sequence id="sequence_519" name="QKI_HepG2_rep01_12726" length="81" weight="1.000000" /> +<sequence id="sequence_520" name="QKI_HepG2_rep01_2631" length="81" weight="1.000000" /> +<sequence id="sequence_521" name="QKI_HepG2_rep01_12899" length="81" weight="1.000000" /> +<sequence id="sequence_522" name="QKI_HepG2_rep01_44213" length="81" weight="1.000000" /> +<sequence id="sequence_523" name="QKI_HepG2_rep01_517" length="81" weight="1.000000" /> +<sequence id="sequence_524" name="QKI_HepG2_rep01_46191" length="81" weight="1.000000" /> +<sequence id="sequence_525" name="QKI_HepG2_rep01_34716" length="81" weight="1.000000" /> +<sequence id="sequence_526" name="QKI_HepG2_rep01_21403" length="81" weight="1.000000" /> +<sequence id="sequence_527" name="QKI_HepG2_rep01_1420" length="81" weight="1.000000" /> +<sequence id="sequence_528" name="QKI_HepG2_rep01_54039" length="81" weight="1.000000" /> +<sequence id="sequence_529" name="QKI_HepG2_rep01_25276" length="81" weight="1.000000" /> +<sequence id="sequence_530" name="QKI_HepG2_rep01_42385" length="81" weight="1.000000" /> +<sequence id="sequence_531" name="QKI_HepG2_rep01_21684" length="81" weight="1.000000" /> +<sequence id="sequence_532" name="QKI_HepG2_rep01_54544" length="81" weight="1.000000" /> +<sequence id="sequence_533" name="QKI_HepG2_rep01_38227" length="81" weight="1.000000" /> +<sequence id="sequence_534" name="QKI_HepG2_rep01_27968" length="81" weight="1.000000" /> +<sequence id="sequence_535" name="QKI_HepG2_rep01_9418" length="81" weight="1.000000" /> +<sequence id="sequence_536" name="QKI_HepG2_rep01_18345" length="81" weight="1.000000" /> +<sequence id="sequence_537" name="QKI_HepG2_rep01_49882" length="81" weight="1.000000" /> +<sequence id="sequence_538" name="QKI_HepG2_rep01_38716" length="81" weight="1.000000" /> +<sequence id="sequence_539" name="QKI_HepG2_rep01_8282" length="81" weight="1.000000" /> +<sequence id="sequence_540" name="QKI_HepG2_rep01_17590" length="81" weight="1.000000" /> +<sequence id="sequence_541" name="QKI_HepG2_rep01_36446" length="81" weight="1.000000" /> +<sequence id="sequence_542" name="QKI_HepG2_rep01_30547" length="81" weight="1.000000" /> +<sequence id="sequence_543" name="QKI_HepG2_rep01_52647" length="81" weight="1.000000" /> +<sequence id="sequence_544" name="QKI_HepG2_rep01_53172" length="81" weight="1.000000" /> +<sequence id="sequence_545" name="QKI_HepG2_rep01_50189" length="81" weight="1.000000" /> +<sequence id="sequence_546" name="QKI_HepG2_rep01_33945" length="81" weight="1.000000" /> +<sequence id="sequence_547" name="QKI_HepG2_rep01_24904" length="81" weight="1.000000" /> +<sequence id="sequence_548" name="QKI_HepG2_rep01_51894" length="81" weight="1.000000" /> +<sequence id="sequence_549" name="QKI_HepG2_rep01_51224" length="81" weight="1.000000" /> +<sequence id="sequence_550" name="QKI_HepG2_rep01_20116" length="81" weight="1.000000" /> +<sequence id="sequence_551" name="QKI_HepG2_rep01_46367" length="81" weight="1.000000" /> +<sequence id="sequence_552" name="QKI_HepG2_rep01_36412" length="81" weight="1.000000" /> +<sequence id="sequence_553" name="QKI_HepG2_rep01_54598" length="81" weight="1.000000" /> +<sequence id="sequence_554" name="QKI_HepG2_rep01_456" length="81" weight="1.000000" /> +<sequence id="sequence_555" name="QKI_HepG2_rep01_15345" length="81" weight="1.000000" /> +<sequence id="sequence_556" name="QKI_HepG2_rep01_43231" length="81" weight="1.000000" /> +<sequence id="sequence_557" name="QKI_HepG2_rep01_10903" length="81" weight="1.000000" /> +<sequence id="sequence_558" name="QKI_HepG2_rep01_42391" length="81" weight="1.000000" /> +<sequence id="sequence_559" name="QKI_HepG2_rep01_41438" length="81" weight="1.000000" /> +<sequence id="sequence_560" name="QKI_HepG2_rep01_52200" length="81" weight="1.000000" /> +<sequence id="sequence_561" name="QKI_HepG2_rep01_14629" length="81" weight="1.000000" /> +<sequence id="sequence_562" name="QKI_HepG2_rep01_13171" length="81" weight="1.000000" /> +<sequence id="sequence_563" name="QKI_HepG2_rep01_51346" length="81" weight="1.000000" /> +<sequence id="sequence_564" name="QKI_HepG2_rep01_44626" length="81" weight="1.000000" /> +<sequence id="sequence_565" name="QKI_HepG2_rep01_30284" length="81" weight="1.000000" /> +<sequence id="sequence_566" name="QKI_HepG2_rep01_41437" length="81" weight="1.000000" /> +<sequence id="sequence_567" name="QKI_HepG2_rep01_36490" length="81" weight="1.000000" /> +<sequence id="sequence_568" name="QKI_HepG2_rep01_41616" length="81" weight="1.000000" /> +<sequence id="sequence_569" name="QKI_HepG2_rep01_5981" length="81" weight="1.000000" /> +<sequence id="sequence_570" name="QKI_HepG2_rep01_7104" length="81" weight="1.000000" /> +<sequence id="sequence_571" name="QKI_HepG2_rep01_7220" length="81" weight="1.000000" /> +<sequence id="sequence_572" name="QKI_HepG2_rep01_41493" length="81" weight="1.000000" /> +<sequence id="sequence_573" name="QKI_HepG2_rep01_32330" length="81" weight="1.000000" /> +<sequence id="sequence_574" name="QKI_HepG2_rep01_7309" length="81" weight="1.000000" /> +<sequence id="sequence_575" name="QKI_HepG2_rep01_20194" length="81" weight="1.000000" /> +<sequence id="sequence_576" name="QKI_HepG2_rep01_30591" length="81" weight="1.000000" /> +<sequence id="sequence_577" name="QKI_HepG2_rep01_21654" length="81" weight="1.000000" /> +<sequence id="sequence_578" name="QKI_HepG2_rep01_43655" length="81" weight="1.000000" /> +<sequence id="sequence_579" name="QKI_HepG2_rep01_48185" length="81" weight="1.000000" /> +<sequence id="sequence_580" name="QKI_HepG2_rep01_25171" length="81" weight="1.000000" /> +<sequence id="sequence_581" name="QKI_HepG2_rep01_43773" length="81" weight="1.000000" /> +<sequence id="sequence_582" name="QKI_HepG2_rep01_12684" length="81" weight="1.000000" /> +<sequence id="sequence_583" name="QKI_HepG2_rep01_12670" length="81" weight="1.000000" /> +<sequence id="sequence_584" name="QKI_HepG2_rep01_54584" length="81" weight="1.000000" /> +<sequence id="sequence_585" name="QKI_HepG2_rep01_9430" length="81" weight="1.000000" /> +<sequence id="sequence_586" name="QKI_HepG2_rep01_35198" length="81" weight="1.000000" /> +<sequence id="sequence_587" name="QKI_HepG2_rep01_34845" length="81" weight="1.000000" /> +<sequence id="sequence_588" name="QKI_HepG2_rep01_52756" length="81" weight="1.000000" /> +<sequence id="sequence_589" name="QKI_HepG2_rep01_48311" length="81" weight="1.000000" /> +<sequence id="sequence_590" name="QKI_HepG2_rep01_33524" length="81" weight="1.000000" /> +<sequence id="sequence_591" name="QKI_HepG2_rep01_8385" length="81" weight="1.000000" /> +<sequence id="sequence_592" name="QKI_HepG2_rep01_12051" length="81" weight="1.000000" /> +<sequence id="sequence_593" name="QKI_HepG2_rep01_21573" length="81" weight="1.000000" /> +<sequence id="sequence_594" name="QKI_HepG2_rep01_30355" length="81" weight="1.000000" /> +<sequence id="sequence_595" name="QKI_HepG2_rep01_39969" length="81" weight="1.000000" /> +<sequence id="sequence_596" name="QKI_HepG2_rep01_20320" length="81" weight="1.000000" /> +<sequence id="sequence_597" name="QKI_HepG2_rep01_15057" length="81" weight="1.000000" /> +<sequence id="sequence_598" name="QKI_HepG2_rep01_12245" length="81" weight="1.000000" /> +<sequence id="sequence_599" name="QKI_HepG2_rep01_4300" length="81" weight="1.000000" /> +<sequence id="sequence_600" name="QKI_HepG2_rep01_17129" length="81" weight="1.000000" /> +<sequence id="sequence_601" name="QKI_HepG2_rep01_50079" length="81" weight="1.000000" /> +<sequence id="sequence_602" name="QKI_HepG2_rep01_46887" length="81" weight="1.000000" /> +<sequence id="sequence_603" name="QKI_HepG2_rep01_34984" length="81" weight="1.000000" /> +<sequence id="sequence_604" name="QKI_HepG2_rep01_27690" length="81" weight="1.000000" /> +<sequence id="sequence_605" name="QKI_HepG2_rep01_54586" length="81" weight="1.000000" /> +<sequence id="sequence_606" name="QKI_HepG2_rep01_12238" length="81" weight="1.000000" /> +<sequence id="sequence_607" name="QKI_HepG2_rep01_14593" length="81" weight="1.000000" /> +<sequence id="sequence_608" name="QKI_HepG2_rep01_39860" length="81" weight="1.000000" /> +<sequence id="sequence_609" name="QKI_HepG2_rep01_25149" length="81" weight="1.000000" /> +<sequence id="sequence_610" name="QKI_HepG2_rep01_48990" length="81" weight="1.000000" /> +<sequence id="sequence_611" name="QKI_HepG2_rep01_54067" length="81" weight="1.000000" /> +<sequence id="sequence_612" name="QKI_HepG2_rep01_511" length="81" weight="1.000000" /> +<sequence id="sequence_613" name="QKI_HepG2_rep01_51335" length="81" weight="1.000000" /> +<sequence id="sequence_614" name="QKI_HepG2_rep01_36196" length="81" weight="1.000000" /> +<sequence id="sequence_615" name="QKI_HepG2_rep01_32203" length="81" weight="1.000000" /> +<sequence id="sequence_616" name="QKI_HepG2_rep01_20096" length="81" weight="1.000000" /> +<sequence id="sequence_617" name="QKI_HepG2_rep01_36656" length="81" weight="1.000000" /> +<sequence id="sequence_618" name="QKI_HepG2_rep01_46117" length="81" weight="1.000000" /> +<sequence id="sequence_619" name="QKI_HepG2_rep01_17441" length="81" weight="1.000000" /> +<sequence id="sequence_620" name="QKI_HepG2_rep01_46404" length="81" weight="1.000000" /> +<sequence id="sequence_621" name="QKI_HepG2_rep01_14674" length="81" weight="1.000000" /> +<sequence id="sequence_622" name="QKI_HepG2_rep01_36586" length="81" weight="1.000000" /> +<sequence id="sequence_623" name="QKI_HepG2_rep01_25061" length="81" weight="1.000000" /> +<sequence id="sequence_624" name="QKI_HepG2_rep01_29045" length="81" weight="1.000000" /> +<sequence id="sequence_625" name="QKI_HepG2_rep01_38190" length="81" weight="1.000000" /> +<sequence id="sequence_626" name="QKI_HepG2_rep01_29241" length="81" weight="1.000000" /> +<sequence id="sequence_627" name="QKI_HepG2_rep01_49236" length="81" weight="1.000000" /> +<sequence id="sequence_628" name="QKI_HepG2_rep01_50997" length="81" weight="1.000000" /> +<sequence id="sequence_629" name="QKI_HepG2_rep01_36145" length="81" weight="1.000000" /> +<sequence id="sequence_630" name="QKI_HepG2_rep01_25058" length="81" weight="1.000000" /> +<sequence id="sequence_631" name="QKI_HepG2_rep01_38182" length="81" weight="1.000000" /> +<sequence id="sequence_632" name="QKI_HepG2_rep01_14863" length="81" weight="1.000000" /> +<sequence id="sequence_633" name="QKI_HepG2_rep01_39899" length="81" weight="1.000000" /> +<sequence id="sequence_634" name="QKI_HepG2_rep01_34659" length="81" weight="1.000000" /> +<sequence id="sequence_635" name="QKI_HepG2_rep01_21489" length="81" weight="1.000000" /> +<sequence id="sequence_636" name="QKI_HepG2_rep01_41425" length="81" weight="1.000000" /> +<sequence id="sequence_637" name="QKI_HepG2_rep01_23625" length="81" weight="1.000000" /> +<sequence id="sequence_638" name="QKI_HepG2_rep01_43244" length="81" weight="1.000000" /> +<sequence id="sequence_639" name="QKI_HepG2_rep01_3140" length="81" weight="1.000000" /> +<sequence id="sequence_640" name="QKI_HepG2_rep01_42562" length="81" weight="1.000000" /> +<sequence id="sequence_641" name="QKI_HepG2_rep01_49377" length="81" weight="1.000000" /> +<sequence id="sequence_642" name="QKI_HepG2_rep01_10758" length="81" weight="1.000000" /> +<sequence id="sequence_643" name="QKI_HepG2_rep01_20" length="81" weight="1.000000" /> +<sequence id="sequence_644" name="QKI_HepG2_rep01_23211" length="81" weight="1.000000" /> +<sequence id="sequence_645" name="QKI_HepG2_rep01_39732" length="81" weight="1.000000" /> +<sequence id="sequence_646" name="QKI_HepG2_rep01_46703" length="81" weight="1.000000" /> +<sequence id="sequence_647" name="QKI_HepG2_rep01_20345" length="81" weight="1.000000" /> +<sequence id="sequence_648" name="QKI_HepG2_rep01_46346" length="81" weight="1.000000" /> +<sequence id="sequence_649" name="QKI_HepG2_rep01_46540" length="81" weight="1.000000" /> +<sequence id="sequence_650" name="QKI_HepG2_rep01_51818" length="81" weight="1.000000" /> +<sequence id="sequence_651" name="QKI_HepG2_rep01_7310" length="81" weight="1.000000" /> +<sequence id="sequence_652" name="QKI_HepG2_rep01_50552" length="81" weight="1.000000" /> +<sequence id="sequence_653" name="QKI_HepG2_rep01_44110" length="81" weight="1.000000" /> +<sequence id="sequence_654" name="QKI_HepG2_rep01_50198" length="81" weight="1.000000" /> +<sequence id="sequence_655" name="QKI_HepG2_rep01_24857" length="81" weight="1.000000" /> +<sequence id="sequence_656" name="QKI_HepG2_rep01_54183" length="81" weight="1.000000" /> +<sequence id="sequence_657" name="QKI_HepG2_rep01_52749" length="81" weight="1.000000" /> +<sequence id="sequence_658" name="QKI_HepG2_rep01_44239" length="81" weight="1.000000" /> +<sequence id="sequence_659" name="QKI_HepG2_rep01_10816" length="81" weight="1.000000" /> +<sequence id="sequence_660" name="QKI_HepG2_rep01_32452" length="81" weight="1.000000" /> +<sequence id="sequence_661" name="QKI_HepG2_rep01_50042" length="81" weight="1.000000" /> +<sequence id="sequence_662" name="QKI_HepG2_rep01_43495" length="81" weight="1.000000" /> +<sequence id="sequence_663" name="QKI_HepG2_rep01_54068" length="81" weight="1.000000" /> +<sequence id="sequence_664" name="QKI_HepG2_rep01_49114" length="81" weight="1.000000" /> +<sequence id="sequence_665" name="QKI_HepG2_rep01_42714" length="81" weight="1.000000" /> +<sequence id="sequence_666" name="QKI_HepG2_rep01_42473" length="81" weight="1.000000" /> +<sequence id="sequence_667" name="QKI_HepG2_rep01_36883" length="81" weight="1.000000" /> +<sequence id="sequence_668" name="QKI_HepG2_rep01_36861" length="81" weight="1.000000" /> +<sequence id="sequence_669" name="QKI_HepG2_rep01_46500" length="81" weight="1.000000" /> +<sequence id="sequence_670" name="QKI_HepG2_rep01_17561" length="81" weight="1.000000" /> +<sequence id="sequence_671" name="QKI_HepG2_rep01_39204" length="81" weight="1.000000" /> +<sequence id="sequence_672" name="QKI_HepG2_rep01_12510" length="81" weight="1.000000" /> +<sequence id="sequence_673" name="QKI_HepG2_rep01_6477" length="81" weight="1.000000" /> +<sequence id="sequence_674" name="QKI_HepG2_rep01_54519" length="81" weight="1.000000" /> +<sequence id="sequence_675" name="QKI_HepG2_rep01_36476" length="81" weight="1.000000" /> +<sequence id="sequence_676" name="QKI_HepG2_rep01_29219" length="81" weight="1.000000" /> +<sequence id="sequence_677" name="QKI_HepG2_rep01_34192" length="81" weight="1.000000" /> +<sequence id="sequence_678" name="QKI_HepG2_rep01_49270" length="81" weight="1.000000" /> +<sequence id="sequence_679" name="QKI_HepG2_rep01_24905" length="81" weight="1.000000" /> +<sequence id="sequence_680" name="QKI_HepG2_rep01_53307" length="81" weight="1.000000" /> +<sequence id="sequence_681" name="QKI_HepG2_rep01_14997" length="81" weight="1.000000" /> +<sequence id="sequence_682" name="QKI_HepG2_rep01_44676" length="81" weight="1.000000" /> +<sequence id="sequence_683" name="QKI_HepG2_rep01_8421" length="81" weight="1.000000" /> +<sequence id="sequence_684" name="QKI_HepG2_rep01_36101" length="81" weight="1.000000" /> +<sequence id="sequence_685" name="QKI_HepG2_rep01_43906" length="81" weight="1.000000" /> +<sequence id="sequence_686" name="QKI_HepG2_rep01_38858" length="81" weight="1.000000" /> +<sequence id="sequence_687" name="QKI_HepG2_rep01_12243" length="81" weight="1.000000" /> +<sequence id="sequence_688" name="QKI_HepG2_rep01_40662" length="81" weight="1.000000" /> +<sequence id="sequence_689" name="QKI_HepG2_rep01_5130" length="81" weight="1.000000" /> +<sequence id="sequence_690" name="QKI_HepG2_rep01_1777" length="81" weight="1.000000" /> +<sequence id="sequence_691" name="QKI_HepG2_rep01_10845" length="81" weight="1.000000" /> +<sequence id="sequence_692" name="QKI_HepG2_rep01_42163" length="81" weight="1.000000" /> +<sequence id="sequence_693" name="QKI_HepG2_rep01_40614" length="81" weight="1.000000" /> +<sequence id="sequence_694" name="QKI_HepG2_rep01_44569" length="81" weight="1.000000" /> +<sequence id="sequence_695" name="QKI_HepG2_rep01_43967" length="81" weight="1.000000" /> +<sequence id="sequence_696" name="QKI_HepG2_rep01_38047" length="81" weight="1.000000" /> +<sequence id="sequence_697" name="QKI_HepG2_rep01_41253" length="81" weight="1.000000" /> +<sequence id="sequence_698" name="QKI_HepG2_rep01_50949" length="81" weight="1.000000" /> +<sequence id="sequence_699" name="QKI_HepG2_rep01_46111" length="81" weight="1.000000" /> +<sequence id="sequence_700" name="QKI_HepG2_rep01_34824" length="81" weight="1.000000" /> +<sequence id="sequence_701" name="QKI_HepG2_rep01_46559" length="81" weight="1.000000" /> +<sequence id="sequence_702" name="QKI_HepG2_rep01_40024" length="81" weight="1.000000" /> +<sequence id="sequence_703" name="QKI_HepG2_rep01_21377" length="81" weight="1.000000" /> +<sequence id="sequence_704" name="QKI_HepG2_rep01_31937" length="81" weight="1.000000" /> +<sequence id="sequence_705" name="QKI_HepG2_rep01_37871" length="81" weight="1.000000" /> +<sequence id="sequence_706" name="QKI_HepG2_rep01_23037" length="81" weight="1.000000" /> +<sequence id="sequence_707" name="QKI_HepG2_rep01_5227" length="81" weight="1.000000" /> +<sequence id="sequence_708" name="QKI_HepG2_rep01_276" length="81" weight="1.000000" /> +<sequence id="sequence_709" name="QKI_HepG2_rep01_15435" length="81" weight="1.000000" /> +<sequence id="sequence_710" name="QKI_HepG2_rep01_45955" length="81" weight="1.000000" /> +<sequence id="sequence_711" name="QKI_HepG2_rep01_52071" length="81" weight="1.000000" /> +<sequence id="sequence_712" name="QKI_HepG2_rep01_50200" length="81" weight="1.000000" /> +<sequence id="sequence_713" name="QKI_HepG2_rep01_1693" length="81" weight="1.000000" /> +<sequence id="sequence_714" name="QKI_HepG2_rep01_33674" length="81" weight="1.000000" /> +<sequence id="sequence_715" name="QKI_HepG2_rep01_33655" length="81" weight="1.000000" /> +<sequence id="sequence_716" name="QKI_HepG2_rep01_41469" length="81" weight="1.000000" /> +<sequence id="sequence_717" name="QKI_HepG2_rep01_36370" length="81" weight="1.000000" /> +<sequence id="sequence_718" name="QKI_HepG2_rep01_51143" length="81" weight="1.000000" /> +<sequence id="sequence_719" name="QKI_HepG2_rep01_54358" length="81" weight="1.000000" /> +<sequence id="sequence_720" name="QKI_HepG2_rep01_40471" length="81" weight="1.000000" /> +<sequence id="sequence_721" name="QKI_HepG2_rep01_23267" length="81" weight="1.000000" /> +<sequence id="sequence_722" name="QKI_HepG2_rep01_24819" length="81" weight="1.000000" /> +<sequence id="sequence_723" name="QKI_HepG2_rep01_12842" length="81" weight="1.000000" /> +<sequence id="sequence_724" name="QKI_HepG2_rep01_4874" length="81" weight="1.000000" /> +<sequence id="sequence_725" name="QKI_HepG2_rep01_37870" length="81" weight="1.000000" /> +<sequence id="sequence_726" name="QKI_HepG2_rep01_14967" length="81" weight="1.000000" /> +<sequence id="sequence_727" name="QKI_HepG2_rep01_30182" length="81" weight="1.000000" /> +<sequence id="sequence_728" name="QKI_HepG2_rep01_25414" length="81" weight="1.000000" /> +<sequence id="sequence_729" name="QKI_HepG2_rep01_46900" length="81" weight="1.000000" /> +<sequence id="sequence_730" name="QKI_HepG2_rep01_54037" length="81" weight="1.000000" /> +<sequence id="sequence_731" name="QKI_HepG2_rep01_49095" length="81" weight="1.000000" /> +<sequence id="sequence_732" name="QKI_HepG2_rep01_28020" length="81" weight="1.000000" /> +<sequence id="sequence_733" name="QKI_HepG2_rep01_29237" length="81" weight="1.000000" /> +<sequence id="sequence_734" name="QKI_HepG2_rep01_34646" length="81" weight="1.000000" /> +<sequence id="sequence_735" name="QKI_HepG2_rep01_40678" length="81" weight="1.000000" /> +<sequence id="sequence_736" name="QKI_HepG2_rep01_41517" length="81" weight="1.000000" /> +<sequence id="sequence_737" name="QKI_HepG2_rep01_2601" length="81" weight="1.000000" /> +<sequence id="sequence_738" name="QKI_HepG2_rep01_13101" length="81" weight="1.000000" /> +<sequence id="sequence_739" name="QKI_HepG2_rep01_8142" length="81" weight="1.000000" /> +<sequence id="sequence_740" name="QKI_HepG2_rep01_34583" length="81" weight="1.000000" /> +<sequence id="sequence_741" name="QKI_HepG2_rep01_40754" length="81" weight="1.000000" /> +<sequence id="sequence_742" name="QKI_HepG2_rep01_11037" length="81" weight="1.000000" /> +<sequence id="sequence_743" name="QKI_HepG2_rep01_9331" length="81" weight="1.000000" /> +<sequence id="sequence_744" name="QKI_HepG2_rep01_23140" length="81" weight="1.000000" /> +<sequence id="sequence_745" name="QKI_HepG2_rep01_36789" length="81" weight="1.000000" /> +<sequence id="sequence_746" name="QKI_HepG2_rep01_39920" length="81" weight="1.000000" /> +<sequence id="sequence_747" name="QKI_HepG2_rep01_1625" length="81" weight="1.000000" /> +<sequence id="sequence_748" name="QKI_HepG2_rep01_3218" length="81" weight="1.000000" /> +<sequence id="sequence_749" name="QKI_HepG2_rep01_32129" length="81" weight="1.000000" /> +<sequence id="sequence_750" name="QKI_HepG2_rep01_50578" length="81" weight="1.000000" /> +<sequence id="sequence_751" name="QKI_HepG2_rep01_7395" length="81" weight="1.000000" /> +<sequence id="sequence_752" name="QKI_HepG2_rep01_15551" length="81" weight="1.000000" /> +<sequence id="sequence_753" name="QKI_HepG2_rep01_36328" length="81" weight="1.000000" /> +<sequence id="sequence_754" name="QKI_HepG2_rep01_35179" length="81" weight="1.000000" /> +<sequence id="sequence_755" name="QKI_HepG2_rep01_40411" length="81" weight="1.000000" /> +<sequence id="sequence_756" name="QKI_HepG2_rep01_9405" length="81" weight="1.000000" /> +<sequence id="sequence_757" name="QKI_HepG2_rep01_15263" length="81" weight="1.000000" /> +<sequence id="sequence_758" name="QKI_HepG2_rep01_32337" length="81" weight="1.000000" /> +<sequence id="sequence_759" name="QKI_HepG2_rep01_43603" length="81" weight="1.000000" /> +<sequence id="sequence_760" name="QKI_HepG2_rep01_7498" length="81" weight="1.000000" /> +<sequence id="sequence_761" name="QKI_HepG2_rep01_23074" length="81" weight="1.000000" /> +<sequence id="sequence_762" name="QKI_HepG2_rep01_53013" length="81" weight="1.000000" /> +<sequence id="sequence_763" name="QKI_HepG2_rep01_18645" length="81" weight="1.000000" /> +<sequence id="sequence_764" name="QKI_HepG2_rep01_34866" length="81" weight="1.000000" /> +<sequence id="sequence_765" name="QKI_HepG2_rep01_53110" length="81" weight="1.000000" /> +<sequence id="sequence_766" name="QKI_HepG2_rep01_29229" length="81" weight="1.000000" /> +<sequence id="sequence_767" name="QKI_HepG2_rep01_12862" length="81" weight="1.000000" /> +<sequence id="sequence_768" name="QKI_HepG2_rep01_33978" length="81" weight="1.000000" /> +<sequence id="sequence_769" name="QKI_HepG2_rep01_15205" length="81" weight="1.000000" /> +<sequence id="sequence_770" name="QKI_HepG2_rep01_33543" length="81" weight="1.000000" /> +<sequence id="sequence_771" name="QKI_HepG2_rep01_9242" length="81" weight="1.000000" /> +<sequence id="sequence_772" name="QKI_HepG2_rep01_18682" length="81" weight="1.000000" /> +<sequence id="sequence_773" name="QKI_HepG2_rep01_7253" length="81" weight="1.000000" /> +<sequence id="sequence_774" name="QKI_HepG2_rep01_21954" length="81" weight="1.000000" /> +<sequence id="sequence_775" name="QKI_HepG2_rep01_19037" length="81" weight="1.000000" /> +<sequence id="sequence_776" name="QKI_HepG2_rep01_15463" length="81" weight="1.000000" /> +<sequence id="sequence_777" name="QKI_HepG2_rep01_41266" length="81" weight="1.000000" /> +<sequence id="sequence_778" name="QKI_HepG2_rep01_3855" length="81" weight="1.000000" /> +<sequence id="sequence_779" name="QKI_HepG2_rep01_10954" length="81" weight="1.000000" /> +<sequence id="sequence_780" name="QKI_HepG2_rep01_10974" length="81" weight="1.000000" /> +<sequence id="sequence_781" name="QKI_HepG2_rep01_46304" length="81" weight="1.000000" /> +<sequence id="sequence_782" name="QKI_HepG2_rep01_13205" length="81" weight="1.000000" /> +<sequence id="sequence_783" name="QKI_HepG2_rep01_46642" length="81" weight="1.000000" /> +<sequence id="sequence_784" name="QKI_HepG2_rep01_9350" length="81" weight="1.000000" /> +<sequence id="sequence_785" name="QKI_HepG2_rep01_38191" length="81" weight="1.000000" /> +<sequence id="sequence_786" name="QKI_HepG2_rep01_51039" length="81" weight="1.000000" /> +<sequence id="sequence_787" name="QKI_HepG2_rep01_12790" length="81" weight="1.000000" /> +<sequence id="sequence_788" name="QKI_HepG2_rep01_30360" length="81" weight="1.000000" /> +<sequence id="sequence_789" name="QKI_HepG2_rep01_43806" length="81" weight="1.000000" /> +<sequence id="sequence_790" name="QKI_HepG2_rep01_32331" length="81" weight="1.000000" /> +<sequence id="sequence_791" name="QKI_HepG2_rep01_12047" length="81" weight="1.000000" /> +<sequence id="sequence_792" name="QKI_HepG2_rep01_46356" length="81" weight="1.000000" /> +<sequence id="sequence_793" name="QKI_HepG2_rep01_25445" length="81" weight="1.000000" /> +<sequence id="sequence_794" name="QKI_HepG2_rep01_23225" length="81" weight="1.000000" /> +<sequence id="sequence_795" name="QKI_HepG2_rep01_54265" length="81" weight="1.000000" /> +<sequence id="sequence_796" name="QKI_HepG2_rep01_20256" length="81" weight="1.000000" /> +<sequence id="sequence_797" name="QKI_HepG2_rep01_29302" length="81" weight="1.000000" /> +<sequence id="sequence_798" name="QKI_HepG2_rep01_426" length="81" weight="1.000000" /> +<sequence id="sequence_799" name="QKI_HepG2_rep01_30432" length="81" weight="1.000000" /> +<sequence id="sequence_800" name="QKI_HepG2_rep01_44669" length="81" weight="1.000000" /> +<sequence id="sequence_801" name="QKI_HepG2_rep01_10811" length="81" weight="1.000000" /> +<sequence id="sequence_802" name="QKI_HepG2_rep01_17156" length="81" weight="1.000000" /> +<sequence id="sequence_803" name="QKI_HepG2_rep01_12341" length="81" weight="1.000000" /> +<sequence id="sequence_804" name="QKI_HepG2_rep01_52911" length="81" weight="1.000000" /> +<sequence id="sequence_805" name="QKI_HepG2_rep01_2605" length="81" weight="1.000000" /> +<sequence id="sequence_806" name="QKI_HepG2_rep01_21382" length="81" weight="1.000000" /> +<sequence id="sequence_807" name="QKI_HepG2_rep01_1774" length="81" weight="1.000000" /> +<sequence id="sequence_808" name="QKI_HepG2_rep01_41486" length="81" weight="1.000000" /> +<sequence id="sequence_809" name="QKI_HepG2_rep01_7464" length="81" weight="1.000000" /> +<sequence id="sequence_810" name="QKI_HepG2_rep01_38749" length="81" weight="1.000000" /> +<sequence id="sequence_811" name="QKI_HepG2_rep01_25162" length="81" weight="1.000000" /> +<sequence id="sequence_812" name="QKI_HepG2_rep01_21860" length="81" weight="1.000000" /> +<sequence id="sequence_813" name="QKI_HepG2_rep01_38954" length="81" weight="1.000000" /> +<sequence id="sequence_814" name="QKI_HepG2_rep01_23469" length="81" weight="1.000000" /> +<sequence id="sequence_815" name="QKI_HepG2_rep01_54549" length="81" weight="1.000000" /> +<sequence id="sequence_816" name="QKI_HepG2_rep01_47016" length="81" weight="1.000000" /> +<sequence id="sequence_817" name="QKI_HepG2_rep01_27685" length="81" weight="1.000000" /> +<sequence id="sequence_818" name="QKI_HepG2_rep01_18670" length="81" weight="1.000000" /> +<sequence id="sequence_819" name="QKI_HepG2_rep01_17374" length="81" weight="1.000000" /> +<sequence id="sequence_820" name="QKI_HepG2_rep01_42756" length="81" weight="1.000000" /> +<sequence id="sequence_821" name="QKI_HepG2_rep01_51885" length="81" weight="1.000000" /> +<sequence id="sequence_822" name="QKI_HepG2_rep01_34427" length="81" weight="1.000000" /> +<sequence id="sequence_823" name="QKI_HepG2_rep01_54301" length="81" weight="1.000000" /> +<sequence id="sequence_824" name="QKI_HepG2_rep01_6231" length="81" weight="1.000000" /> +<sequence id="sequence_825" name="QKI_HepG2_rep01_29101" length="81" weight="1.000000" /> +<sequence id="sequence_826" name="QKI_HepG2_rep01_43330" length="81" weight="1.000000" /> +<sequence id="sequence_827" name="QKI_HepG2_rep01_29094" length="81" weight="1.000000" /> +<sequence id="sequence_828" name="QKI_HepG2_rep01_23176" length="81" weight="1.000000" /> +<sequence id="sequence_829" name="QKI_HepG2_rep01_12982" length="81" weight="1.000000" /> +<sequence id="sequence_830" name="QKI_HepG2_rep01_8216" length="81" weight="1.000000" /> +<sequence id="sequence_831" name="QKI_HepG2_rep01_32693" length="81" weight="1.000000" /> +<sequence id="sequence_832" name="QKI_HepG2_rep01_13049" length="81" weight="1.000000" /> +<sequence id="sequence_833" name="QKI_HepG2_rep01_42258" length="81" weight="1.000000" /> +<sequence id="sequence_834" name="QKI_HepG2_rep01_44672" length="81" weight="1.000000" /> +<sequence id="sequence_835" name="QKI_HepG2_rep01_54580" length="81" weight="1.000000" /> +<sequence id="sequence_836" name="QKI_HepG2_rep01_25157" length="81" weight="1.000000" /> +<sequence id="sequence_837" name="QKI_HepG2_rep01_39763" length="81" weight="1.000000" /> +<sequence id="sequence_838" name="QKI_HepG2_rep01_41533" length="81" weight="1.000000" /> +<sequence id="sequence_839" name="QKI_HepG2_rep01_8059" length="81" weight="1.000000" /> +<sequence id="sequence_840" name="QKI_HepG2_rep01_34096" length="81" weight="1.000000" /> +<sequence id="sequence_841" name="QKI_HepG2_rep01_39185" length="81" weight="1.000000" /> +<sequence id="sequence_842" name="QKI_HepG2_rep01_42774" length="81" weight="1.000000" /> +<sequence id="sequence_843" name="QKI_HepG2_rep01_9291" length="81" weight="1.000000" /> +<sequence id="sequence_844" name="QKI_HepG2_rep01_36394" length="81" weight="1.000000" /> +<sequence id="sequence_845" name="QKI_HepG2_rep01_18934" length="81" weight="1.000000" /> +<sequence id="sequence_846" name="QKI_HepG2_rep01_21425" length="81" weight="1.000000" /> +<sequence id="sequence_847" name="QKI_HepG2_rep01_25146" length="81" weight="1.000000" /> +<sequence id="sequence_848" name="QKI_HepG2_rep01_43579" length="81" weight="1.000000" /> +<sequence id="sequence_849" name="QKI_HepG2_rep01_30565" length="81" weight="1.000000" /> +<sequence id="sequence_850" name="QKI_HepG2_rep01_1554" length="81" weight="1.000000" /> +<sequence id="sequence_851" name="QKI_HepG2_rep01_44163" length="81" weight="1.000000" /> +<sequence id="sequence_852" name="QKI_HepG2_rep01_36218" length="81" weight="1.000000" /> +<sequence id="sequence_853" name="QKI_HepG2_rep01_21745" length="81" weight="1.000000" /> +<sequence id="sequence_854" name="QKI_HepG2_rep01_14904" length="81" weight="1.000000" /> +<sequence id="sequence_855" name="QKI_HepG2_rep01_48932" length="81" weight="1.000000" /> +<sequence id="sequence_856" name="QKI_HepG2_rep01_7244" length="81" weight="1.000000" /> +<sequence id="sequence_857" name="QKI_HepG2_rep01_39842" length="81" weight="1.000000" /> +<sequence id="sequence_858" name="QKI_HepG2_rep01_50393" length="81" weight="1.000000" /> +<sequence id="sequence_859" name="QKI_HepG2_rep01_43200" length="81" weight="1.000000" /> +<sequence id="sequence_860" name="QKI_HepG2_rep01_4743" length="81" weight="1.000000" /> +<sequence id="sequence_861" name="QKI_HepG2_rep01_9402" length="81" weight="1.000000" /> +<sequence id="sequence_862" name="QKI_HepG2_rep01_398" length="81" weight="1.000000" /> +<sequence id="sequence_863" name="QKI_HepG2_rep01_15352" length="81" weight="1.000000" /> +<sequence id="sequence_864" name="QKI_HepG2_rep01_5107" length="81" weight="1.000000" /> +<sequence id="sequence_865" name="QKI_HepG2_rep01_17361" length="81" weight="1.000000" /> +<sequence id="sequence_866" name="QKI_HepG2_rep01_9085" length="81" weight="1.000000" /> +<sequence id="sequence_867" name="QKI_HepG2_rep01_23643" length="81" weight="1.000000" /> +<sequence id="sequence_868" name="QKI_HepG2_rep01_6450" length="81" weight="1.000000" /> +<sequence id="sequence_869" name="QKI_HepG2_rep01_558" length="81" weight="1.000000" /> +<sequence id="sequence_870" name="QKI_HepG2_rep01_19738" length="81" weight="1.000000" /> +<sequence id="sequence_871" name="QKI_HepG2_rep01_43285" length="81" weight="1.000000" /> +<sequence id="sequence_872" name="QKI_HepG2_rep01_51920" length="81" weight="1.000000" /> +<sequence id="sequence_873" name="QKI_HepG2_rep01_8138" length="81" weight="1.000000" /> +<sequence id="sequence_874" name="QKI_HepG2_rep01_9347" length="81" weight="1.000000" /> +<sequence id="sequence_875" name="QKI_HepG2_rep01_31822" length="81" weight="1.000000" /> +<sequence id="sequence_876" name="QKI_HepG2_rep01_30843" length="81" weight="1.000000" /> +<sequence id="sequence_877" name="QKI_HepG2_rep01_14567" length="81" weight="1.000000" /> +<sequence id="sequence_878" name="QKI_HepG2_rep01_23326" length="81" weight="1.000000" /> +<sequence id="sequence_879" name="QKI_HepG2_rep01_20348" length="81" weight="1.000000" /> +<sequence id="sequence_880" name="QKI_HepG2_rep01_8042" length="81" weight="1.000000" /> +<sequence id="sequence_881" name="QKI_HepG2_rep01_44352" length="81" weight="1.000000" /> +<sequence id="sequence_882" name="QKI_HepG2_rep01_12108" length="81" weight="1.000000" /> +<sequence id="sequence_883" name="QKI_HepG2_rep01_52612" length="81" weight="1.000000" /> +<sequence id="sequence_884" name="QKI_HepG2_rep01_1522" length="81" weight="1.000000" /> +<sequence id="sequence_885" name="QKI_HepG2_rep01_12852" length="81" weight="1.000000" /> +<sequence id="sequence_886" name="QKI_HepG2_rep01_43880" length="81" weight="1.000000" /> +<sequence id="sequence_887" name="QKI_HepG2_rep01_36771" length="81" weight="1.000000" /> +<sequence id="sequence_888" name="QKI_HepG2_rep01_23371" length="81" weight="1.000000" /> +<sequence id="sequence_889" name="QKI_HepG2_rep01_46644" length="81" weight="1.000000" /> +<sequence id="sequence_890" name="QKI_HepG2_rep01_4377" length="81" weight="1.000000" /> +<sequence id="sequence_891" name="QKI_HepG2_rep01_38980" length="81" weight="1.000000" /> +<sequence id="sequence_892" name="QKI_HepG2_rep01_37769" length="81" weight="1.000000" /> +<sequence id="sequence_893" name="QKI_HepG2_rep01_17172" length="81" weight="1.000000" /> +<sequence id="sequence_894" name="QKI_HepG2_rep01_33635" length="81" weight="1.000000" /> +<sequence id="sequence_895" name="QKI_HepG2_rep01_24841" length="81" weight="1.000000" /> +<sequence id="sequence_896" name="QKI_HepG2_rep01_34747" length="81" weight="1.000000" /> +<sequence id="sequence_897" name="QKI_HepG2_rep01_36847" length="81" weight="1.000000" /> +<sequence id="sequence_898" name="QKI_HepG2_rep01_1701" length="81" weight="1.000000" /> +<sequence id="sequence_899" name="QKI_HepG2_rep01_51237" length="81" weight="1.000000" /> +<sequence id="sequence_900" name="QKI_HepG2_rep01_30696" length="81" weight="1.000000" /> +<sequence id="sequence_901" name="QKI_HepG2_rep01_52054" length="81" weight="1.000000" /> +<sequence id="sequence_902" name="QKI_HepG2_rep01_48122" length="81" weight="1.000000" /> +<sequence id="sequence_903" name="QKI_HepG2_rep01_52006" length="81" weight="1.000000" /> +<sequence id="sequence_904" name="QKI_HepG2_rep01_42525" length="81" weight="1.000000" /> +<sequence id="sequence_905" name="QKI_HepG2_rep01_50888" length="81" weight="1.000000" /> +<sequence id="sequence_906" name="QKI_HepG2_rep01_34932" length="81" weight="1.000000" /> +<sequence id="sequence_907" name="QKI_HepG2_rep01_13030" length="81" weight="1.000000" /> +<sequence id="sequence_908" name="QKI_HepG2_rep01_36460" length="81" weight="1.000000" /> +<sequence id="sequence_909" name="QKI_HepG2_rep01_21836" length="81" weight="1.000000" /> +<sequence id="sequence_910" name="QKI_HepG2_rep01_49071" length="81" weight="1.000000" /> +<sequence id="sequence_911" name="QKI_HepG2_rep01_13251" length="81" weight="1.000000" /> +<sequence id="sequence_912" name="QKI_HepG2_rep01_46496" length="81" weight="1.000000" /> +<sequence id="sequence_913" name="QKI_HepG2_rep01_44537" length="81" weight="1.000000" /> +<sequence id="sequence_914" name="QKI_HepG2_rep01_46274" length="81" weight="1.000000" /> +<sequence id="sequence_915" name="QKI_HepG2_rep01_30735" length="81" weight="1.000000" /> +<sequence id="sequence_916" name="QKI_HepG2_rep01_22993" length="81" weight="1.000000" /> +<sequence id="sequence_917" name="QKI_HepG2_rep01_48330" length="81" weight="1.000000" /> +<sequence id="sequence_918" name="QKI_HepG2_rep01_6236" length="81" weight="1.000000" /> +<sequence id="sequence_919" name="QKI_HepG2_rep01_36483" length="81" weight="1.000000" /> +<sequence id="sequence_920" name="QKI_HepG2_rep01_54602" length="81" weight="1.000000" /> +<sequence id="sequence_921" name="QKI_HepG2_rep01_53291" length="81" weight="1.000000" /> +<sequence id="sequence_922" name="QKI_HepG2_rep01_51734" length="81" weight="1.000000" /> +<sequence id="sequence_923" name="QKI_HepG2_rep01_44133" length="81" weight="1.000000" /> +<sequence id="sequence_924" name="QKI_HepG2_rep01_38171" length="81" weight="1.000000" /> +<sequence id="sequence_925" name="QKI_HepG2_rep01_312" length="81" weight="1.000000" /> +<sequence id="sequence_926" name="QKI_HepG2_rep01_36466" length="81" weight="1.000000" /> +<sequence id="sequence_927" name="QKI_HepG2_rep01_53091" length="81" weight="1.000000" /> +<sequence id="sequence_928" name="QKI_HepG2_rep01_38193" length="81" weight="1.000000" /> +<sequence id="sequence_929" name="QKI_HepG2_rep01_42727" length="81" weight="1.000000" /> +<sequence id="sequence_930" name="QKI_HepG2_rep01_36283" length="81" weight="1.000000" /> +<sequence id="sequence_931" name="QKI_HepG2_rep01_15130" length="81" weight="1.000000" /> +<sequence id="sequence_932" name="QKI_HepG2_rep01_43638" length="81" weight="1.000000" /> +<sequence id="sequence_933" name="QKI_HepG2_rep01_1542" length="81" weight="1.000000" /> +<sequence id="sequence_934" name="QKI_HepG2_rep01_34878" length="81" weight="1.000000" /> +<sequence id="sequence_935" name="QKI_HepG2_rep01_39995" length="81" weight="1.000000" /> +<sequence id="sequence_936" name="QKI_HepG2_rep01_39061" length="81" weight="1.000000" /> +<sequence id="sequence_937" name="QKI_HepG2_rep01_385" length="81" weight="1.000000" /> +<sequence id="sequence_938" name="QKI_HepG2_rep01_34035" length="81" weight="1.000000" /> +<sequence id="sequence_939" name="QKI_HepG2_rep01_52035" length="81" weight="1.000000" /> +<sequence id="sequence_940" name="QKI_HepG2_rep01_27815" length="81" weight="1.000000" /> +<sequence id="sequence_941" name="QKI_HepG2_rep01_38850" length="81" weight="1.000000" /> +<sequence id="sequence_942" name="QKI_HepG2_rep01_46571" length="81" weight="1.000000" /> +<sequence id="sequence_943" name="QKI_HepG2_rep01_8357" length="81" weight="1.000000" /> +<sequence id="sequence_944" name="QKI_HepG2_rep01_44455" length="81" weight="1.000000" /> +<sequence id="sequence_945" name="QKI_HepG2_rep01_19740" length="81" weight="1.000000" /> +<sequence id="sequence_946" name="QKI_HepG2_rep01_44387" length="81" weight="1.000000" /> +<sequence id="sequence_947" name="QKI_HepG2_rep01_40540" length="81" weight="1.000000" /> +<sequence id="sequence_948" name="QKI_HepG2_rep01_20146" length="81" weight="1.000000" /> +<sequence id="sequence_949" name="QKI_HepG2_rep01_578" length="81" weight="1.000000" /> +<sequence id="sequence_950" name="QKI_HepG2_rep01_369" length="81" weight="1.000000" /> +<sequence id="sequence_951" name="QKI_HepG2_rep01_54479" length="81" weight="1.000000" /> +<sequence id="sequence_952" name="QKI_HepG2_rep01_36355" length="81" weight="1.000000" /> +<sequence id="sequence_953" name="QKI_HepG2_rep01_35039" length="81" weight="1.000000" /> +<sequence id="sequence_954" name="QKI_HepG2_rep01_20202" length="62" weight="1.000000" /> +<sequence id="sequence_955" name="QKI_HepG2_rep01_18663" length="81" weight="1.000000" /> +<sequence id="sequence_956" name="QKI_HepG2_rep01_3306" length="81" weight="1.000000" /> +<sequence id="sequence_957" name="QKI_HepG2_rep01_51868" length="81" weight="1.000000" /> +<sequence id="sequence_958" name="QKI_HepG2_rep01_41653" length="81" weight="1.000000" /> +<sequence id="sequence_959" name="QKI_HepG2_rep01_20237" length="81" weight="1.000000" /> +<sequence id="sequence_960" name="QKI_HepG2_rep01_36492" length="81" weight="1.000000" /> +<sequence id="sequence_961" name="QKI_HepG2_rep01_12765" length="81" weight="1.000000" /> +<sequence id="sequence_962" name="QKI_HepG2_rep01_47000" length="81" weight="1.000000" /> +<sequence id="sequence_963" name="QKI_HepG2_rep01_46257" length="81" weight="1.000000" /> +<sequence id="sequence_964" name="QKI_HepG2_rep01_46762" length="81" weight="1.000000" /> +<sequence id="sequence_965" name="QKI_HepG2_rep01_30636" length="81" weight="1.000000" /> +<sequence id="sequence_966" name="QKI_HepG2_rep01_30869" length="81" weight="1.000000" /> +<sequence id="sequence_967" name="QKI_HepG2_rep01_43535" length="81" weight="1.000000" /> +<sequence id="sequence_968" name="QKI_HepG2_rep01_30939" length="81" weight="1.000000" /> +<sequence id="sequence_969" name="QKI_HepG2_rep01_43169" length="81" weight="1.000000" /> +<sequence id="sequence_970" name="QKI_HepG2_rep01_27961" length="81" weight="1.000000" /> +<sequence id="sequence_971" name="QKI_HepG2_rep01_32265" length="81" weight="1.000000" /> +<sequence id="sequence_972" name="QKI_HepG2_rep01_32146" length="81" weight="1.000000" /> +<sequence id="sequence_973" name="QKI_HepG2_rep01_50391" length="81" weight="1.000000" /> +<sequence id="sequence_974" name="QKI_HepG2_rep01_39180" length="81" weight="1.000000" /> +<sequence id="sequence_975" name="QKI_HepG2_rep01_8463" length="81" weight="1.000000" /> +<sequence id="sequence_976" name="QKI_HepG2_rep01_36759" length="81" weight="1.000000" /> +<sequence id="sequence_977" name="QKI_HepG2_rep01_43534" length="81" weight="1.000000" /> +<sequence id="sequence_978" name="QKI_HepG2_rep01_9382" length="81" weight="1.000000" /> +<sequence id="sequence_979" name="QKI_HepG2_rep01_27910" length="81" weight="1.000000" /> +<sequence id="sequence_980" name="QKI_HepG2_rep01_9428" length="81" weight="1.000000" /> +<sequence id="sequence_981" name="QKI_HepG2_rep01_44551" length="81" weight="1.000000" /> +<sequence id="sequence_982" name="QKI_HepG2_rep01_639" length="81" weight="1.000000" /> +<sequence id="sequence_983" name="QKI_HepG2_rep01_50146" length="81" weight="1.000000" /> +<sequence id="sequence_984" name="QKI_HepG2_rep01_43568" length="81" weight="1.000000" /> +<sequence id="sequence_985" name="QKI_HepG2_rep01_49378" length="81" weight="1.000000" /> +<sequence id="sequence_986" name="QKI_HepG2_rep01_4936" length="81" weight="1.000000" /> +<sequence id="sequence_987" name="QKI_HepG2_rep01_5155" length="81" weight="1.000000" /> +<sequence id="sequence_988" name="QKI_HepG2_rep01_30902" length="81" weight="1.000000" /> +<sequence id="sequence_989" name="QKI_HepG2_rep01_2485" length="81" weight="1.000000" /> +<sequence id="sequence_990" name="QKI_HepG2_rep01_27851" length="81" weight="1.000000" /> +<sequence id="sequence_991" name="QKI_HepG2_rep01_8364" length="81" weight="1.000000" /> +<sequence id="sequence_992" name="QKI_HepG2_rep01_29215" length="81" weight="1.000000" /> +<sequence id="sequence_993" name="QKI_HepG2_rep01_15538" length="81" weight="1.000000" /> +<sequence id="sequence_994" name="QKI_HepG2_rep01_20329" length="81" weight="1.000000" /> +<sequence id="sequence_995" name="QKI_HepG2_rep01_36526" length="81" weight="1.000000" /> +<sequence id="sequence_996" name="QKI_HepG2_rep01_7160" length="81" weight="1.000000" /> +<sequence id="sequence_997" name="QKI_HepG2_rep01_46269" length="81" weight="1.000000" /> +<sequence id="sequence_998" name="QKI_HepG2_rep01_49355" length="81" weight="1.000000" /> +<sequence id="sequence_999" name="QKI_HepG2_rep01_27960" length="81" weight="1.000000" /> +<letter_frequencies> +<alphabet_array> +<value letter_id="A">0.294</value> +<value letter_id="C">0.209</value> +<value letter_id="G">0.164</value> +<value letter_id="T">0.333</value> +</alphabet_array> +</letter_frequencies> +</training_set> +<model> +<command_line>meme meme_inputx.fa -o meme_outx -dna </command_line> +<host>ThinkPad-T450s</host> +<type>zoops</type> +<nmotifs>1</nmotifs> +<evalue_threshold>inf</evalue_threshold> +<object_function>E-value of product of p-values</object_function> +<use_llr>0</use_llr> +<min_width>8</min_width> +<max_width>50</max_width> +<wg>11</wg> +<ws>1</ws> +<endgaps>yes</endgaps> +<substring>yes</substring> +<minsites>2</minsites> +<maxsites>1000</maxsites> +<wnsites>0.8</wnsites> +<spmap>uni</spmap> +<spfuzz>0.5</spfuzz> +<prior>dirichlet</prior> +<beta>0.01</beta> +<maxiter>50</maxiter> +<distance>1e-05</distance> +<num_sequences>1000</num_sequences> +<num_positions>80981</num_positions> +<seed>0</seed> +<ctfrac>-1</ctfrac> +<maxwords>-1</maxwords> +<strands>forward</strands> +<priors_file></priors_file> +<reason_for_stopping>Stopped because requested number of motifs (1) found.</reason_for_stopping> +<background_frequencies source="dataset with add-one prior applied"> +<alphabet_array> +<value letter_id="A">0.294</value> +<value letter_id="C">0.209</value> +<value letter_id="G">0.164</value> +<value letter_id="T">0.333</value> +</alphabet_array> +</background_frequencies> +</model> +<motifs> +<motif id="motif_1" name="TACTAAYM" alt="MEME-1" width="8" sites="449" ic="11.4" re="10.1" llr="3130" e_value="5.7e-184" bayes_threshold="9.32212" elapsed_time="548.264000"> +<scores> +<alphabet_matrix> +<alphabet_array> +<value letter_id="A">-67</value> +<value letter_id="C">-58</value> +<value letter_id="G">-1545</value> +<value letter_id="T">102</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">173</value> +<value letter_id="C">-1545</value> +<value letter_id="G">-262</value> +<value letter_id="T">-1545</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">-1545</value> +<value letter_id="C">189</value> +<value letter_id="G">-1545</value> +<value letter_id="T">-57</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">-1545</value> +<value letter_id="C">-1545</value> +<value letter_id="G">-1545</value> +<value letter_id="T">159</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">177</value> +<value letter_id="C">-1545</value> +<value letter_id="G">-1545</value> +<value letter_id="T">-1545</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">177</value> +<value letter_id="C">-1545</value> +<value letter_id="G">-1545</value> +<value letter_id="T">-1545</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">-1545</value> +<value letter_id="C">166</value> +<value letter_id="G">-1545</value> +<value letter_id="T">1</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">83</value> +<value letter_id="C">35</value> +<value letter_id="G">-1545</value> +<value letter_id="T">-67</value> +</alphabet_array> +</alphabet_matrix> +</scores> +<probabilities> +<alphabet_matrix> +<alphabet_array> +<value letter_id="A">0.184855</value> +<value letter_id="C">0.140312</value> +<value letter_id="G">0.000000</value> +<value letter_id="T">0.674833</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">0.973274</value> +<value letter_id="C">0.000000</value> +<value letter_id="G">0.026726</value> +<value letter_id="T">0.000000</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">0.000000</value> +<value letter_id="C">0.775056</value> +<value letter_id="G">0.000000</value> +<value letter_id="T">0.224944</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">0.000000</value> +<value letter_id="C">0.000000</value> +<value letter_id="G">0.000000</value> +<value letter_id="T">1.000000</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">1.000000</value> +<value letter_id="C">0.000000</value> +<value letter_id="G">0.000000</value> +<value letter_id="T">0.000000</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">1.000000</value> +<value letter_id="C">0.000000</value> +<value letter_id="G">0.000000</value> +<value letter_id="T">0.000000</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">0.000000</value> +<value letter_id="C">0.663697</value> +<value letter_id="G">0.000000</value> +<value letter_id="T">0.336303</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">0.523385</value> +<value letter_id="C">0.267261</value> +<value letter_id="G">0.000000</value> +<value letter_id="T">0.209354</value> +</alphabet_array> +</alphabet_matrix> +</probabilities> +<regular_expression> +TA[CT]TAA[CT][ACT] +</regular_expression> +<contributing_sites> +<contributing_site sequence_id="sequence_998" position="3" strand="plus" pvalue="3.62e-05" > +<left_flank>TAC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ATATATTAGC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_958" position="28" strand="plus" pvalue="3.62e-05" > +<left_flank>TGGCCTCATT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GATAAGTAGT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_952" position="14" strand="plus" pvalue="3.62e-05" > +<left_flank>GTCTTTCATG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>AGTTTTCAAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_951" position="24" strand="plus" pvalue="3.62e-05" > +<left_flank>TCTTGGCTTT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GTGATCAGTC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_947" position="18" strand="plus" pvalue="3.62e-05" > +<left_flank>CCCCCTCATG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CTCTTGTAGG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_944" position="24" strand="plus" pvalue="3.62e-05" > +<left_flank>GTGACTCAGA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GCAATGTAGC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_934" position="0" strand="plus" pvalue="3.62e-05" > +<left_flank></left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTTTGTGTAG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_924" position="17" strand="plus" pvalue="3.62e-05" > +<left_flank>TAAATCCTCC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>AAAAGTCTAT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_922" position="16" strand="plus" pvalue="3.62e-05" > +<left_flank>TATTAACAAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TCTTAGAGCA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_917" position="19" strand="plus" pvalue="3.62e-05" > +<left_flank>AAATATCCCT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CACTGGGGAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_916" position="31" strand="plus" pvalue="3.62e-05" > +<left_flank>AGACCACACA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GTCGTCTTCA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_894" position="19" strand="plus" pvalue="3.62e-05" > +<left_flank>GTTAATGAAA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>AACCAGTGGT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_882" position="69" strand="plus" pvalue="3.62e-05" > +<left_flank>CTAATATAAA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ATAG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_880" position="13" strand="plus" pvalue="3.62e-05" > +<left_flank>ATTTACCTTT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CGCTTATTTG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_875" position="29" strand="plus" pvalue="3.62e-05" > +<left_flank>CTCTGTTGTG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>AAAATAGTTG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_859" position="17" strand="plus" pvalue="3.62e-05" > +<left_flank>TCCCCACCCT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTAACGAAAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_811" position="19" strand="plus" pvalue="3.62e-05" > +<left_flank>AGGCAGGGCC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GGGACCCAAG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_809" position="19" strand="plus" pvalue="3.62e-05" > +<left_flank>AACAAAATTT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CAAATACTAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_804" position="68" strand="plus" pvalue="3.62e-05" > +<left_flank>ATTTTCTTTC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CCATA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_795" position="26" strand="plus" pvalue="3.62e-05" > +<left_flank>CCAATGCTAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ATATGGTTAC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_752" position="26" strand="plus" pvalue="3.62e-05" > +<left_flank>CAGTGAAATG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CTGCTGCCTT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_716" position="3" strand="plus" pvalue="3.62e-05" > +<left_flank>TTT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ATTTACACAT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_680" position="24" strand="plus" pvalue="3.62e-05" > +<left_flank>CATTTTCCAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GCATCCTAAT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_655" position="15" strand="plus" pvalue="3.62e-05" > +<left_flank>ATTGCTTTAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CCTGGAACAG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_645" position="7" strand="plus" pvalue="3.62e-05" > +<left_flank>ATGTATA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GAAATAAAAT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_633" position="29" strand="plus" pvalue="3.62e-05" > +<left_flank>ACCATGTATA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GAAATAAAAT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_628" position="29" strand="plus" pvalue="3.62e-05" > +<left_flank>CATTGAACAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>AGCCTGGGCT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_620" position="18" strand="plus" pvalue="3.62e-05" > +<left_flank>AATTGTATGG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ACTAGAGTAC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_575" position="20" strand="plus" pvalue="3.62e-05" > +<left_flank>TTGGGACTGT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GTGCTGTTTA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_546" position="4" strand="plus" pvalue="3.62e-05" > +<left_flank>CACT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ATATTTATTG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_513" position="38" strand="plus" pvalue="3.62e-05" > +<left_flank>TCCTACTGAC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>AATATAAAAT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_511" position="6" strand="plus" pvalue="3.62e-05" > +<left_flank>TTGTGA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GCTGCCAGCA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_484" position="30" strand="plus" pvalue="3.62e-05" > +<left_flank>AGACCACACA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GTCGTCTTCA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_468" position="11" strand="plus" pvalue="3.62e-05" > +<left_flank>TGTCGGTATA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GTTTAATATT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_464" position="20" strand="plus" pvalue="3.62e-05" > +<left_flank>ATGACCCATT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GGCAACAAGC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_455" position="4" strand="plus" pvalue="3.62e-05" > +<left_flank>AACC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TGGATTGGTT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_413" position="0" strand="plus" pvalue="3.62e-05" > +<left_flank></left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTTGTATTAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_408" position="32" strand="plus" pvalue="3.62e-05" > +<left_flank>ATTTAATACT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ACAGAGATAC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_382" position="57" strand="plus" pvalue="3.62e-05" > +<left_flank>GTTGTCTCCT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ATATTCTGCC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_381" position="16" strand="plus" pvalue="3.62e-05" > +<left_flank>AAAAAAATAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TGTCTTTTGC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_375" position="37" strand="plus" pvalue="3.62e-05" > +<left_flank>AATAGAAAAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ATATCTAACA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_372" position="13" strand="plus" pvalue="3.62e-05" > +<left_flank>ATGTGAAAGT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTTATTATGT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_318" position="11" strand="plus" pvalue="3.62e-05" > +<left_flank>CAATAGTGCT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CTTGACAGTA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_306" position="27" strand="plus" pvalue="3.62e-05" > +<left_flank>ACCCCATCTC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TGGAGAAACC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_292" position="41" strand="plus" pvalue="3.62e-05" > +<left_flank>AACTAACTAA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TCTCAGACGC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_282" position="4" strand="plus" pvalue="3.62e-05" > +<left_flank>TAAA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTGTATCCAT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_272" position="10" strand="plus" pvalue="3.62e-05" > +<left_flank>AGTGGTTATA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTGTTTGATG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_268" position="15" strand="plus" pvalue="3.62e-05" > +<left_flank>TTTCACCTAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTATTATGGC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_253" position="32" strand="plus" pvalue="3.62e-05" > +<left_flank>ATTACACCAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CTCAAACACA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_240" position="58" strand="plus" pvalue="3.62e-05" > +<left_flank>GAAGAGAATA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TGGGAAAAAG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_230" position="18" strand="plus" pvalue="3.62e-05" > +<left_flank>TTTACATTTT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTTGCGTTGT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_221" position="50" strand="plus" pvalue="3.62e-05" > +<left_flank>TAGTACTTAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GTAGTTATTT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_208" position="27" strand="plus" pvalue="3.62e-05" > +<left_flank>AAAATCACTG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>AGATTTGAAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_180" position="11" strand="plus" pvalue="3.62e-05" > +<left_flank>TGAAACCCAA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TAATTATAGT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_146" position="19" strand="plus" pvalue="3.62e-05" > +<left_flank>CTACAATGTC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TGTCCTAGCC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_119" position="4" strand="plus" pvalue="3.62e-05" > +<left_flank>TTAG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ACAATCCTTT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_111" position="13" strand="plus" pvalue="3.62e-05" > +<left_flank>CTGCTGGTAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TAGTTTACTC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_93" position="0" strand="plus" pvalue="3.62e-05" > +<left_flank></left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ATAACGGATT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_46" position="18" strand="plus" pvalue="3.62e-05" > +<left_flank>CATTTTAAAG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTTGGCCACA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_5" position="9" strand="plus" pvalue="3.62e-05" > +<left_flank>CCCAAATTA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GCTCATAATT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_935" position="11" strand="plus" pvalue="6.19e-05" > +<left_flank>TCATTTAACA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TCTGTAATTG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_911" position="1" strand="plus" pvalue="6.19e-05" > +<left_flank>C</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TCCTTTCTCT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_893" position="19" strand="plus" pvalue="6.19e-05" > +<left_flank>TAGCTCTCTA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>CGTGTTACAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_892" position="10" strand="plus" pvalue="6.19e-05" > +<left_flank>ATTTACATAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>AAACTTAAAC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_876" position="2" strand="plus" pvalue="6.19e-05" > +<left_flank>GC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>CAAGTCTAGT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_869" position="34" strand="plus" pvalue="6.19e-05" > +<left_flank>AACCACTAAC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TACTTCTTGC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_850" position="29" strand="plus" pvalue="6.19e-05" > +<left_flank>TCAGTACTCT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>ACCTGGTGCA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_824" position="27" strand="plus" pvalue="6.19e-05" > +<left_flank>ACAACAACAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TGTGGAGTCA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_791" position="33" strand="plus" pvalue="6.19e-05" > +<left_flank>ATACTAGGCC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>AACACACTAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_790" position="4" strand="plus" pvalue="6.19e-05" > +<left_flank>ATTC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TTTAAGGTGA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_768" position="14" strand="plus" pvalue="6.19e-05" > +<left_flank>CATATGTGTA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>ATACTCATCT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_717" position="8" strand="plus" pvalue="6.19e-05" > +<left_flank>GCAATTGC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TATGATTAGA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_705" position="14" strand="plus" pvalue="6.19e-05" > +<left_flank>TGTTGTTCAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>AACATCCCTT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_666" position="12" strand="plus" pvalue="6.19e-05" > +<left_flank>ATGGCTTCCT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>ATCCTTACTA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_663" position="68" strand="plus" pvalue="6.19e-05" > +<left_flank>ACTCACATTC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>CCATC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_599" position="24" strand="plus" pvalue="6.19e-05" > +<left_flank>TCCCCTTGCT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>CCTATTTAGA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_537" position="19" strand="plus" pvalue="6.19e-05" > +<left_flank>GCAGTAGCAG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>AGTCCAGTTG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_518" position="18" strand="plus" pvalue="6.19e-05" > +<left_flank>GGGGTAACGA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>AGTTCACCTA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_499" position="5" strand="plus" pvalue="6.19e-05" > +<left_flank>AGTGG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>AGTCCAGTTG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_496" position="11" strand="plus" pvalue="6.19e-05" > +<left_flank>CTTAGTTTTC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>AAAGAAAGAC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_453" position="26" strand="plus" pvalue="6.19e-05" > +<left_flank>AGGAAAGTGT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TCTTGCACCC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_434" position="28" strand="plus" pvalue="6.19e-05" > +<left_flank>GAATACTTTT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TCAGAGTCAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_416" position="39" strand="plus" pvalue="6.19e-05" > +<left_flank>AACTAAGCTA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>CTAGGGTTCG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_410" position="18" strand="plus" pvalue="6.19e-05" > +<left_flank>TAAAGTCAGC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TGGTACTATG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_341" position="37" strand="plus" pvalue="6.19e-05" > +<left_flank>GCACTAGCCA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>AGTCCAGTTG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_302" position="23" strand="plus" pvalue="6.19e-05" > +<left_flank>GCACTAGCAG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>AATCCAGTTG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_242" position="29" strand="plus" pvalue="6.19e-05" > +<left_flank>ATATTCTGGA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>CCCTTATCAG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_204" position="19" strand="plus" pvalue="6.19e-05" > +<left_flank>GCCTAGCACC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>CTGAGAAAAT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_196" position="20" strand="plus" pvalue="6.19e-05" > +<left_flank>GACTTCTCAC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>CTGGAAACTT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_143" position="23" strand="plus" pvalue="6.19e-05" > +<left_flank>GTTTCTTTAA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>AGAATACCAT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_95" position="15" strand="plus" pvalue="6.19e-05" > +<left_flank>TGATGACCTT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>AAAACATACT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_82" position="16" strand="plus" pvalue="6.19e-05" > +<left_flank>ACAACTATAA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>CTTTTCTCAG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_64" position="18" strand="plus" pvalue="6.19e-05" > +<left_flank>GTAAAGGGAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TTAGCTCAGA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_52" position="14" strand="plus" pvalue="6.19e-05" > +<left_flank>TACACATGTT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>ATAGTAGTGA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_39" position="20" strand="plus" pvalue="6.19e-05" > +<left_flank>TTCTGAGATG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TCTGCCAGAC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_17" position="7" strand="plus" pvalue="6.19e-05" > +<left_flank>AGTAATT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>CCCACTGTGG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_995" position="19" strand="plus" pvalue="1.26e-04" > +<left_flank>CCTGGGGATA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>AACTGAGTCT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_985" position="20" strand="plus" pvalue="1.26e-04" > +<left_flank>TTAAACAGAC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>ATAAGGGTAC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_969" position="31" strand="plus" pvalue="1.26e-04" > +<left_flank>CCCCTCCTAA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>ACCTGACTCC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_950" position="13" strand="plus" pvalue="1.26e-04" > +<left_flank>GTGTGAAGAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>TCCAACACTC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_927" position="18" strand="plus" pvalue="1.26e-04" > +<left_flank>CCCCCAACTC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>TTCAGTCCTA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_877" position="20" strand="plus" pvalue="1.26e-04" > +<left_flank>TTTGGGCACA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>TACTAACTGT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_858" position="13" strand="plus" pvalue="1.26e-04" > +<left_flank>ATATCACCCA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>AAATTATGTC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_853" position="12" strand="plus" pvalue="1.26e-04" > +<left_flank>TTTGGTATGT</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GTTAAACAAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_833" position="45" strand="plus" pvalue="1.26e-04" > +<left_flank>CCCCCACACA</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>AACATGACAG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_827" position="4" strand="plus" pvalue="1.26e-04" > +<left_flank>GGCT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>ACAGCTTTTG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_817" position="30" strand="plus" pvalue="1.26e-04" > +<left_flank>TACTGTGCTG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>CCCAATGGTA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_761" position="29" strand="plus" pvalue="1.26e-04" > +<left_flank>CCTTTCACCC</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>AATCTCCCTG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_745" position="9" strand="plus" pvalue="1.26e-04" > +<left_flank>GTGCCCATC</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTGCTGGACT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_697" position="18" strand="plus" pvalue="1.26e-04" > +<left_flank>TACCCAATAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>CCCTATCCCC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_678" position="59" strand="plus" pvalue="1.26e-04" > +<left_flank>TTGTAAGTAG</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TATACATTAT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_664" position="11" strand="plus" pvalue="1.26e-04" > +<left_flank>GCTCAAATTG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>TTGGCTAGTG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_639" position="38" strand="plus" pvalue="1.26e-04" > +<left_flank>CATGAGGTTT</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CAAAATATGT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_589" position="20" strand="plus" pvalue="1.26e-04" > +<left_flank>TTGAGCTGCA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>GTGGTGGGGT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_574" position="7" strand="plus" pvalue="1.26e-04" > +<left_flank>TTCATCT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>TCTAAAGTAT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_555" position="24" strand="plus" pvalue="1.26e-04" > +<left_flank>CTATCTCACT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>ACTATGGACA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_552" position="16" strand="plus" pvalue="1.26e-04" > +<left_flank>TATGCTTCTT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>GCATTTATGC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_527" position="6" strand="plus" pvalue="1.26e-04" > +<left_flank>TTGTAA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>TAATAGTGGG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_507" position="3" strand="plus" pvalue="1.26e-04" > +<left_flank>AAG</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TGGCTAGTAT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_459" position="26" strand="plus" pvalue="1.26e-04" > +<left_flank>TTTACATTCT</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GAGTATAAGC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_451" position="5" strand="plus" pvalue="1.26e-04" > +<left_flank>AATGA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>ATACACATAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_431" position="14" strand="plus" pvalue="1.26e-04" > +<left_flank>TTATGTTTAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>TTGTGAACAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_428" position="16" strand="plus" pvalue="1.26e-04" > +<left_flank>AAAATAATCT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>TGATATTAGA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_400" position="5" strand="plus" pvalue="1.26e-04" > +<left_flank>GAACT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>TGCTAATAAG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_399" position="17" strand="plus" pvalue="1.26e-04" > +<left_flank>ATTACTTATA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>ACATAATGAC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_348" position="2" strand="plus" pvalue="1.26e-04" > +<left_flank>GT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>AAGCACATTG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_332" position="23" strand="plus" pvalue="1.26e-04" > +<left_flank>AATTAATTTC</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CAGATATTTA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_322" position="12" strand="plus" pvalue="1.26e-04" > +<left_flank>ACCACTGGTT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>GGGACCTTGT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_263" position="4" strand="plus" pvalue="1.26e-04" > +<left_flank>AGAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>ACTTAGATTT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_233" position="10" strand="plus" pvalue="1.26e-04" > +<left_flank>CTCAAATACT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>ATAAAAGGGA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_188" position="12" strand="plus" pvalue="1.26e-04" > +<left_flank>GTTAAAATTT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>CACTTATCAG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_187" position="14" strand="plus" pvalue="1.26e-04" > +<left_flank>TTCTTTCTCC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>TTCCATCTGG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_175" position="11" strand="plus" pvalue="1.26e-04" > +<left_flank>TGCTGATAAA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>TTGTAACCCT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_113" position="22" strand="plus" pvalue="1.26e-04" > +<left_flank>AGAATTAAAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>TAGGACTTCC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_61" position="18" strand="plus" pvalue="1.26e-04" > +<left_flank>CTTGCTTTTT</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ATGCGTCTCA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_38" position="9" strand="plus" pvalue="1.26e-04" > +<left_flank>TAGAACTTT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>CGTAGTCTTA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_986" position="5" strand="plus" pvalue="2.15e-04" > +<left_flank>CATTC</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTTATTGGAC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_972" position="26" strand="plus" pvalue="2.15e-04" > +<left_flank>CTGCTTAGCT</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TCAGCTATTC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_968" position="47" strand="plus" pvalue="2.15e-04" > +<left_flank>ACTGCTTAGT</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CTTTTCATAT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_943" position="17" strand="plus" pvalue="2.15e-04" > +<left_flank>TCAGTTATAC</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TCTGCAGCCA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_933" position="69" strand="plus" pvalue="2.15e-04" > +<left_flank>ATATTGTAAG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>AAAT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_928" position="9" strand="plus" pvalue="2.15e-04" > +<left_flank>ATGGCTTCA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TACATAGCCT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_912" position="14" strand="plus" pvalue="2.15e-04" > +<left_flank>TAAATGTTTG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GACTTTAATT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_908" position="27" strand="plus" pvalue="2.15e-04" > +<left_flank>CCCTTTAAGT</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CCTAGAAATA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_884" position="28" strand="plus" pvalue="2.15e-04" > +<left_flank>CTATATTTCA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CTTAGTGGAT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_883" position="34" strand="plus" pvalue="2.15e-04" > +<left_flank>TTGTGAATAA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GTACTAATAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_872" position="21" strand="plus" pvalue="2.15e-04" > +<left_flank>ATTTGAAAGT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>AACATCATAG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_860" position="3" strand="plus" pvalue="2.15e-04" > +<left_flank>CCT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>AAACTCTTAG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_844" position="15" strand="plus" pvalue="2.15e-04" > +<left_flank>AAAAAGAAAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TGTCAACCTT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_838" position="20" strand="plus" pvalue="2.15e-04" > +<left_flank>CTCAGAAACA</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GCACACGTTA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_807" position="5" strand="plus" pvalue="2.15e-04" > +<left_flank>TGTGA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ATAGTTAACA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_802" position="28" strand="plus" pvalue="2.15e-04" > +<left_flank>GTACATCCCA</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ACTGACATAT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_794" position="8" strand="plus" pvalue="2.15e-04" > +<left_flank>CTATTACA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTCGTATCAG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_792" position="56" strand="plus" pvalue="2.15e-04" > +<left_flank>GTGTTTTTTA</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TCTATTATAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_787" position="1" strand="plus" pvalue="2.15e-04" > +<left_flank>C</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TATGTTTTGA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_784" position="21" strand="plus" pvalue="2.15e-04" > +<left_flank>TGATGTTTGA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TGAGCCCTGT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_773" position="12" strand="plus" pvalue="2.15e-04" > +<left_flank>GAATAACAGC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTTGAATAGC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_728" position="31" strand="plus" pvalue="2.15e-04" > +<left_flank>AAACAAACCT</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GCTAACCTGG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_695" position="9" strand="plus" pvalue="2.15e-04" > +<left_flank>TAATGATAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTTGAGAGTG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_614" position="6" strand="plus" pvalue="2.15e-04" > +<left_flank>TCACAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTTGTCCTTG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_609" position="9" strand="plus" pvalue="2.15e-04" > +<left_flank>AAGAGTAAT</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTTCCCTTTT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_588" position="14" strand="plus" pvalue="2.15e-04" > +<left_flank>ATTTTTCCAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CTCTCTGTGT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_570" position="11" strand="plus" pvalue="2.15e-04" > +<left_flank>ATAACTAAGA</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ATGGGCTTGC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_532" position="27" strand="plus" pvalue="2.15e-04" > +<left_flank>GCCATATGTG</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ACTTGGAAGT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_510" position="10" strand="plus" pvalue="2.15e-04" > +<left_flank>CTCCATTTTC</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CTATACTGCT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_505" position="8" strand="plus" pvalue="2.15e-04" > +<left_flank>TTTATATG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTTGTTTAGG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_438" position="20" strand="plus" pvalue="2.15e-04" > +<left_flank>ACTCTCCTAC</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GTAAGCAATT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_423" position="9" strand="plus" pvalue="2.15e-04" > +<left_flank>ACTAAGCTA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GTTAGGGTTG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_396" position="5" strand="plus" pvalue="2.15e-04" > +<left_flank>TACCA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTCAGTATCC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_393" position="53" strand="plus" pvalue="2.15e-04" > +<left_flank>GCAAGAAGTA</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CTTCGTCACT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_392" position="4" strand="plus" pvalue="2.15e-04" > +<left_flank>TGAT</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TGGTCAGGGG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_369" position="12" strand="plus" pvalue="2.15e-04" > +<left_flank>AAAAACAAAA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTTCAGCTTC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_364" position="2" strand="plus" pvalue="2.15e-04" > +<left_flank>TT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ATCAAGAGTT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_352" position="7" strand="plus" pvalue="2.15e-04" > +<left_flank>TTTAATC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>AGGAAATTAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_340" position="7" strand="plus" pvalue="2.15e-04" > +<left_flank>TTTATAA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTGGATGCAC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_336" position="13" strand="plus" pvalue="2.15e-04" > +<left_flank>CTCTCTGGGT</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTTGAACTGA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_325" position="5" strand="plus" pvalue="2.15e-04" > +<left_flank>TTCAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TCTTAAAACT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_321" position="13" strand="plus" pvalue="2.15e-04" > +<left_flank>TTTTTAGTAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CTAGCCTGTA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_291" position="45" strand="plus" pvalue="2.15e-04" > +<left_flank>TACTTTAATC</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>AGCAATAATA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_288" position="13" strand="plus" pvalue="2.15e-04" > +<left_flank>GTTCGATGAC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GTTATAGCCA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_283" position="29" strand="plus" pvalue="2.15e-04" > +<left_flank>TCAAACAAAA</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTGCGTGATT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_275" position="17" strand="plus" pvalue="2.15e-04" > +<left_flank>GGGAGGTGAT</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ATTCCATGCA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_248" position="19" strand="plus" pvalue="2.15e-04" > +<left_flank>TGATAGATAA</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CCATCGGCCT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_245" position="20" strand="plus" pvalue="2.15e-04" > +<left_flank>CTGCTCTGCC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ACTCTTAAAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_244" position="9" strand="plus" pvalue="2.15e-04" > +<left_flank>CAAAGAAAA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ATACAAGCAC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_239" position="8" strand="plus" pvalue="2.15e-04" > +<left_flank>AATCAGGT</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TATTTAACTG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_195" position="3" strand="plus" pvalue="2.15e-04" > +<left_flank>AAA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ATAACAATTA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_192" position="21" strand="plus" pvalue="2.15e-04" > +<left_flank>ACAGTAGAGA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TACCTCATGT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_191" position="11" strand="plus" pvalue="2.15e-04" > +<left_flank>CTCTATAGCT</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTTTCACACT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_183" position="24" strand="plus" pvalue="2.15e-04" > +<left_flank>GACGCAGAAC</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTCCCATCTT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_181" position="13" strand="plus" pvalue="2.15e-04" > +<left_flank>TTCTATGTGG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ATCTTCCTTC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_176" position="45" strand="plus" pvalue="2.15e-04" > +<left_flank>CAAGTTAACG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>AAATACATAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_161" position="6" strand="plus" pvalue="2.15e-04" > +<left_flank>GTCAGA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>AAAATTACTT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_155" position="15" strand="plus" pvalue="2.15e-04" > +<left_flank>CTGCTACCTC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CGTGAATGTT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_152" position="9" strand="plus" pvalue="2.15e-04" > +<left_flank>TAATTGAAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TAGTTGGTAT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_137" position="13" strand="plus" pvalue="2.15e-04" > +<left_flank>TTTAACCAAA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TCTTTCTCTC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_136" position="22" strand="plus" pvalue="2.15e-04" > +<left_flank>GTTCAGTTGT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TATTTTCAGC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_117" position="16" strand="plus" pvalue="2.15e-04" > +<left_flank>AGTACTAAAA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CTGTAAGTCT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_108" position="7" strand="plus" pvalue="2.15e-04" > +<left_flank>CTACTAC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ATAATAATAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_105" position="26" strand="plus" pvalue="2.15e-04" > +<left_flank>TGTTGACCAG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CCAGGAGTTC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_76" position="7" strand="plus" pvalue="2.15e-04" > +<left_flank>ATGATCA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ATTTAATATT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_69" position="14" strand="plus" pvalue="2.15e-04" > +<left_flank>TTTTGTCTGA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTACTACAGC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_51" position="16" strand="plus" pvalue="2.15e-04" > +<left_flank>CCATTGGAGA</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ATGTTCCAAT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_31" position="31" strand="plus" pvalue="2.15e-04" > +<left_flank>ATTTTGTCAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ATTCTAACCA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_29" position="6" strand="plus" pvalue="2.15e-04" > +<left_flank>TGAACT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTCTGTTATG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_24" position="29" strand="plus" pvalue="2.15e-04" > +<left_flank>ACACCTACTG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>AGTTAACCAC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_21" position="14" strand="plus" pvalue="2.15e-04" > +<left_flank>AAGAAATAGC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTGATACCTT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_4" position="2" strand="plus" pvalue="2.15e-04" > +<left_flank>AA</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CTGGTTTAAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_994" position="26" strand="plus" pvalue="2.31e-04" > +<left_flank>AAAGCAAATA</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>CAGGGTTAAG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_862" position="3" strand="plus" pvalue="2.31e-04" > +<left_flank>GTC</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>GAGATCTAAC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_735" position="60" strand="plus" pvalue="2.31e-04" > +<left_flank>CCCATGCCAG</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TCACCTCAAT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_676" position="17" strand="plus" pvalue="2.31e-04" > +<left_flank>TAAAGTACCC</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TTCCACCTGA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_647" position="53" strand="plus" pvalue="2.31e-04" > +<left_flank>TAAGCCCCAT</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TTTATATGGC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_536" position="12" strand="plus" pvalue="2.31e-04" > +<left_flank>TGGTTTAACT</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TTTAGCTTGG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_406" position="45" strand="plus" pvalue="2.31e-04" > +<left_flank>GCAGGTCACC</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>AAACAACTGA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_402" position="7" strand="plus" pvalue="2.31e-04" > +<left_flank>AAATATT</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TTTAGTTTGA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_329" position="11" strand="plus" pvalue="2.31e-04" > +<left_flank>TTCAACTTTT</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>GTTGTATCAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_327" position="12" strand="plus" pvalue="2.31e-04" > +<left_flank>AATTCATGGT</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TGAACTGGAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_203" position="22" strand="plus" pvalue="2.31e-04" > +<left_flank>AAATGCCACC</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>GTGATCCAGC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_107" position="13" strand="plus" pvalue="2.31e-04" > +<left_flank>GAGAGTACGT</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TTCAGATTGG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_925" position="66" strand="plus" pvalue="2.95e-04" > +<left_flank>TGCTGCAGTT</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>CAACCTA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_888" position="5" strand="plus" pvalue="2.95e-04" > +<left_flank>CTCTC</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TTTTTTCTGA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_856" position="14" strand="plus" pvalue="2.95e-04" > +<left_flank>ATGAGTTTAA</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>CTTTCAGGTT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_855" position="57" strand="plus" pvalue="2.95e-04" > +<left_flank>AGACATTCAA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TTGCTGGAAG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_760" position="14" strand="plus" pvalue="2.95e-04" > +<left_flank>CATAGAACTA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TTCTCACAAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_707" position="0" strand="plus" pvalue="2.95e-04" > +<left_flank></left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TTCTAATTAC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_706" position="46" strand="plus" pvalue="2.95e-04" > +<left_flank>AATAACCATC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TACTTATAAT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_698" position="52" strand="plus" pvalue="2.95e-04" > +<left_flank>GTCCCCTTCT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>AAATTGTGTA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_624" position="2" strand="plus" pvalue="2.95e-04" > +<left_flank>AA</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>AAGTAGAATA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_598" position="21" strand="plus" pvalue="2.95e-04" > +<left_flank>ATTTAACCCC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>CTCTACTTGA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_480" position="13" strand="plus" pvalue="2.95e-04" > +<left_flank>TAATAATAAT</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>CTTACGTAGC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_461" position="13" strand="plus" pvalue="2.95e-04" > +<left_flank>ATAGTCTCCT</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TTCTGTCCAC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_443" position="17" strand="plus" pvalue="2.95e-04" > +<left_flank>ATATTCAGAG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>CAGATAAAAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_427" position="19" strand="plus" pvalue="2.95e-04" > +<left_flank>AACTAAAACA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>CCAGCCTGAG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_371" position="18" strand="plus" pvalue="2.95e-04" > +<left_flank>CTGTTTTCCT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TTTTTTTAAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_370" position="14" strand="plus" pvalue="2.95e-04" > +<left_flank>TTGTGATAGG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TTCCGTAGCT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_346" position="20" strand="plus" pvalue="2.95e-04" > +<left_flank>GATAAAATGA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>CCAATGCAGG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_313" position="14" strand="plus" pvalue="2.95e-04" > +<left_flank>ATACATTTTC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TTTTTCCATC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_312" position="14" strand="plus" pvalue="2.95e-04" > +<left_flank>AGTGTAATAC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>CATTTCCTTT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_307" position="56" strand="plus" pvalue="2.95e-04" > +<left_flank>CATCAGTGTA</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>CATTATCCTG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_259" position="6" strand="plus" pvalue="2.95e-04" > +<left_flank>CTAACT</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>AAGAGTAGAG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_232" position="25" strand="plus" pvalue="2.95e-04" > +<left_flank>AAGTTTTAGA</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>ACCAGTCCTC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_170" position="22" strand="plus" pvalue="2.95e-04" > +<left_flank>TTCCCTACTC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>ACTGGTATAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_162" position="28" strand="plus" pvalue="2.95e-04" > +<left_flank>AAAAAATCTT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TCCGGGTGAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_121" position="16" strand="plus" pvalue="2.95e-04" > +<left_flank>ATTTTCTTAC</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>ACCATCATCC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_94" position="15" strand="plus" pvalue="2.95e-04" > +<left_flank>TTTCTAAAAG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TGACCTGATA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_66" position="33" strand="plus" pvalue="2.95e-04" > +<left_flank>AATCCTGTTG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TCTCTGTCTC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_1" position="1" strand="plus" pvalue="2.95e-04" > +<left_flank>T</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TTTTCTTCTG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_966" position="69" strand="plus" pvalue="3.53e-04" > +<left_flank>TAAATGTAAA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TATG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_959" position="7" strand="plus" pvalue="3.53e-04" > +<left_flank>CCCCTAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TATTACATTT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_955" position="17" strand="plus" pvalue="3.53e-04" > +<left_flank>AATCAGGCAG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GTTTCTCTTT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_900" position="12" strand="plus" pvalue="3.53e-04" > +<left_flank>GGAAGTGATC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTCCTTTATA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_843" position="4" strand="plus" pvalue="3.53e-04" > +<left_flank>TATA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TAAGTATTTT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_839" position="13" strand="plus" pvalue="3.53e-04" > +<left_flank>TTTCCATACA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CTTTCAGTTC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_834" position="16" strand="plus" pvalue="3.53e-04" > +<left_flank>TCAACTATTT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GCTGTTTACA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_821" position="13" strand="plus" pvalue="3.53e-04" > +<left_flank>GTATTCTGTG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTTATTGAGG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_747" position="10" strand="plus" pvalue="3.53e-04" > +<left_flank>ATTAACATTT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTATATGGAT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_699" position="3" strand="plus" pvalue="3.53e-04" > +<left_flank>TTT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TCACCTGATT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_694" position="55" strand="plus" pvalue="3.53e-04" > +<left_flank>CTTTAAGAAA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTAAGCTTTT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_688" position="25" strand="plus" pvalue="3.53e-04" > +<left_flank>CAATTAAGTT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TGTTGCCATA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_687" position="8" strand="plus" pvalue="3.53e-04" > +<left_flank>TCCTGTTA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ACTAAGATAC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_683" position="1" strand="plus" pvalue="3.53e-04" > +<left_flank>T</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GATCTAAGTA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_675" position="13" strand="plus" pvalue="3.53e-04" > +<left_flank>AATTACCTAA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>AATCTTAAGC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_632" position="0" strand="plus" pvalue="3.53e-04" > +<left_flank></left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CTATTACCAT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_615" position="2" strand="plus" pvalue="3.53e-04" > +<left_flank>TT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTTTTCGTGT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_607" position="39" strand="plus" pvalue="3.53e-04" > +<left_flank>TGCCCCCACA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CAGTTTCTGT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_594" position="17" strand="plus" pvalue="3.53e-04" > +<left_flank>AATTAATCTT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ACAGTACCGC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_580" position="17" strand="plus" pvalue="3.53e-04" > +<left_flank>GATAGATAAG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CCTCCAGGTC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_531" position="22" strand="plus" pvalue="3.53e-04" > +<left_flank>CCTAAAGATC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ATGAATGGGT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_493" position="3" strand="plus" pvalue="3.53e-04" > +<left_flank>ACT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTTAGTTTGG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_450" position="10" strand="plus" pvalue="3.53e-04" > +<left_flank>CAGAAGTATA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CAAACTCCCG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_388" position="16" strand="plus" pvalue="3.53e-04" > +<left_flank>ACAACAGATC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ATTTCCTTAC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_356" position="10" strand="plus" pvalue="3.53e-04" > +<left_flank>ATTTATCAAA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>AAGTACACTT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_343" position="0" strand="plus" pvalue="3.53e-04" > +<left_flank></left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GTATATTTTA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_337" position="2" strand="plus" pvalue="3.53e-04" > +<left_flank>AT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ATTGCCAATA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_324" position="3" strand="plus" pvalue="3.53e-04" > +<left_flank>CTG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ATTAATTCTC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_296" position="2" strand="plus" pvalue="3.53e-04" > +<left_flank>TG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TCTTATATCT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_286" position="14" strand="plus" pvalue="3.53e-04" > +<left_flank>AGGTGATAAA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GTTTGAAGAC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_277" position="7" strand="plus" pvalue="3.53e-04" > +<left_flank>TCCAGTA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GCATCTGAAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_273" position="20" strand="plus" pvalue="3.53e-04" > +<left_flank>TTTTCCTTTG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ACTTGGCTGT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_270" position="16" strand="plus" pvalue="3.53e-04" > +<left_flank>TAACTTAATG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TAATTTAGGG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_160" position="9" strand="plus" pvalue="3.53e-04" > +<left_flank>TTTATTGAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CTGTGCCAGA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_151" position="8" strand="plus" pvalue="3.53e-04" > +<left_flank>TACTGGTT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TCAAGCAGTT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_150" position="19" strand="plus" pvalue="3.53e-04" > +<left_flank>TAAATGTAAA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TATGCTTGCA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_938" position="11" strand="plus" pvalue="3.94e-04" > +<left_flank>TAAGTAGTAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>CTATTTACAG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_832" position="32" strand="plus" pvalue="3.94e-04" > +<left_flank>CAATATCAAC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TTCCCTCTAC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_543" position="13" strand="plus" pvalue="3.94e-04" > +<left_flank>TCATACAGCT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TTTGTCTGTC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_526" position="10" strand="plus" pvalue="3.94e-04" > +<left_flank>ATTGGCATGC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>ACTGCTGTAG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_266" position="12" strand="plus" pvalue="3.94e-04" > +<left_flank>ATGATTTACC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>AACCTCTCTT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_213" position="68" strand="plus" pvalue="3.94e-04" > +<left_flank>TAAGTTACAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>AAAAC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_147" position="23" strand="plus" pvalue="3.94e-04" > +<left_flank>TTTGTCTGTT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TTTATATGTT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_56" position="16" strand="plus" pvalue="3.94e-04" > +<left_flank>TCCAGTTACC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>CAGGTCAAGA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_30" position="13" strand="plus" pvalue="3.94e-04" > +<left_flank>TTCTGTTAGC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TGTTAACAGC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_977" position="54" strand="plus" pvalue="4.19e-04" > +<left_flank>CTAACCATAA</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>CCAACTACAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_967" position="55" strand="plus" pvalue="4.19e-04" > +<left_flank>CTAACCATAA</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>CCAACTACAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_913" position="17" strand="plus" pvalue="4.19e-04" > +<left_flank>AGGTATCTAC</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>TTGGAATAGT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_907" position="41" strand="plus" pvalue="4.19e-04" > +<left_flank>TTTCCATAGA</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>ACAAAAGATA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_898" position="36" strand="plus" pvalue="4.19e-04" > +<left_flank>CTCTGAATCC</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>CAAGACATGG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_596" position="6" strand="plus" pvalue="4.19e-04" > +<left_flank>CTGCTT</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>TTAAATTTTG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_579" position="72" strand="plus" pvalue="4.19e-04" > +<left_flank>GCATGAAAAG</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>T</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_241" position="17" strand="plus" pvalue="4.19e-04" > +<left_flank>TAGATGCTAA</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>GGGGTTGATG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_71" position="59" strand="plus" pvalue="4.19e-04" > +<left_flank>GGTTGCAGCC</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>TGATTGTACA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_10" position="34" strand="plus" pvalue="4.19e-04" > +<left_flank>ACCTATAAAA</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>CTCAGGTGGG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_997" position="24" strand="plus" pvalue="5.57e-04" > +<left_flank>ATTTTTTTCT</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>CTGTCACCCA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_974" position="15" strand="plus" pvalue="5.57e-04" > +<left_flank>TCATACTCTC</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>ACTGAGTTTA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_963" position="61" strand="plus" pvalue="5.57e-04" > +<left_flank>CTAACACAAC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>TGTTGAAATA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_940" position="13" strand="plus" pvalue="5.57e-04" > +<left_flank>ATAGTGGCCA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>TGCATTCCTA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_902" position="10" strand="plus" pvalue="5.57e-04" > +<left_flank>CTCTTTGCAG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>TCTAATGTAG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_895" position="12" strand="plus" pvalue="5.57e-04" > +<left_flank>TAGAGAAGGT</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>TTCCCGAAGT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_825" position="5" strand="plus" pvalue="5.57e-04" > +<left_flank>CAGAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>TATTCCAAAG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_812" position="3" strand="plus" pvalue="5.57e-04" > +<left_flank>ACT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>TTCTGATCTT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_803" position="22" strand="plus" pvalue="5.57e-04" > +<left_flank>TGCTGTTGTC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>CTATCATCTG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_800" position="4" strand="plus" pvalue="5.57e-04" > +<left_flank>TAAT</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>CATGCCCCAG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_781" position="10" strand="plus" pvalue="5.57e-04" > +<left_flank>TAGAATTCTT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>GTGCTTGGTT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_765" position="13" strand="plus" pvalue="5.57e-04" > +<left_flank>TTTTCCTGAA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>ATCTTCTCTC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_758" position="16" strand="plus" pvalue="5.57e-04" > +<left_flank>GTGTACTAAG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>CATCCCAAAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_718" position="15" strand="plus" pvalue="5.57e-04" > +<left_flank>TCTTGTTAAC</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TATACAGCCA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_691" position="44" strand="plus" pvalue="5.57e-04" > +<left_flank>AACTGAATGT</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CCTCAATAAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_685" position="10" strand="plus" pvalue="5.57e-04" > +<left_flank>AACTTTAGCC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>TTAGCATCCA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_649" position="7" strand="plus" pvalue="5.57e-04" > +<left_flank>ACAACTG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>CTATCATTTG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_613" position="0" strand="plus" pvalue="5.57e-04" > +<left_flank></left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>AAATTCAGCT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_606" position="31" strand="plus" pvalue="5.57e-04" > +<left_flank>TTTTCCAGCA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>TTTAGGTCAC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_597" position="5" strand="plus" pvalue="5.57e-04" > +<left_flank>TAAGC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>CTCTGTCTCT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_593" position="11" strand="plus" pvalue="5.57e-04" > +<left_flank>ATATTACAAA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>AATATTCATA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_512" position="41" strand="plus" pvalue="5.57e-04" > +<left_flank>CTCACAACAA</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>AATACTAGTA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_500" position="3" strand="plus" pvalue="5.57e-04" > +<left_flank>TTT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>TTTCTACTTG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_405" position="17" strand="plus" pvalue="5.57e-04" > +<left_flank>GGGGTAATGT</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ATGCAATGTC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_379" position="54" strand="plus" pvalue="5.57e-04" > +<left_flank>GTTGAGGAAC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>TAAGAAAAAT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_335" position="8" strand="plus" pvalue="5.57e-04" > +<left_flank>CCATTACT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>TTCAAAATAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_287" position="11" strand="plus" pvalue="5.57e-04" > +<left_flank>AATGCCTGAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>TTAACAACAG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_258" position="1" strand="plus" pvalue="5.57e-04" > +<left_flank>C</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>TAATATAGTG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_256" position="46" strand="plus" pvalue="5.57e-04" > +<left_flank>TAAATCTTAA</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CAAGTAAAAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_214" position="6" strand="plus" pvalue="5.57e-04" > +<left_flank>CACTGT</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ATTGAACTTC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_212" position="37" strand="plus" pvalue="5.57e-04" > +<left_flank>GTGACAGAGC</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>AACTAACTAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_193" position="14" strand="plus" pvalue="5.57e-04" > +<left_flank>TTTTAAATTG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>GACATGTTTG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_167" position="12" strand="plus" pvalue="5.57e-04" > +<left_flank>AACTAATTCC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>CCTTAAGAGT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_164" position="0" strand="plus" pvalue="5.57e-04" > +<left_flank></left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TGTAACAATA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_139" position="59" strand="plus" pvalue="5.57e-04" > +<left_flank>ACAAGGGAGG</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ACACATGTGT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_128" position="31" strand="plus" pvalue="5.57e-04" > +<left_flank>CCCCTCCCTG</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>TCTGCACTCT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_98" position="19" strand="plus" pvalue="5.57e-04" > +<left_flank>ATTCTTTAAG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>GAATGTACTG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_90" position="19" strand="plus" pvalue="5.57e-04" > +<left_flank>TAACTTTCTC</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTCCCCTGCT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_88" position="1" strand="plus" pvalue="5.57e-04" > +<left_flank>T</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>CAAATGCTAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_87" position="14" strand="plus" pvalue="5.57e-04" > +<left_flank>GAATTAATAA</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>TCTCGGGTGA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_84" position="9" strand="plus" pvalue="5.57e-04" > +<left_flank>GATTTGCTT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>ATTTGGCTTG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_81" position="11" strand="plus" pvalue="5.57e-04" > +<left_flank>AATGGGCTAA</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>GCCACGAACC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_75" position="9" strand="plus" pvalue="5.57e-04" > +<left_flank>TCTTTTATT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>TACTGTAGAG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_36" position="12" strand="plus" pvalue="5.57e-04" > +<left_flank>ATTTTTTCTT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>CTTCACTTAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_35" position="53" strand="plus" pvalue="5.57e-04" > +<left_flank>GTTCATGGAA</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>TAATGTTAAC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_34" position="18" strand="plus" pvalue="5.57e-04" > +<left_flank>TTTAAAAAAT</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTAGGGGAAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_18" position="8" strand="plus" pvalue="5.57e-04" > +<left_flank>TTAAAAAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>TAGGCAACTT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_823" position="10" strand="plus" pvalue="6.08e-04" > +<left_flank>CAAATCGGGA</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTCTATAGGC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_681" position="8" strand="plus" pvalue="6.08e-04" > +<left_flank>TTAATAAC</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTTATTGCAT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_525" position="22" strand="plus" pvalue="6.08e-04" > +<left_flank>ATCCAATGCA</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TAATCAGTCT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_471" position="49" strand="plus" pvalue="6.08e-04" > +<left_flank>TATTAACTTC</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTTCTATAAC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_349" position="11" strand="plus" pvalue="6.08e-04" > +<left_flank>GCCAACTTCA</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ATACTGTATA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_347" position="54" strand="plus" pvalue="6.08e-04" > +<left_flank>CTGGAAGTTA</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TCGGCTGTAG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_339" position="32" strand="plus" pvalue="6.08e-04" > +<left_flank>ACACCTAGAA</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CTTCCTTAGT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_271" position="8" strand="plus" pvalue="6.08e-04" > +<left_flank>CTTCTAAA</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTCCAGTGTT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_267" position="24" strand="plus" pvalue="6.08e-04" > +<left_flank>TAATTGTGTA</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>AAGACCTGAG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_158" position="6" strand="plus" pvalue="6.08e-04" > +<left_flank>ACTAAG</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CTTTCATTGT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_78" position="11" strand="plus" pvalue="6.08e-04" > +<left_flank>GCATTTCCCA</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTTAGCTCTC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_978" position="71" strand="plus" pvalue="6.34e-04" > +<left_flank>CATGATAACC</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>CA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_714" position="42" strand="plus" pvalue="6.34e-04" > +<left_flank>CCCAGAGTCC</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>ATTACCAGGG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_544" position="72" strand="plus" pvalue="6.34e-04" > +<left_flank>CCTAAGAAAC</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>T</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_539" position="32" strand="plus" pvalue="6.34e-04" > +<left_flank>AGCTAACTTC</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>CATTATCCTT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_407" position="38" strand="plus" pvalue="6.34e-04" > +<left_flank>TTTTCTAACC</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>ACGGTTCTGA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_178" position="11" strand="plus" pvalue="6.34e-04" > +<left_flank>TAACAGTTAC</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>ATCCGGTAGA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_49" position="30" strand="plus" pvalue="6.34e-04" > +<left_flank>TTTATAAGGG</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>CCATTCATGA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_899" position="7" strand="plus" pvalue="7.71e-04" > +<left_flank>ATAGCAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>CATCCTTTAG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_861" position="13" strand="plus" pvalue="7.71e-04" > +<left_flank>GTTGCATTCG</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TATATGTAGT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_750" position="19" strand="plus" pvalue="7.71e-04" > +<left_flank>TTACTTATAC</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>AAAAAGATTT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_727" position="28" strand="plus" pvalue="7.71e-04" > +<left_flank>AGATAGATAG</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTTGTGAGAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_658" position="0" strand="plus" pvalue="7.71e-04" > +<left_flank></left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>ACATAATATT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_559" position="67" strand="plus" pvalue="7.71e-04" > +<left_flank>TAATGTACTC</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>AATTGT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_482" position="23" strand="plus" pvalue="7.71e-04" > +<left_flank>AATATGTCAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>ATAGTCAACA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_448" position="33" strand="plus" pvalue="7.71e-04" > +<left_flank>TTCTACTTCC</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>ACTGCTCTCT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_419" position="18" strand="plus" pvalue="7.71e-04" > +<left_flank>CTTTATTAAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>ACTTAGTCTA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_353" position="11" strand="plus" pvalue="7.71e-04" > +<left_flank>TATCTGTTAG</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>CTACTCCTAC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_238" position="48" strand="plus" pvalue="7.71e-04" > +<left_flank>ACTTAGCAAG</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TATAAAGAAG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_211" position="71" strand="plus" pvalue="7.71e-04" > +<left_flank>TATACTTCTT</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>AA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_209" position="2" strand="plus" pvalue="7.71e-04" > +<left_flank>AC</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTCTATTGTA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_201" position="14" strand="plus" pvalue="7.71e-04" > +<left_flank>GTATTCATAG</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TTTTCTGGTA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_123" position="18" strand="plus" pvalue="7.71e-04" > +<left_flank>TAAATGTCTT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>ATCTACCTCC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_97" position="23" strand="plus" pvalue="7.71e-04" > +<left_flank>CTTGCCTTCT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>CCCCATTCTT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_80" position="19" strand="plus" pvalue="7.71e-04" > +<left_flank>ATTGAACGTA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>TTGATGTGTG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_65" position="23" strand="plus" pvalue="7.71e-04" > +<left_flank>ATTCAATTCT</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ACTCTGTGTG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_23" position="12" strand="plus" pvalue="7.71e-04" > +<left_flank>AATATATATA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>ACTCTGTCAC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_19" position="13" strand="plus" pvalue="7.71e-04" > +<left_flank>GGCTTTATCT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>CAGTCCCCAC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_12" position="19" strand="plus" pvalue="7.71e-04" > +<left_flank>CTTATCTACC</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CTTGTTAGAG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_910" position="46" strand="plus" pvalue="9.14e-04" > +<left_flank>TTAACTCCAC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TATTCTAATT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_879" position="22" strand="plus" pvalue="9.14e-04" > +<left_flank>TATTTGAATG</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ATGGCATGTA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_786" position="7" strand="plus" pvalue="9.14e-04" > +<left_flank>TTTTACT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TGGACACTGG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_764" position="14" strand="plus" pvalue="9.14e-04" > +<left_flank>TTTATAAAGT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TGATCAGGGA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_759" position="32" strand="plus" pvalue="9.14e-04" > +<left_flank>CCCTAAACCT</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ATGCCTCATG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_738" position="24" strand="plus" pvalue="9.14e-04" > +<left_flank>TACATGAAAA</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ACATAATATT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_715" position="19" strand="plus" pvalue="9.14e-04" > +<left_flank>CTGTTTAAAA</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CACATAAATT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_640" position="57" strand="plus" pvalue="9.14e-04" > +<left_flank>ATCATTAATA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>AGAAAAATTG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_566" position="64" strand="plus" pvalue="9.14e-04" > +<left_flank>TATATGAAAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>AACTTTCAG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_540" position="9" strand="plus" pvalue="9.14e-04" > +<left_flank>ACCCCTCTT</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TACTTGCTTC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_520" position="14" strand="plus" pvalue="9.14e-04" > +<left_flank>GGAGTATACA</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CATGTAAAGT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_514" position="51" strand="plus" pvalue="9.14e-04" > +<left_flank>TGCTCTAATA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CTTTACTTAT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_460" position="4" strand="plus" pvalue="9.14e-04" > +<left_flank>ATTC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TGAAAGTAGA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_440" position="25" strand="plus" pvalue="9.14e-04" > +<left_flank>CCTCACCACT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GTATCTCCTC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_409" position="1" strand="plus" pvalue="9.14e-04" > +<left_flank>A</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTTGTTATTC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_333" position="61" strand="plus" pvalue="9.14e-04" > +<left_flank>TGAATCGGAA</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTAACACAAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_311" position="13" strand="plus" pvalue="9.14e-04" > +<left_flank>TCCTCTTCTT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CCTGTGCCTT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_290" position="11" strand="plus" pvalue="9.14e-04" > +<left_flank>GCCTTAATTT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TATGCTATCA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_246" position="57" strand="plus" pvalue="9.14e-04" > +<left_flank>CCATTGTCTC</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GGCAGTGTTG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_226" position="9" strand="plus" pvalue="9.14e-04" > +<left_flank>GTTCATTTT</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CTTTAGCTCT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_197" position="56" strand="plus" pvalue="9.14e-04" > +<left_flank>TGAACTTTGC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ATTGTTGATT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_194" position="24" strand="plus" pvalue="9.14e-04" > +<left_flank>AGACTTAAGG</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>AAGGAGCAGG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_190" position="2" strand="plus" pvalue="9.14e-04" > +<left_flank>AA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ACACTAATTT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_182" position="11" strand="plus" pvalue="9.14e-04" > +<left_flank>ATCTTTTTTC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TATAGTTATG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_156" position="7" strand="plus" pvalue="9.14e-04" > +<left_flank>CTTCTCT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TATAACTTCT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_48" position="57" strand="plus" pvalue="9.14e-04" > +<left_flank>CCTAGAGTAA</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ATTCTGCCCA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_918" position="35" strand="plus" pvalue="9.34e-04" > +<left_flank>TTGAATCATA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ACAAATGGAT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_626" position="19" strand="plus" pvalue="9.34e-04" > +<left_flank>TTTGTTTAGT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CCTCTAGCTC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_389" position="16" strand="plus" pvalue="9.34e-04" > +<left_flank>CTCTCTTAAT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTATAGATTA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_116" position="19" strand="plus" pvalue="9.34e-04" > +<left_flank>TTTCTGACTA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GTGTATATAG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_25" position="11" strand="plus" pvalue="9.34e-04" > +<left_flank>ATACATAAGT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CTTTCTTGTT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_926" position="44" strand="plus" pvalue="9.60e-04" > +<left_flank>TACCATCAAT</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>CTCACATATT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_896" position="14" strand="plus" pvalue="9.60e-04" > +<left_flank>GCTCTTAACC</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TTTCTTCTTT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_115" position="16" strand="plus" pvalue="9.60e-04" > +<left_flank>TTAATGTATC</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>ATTCCACTTC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_42" position="6" strand="plus" pvalue="9.60e-04" > +<left_flank>TAGCTT</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>AGTACTGACT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_9" position="11" strand="plus" pvalue="9.60e-04" > +<left_flank>TGGTTGTACC</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>AATCTCTTTT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_704" position="16" strand="plus" pvalue="1.06e-03" > +<left_flank>AATGTTAACT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>CGGGTTCTGT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_674" position="2" strand="plus" pvalue="1.06e-03" > +<left_flank>CC</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TTAGACTTTC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_576" position="47" strand="plus" pvalue="1.06e-03" > +<left_flank>CTTCTAACCA</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>CAGAACCCTT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_561" position="11" strand="plus" pvalue="1.06e-03" > +<left_flank>CAATTAAATT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>CACTTATTAG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_530" position="5" strand="plus" pvalue="1.06e-03" > +<left_flank>CTATT</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TCTCTTCATT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_494" position="5" strand="plus" pvalue="1.06e-03" > +<left_flank>CTTCC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TTAAAACAAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_387" position="23" strand="plus" pvalue="1.06e-03" > +<left_flank>TCATCCCTCT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>ATCATCCTAG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_200" position="47" strand="plus" pvalue="1.06e-03" > +<left_flank>GATATAATTT</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>ATAAGAACTT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_153" position="0" strand="plus" pvalue="1.06e-03" > +<left_flank></left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TTTTCTCTGT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_26" position="16" strand="plus" pvalue="1.06e-03" > +<left_flank>TACTGTCTTG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TCTTCCTAAC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_932" position="58" strand="plus" pvalue="1.12e-03" > +<left_flank>CCAACCCTAA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>ATAACCCTAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_798" position="22" strand="plus" pvalue="1.12e-03" > +<left_flank>TTAAACCCCA</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>ATTGCTCTTG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_766" position="9" strand="plus" pvalue="1.12e-03" > +<left_flank>TTTTCTTCT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>CTCCCTTTTC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_692" position="55" strand="plus" pvalue="1.12e-03" > +<left_flank>GCTGGCACTG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>ACTTAACATG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_490" position="12" strand="plus" pvalue="1.12e-03" > +<left_flank>ATAAACTTCC</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>TTCCCTAAAC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_368" position="20" strand="plus" pvalue="1.12e-03" > +<left_flank>TACTATATGC</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>CTAACAGCTC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_320" position="71" strand="plus" pvalue="1.12e-03" > +<left_flank>TCCCAGCCTC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>AT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_319" position="39" strand="plus" pvalue="1.12e-03" > +<left_flank>TGAAGGCAGT</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>CTATATGAAC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_251" position="21" strand="plus" pvalue="1.12e-03" > +<left_flank>TAACCTTTAG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="C"/> +</site> +<right_flank>TAAACCTCCT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_237" position="12" strand="plus" pvalue="1.12e-03" > +<left_flank>GCTTTCTTTT</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>TTGGAATGAT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_55" position="5" strand="plus" pvalue="1.12e-03" > +<left_flank>CTTTT</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>ATTTTAAGCT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_939" position="8" strand="plus" pvalue="1.17e-03" > +<left_flank>TAAATGTA</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>TTTTAAGGTC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_840" position="12" strand="plus" pvalue="1.17e-03" > +<left_flank>CCAATTAATT</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>AATTTATTGG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_509" position="29" strand="plus" pvalue="1.17e-03" > +<left_flank>GAACTAGTAG</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>CAGGGAGCTC</right_flank> +</contributing_site> +</contributing_sites> +</motif> +</motifs> +<scanned_sites_summary p_thresh="0.0001"> +<scanned_sites sequence_id="sequence_0" pvalue="8.24e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_1" pvalue="2.16e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_2" pvalue="2.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_3" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_4" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_5" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="9" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_6" pvalue="6.03e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_7" pvalue="9.13e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_8" pvalue="2.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_9" pvalue="6.86e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_10" pvalue="3.06e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_11" pvalue="1.43e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_12" pvalue="5.55e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_13" pvalue="5.10e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_14" pvalue="4.16e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_15" pvalue="3.32e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_16" pvalue="1.48e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_17" pvalue="4.57e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="7" pvalue="6.19e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_18" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_19" pvalue="5.55e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_20" pvalue="1.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_21" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_22" pvalue="2.37e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_23" pvalue="5.55e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_24" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_25" pvalue="6.68e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_26" pvalue="7.56e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_27" pvalue="4.16e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_28" pvalue="2.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_29" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_30" pvalue="2.87e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_31" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_32" pvalue="1.29e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_33" pvalue="9.80e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_34" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_35" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_36" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_37" pvalue="6.03e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_38" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_39" pvalue="4.57e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="20" pvalue="6.19e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_40" pvalue="4.16e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_41" pvalue="1.73e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_42" pvalue="6.86e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_43" pvalue="1.00e+00" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_44" pvalue="7.61e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_45" pvalue="4.40e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_46" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="18" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_47" pvalue="8.42e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_48" pvalue="6.54e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_49" pvalue="4.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_50" pvalue="5.10e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_51" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_52" pvalue="4.57e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="14" pvalue="6.19e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_53" pvalue="9.57e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_54" pvalue="9.99e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_55" pvalue="7.94e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_56" pvalue="2.87e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_57" pvalue="2.39e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_58" pvalue="9.80e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_59" pvalue="9.57e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_60" pvalue="6.37e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_61" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_62" pvalue="9.88e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_63" pvalue="6.03e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_64" pvalue="4.57e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="18" pvalue="6.19e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_65" pvalue="5.55e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_66" pvalue="2.16e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_67" pvalue="5.10e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_68" pvalue="8.01e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_69" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_70" pvalue="6.37e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_71" pvalue="3.06e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_72" pvalue="2.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_73" pvalue="1.59e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_74" pvalue="9.05e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_75" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_76" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_77" pvalue="2.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_78" pvalue="4.40e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_79" pvalue="3.56e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_80" pvalue="5.55e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_81" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_82" pvalue="4.57e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="16" pvalue="6.19e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_83" pvalue="2.33e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_84" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_85" pvalue="8.05e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_86" pvalue="9.13e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_87" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_88" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_89" pvalue="2.29e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_90" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_91" pvalue="9.13e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_92" pvalue="6.37e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_93" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="0" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_94" pvalue="2.16e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_95" pvalue="4.57e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="15" pvalue="6.19e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_96" pvalue="6.03e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_97" pvalue="5.55e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_98" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_99" pvalue="9.26e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_100" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_101" pvalue="2.29e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_102" pvalue="1.70e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_103" pvalue="7.77e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_104" pvalue="7.84e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_105" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_106" pvalue="8.10e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_107" pvalue="1.70e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_108" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_109" pvalue="5.10e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_110" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_111" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="13" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_112" pvalue="3.32e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_113" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_114" pvalue="4.16e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_115" pvalue="6.86e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_116" pvalue="6.68e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_117" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_118" pvalue="3.32e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_119" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="4" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_120" pvalue="6.55e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_121" pvalue="2.16e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_122" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_123" pvalue="5.55e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_124" pvalue="1.09e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_125" pvalue="1.00e+00" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_126" pvalue="3.86e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_127" pvalue="9.84e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_128" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_129" pvalue="8.95e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_130" pvalue="9.84e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_131" pvalue="9.80e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_132" pvalue="1.82e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_133" pvalue="1.36e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_134" pvalue="1.12e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_135" pvalue="6.37e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_136" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_137" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_138" pvalue="9.72e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_139" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_140" pvalue="7.61e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_141" pvalue="1.01e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_142" pvalue="4.16e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_143" pvalue="4.57e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="23" pvalue="6.19e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_144" pvalue="1.12e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_145" pvalue="7.26e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_146" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="19" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_147" pvalue="2.87e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_148" pvalue="7.07e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_149" pvalue="1.48e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_150" pvalue="2.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_151" pvalue="2.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_152" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_153" pvalue="7.56e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_154" pvalue="8.57e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_155" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_156" pvalue="6.54e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_157" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_158" pvalue="4.40e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_159" pvalue="6.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_160" pvalue="2.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_161" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_162" pvalue="2.16e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_163" pvalue="9.26e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_164" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_165" pvalue="8.87e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_166" pvalue="7.77e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_167" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_168" pvalue="8.42e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_169" pvalue="1.53e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_170" pvalue="2.16e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_171" pvalue="3.56e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_172" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_173" pvalue="1.12e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_174" pvalue="2.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_175" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_176" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_177" pvalue="2.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_178" pvalue="4.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_179" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_180" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="11" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_181" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_182" pvalue="6.54e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_183" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_184" pvalue="3.86e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_185" pvalue="2.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_186" pvalue="8.42e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_187" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_188" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_189" pvalue="9.94e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_190" pvalue="6.54e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_191" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_192" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_193" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_194" pvalue="6.54e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_195" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_196" pvalue="4.57e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="20" pvalue="6.19e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_197" pvalue="6.54e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_198" pvalue="2.46e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_199" pvalue="1.29e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_200" pvalue="7.56e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_201" pvalue="5.55e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_202" pvalue="9.97e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_203" pvalue="1.70e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_204" pvalue="4.57e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="19" pvalue="6.19e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_205" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_206" pvalue="3.32e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_207" pvalue="1.54e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_208" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="27" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_209" pvalue="5.55e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_210" pvalue="8.13e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_211" pvalue="5.55e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_212" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_213" pvalue="2.87e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_214" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_215" pvalue="8.42e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_216" pvalue="8.49e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_217" pvalue="4.16e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_218" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_219" pvalue="3.32e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_220" pvalue="2.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_221" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="50" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_222" pvalue="7.61e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_223" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_224" pvalue="6.03e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_225" pvalue="2.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_226" pvalue="6.54e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_227" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_228" pvalue="2.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_229" pvalue="1.48e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_230" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="18" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_231" pvalue="8.46e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_232" pvalue="2.16e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_233" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_234" pvalue="3.32e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_235" pvalue="7.84e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_236" pvalue="2.37e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_237" pvalue="7.94e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_238" pvalue="5.55e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_239" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_240" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="58" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_241" pvalue="3.06e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_242" pvalue="4.57e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="29" pvalue="6.19e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_243" pvalue="2.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_244" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_245" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_246" pvalue="6.54e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_247" pvalue="8.49e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_248" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_249" pvalue="7.61e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_250" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_251" pvalue="7.94e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_252" pvalue="7.77e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_253" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="32" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_254" pvalue="8.05e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_255" pvalue="4.16e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_256" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_257" pvalue="1.21e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_258" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_259" pvalue="2.16e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_260" pvalue="9.57e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_261" pvalue="2.16e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_262" pvalue="2.29e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_263" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_264" pvalue="1.41e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_265" pvalue="9.97e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_266" pvalue="2.87e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_267" pvalue="4.40e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_268" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="15" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_269" pvalue="1.29e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_270" pvalue="2.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_271" pvalue="4.40e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_272" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="10" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_273" pvalue="2.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_274" pvalue="7.26e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_275" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_276" pvalue="6.37e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_277" pvalue="2.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_278" pvalue="1.09e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_279" pvalue="6.42e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_280" pvalue="1.36e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_281" pvalue="1.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_282" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="4" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_283" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_284" pvalue="4.16e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_285" pvalue="8.61e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_286" pvalue="2.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_287" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_288" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_289" pvalue="2.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_290" pvalue="6.54e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_291" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_292" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="41" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_293" pvalue="1.01e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_294" pvalue="1.84e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_295" pvalue="1.76e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_296" pvalue="2.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_297" pvalue="9.57e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_298" pvalue="9.05e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_299" pvalue="1.84e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_300" pvalue="1.01e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_301" pvalue="2.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_302" pvalue="4.57e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="23" pvalue="6.19e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_303" pvalue="4.16e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_304" pvalue="8.42e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_305" pvalue="5.35e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_306" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="27" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_307" pvalue="2.16e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_308" pvalue="1.01e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_309" pvalue="1.01e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_310" pvalue="4.16e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_311" pvalue="6.54e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_312" pvalue="2.16e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_313" pvalue="2.16e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_314" pvalue="1.43e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_315" pvalue="9.88e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_316" pvalue="8.01e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_317" pvalue="2.29e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_318" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="11" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_319" pvalue="7.94e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_320" pvalue="6.86e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_321" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_322" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_323" pvalue="3.86e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_324" pvalue="2.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_325" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_326" pvalue="2.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_327" pvalue="1.70e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_328" pvalue="8.62e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_329" pvalue="1.70e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_330" pvalue="1.09e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_331" pvalue="1.53e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_332" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_333" pvalue="5.55e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_334" pvalue="2.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_335" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_336" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_337" pvalue="2.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_338" pvalue="9.72e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_339" pvalue="4.40e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_340" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_341" pvalue="4.57e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="37" pvalue="6.19e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_342" pvalue="5.10e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_343" pvalue="2.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_344" pvalue="3.43e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_345" pvalue="9.95e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_346" pvalue="2.16e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_347" pvalue="4.40e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_348" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_349" pvalue="4.40e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_350" pvalue="1.12e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_351" pvalue="5.35e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_352" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_353" pvalue="5.55e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_354" pvalue="1.23e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_355" pvalue="6.37e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_356" pvalue="2.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_357" pvalue="1.48e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_358" pvalue="6.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_359" pvalue="2.37e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_360" pvalue="9.84e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_361" pvalue="4.40e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_362" pvalue="5.10e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_363" pvalue="8.57e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_364" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_365" pvalue="2.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_366" pvalue="5.35e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_367" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_368" pvalue="7.94e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_369" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_370" pvalue="2.16e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_371" pvalue="2.16e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_372" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="13" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_373" pvalue="3.32e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_374" pvalue="4.16e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_375" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="37" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_376" pvalue="3.86e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_377" pvalue="4.16e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_378" pvalue="9.67e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_379" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_380" pvalue="1.09e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_381" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="16" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_382" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="57" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_383" pvalue="3.56e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_384" pvalue="1.09e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_385" pvalue="3.43e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_386" pvalue="3.86e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_387" pvalue="7.56e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_388" pvalue="2.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_389" pvalue="6.68e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_390" pvalue="9.72e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_391" pvalue="1.00e+00" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_392" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_393" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_394" pvalue="4.16e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_395" pvalue="2.29e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_396" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_397" pvalue="1.23e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_398" pvalue="7.26e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_399" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_400" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_401" pvalue="8.85e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_402" pvalue="1.70e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_403" pvalue="9.84e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_404" pvalue="9.57e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_405" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_406" pvalue="1.70e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_407" pvalue="4.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_408" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="32" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_409" pvalue="6.54e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_410" pvalue="4.57e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="18" pvalue="6.19e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_411" pvalue="9.84e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_412" pvalue="3.56e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_413" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="0" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_414" pvalue="2.29e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_415" pvalue="7.61e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_416" pvalue="4.57e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="39" pvalue="6.19e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_417" pvalue="2.29e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_418" pvalue="9.13e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_419" pvalue="5.55e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_420" pvalue="6.03e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_421" pvalue="7.61e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_422" pvalue="3.56e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_423" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_424" pvalue="2.29e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_425" pvalue="7.07e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_426" pvalue="6.55e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_427" pvalue="2.16e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_428" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_429" pvalue="1.09e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_430" pvalue="9.57e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_431" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_432" pvalue="3.43e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_433" pvalue="1.43e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_434" pvalue="4.57e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="28" pvalue="6.19e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_435" pvalue="1.00e+00" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_436" pvalue="3.86e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_437" pvalue="8.24e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_438" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_439" pvalue="2.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_440" pvalue="6.54e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_441" pvalue="6.55e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_442" pvalue="8.73e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_443" pvalue="2.16e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_444" pvalue="5.10e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_445" pvalue="2.29e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_446" pvalue="7.61e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_447" pvalue="3.86e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_448" pvalue="5.55e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_449" pvalue="9.18e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_450" pvalue="2.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_451" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_452" pvalue="9.99e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_453" pvalue="4.57e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="26" pvalue="6.19e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_454" pvalue="8.62e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_455" pvalue="2.67e-03" num_sites="2"><scanned_site motif_id="motif_1" strand="plus" position="4" pvalue="3.62e-05"/> +<scanned_site motif_id="motif_1" strand="plus" position="52" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_456" pvalue="1.84e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_457" pvalue="7.26e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_458" pvalue="8.24e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_459" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_460" pvalue="6.54e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_461" pvalue="2.16e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_462" pvalue="1.00e+00" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_463" pvalue="3.32e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_464" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="20" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_465" pvalue="8.57e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_466" pvalue="4.61e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_467" pvalue="6.03e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_468" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="11" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_469" pvalue="1.00e+00" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_470" pvalue="2.13e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_471" pvalue="4.40e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_472" pvalue="3.43e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_473" pvalue="5.10e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_474" pvalue="9.72e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_475" pvalue="8.69e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_476" pvalue="9.26e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_477" pvalue="9.90e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_478" pvalue="1.00e+00" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_479" pvalue="2.16e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_480" pvalue="2.16e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_481" pvalue="6.42e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_482" pvalue="5.55e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_483" pvalue="3.86e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_484" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="30" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_485" pvalue="6.37e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_486" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_487" pvalue="9.57e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_488" pvalue="9.67e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_489" pvalue="7.61e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_490" pvalue="7.94e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_491" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_492" pvalue="5.10e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_493" pvalue="2.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_494" pvalue="7.56e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_495" pvalue="7.61e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_496" pvalue="4.57e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="11" pvalue="6.19e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_497" pvalue="9.90e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_498" pvalue="6.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_499" pvalue="4.57e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="5" pvalue="6.19e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_500" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_501" pvalue="4.19e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_502" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_503" pvalue="7.93e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_504" pvalue="8.46e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_505" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_506" pvalue="6.77e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_507" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_508" pvalue="3.32e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_509" pvalue="8.33e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_510" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_511" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="6" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_512" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_513" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="38" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_514" pvalue="6.54e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_515" pvalue="5.35e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_516" pvalue="9.57e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_517" pvalue="1.23e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_518" pvalue="4.57e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="18" pvalue="6.19e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_519" pvalue="5.10e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_520" pvalue="6.54e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_521" pvalue="6.77e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_522" pvalue="9.26e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_523" pvalue="9.33e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_524" pvalue="1.43e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_525" pvalue="4.40e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_526" pvalue="2.87e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_527" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_528" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_529" pvalue="8.61e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_530" pvalue="7.56e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_531" pvalue="2.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_532" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_533" pvalue="2.29e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_534" pvalue="8.85e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_535" pvalue="8.46e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_536" pvalue="1.70e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_537" pvalue="4.57e-03" num_sites="2"><scanned_site motif_id="motif_1" strand="plus" position="19" pvalue="6.19e-05"/> +<scanned_site motif_id="motif_1" strand="plus" position="51" pvalue="6.19e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_538" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_539" pvalue="4.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_540" pvalue="6.54e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_541" pvalue="2.33e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_542" pvalue="1.83e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_543" pvalue="2.87e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_544" pvalue="4.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_545" pvalue="6.03e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_546" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="4" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_547" pvalue="1.15e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_548" pvalue="5.10e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_549" pvalue="1.41e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_550" pvalue="3.32e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_551" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_552" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_553" pvalue="6.03e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_554" pvalue="4.16e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_555" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_556" pvalue="3.86e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_557" pvalue="7.26e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_558" pvalue="4.16e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_559" pvalue="5.55e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_560" pvalue="4.40e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_561" pvalue="7.56e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_562" pvalue="1.12e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_563" pvalue="1.00e+00" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_564" pvalue="4.40e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_565" pvalue="8.73e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_566" pvalue="6.54e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_567" pvalue="1.19e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_568" pvalue="8.24e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_569" pvalue="6.03e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_570" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_571" pvalue="1.84e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_572" pvalue="4.16e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_573" pvalue="3.32e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_574" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_575" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="20" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_576" pvalue="7.56e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_577" pvalue="2.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_578" pvalue="3.56e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_579" pvalue="3.06e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_580" pvalue="2.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_581" pvalue="5.35e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_582" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_583" pvalue="9.41e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_584" pvalue="8.42e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_585" pvalue="9.94e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_586" pvalue="9.57e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_587" pvalue="1.01e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_588" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_589" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_590" pvalue="5.10e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_591" pvalue="4.16e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_592" pvalue="1.00e+00" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_593" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_594" pvalue="2.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_595" pvalue="8.10e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_596" pvalue="3.06e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_597" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_598" pvalue="2.16e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_599" pvalue="4.57e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="24" pvalue="6.19e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_600" pvalue="6.03e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_601" pvalue="6.42e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_602" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_603" pvalue="3.32e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_604" pvalue="6.55e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_605" pvalue="9.26e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_606" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_607" pvalue="2.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_608" pvalue="4.19e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_609" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_610" pvalue="9.57e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_611" pvalue="1.76e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_612" pvalue="5.35e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_613" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_614" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_615" pvalue="2.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_616" pvalue="2.37e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_617" pvalue="3.43e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_618" pvalue="1.21e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_619" pvalue="5.10e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_620" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="18" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_621" pvalue="1.00e+00" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_622" pvalue="4.40e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_623" pvalue="8.01e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_624" pvalue="2.16e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_625" pvalue="9.80e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_626" pvalue="6.68e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_627" pvalue="8.35e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_628" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="29" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_629" pvalue="1.01e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_630" pvalue="1.00e+00" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_631" pvalue="4.61e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_632" pvalue="2.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_633" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="29" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_634" pvalue="1.01e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_635" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_636" pvalue="9.99e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_637" pvalue="3.32e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_638" pvalue="3.86e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_639" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_640" pvalue="6.54e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_641" pvalue="7.61e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_642" pvalue="4.16e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_643" pvalue="1.48e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_644" pvalue="9.90e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_645" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="7" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_646" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_647" pvalue="1.70e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_648" pvalue="2.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_649" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_650" pvalue="8.93e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_651" pvalue="2.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_652" pvalue="1.83e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_653" pvalue="4.40e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_654" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_655" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="15" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_656" pvalue="2.13e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_657" pvalue="5.10e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_658" pvalue="5.55e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_659" pvalue="7.93e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_660" pvalue="5.10e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_661" pvalue="1.29e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_662" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_663" pvalue="4.57e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="68" pvalue="6.19e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_664" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_665" pvalue="1.09e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_666" pvalue="4.57e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="12" pvalue="6.19e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_667" pvalue="1.09e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_668" pvalue="1.00e+00" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_669" pvalue="3.32e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_670" pvalue="8.97e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_671" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_672" pvalue="9.13e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_673" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_674" pvalue="7.56e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_675" pvalue="2.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_676" pvalue="1.70e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_677" pvalue="8.13e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_678" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_679" pvalue="1.15e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_680" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="24" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_681" pvalue="4.40e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_682" pvalue="6.42e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_683" pvalue="2.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_684" pvalue="2.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_685" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_686" pvalue="7.07e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_687" pvalue="2.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_688" pvalue="2.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_689" pvalue="2.37e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_690" pvalue="8.97e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_691" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_692" pvalue="7.94e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_693" pvalue="2.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_694" pvalue="2.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_695" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_696" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_697" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_698" pvalue="2.16e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_699" pvalue="2.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_700" pvalue="1.09e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_701" pvalue="2.29e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_702" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_703" pvalue="6.42e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_704" pvalue="7.56e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_705" pvalue="4.57e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="14" pvalue="6.19e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_706" pvalue="2.16e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_707" pvalue="2.16e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_708" pvalue="2.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_709" pvalue="1.15e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_710" pvalue="3.86e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_711" pvalue="1.12e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_712" pvalue="1.00e+00" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_713" pvalue="1.01e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_714" pvalue="4.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_715" pvalue="6.54e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_716" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="3" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_717" pvalue="4.57e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="8" pvalue="6.19e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_718" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_719" pvalue="9.57e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_720" pvalue="8.99e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_721" pvalue="7.03e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_722" pvalue="1.09e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_723" pvalue="2.29e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_724" pvalue="8.42e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_725" pvalue="8.90e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_726" pvalue="2.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_727" pvalue="5.55e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_728" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_729" pvalue="7.77e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_730" pvalue="9.57e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_731" pvalue="5.10e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_732" pvalue="3.32e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_733" pvalue="5.35e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_734" pvalue="5.41e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_735" pvalue="1.70e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_736" pvalue="2.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_737" pvalue="9.90e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_738" pvalue="6.54e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_739" pvalue="5.10e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_740" pvalue="7.61e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_741" pvalue="1.53e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_742" pvalue="1.12e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_743" pvalue="9.99e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_744" pvalue="2.29e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_745" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_746" pvalue="3.86e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_747" pvalue="2.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_748" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_749" pvalue="5.56e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_750" pvalue="5.55e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_751" pvalue="9.99e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_752" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="26" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_753" pvalue="2.29e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_754" pvalue="4.22e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_755" pvalue="5.10e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_756" pvalue="6.37e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_757" pvalue="3.56e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_758" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_759" pvalue="6.54e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_760" pvalue="2.16e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_761" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_762" pvalue="7.77e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_763" pvalue="2.29e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_764" pvalue="6.54e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_765" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_766" pvalue="7.94e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_767" pvalue="2.29e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_768" pvalue="4.57e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="14" pvalue="6.19e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_769" pvalue="2.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_770" pvalue="5.10e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_771" pvalue="8.78e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_772" pvalue="5.10e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_773" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_774" pvalue="1.83e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_775" pvalue="7.77e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_776" pvalue="2.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_777" pvalue="4.16e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_778" pvalue="8.05e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_779" pvalue="8.98e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_780" pvalue="4.61e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_781" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_782" pvalue="9.26e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_783" pvalue="1.70e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_784" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_785" pvalue="7.84e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_786" pvalue="6.54e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_787" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_788" pvalue="2.33e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_789" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_790" pvalue="4.57e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="4" pvalue="6.19e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_791" pvalue="4.57e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="33" pvalue="6.19e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_792" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_793" pvalue="5.10e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_794" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_795" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="26" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_796" pvalue="9.99e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_797" pvalue="9.84e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_798" pvalue="7.94e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_799" pvalue="8.61e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_800" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_801" pvalue="5.10e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_802" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_803" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_804" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="68" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_805" pvalue="9.88e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_806" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_807" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_808" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_809" pvalue="2.67e-03" num_sites="2"><scanned_site motif_id="motif_1" strand="plus" position="19" pvalue="3.62e-05"/> +<scanned_site motif_id="motif_1" strand="plus" position="31" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_810" pvalue="8.10e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_811" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="19" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_812" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_813" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_814" pvalue="1.12e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_815" pvalue="4.16e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_816" pvalue="6.37e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_817" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_818" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_819" pvalue="9.80e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_820" pvalue="2.39e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_821" pvalue="2.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_822" pvalue="1.73e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_823" pvalue="4.40e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_824" pvalue="4.57e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="27" pvalue="6.19e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_825" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_826" pvalue="2.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_827" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_828" pvalue="3.56e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_829" pvalue="2.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_830" pvalue="3.43e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_831" pvalue="9.90e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_832" pvalue="2.87e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_833" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_834" pvalue="2.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_835" pvalue="6.03e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_836" pvalue="3.43e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_837" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_838" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_839" pvalue="2.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_840" pvalue="8.33e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_841" pvalue="1.29e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_842" pvalue="1.01e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_843" pvalue="2.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_844" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_845" pvalue="5.35e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_846" pvalue="5.10e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_847" pvalue="7.61e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_848" pvalue="2.29e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_849" pvalue="9.84e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_850" pvalue="4.57e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="29" pvalue="6.19e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_851" pvalue="3.56e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_852" pvalue="7.77e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_853" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_854" pvalue="2.39e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_855" pvalue="2.16e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_856" pvalue="2.16e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_857" pvalue="7.84e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_858" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_859" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="17" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_860" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_861" pvalue="5.55e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_862" pvalue="1.70e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_863" pvalue="3.32e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_864" pvalue="2.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_865" pvalue="8.97e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_866" pvalue="9.99e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_867" pvalue="6.03e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_868" pvalue="8.46e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_869" pvalue="4.57e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="34" pvalue="6.19e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_870" pvalue="4.40e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_871" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_872" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_873" pvalue="6.42e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_874" pvalue="7.03e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_875" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="29" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_876" pvalue="4.57e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="2" pvalue="6.19e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_877" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_878" pvalue="6.42e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_879" pvalue="6.54e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_880" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="13" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_881" pvalue="2.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_882" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="69" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_883" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_884" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_885" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_886" pvalue="2.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_887" pvalue="9.26e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_888" pvalue="2.16e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_889" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_890" pvalue="1.00e+00" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_891" pvalue="3.86e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_892" pvalue="4.57e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="10" pvalue="6.19e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_893" pvalue="4.57e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="19" pvalue="6.19e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_894" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="19" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_895" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_896" pvalue="6.86e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_897" pvalue="8.62e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_898" pvalue="3.06e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_899" pvalue="5.55e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_900" pvalue="2.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_901" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_902" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_903" pvalue="9.75e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_904" pvalue="9.80e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_905" pvalue="3.32e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_906" pvalue="5.56e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_907" pvalue="3.06e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_908" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_909" pvalue="9.13e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_910" pvalue="6.54e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_911" pvalue="4.57e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="1" pvalue="6.19e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_912" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_913" pvalue="3.06e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_914" pvalue="2.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_915" pvalue="5.10e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_916" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="31" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_917" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="19" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_918" pvalue="6.68e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_919" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_920" pvalue="5.56e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_921" pvalue="4.40e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_922" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="16" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_923" pvalue="9.90e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_924" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="17" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_925" pvalue="2.16e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_926" pvalue="6.86e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_927" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_928" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_929" pvalue="2.37e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_930" pvalue="9.18e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_931" pvalue="9.86e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_932" pvalue="7.94e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_933" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_934" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="0" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_935" pvalue="4.57e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="11" pvalue="6.19e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_936" pvalue="6.03e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_937" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_938" pvalue="2.87e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_939" pvalue="8.33e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_940" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_941" pvalue="6.37e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_942" pvalue="9.05e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_943" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_944" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="24" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_945" pvalue="8.42e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_946" pvalue="2.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_947" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="18" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_948" pvalue="7.61e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_949" pvalue="1.84e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_950" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_951" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="24" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_952" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="14" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_953" pvalue="1.00e+00" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_954" pvalue="5.34e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_955" pvalue="2.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_956" pvalue="1.58e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_957" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_958" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="28" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_959" pvalue="2.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_960" pvalue="2.46e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_961" pvalue="1.29e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_962" pvalue="3.32e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_963" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_964" pvalue="3.32e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_965" pvalue="3.43e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_966" pvalue="2.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_967" pvalue="3.06e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_968" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_969" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_970" pvalue="9.86e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_971" pvalue="6.77e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_972" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_973" pvalue="4.19e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_974" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_975" pvalue="1.36e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_976" pvalue="9.99e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_977" pvalue="3.06e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_978" pvalue="4.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_979" pvalue="9.72e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_980" pvalue="9.05e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_981" pvalue="2.89e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_982" pvalue="1.12e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_983" pvalue="5.56e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_984" pvalue="4.16e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_985" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_986" pvalue="1.58e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_987" pvalue="9.26e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_988" pvalue="9.57e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_989" pvalue="4.61e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_990" pvalue="1.09e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_991" pvalue="1.01e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_992" pvalue="3.32e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_993" pvalue="6.37e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_994" pvalue="1.70e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_995" pvalue="9.25e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_996" pvalue="2.08e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_997" pvalue="4.04e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_998" pvalue="2.67e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="3" pvalue="3.62e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_999" pvalue="8.90e-01" num_sites="0"></scanned_sites> +</scanned_sites_summary> +</MEME>
--- a/test-data/meme_output_html_1.html Wed Apr 25 12:12:47 2018 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,95 +0,0 @@ -<!DOCTYPE HTML> -<html> - <head> - <meta charset="UTF-8"> - <title>MEME</title> - <script> - // @JSON_VAR data - var data = { - "program": "MEME", - "stop_reason": "Stopped because requested number of motifs (1) found.", - "cmd": [ - "meme", - "-nostatus" - ], - "options": { - "mod": "zoops", - "revcomp": false, - "nmotifs": 1, - "minw": 8, - "maxw": 50, - "minsites": 2, - "maxsites": 30, - "wnsites": 0.8, - "spmap": "pam", - "spfuzz": 120, - "maxwords": -1, - "prior": "megap", - "b": 7500, - "maxiter": 50, - "distance": 1e-05, - "wg": 11, - "ws": 1, - "noendgaps": false, - "substring": true - }, - "alphabet": { - "name": "Protein", - "like": "protein", - "ncore": 20, - "symbols": [ - { - "symbol": "A", - "name": "Alanine", - "colour": "0000CC" - }, { - "symbol": "C", - "name": "Cysteine", - "colour": "0000CC" - }, { - "symbol": "D", - "name": "Aspartic acid", - "colour": "FF00FF" - }, { - "symbol": "E", - "name": "Glutamic acid", - "colour": "FF00FF" - }, { - "symbol": "F", - "name": "Phenylalanine", - "colour": "0000CC" - }, { - "symbol": "G", - "name": "Glycine", - "colour": "FFB300" - }, { - "symbol": "H", - "name": "Histidine", - "colour": "FFCCCC" - }, { - "symbol": "I", - "name": "Isoleucine", - "colour": "0000CC" - }, { - "symbol": "K", - "name": "Lysine", - "colour": "CC0000" - }, { - "symbol": "L", - "name": "Leucine", - "colour": "0000CC" - }, { - "symbol": "M", - "name": "Methionine", - "colour": "0000CC" - }, { - "symbol": "N", - "name": "Asparagine", - "colour": "008000" - }, { - "symbol": "P", - "name": "Proline", - "colour": "FFFF00" - }, { - "symbol": "Q", - "name": "Glutamine",
--- a/test-data/meme_output_html_2.html Wed Apr 25 12:12:47 2018 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,89 +0,0 @@ -<!DOCTYPE HTML> -<html> - <head> - <meta charset="UTF-8"> - <title>MEME</title> - <script> - // @JSON_VAR data - var data = { - "program": "MEME", - "stop_reason": "Stopped because requested number of motifs (1) found.", - "cmd": [ - "meme", - ], - "options": { - "mod": "zoops", - "revcomp": false, - "nmotifs": 1, - "minw": 8, - "maxw": 50, - "minsites": 2, - "maxsites": 30, - "wnsites": 0.8, - "spmap": "uni", - "spfuzz": 0.5, - "maxwords": -1, - "prior": "dirichlet", - "b": 0.01, - "maxiter": 50, - "distance": 0.001, - "wg": 11, - "ws": 1, - "noendgaps": false, - "substring": true - }, - "alphabet": { - "name": "DNA", - "like": "dna", - "ncore": 4, - "symbols": [ - { - "symbol": "A", - "name": "Adenine", - "colour": "CC0000", - "complement": "T" - }, { - "symbol": "C", - "name": "Cytosine", - "colour": "0000CC", - "complement": "G" - }, { - "symbol": "G", - "name": "Guanine", - "colour": "FFB300", - "complement": "C" - }, { - "symbol": "T", - "aliases": "U", - "name": "Thymine", - "colour": "008000", - "complement": "A" - }, { - "symbol": "N", - "aliases": "X.", - "name": "Any base", - "equals": "ACGT" - }, { - "symbol": "V", - "name": "Not T", - "equals": "ACG" - }, { - "symbol": "H", - "name": "Not G", - "equals": "ACT" - }, { - "symbol": "D", - "name": "Not C", - "equals": "AGT" - }, { - "symbol": "B", - "name": "Not A", - "equals": "CGT" - }, { - "symbol": "M", - "name": "Amino", - "equals": "AC" - }, { - "symbol": "R", - "name": "Purine", - "equals": "AG"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/meme_output_test1.html Thu May 17 14:11:00 2018 -0400 @@ -0,0 +1,8005 @@ +<!DOCTYPE HTML> +<html> + <head> + <meta charset="UTF-8"> + <title>MEME</title> + <script> + // @JSON_VAR data + var data = { + "program": "MEME", + "version": "4.12.0", + "release": "Tue Jun 27 16:22:50 2017 -0700", + "stop_reason": "Stopped because requested number of motifs (1) found.", + "cmd": [ + "meme", "meme_input_1.fasta", "-o", "meme_test1_out", "-nostatus", + "-maxsize", "1000000" + ], + "options": { + "mod": "zoops", + "revcomp": false, + "nmotifs": 1, + "minw": 8, + "maxw": 50, + "minsites": 2, + "maxsites": 30, + "wnsites": 0.8, + "spmap": "pam", + "spfuzz": 120, + "maxwords": -1, + "prior": "megap", + "b": 7500, + "maxiter": 50, + "distance": 1e-05, + "wg": 11, + "ws": 1, + "noendgaps": false, + "substring": true + }, + "alphabet": { + "name": "Protein", + "like": "protein", + "ncore": 20, + "symbols": [ + { + "symbol": "A", + "name": "Alanine", + "colour": "0000CC" + }, { + "symbol": "C", + "name": "Cysteine", + "colour": "0000CC" + }, { + "symbol": "D", + "name": "Aspartic acid", + "colour": "FF00FF" + }, { + "symbol": "E", + "name": "Glutamic acid", + "colour": "FF00FF" + }, { + "symbol": "F", + "name": "Phenylalanine", + "colour": "0000CC" + }, { + "symbol": "G", + "name": "Glycine", + "colour": "FFB300" + }, { + "symbol": "H", + "name": "Histidine", + "colour": "FFCCCC" + }, { + "symbol": "I", + "name": "Isoleucine", + "colour": "0000CC" + }, { + "symbol": "K", + "name": "Lysine", + "colour": "CC0000" + }, { + "symbol": "L", + "name": "Leucine", + "colour": "0000CC" + }, { + "symbol": "M", + "name": "Methionine", + "colour": "0000CC" + }, { + "symbol": "N", + "name": "Asparagine", + "colour": "008000" + }, { + "symbol": "P", + "name": "Proline", + "colour": "FFFF00" + }, { + "symbol": "Q", + "name": "Glutamine", + "colour": "008000" + }, { + "symbol": "R", + "name": "Arginine", + "colour": "CC0000" + }, { + "symbol": "S", + "name": "Serine", + "colour": "008000" + }, { + "symbol": "T", + "name": "Threonine", + "colour": "008000" + }, { + "symbol": "V", + "name": "Valine", + "colour": "0000CC" + }, { + "symbol": "W", + "name": "Tryptophan", + "colour": "0000CC" + }, { + "symbol": "Y", + "name": "Tyrosine", + "colour": "33E6CC" + }, { + "symbol": "X", + "aliases": "*.", + "name": "Any amino acid", + "equals": "ACDEFGHIKLMNPQRSTVWY" + }, { + "symbol": "B", + "name": "Asparagine or Aspartic acid", + "equals": "DN" + }, { + "symbol": "Z", + "name": "Glutamine or Glutamic acid", + "equals": "EQ" + }, { + "symbol": "J", + "name": "Leucine or Isoleucine", + "equals": "IL" + } + ] + }, + "background": { + "freqs": [ + 0.291, 0.229, 0.001, 0.001, 0.001, 0.255, 0.001, 0.001, 0.001, + 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.215, 0.001, + 0.001, 0.001 + ] + }, + "sequence_db": { + "source": "meme_input_1.fasta", + "psp_source": "prior30.plib", + "freqs": [ + 0.294, 0.231, 0.000, 0.000, 0.000, 0.257, 0.000, 0.000, 0.000, + 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.217, 0.000, + 0.000, 0.000 + ], + "sequences": [ + { + "name": "chr21_19617074_19617124_+", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_26934381_26934431_+", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_28217753_28217803_-", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_31710037_31710087_-", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_31744582_31744632_-", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_31768316_31768366_+", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_31914206_31914256_-", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_31933633_31933683_-", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_31962741_31962791_-", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_31964683_31964733_+", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_31973364_31973414_+", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_31992870_31992920_+", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_32185595_32185645_-", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_32202076_32202126_-", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_32253899_32253949_-", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_32410820_32410870_-", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_36411748_36411798_-", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_37838750_37838800_-", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_45705687_45705737_+", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_45971413_45971463_-", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_45978668_45978718_-", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_45993530_45993580_+", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_46020421_46020471_+", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_46031920_46031970_+", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_46046964_46047014_+", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_46057197_46057247_+", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_46086869_46086919_-", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_46102103_46102153_-", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_47517957_47518007_+", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_47575506_47575556_-", + "length": 50, + "weight": 1.000000 + } + ] + }, + "motifs": [ + { + "db": 0, + "id": "GGGGTATAAAA", + "alt": "MEME-1", + "len": 11, + "nsites": 25, + "evalue": "2.4e-011", + "ic": 40.0, + "re": 13.8, + "llr": 239, + "bt": 5.33554, + "time": 0.772000, + "psm": [ + [ + -32, -680, 91, 77, 7, 138, -20, 55, 64, 107, 11, 150, 142, 72, + 87, 396, -148, 221, -140, -36 + ], [ + -11, -680, 89, 76, 7, 137, -21, 55, 63, 107, 10, 149, 141, 71, + 87, 396, -239, 220, -140, -36 + ], [ + -79, 41, 4, 21, -7, 44, -62, 42, -5, 99, 0, 99, 138, 52, 42, + 399, -46, 223, -173, -68 + ], [ + 11, -677, 48, 47, -2, 127, -43, 46, 27, 101, 3, 124, 138, 60, + 62, 397, -235, 220, -160, -55 + ], [ + -596, -820, 12, -21, -53, -267, -74, 37, 16, 44, -37, 98, 31, + 9, 19, 319, 212, 127, -193, -95 + ], [ + 165, -261, 70, 110, 77, -521, -4, 147, 95, 201, 90, 121, 124, + 91, 107, 425, -527, 314, -95, 8 + ], [ + -838, -990, -89, -149, -151, -841, -161, -117, -113, -66, + -209, -68, -69, -129, -91, 111, 221, -55, -255, -173 + ], [ + 176, -858, -79, -103, -115, -717, -148, -95, -108, -17, -162, + -61, -12, -95, -69, 193, -737, 52, -240, -153 + ], [ + 134, -686, 0, 16, -12, -553, -68, 44, -8, 96, -9, 88, 124, 41, + 36, 384, 11, 216, -177, -71 + ], [ + 165, -261, 70, 110, 77, -521, -4, 147, 95, 201, 90, 121, 124, + 91, 107, 425, -527, 314, -95, 8 + ], [ + 147, -614, 89, 129, 93, -121, 12, 160, 113, 217, 108, 144, + 144, 111, 125, 447, -241, 332, -81, 22 + ] + ], + "pwm": [ + [ + 0.240000, 0.000000, 0.000000, 0.000000, 0.000000, 0.680000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.080000, 0.000000, + 0.000000, 0.000000 + ], [ + 0.280000, 0.000000, 0.000000, 0.000000, 0.000000, 0.680000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.040000, 0.000000, + 0.000000, 0.000000 + ], [ + 0.160000, 0.320000, 0.000000, 0.000000, 0.000000, 0.360000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.160000, 0.000000, + 0.000000, 0.000000 + ], [ + 0.320000, 0.000000, 0.000000, 0.000000, 0.000000, 0.640000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.040000, 0.000000, + 0.000000, 0.000000 + ], [ + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.040000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.960000, 0.000000, + 0.000000, 0.000000 + ], [ + 0.960000, 0.040000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000 + ], [ + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, + 0.000000, 0.000000 + ], [ + 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000 + ], [ + 0.760000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.240000, 0.000000, + 0.000000, 0.000000 + ], [ + 0.960000, 0.040000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000 + ], [ + 0.840000, 0.000000, 0.000000, 0.000000, 0.000000, 0.120000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.040000, 0.000000, + 0.000000, 0.000000 + ] + ], + "sites": [ + { + "seq": 24, + "pos": 12, + "rc": false, + "pvalue": 1.06e-06, + "lflank": "AAGGCCAGGA", + "match": "GGGGTATAAAA", + "rflank": "GCCTGAGAGC" + }, { + "seq": 25, + "pos": 36, + "rc": false, + "pvalue": 3.41e-06, + "lflank": "ACAGGCCCTG", + "match": "GGCATATAAAA", + "rflank": "GCC" + }, { + "seq": 19, + "pos": 9, + "rc": false, + "pvalue": 3.41e-06, + "lflank": "CAGGCCCTG", + "match": "GGCATATAAAA", + "rflank": "GCCCCAGCAG" + }, { + "seq": 9, + "pos": 13, + "rc": false, + "pvalue": 3.41e-06, + "lflank": "GATTCACTGA", + "match": "GGCATATAAAA", + "rflank": "GGCCCTCTGC" + }, { + "seq": 21, + "pos": 7, + "rc": false, + "pvalue": 4.00e-06, + "lflank": "CCAAGGA", + "match": "GGAGTATAAAA", + "rflank": "GCCCCACAAA" + }, { + "seq": 13, + "pos": 13, + "rc": false, + "pvalue": 5.01e-06, + "lflank": "CCACCAGCTT", + "match": "GAGGTATAAAA", + "rflank": "AGCCCTGTAC" + }, { + "seq": 23, + "pos": 15, + "rc": false, + "pvalue": 6.06e-06, + "lflank": "ATACCCAGGG", + "match": "AGGGTATAAAA", + "rflank": "CCTCAGCAGC" + }, { + "seq": 15, + "pos": 21, + "rc": false, + "pvalue": 8.67e-06, + "lflank": "AATCACTGAG", + "match": "GATGTATAAAA", + "rflank": "GTCCCAGGGA" + }, { + "seq": 12, + "pos": 18, + "rc": false, + "pvalue": 8.67e-06, + "lflank": "CACCAGAGCT", + "match": "GGGATATATAA", + "rflank": "AGAAGGTTCT" + }, { + "seq": 11, + "pos": 16, + "rc": false, + "pvalue": 8.67e-06, + "lflank": "CACTATTGAA", + "match": "GATGTATAAAA", + "rflank": "TTTCATTTGC" + }, { + "seq": 22, + "pos": 2, + "rc": false, + "pvalue": 1.21e-05, + "lflank": "GA", + "match": "GACATATAAAA", + "rflank": "GCCAACATCC" + }, { + "seq": 28, + "pos": 32, + "rc": false, + "pvalue": 1.59e-05, + "lflank": "CCGGCGGGGC", + "match": "GGGGTATAAAG", + "rflank": "GGGGCGG" + }, { + "seq": 20, + "pos": 4, + "rc": false, + "pvalue": 1.59e-05, + "lflank": "CAGA", + "match": "GGGGTATAAAG", + "rflank": "GTTCCGACCA" + }, { + "seq": 6, + "pos": 15, + "rc": false, + "pvalue": 1.68e-05, + "lflank": "CCCACTACTT", + "match": "AGAGTATAAAA", + "rflank": "TCATTCTGAG" + }, { + "seq": 14, + "pos": 19, + "rc": false, + "pvalue": 2.03e-05, + "lflank": "CACCAGCAAG", + "match": "GATATATAAAA", + "rflank": "GCTCAGGAGT" + }, { + "seq": 4, + "pos": 12, + "rc": false, + "pvalue": 3.06e-05, + "lflank": "CAGGTCTAAG", + "match": "AGCATATATAA", + "rflank": "CTTGGAGTCC" + }, { + "seq": 0, + "pos": 39, + "rc": false, + "pvalue": 3.06e-05, + "lflank": "CCTCGGGACG", + "match": "TGGGTATATAA", + "rflank": "" + }, { + "seq": 18, + "pos": 37, + "rc": false, + "pvalue": 3.82e-05, + "lflank": "CGTGGTCGCG", + "match": "GGGGTATAACA", + "rflank": "GC" + }, { + "seq": 5, + "pos": 0, + "rc": false, + "pvalue": 3.82e-05, + "lflank": "", + "match": "AACGTATATAA", + "rflank": "ATGGTCCTGT" + }, { + "seq": 29, + "pos": 30, + "rc": false, + "pvalue": 4.02e-05, + "lflank": "GCTGCCGGTG", + "match": "AGCGTATAAAG", + "rflank": "GCCCTGGCG" + }, { + "seq": 1, + "pos": 27, + "rc": false, + "pvalue": 5.52e-05, + "lflank": "AGTCACAAGT", + "match": "GAGTTATAAAA", + "rflank": "GGGTCGCACG" + }, { + "seq": 3, + "pos": 14, + "rc": false, + "pvalue": 5.94e-05, + "lflank": "CCCAGGTTTC", + "match": "TGAGTATATAA", + "rflank": "TCGCCGCACC" + }, { + "seq": 16, + "pos": 22, + "rc": false, + "pvalue": 6.78e-05, + "lflank": "AGTTTCAGTT", + "match": "GGCATCTAAAA", + "rflank": "attatataac" + }, { + "seq": 7, + "pos": 2, + "rc": false, + "pvalue": 2.08e-04, + "lflank": "TC", + "match": "AGAGTATATAT", + "rflank": "AAATGTTCCT" + }, { + "seq": 8, + "pos": 13, + "rc": false, + "pvalue": 4.05e-04, + "lflank": "TATAACTCAG", + "match": "GTTGGATAAAA", + "rflank": "TAATTTGTAC" + } + ] + } + ], + "scan": [ + { + "pvalue": 1.22e-03, + "sites": [ + { + "motif": 0, + "pos": 39, + "rc": false, + "pvalue": 3.06e-05 + } + ] + }, { + "pvalue": 2.21e-03, + "sites": [ + { + "motif": 0, + "pos": 27, + "rc": false, + "pvalue": 5.52e-05 + } + ] + }, { + "pvalue": 7.29e-01, + "sites": [] + }, { + "pvalue": 2.37e-03, + "sites": [ + { + "motif": 0, + "pos": 14, + "rc": false, + "pvalue": 5.94e-05 + } + ] + }, { + "pvalue": 1.22e-03, + "sites": [ + { + "motif": 0, + "pos": 12, + "rc": false, + "pvalue": 3.06e-05 + } + ] + }, { + "pvalue": 1.53e-03, + "sites": [ + { + "motif": 0, + "pos": 0, + "rc": false, + "pvalue": 3.82e-05 + } + ] + }, { + "pvalue": 6.70e-04, + "sites": [ + { + "motif": 0, + "pos": 15, + "rc": false, + "pvalue": 1.68e-05 + } + ] + }, { + "pvalue": 1.81e-03, + "sites": [ + { + "motif": 0, + "pos": 4, + "rc": false, + "pvalue": 4.54e-05 + } + ] + }, { + "pvalue": 1.61e-02, + "sites": [] + }, { + "pvalue": 1.36e-04, + "sites": [ + { + "motif": 0, + "pos": 13, + "rc": false, + "pvalue": 3.41e-06 + } + ] + }, { + "pvalue": 1.99e-01, + "sites": [] + }, { + "pvalue": 3.47e-04, + "sites": [ + { + "motif": 0, + "pos": 16, + "rc": false, + "pvalue": 8.67e-06 + } + ] + }, { + "pvalue": 3.47e-04, + "sites": [ + { + "motif": 0, + "pos": 18, + "rc": false, + "pvalue": 8.67e-06 + } + ] + }, { + "pvalue": 2.01e-04, + "sites": [ + { + "motif": 0, + "pos": 13, + "rc": false, + "pvalue": 5.01e-06 + } + ] + }, { + "pvalue": 8.11e-04, + "sites": [ + { + "motif": 0, + "pos": 19, + "rc": false, + "pvalue": 2.03e-05 + } + ] + }, { + "pvalue": 3.47e-04, + "sites": [ + { + "motif": 0, + "pos": 21, + "rc": false, + "pvalue": 8.67e-06 + } + ] + }, { + "pvalue": 2.71e-03, + "sites": [ + { + "motif": 0, + "pos": 22, + "rc": false, + "pvalue": 6.78e-05 + } + ] + }, { + "pvalue": 8.23e-02, + "sites": [] + }, { + "pvalue": 1.53e-03, + "sites": [ + { + "motif": 0, + "pos": 37, + "rc": false, + "pvalue": 3.82e-05 + } + ] + }, { + "pvalue": 1.36e-04, + "sites": [ + { + "motif": 0, + "pos": 9, + "rc": false, + "pvalue": 3.41e-06 + } + ] + }, { + "pvalue": 6.37e-04, + "sites": [ + { + "motif": 0, + "pos": 4, + "rc": false, + "pvalue": 1.59e-05 + } + ] + }, { + "pvalue": 1.60e-04, + "sites": [ + { + "motif": 0, + "pos": 7, + "rc": false, + "pvalue": 4.00e-06 + } + ] + }, { + "pvalue": 4.83e-04, + "sites": [ + { + "motif": 0, + "pos": 2, + "rc": false, + "pvalue": 1.21e-05 + } + ] + }, { + "pvalue": 2.43e-04, + "sites": [ + { + "motif": 0, + "pos": 15, + "rc": false, + "pvalue": 6.06e-06 + } + ] + }, { + "pvalue": 4.26e-05, + "sites": [ + { + "motif": 0, + "pos": 12, + "rc": false, + "pvalue": 1.06e-06 + } + ] + }, { + "pvalue": 1.36e-04, + "sites": [ + { + "motif": 0, + "pos": 36, + "rc": false, + "pvalue": 3.41e-06 + } + ] + }, { + "pvalue": 4.30e-02, + "sites": [] + }, { + "pvalue": 4.30e-02, + "sites": [] + }, { + "pvalue": 6.37e-04, + "sites": [ + { + "motif": 0, + "pos": 32, + "rc": false, + "pvalue": 1.59e-05 + } + ] + }, { + "pvalue": 1.61e-03, + "sites": [ + { + "motif": 0, + "pos": 30, + "rc": false, + "pvalue": 4.02e-05 + } + ] + } + ] + }; + </script> + <script> +var site_url = "http://meme-suite.org"; +</script> + <script> + +/* + * $ + * + * Shorthand function for getElementById + */ +function $(el) { + return document.getElementById(el); +} + + +/* + * See http://stackoverflow.com/a/5450113/66387 + * Does string multiplication like the perl x operator. + */ +function string_mult(pattern, count) { + if (count < 1) return ''; + var result = ''; + while (count > 1) { + if (count & 1) result += pattern; + count >>= 1, pattern += pattern; + } + return result + pattern; +} + +/* + * See http://stackoverflow.com/questions/814613/how-to-read-get-data-from-a-url-using-javascript + * Slightly modified with information from + * https://developer.mozilla.org/en/DOM/window.location + */ +function parse_params() { + "use strict"; + var search, queryStart, queryEnd, query, params, nvPairs, i, nv, n, v; + search = window.location.search; + queryStart = search.indexOf("?") + 1; + queryEnd = search.indexOf("#") + 1 || search.length + 1; + query = search.slice(queryStart, queryEnd - 1); + + if (query === search || query === "") return {}; + + params = {}; + nvPairs = query.replace(/\+/g, " ").split("&"); + + for (i = 0; i < nvPairs.length; i++) { + nv = nvPairs[i].split("="); + n = decodeURIComponent(nv[0]); + v = decodeURIComponent(nv[1]); + // allow a name to be used multiple times + // storing each value in the array + if (!(n in params)) { + params[n] = []; + } + params[n].push(nv.length === 2 ? v : null); + } + return params; +} + +/* + * coords + * + * Calculates the x and y offset of an element. + * From http://www.quirksmode.org/js/findpos.html + * with alterations to take into account scrolling regions + */ +function coords(elem) { + var myX = myY = 0; + if (elem.getBoundingClientRect) { + var rect; + rect = elem.getBoundingClientRect(); + myX = rect.left + ((typeof window.pageXOffset !== "undefined") ? + window.pageXOffset : document.body.scrollLeft); + myY = rect.top + ((typeof window.pageYOffset !== "undefined") ? + window.pageYOffset : document.body.scrollTop); + } else { + // this fall back doesn't properly handle absolutely positioned elements + // inside a scrollable box + var node; + if (elem.offsetParent) { + // subtract all scrolling + node = elem; + do { + myX -= node.scrollLeft ? node.scrollLeft : 0; + myY -= node.scrollTop ? node.scrollTop : 0; + } while (node = node.parentNode); + // this will include the page scrolling (which is unwanted) so add it back on + myX += (typeof window.pageXOffset !== "undefined") ? window.pageXOffset : document.body.scrollLeft; + myY += (typeof window.pageYOffset !== "undefined") ? window.pageYOffset : document.body.scrollTop; + // sum up offsets + node = elem; + do { + myX += node.offsetLeft; + myY += node.offsetTop; + } while (node = node.offsetParent); + } + } + return [myX, myY]; +} + +/* + * position_popup + * + * Positions a popup relative to an anchor element. + * + * The avaliable positions are: + * 0 - Centered below the anchor. + */ +function position_popup(anchor, popup, position) { + "use strict"; + var a_x, a_y, a_w, a_h, p_x, p_y, p_w, p_h; + var a_xy, spacer, margin, scrollbar, page_w; + // define constants + spacer = 5; + margin = 15; + scrollbar = 15; + // define the positions and widths + a_xy = coords(anchor); + a_x = a_xy[0]; + a_y = a_xy[1]; + a_w = anchor.offsetWidth; + a_h = anchor.offsetHeight; + p_w = popup.offsetWidth; + p_h = popup.offsetHeight; + page_w = null; + if (window.innerWidth) { + page_w = window.innerWidth; + } else if (document.body) { + page_w = document.body.clientWidth; + } + // check the position type is defined + if (typeof position !== "number") { + position = 0; + } + // calculate the popup position + switch (position) { + case 1: + p_x = a_x + a_w + spacer; + p_y = a_y + (a_h / 2) - (p_h / 2); + break; + case 0: + default: + p_x = a_x + (a_w / 2) - (p_w / 2); + p_y = a_y + a_h + spacer; + break; + } + // constrain the popup position + if (p_x < margin) { + p_x = margin; + } else if (page_w != null && (p_x + p_w) > (page_w - margin - scrollbar)) { + p_x = page_w - margin - scrollbar - p_w; + } + if (p_y < margin) { + p_y = margin; + } + // position the popup + popup.style.left = p_x + "px"; + popup.style.top = p_y + "px"; +} + +function lookup_help_popup(popup_id) { + var _body, pop, info; + pop = document.getElementById(popup_id); + if (pop == null) { + _body = document.getElementsByTagName("body")[0]; + pop = document.createElement("div"); + pop.className = "pop_content"; + pop.id = popup_id; + pop.style.backgroundColor = "#FFC"; + pop.style.borderColor = "black"; + info = document.createElement("p"); + info.style.fontWeight = "bold"; + info.appendChild(document.createTextNode("Error: No popup for topic \"" + popup_id + "\".")); + pop.appendChild(info); + // this might cause problems with the menu, but as this only happens + // when something is already wrong I don't think that's too much of a problem + _body.insertBefore(pop, _body.firstChild); + } + if (document.getElementsByTagName('body')[0].hasAttribute("data-autobtns")) { + if (!/\bauto_buttons\b/.test(pop.className)) { + pop.className += " auto_buttons"; + var back_btn_sec = document.createElement("div"); + back_btn_sec.className = "nested_only pop_back_sec"; + var back_btn = document.createElement("span"); + back_btn.className = "pop_back"; + back_btn.appendChild(document.createTextNode("<< back")); + back_btn.addEventListener("click", function(e) { + help_return(); + }, false); + back_btn_sec.appendChild(back_btn); + pop.insertBefore(back_btn_sec, pop.firstChild); + var close_btn_sec = document.createElement("div"); + close_btn_sec.className = "pop_close_sec"; + var close_btn = document.createElement("span"); + close_btn.className = "pop_close"; + close_btn.appendChild(document.createTextNode("close")); + close_btn.addEventListener("click", function(e) { + help_popup(); + }, false); + close_btn_sec.appendChild(close_btn); + pop.appendChild(close_btn_sec); + } + } + return pop; +} + +/* + * help_popup + * + * Moves around help pop-ups so they appear + * below an activator. + */ +function help_popup(activator, popup_id) { + "use strict"; + var pop; + // set default values + if (typeof help_popup.popup === "undefined") { + help_popup.popup = []; + } + if (typeof help_popup.activator === "undefined") { + help_popup.activator = null; + } + var last_pop = (help_popup.popup.length > 0 ? help_popup.popup[help_popup.popup.length - 1] : null); + if (typeof(activator) == "undefined") { // no activator so hide + if (last_pop != null) { + last_pop.style.display = 'none'; + help_popup.popup = []; + } + return; + } + pop = lookup_help_popup(popup_id); + if (pop == last_pop) { + if (activator == help_popup.activator) { + //hide popup (as we've already shown it for the current help button) + last_pop.style.display = 'none'; + help_popup.popup = []; + return; // toggling complete! + } + } else if (last_pop != null) { + //activating different popup so hide current one + last_pop.style.display = 'none'; + } + help_popup.popup = [pop]; + help_popup.activator = activator; + toggle_class(pop, "nested", false); + //must make the popup visible to measure it or it has zero width + pop.style.display = 'block'; + position_popup(activator, pop); +} + +/* + * help_refine + * + * Intended for links within a help popup. Stores a stack of state so + * you can go back. + */ +function help_refine(popup_id) { + if (help_popup.popup == null || help_popup.popup.length == 0 || help_popup.activator == null) { + throw new Error("Can not refine a help popup when one is not shown!"); + } + var pop = lookup_help_popup(popup_id); + var last_pop = help_popup.popup[help_popup.popup.length - 1]; + if (pop == last_pop) return; // slightly odd, but no real cause for alarm + help_popup.popup.push(pop); + toggle_class(pop, "nested", true); + last_pop.style.display = "none"; + //must make the popup visible to measure it or it has zero width + pop.style.display = "block"; + position_popup(help_popup.activator, pop); +} + +/* + * help_return + * + * Intended for links within a help popup. Stores a stack of state so + * you can go back. + */ +function help_return() { + if (help_popup.popup == null || help_popup.popup.length == 0 || help_popup.activator == null) { + throw new Error("Can not return to a earlier help popup when one is not shown!"); + } + var last_pop = help_popup.popup.pop(); + last_pop.style.display = "none"; + var pop = (help_popup.popup.length > 0 ? help_popup.popup[help_popup.popup.length - 1] : null); + if (pop != null) { + toggle_class(pop, "nested", help_popup.popup.length > 1); + pop.style.display = "block"; + position_popup(help_popup.activator, pop); + } else { + help_popup.activator = null; + } +} + +/* + * update_scroll_pad + * + * Creates padding at the bottom of the page to allow + * scrolling of anything into view. + */ +function update_scroll_pad() { + var page, pad; + page = (document.compatMode === "CSS1Compat") ? document.documentElement : document.body; + pad = $("scrollpad"); + if (pad === null) { + pad = document.createElement("div"); + pad.id = 'scrollpad'; + document.getElementsByTagName('body')[0].appendChild(pad); + } + pad.style.height = Math.abs(page.clientHeight - 100) + "px"; +} + +function substitute_classes(node, remove, add) { + "use strict"; + var list, all, i, cls, classes; + list = node.className.split(/\s+/); + all = {}; + for (i = 0; i < list.length; i++) { + if (list[i].length > 0) all[list[i]] = true; + } + for (i = 0; i < remove.length; i++) { + if (all.hasOwnProperty(remove[i])) { + delete all[remove[i]]; + } + } + for (i = 0; i < add.length; i++) { + all[add[i]] = true; + } + classes = ""; + for (cls in all) { + classes += cls + " "; + } + node.className = classes; +} + +/* + * toggle_class + * + * Adds or removes a class from the node. If the parameter 'enabled' is not + * passed then the existence of the class will be toggled, otherwise it will be + * included if enabled is true. + */ +function toggle_class(node, cls, enabled) { + var classes = node.className; + var list = classes.replace(/^\s+/, '').replace(/\s+$/, '').split(/\s+/); + var found = false; + for (var i = 0; i < list.length; i++) { + if (list[i] == cls) { + list.splice(i, 1); + i--; + found = true; + } + } + if (typeof enabled == "undefined") { + if (!found) list.push(cls); + } else { + if (enabled) list.push(cls); + } + node.className = list.join(" "); +} + +/* + * find_child + * + * Searches child nodes in depth first order and returns the first it finds + * with the className specified. + * TODO replace with querySelector + */ +function find_child(node, className) { + var pattern; + if (node == null || typeof node !== "object") { + return null; + } + if (typeof className === "string") { + pattern = new RegExp("\\b" + className + "\\b"); + } else { + pattern = className; + } + if (node.nodeType == Node.ELEMENT_NODE && + pattern.test(node.className)) { + return node; + } else { + var result = null; + for (var i = 0; i < node.childNodes.length; i++) { + result = find_child(node.childNodes[i], pattern); + if (result != null) break; + } + return result; + } +} + +/* + * find_parent + * + * Searches parent nodes outwards from the node and returns the first it finds + * with the className specified. + */ +function find_parent(node, className) { + var pattern; + pattern = new RegExp("\\b" + className + "\\b"); + do { + if (node.nodeType == Node.ELEMENT_NODE && + pattern.test(node.className)) { + return node; + } + } while (node = node.parentNode); + return null; +} + +/* + * find_parent_tag + * + * Searches parent nodes outwards from the node and returns the first it finds + * with the tag name specified. HTML tags should be specified in upper case. + */ +function find_parent_tag(node, tag_name) { + do { + if (node.nodeType == Node.ELEMENT_NODE && node.tagName == tag_name) { + return node; + } + } while (node = node.parentNode); + return null; +} + +/* + * __toggle_help + * + * Uses the 'topic' property of the this object to + * toggle display of a help topic. + * + * This function is not intended to be called directly. + */ +function __toggle_help(e) { + if (!e) e = window.event; + if (e.type === "keydown") { + if (e.keyCode !== 13 && e.keyCode !== 32) { + return; + } + // stop a submit or something like that + e.preventDefault(); + } + + help_popup(this, this.getAttribute("data-topic")); +} + +function setup_help_button(button) { + "use strict"; + var topic; + if (button.hasAttribute("data-topic")) { + topic = button.getAttribute("data-topic"); + if (document.getElementById(topic) != null) { + button.tabIndex = "0"; // make keyboard selectable + button.addEventListener("click", function() { + help_popup(button, topic); + }, false); + button.addEventListener("keydown", function(e) { + // toggle only on Enter or Spacebar, let other keys do their thing + if (e.keyCode !== 13 && e.keyCode !== 32) return; + // stop a submit or something like that + e.preventDefault(); + help_popup(button, topic); + }, false); + } else { + button.style.visibility = "hidden"; + } + } + button.className += " active"; +} + +/* + * help_button + * + * Makes a help button for the passed topic. + */ +function help_button(topic) { + var btn = document.createElement("div"); + btn.className = "help"; + btn.setAttribute("data-topic", topic); + setup_help_button(btn); + return btn; +} + +/* + * prepare_download + * + * Sets the attributes of a link to setup a file download using the given content. + * If no link is provided then create one and click it. + */ +function prepare_download(content, mimetype, filename, link) { + "use strict"; + // if no link is provided then create one and click it + var click_link = false; + if (!link) { + link = document.createElement("a"); + click_link = true; + } + try { + // Use a BLOB to convert the text into a data URL. + // We could do this manually with a base 64 conversion. + // This will only be supported on modern browsers, + // hence the try block. + var blob = new Blob([content], {type: mimetype}); + var reader = new FileReader(); + reader.onloadend = function() { + // If we're lucky the browser will also support the download + // attribute which will let us suggest a file name to save the link. + // Otherwise it is likely that the filename will be unintelligible. + link.setAttribute("download", filename); + link.href = reader.result; + if (click_link) { + // must add the link to click it + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + } + } + reader.readAsDataURL(blob); + } catch (error) { + if (console && console.log) console.log(error); + // probably an old browser + link.href = ""; + link.visible = false; + } +} + +/* + * add_cell + * + * Add a cell to the table row. + */ +function add_cell(row, node, cls, click_action) { + var cell = row.insertCell(row.cells.length); + if (node) cell.appendChild(node); + if (cls && cls !== "") cell.className = cls; + if (click_action) cell.addEventListener("click", click_action, false); +} + +/* + * add_header_cell + * + * Add a header cell to the table row. + */ +function add_header_cell(row, node, help_topic, cls, colspan) { + var th = document.createElement("th"); + if (node) th.appendChild(node); + if (help_topic && help_topic !== "") th.appendChild(help_button(help_topic)); + if (cls && cls !== "") th.className = cls; + if (typeof colspan == "number" && colspan > 1) th.colSpan = colspan; + row.appendChild(th); +} + +/* + * add_text_cell + * + * Add a text cell to the table row. + */ +function add_text_cell(row, text, cls, action) { + var node = null; + if (typeof(text) != 'undefined') node = document.createTextNode(text); + add_cell(row, node, cls, action); +} + +/* + * add_text_header_cell + * + * Add a text header cell to the table row. + */ +function add_text_header_cell(row, text, help_topic, cls, action, colspan) { + var node = null; + if (typeof(text) != 'undefined') { + var nbsp = (help_topic ? "\u00A0" : ""); + var str = "" + text; + var parts = str.split(/\n/); + if (parts.length === 1) { + if (action) { + node = document.createElement("span"); + node.appendChild(document.createTextNode(str + nbsp)); + } else { + node = document.createTextNode(str + nbsp); + } + } else { + node = document.createElement("span"); + for (var i = 0; i < parts.length; i++) { + if (i !== 0) { + node.appendChild(document.createElement("br")); + } + node.appendChild(document.createTextNode(parts[i])); + } + } + if (action) { + node.addEventListener("click", action, false); + node.style.cursor = "pointer"; + } + } + add_header_cell(row, node, help_topic, cls, colspan); +} + +function setup_help() { + "use strict"; + var help_buttons, i; + help_buttons = document.querySelectorAll(".help:not(.active)"); + for (i = 0; i < help_buttons.length; i++) { + setup_help_button(help_buttons[i]); + } +} + +function setup_scrollpad() { + "use strict"; + if (document.getElementsByTagName('body')[0].hasAttribute("data-scrollpad") && document.getElementById("scrollpad") == null) { + window.addEventListener("resize", update_scroll_pad, false); + update_scroll_pad(); + } +} + +// anon function to avoid polluting global scope +(function() { + "use strict"; + window.addEventListener("load", function load(evt) { + window.removeEventListener("load", load, false); + setup_help(); + setup_scrollpad(); + }, false); +})(); + +/* + * make_link + * + * Creates a text node and if a URL is specified it surrounds it with a link. + * If the URL doesn't begin with "http://" it automatically adds it, as + * relative links don't make much sense in this context. + */ +function make_link(text, url) { + var textNode = null; + var link = null; + if (typeof text !== "undefined" && text !== null) textNode = document.createTextNode(text); + if (typeof url === "string") { + if (url.indexOf("//") == -1) { + url = "http://" + url; + } + link = document.createElement('a'); + link.href = url; + if (textNode) link.appendChild(textNode); + return link; + } + return textNode; +} +</script> + <script> + // + // return true if any part of the passed element is visible in the viewport + // + function element_in_viewport(elem) { + var rect; + try { + rect = elem.getBoundingClientRect(); + } catch (e) { + return false; + } + return ( + rect.top < (window.innerHeight || document.body.clientHeight) && + rect.bottom > 0 && + rect.left < (window.innerWidth || document.body.clientWidth) && + rect.right > 0 + ); + } + + // + // Functions to delay a drawing task until it is required or it would not lag the display to do so + // + + // a list of items still to be drawn + var drawable_list = []; + // the delay between drawing objects that are not currently visible + var draw_delay = 1; + // the delay after a user interaction + var user_delay = 300; + // the delay after a user has stopped scrolling and is viewing the stuff drawn on the current page + var stop_delay = 300; + // the timer handle; allows resetting of the timer after user interactions + var draw_timer = null; + + // + // Drawable + // + // elem - a page element which defines the position on the page that drawing is to be done + // task - an object with the method run which takes care of painting the object + // + var Drawable = function(elem, task) { + this.elem = elem; + this.task = task; + } + + // + // Drawable.is_visible + // + // Determines if the element is visible in the viewport + // + Drawable.prototype.is_visible = function() { + return element_in_viewport(this.elem); + } + + // + // Drawable.run + // + // Run the task held by the drawable + Drawable.prototype.run = function() { + if (this.task) this.task.run(); + this.task = null; + } + + // + // Drawable.run + // + // Run the task iff visible + // returns true if the task ran or has already run + Drawable.prototype.run_visible = function() { + if (this.task) { + if (element_in_viewport(this.elem)) { + this.task.run(); + this.task = null; + return true; + } + return false; + } else { + return true; + } + } + + // + // draw_on_screen + // + // Checks each drawable object and draws those on screen. + // + function draw_on_screen() { + var found = false; + for (var i = 0; i < drawable_list.length; i++) { + if (drawable_list[i].run_visible()) { + drawable_list.splice(i--, 1); + found = true; + } + } + return found; + } + + // + // process_draw_tasks + // + // Called on a delay to process the next avaliable + // draw task. + // + function process_draw_tasks() { + var delay = draw_delay; + draw_timer = null; + if (drawable_list.length == 0) return; //no more tasks + if (draw_on_screen()) { + delay = stop_delay; //give the user a chance to scroll + } else { + //get next task + var drawable = drawable_list.shift(); + drawable.task.run(); + } + //allow UI updates between tasks + draw_timer = window.setTimeout("process_draw_tasks()", delay); + } + + // + // delayed_process_draw_tasks + // + // Call process_draw_tasks after a short delay. + // The delay serves to group multiple redundant events. + // Should be set as event handler for onscroll and onresize. + // + function delayed_process_draw_tasks() { + //reset the timer + if (drawable_list.length > 0) { + if (draw_timer != null) clearTimeout(draw_timer); + draw_timer = window.setTimeout("process_draw_tasks()", user_delay); + } + } + + // + // add_draw_task + // + // Add a drawing task to be called immediately if it is + // visible, or to be called on a delay to reduce stuttering + // effect on the web browser. + function add_draw_task(elem, task) { + drawable = new Drawable(elem, task); + if (drawable.is_visible()) { + task.run(); + } else { + drawable_list.push(drawable); + //reset timer + if (draw_timer != null) clearTimeout(draw_timer); + draw_timer = window.setTimeout("process_draw_tasks()", user_delay); + } + } + +</script> + <script> +//====================================================================== +// start Alphabet object +//====================================================================== +var Alphabet = function(alphabet, background) { + "use strict"; + var i, j, sym, aliases, complement, comp_e_sym, ambigs, generate_background; + generate_background = (background == null); + if (generate_background) { + background = []; + for (i = 0; i < alphabet.ncore; i++) background[i] = 1.0 / alphabet.ncore; + } else if (alphabet.ncore != background.length) { + throw new Error("The background length does not match the alphabet length."); + } + this.name = alphabet.name; + this.like = (alphabet.like != null ? alphabet.like.toUpperCase() : null); + this.ncore = alphabet.ncore; + this.symbols = alphabet.symbols; + this.background = background; + this.genbg = generate_background; + this.encode = {}; + this.encode2core = {}; + this.complement = {}; + // check if all symbols are same case + var seen_uc = false; + var seen_lc = false; + var check_case = function (syms) { + var s, sym; + if (typeof syms === "string") { + for (s = 0; s < syms.length; s++) { + sym = syms.charAt(s); + if (sym >= 'a' && sym <= 'z') seen_lc = true; + else if (sym >= 'A' && sym <= 'Z') seen_uc = true; + } + } + }; + for (i = 0; i < this.symbols.length; i++) { + check_case(this.symbols[i].symbol); + check_case(this.symbols[i].aliases); + } + // now map symbols to indexes + var update_array = function(array, syms, index) { + var s, sym; + if (typeof syms === "string") { + for (s = 0; s < syms.length; s++) { + sym = syms.charAt(s); + array[sym] = index; + // when only a single case is used, then encode as case insensitive + if (seen_uc != seen_lc) { + if (sym >= 'a' && sym <= 'z') { + array[sym.toUpperCase()] = index; + } else if (sym >= 'A' && sym <= 'Z') { + array[sym.toLowerCase()] = index; + } + } + } + } + } + // map core symbols to index + for (i = 0; i < this.ncore; i++) { + update_array(this.encode2core, this.symbols[i].symbol, i); + update_array(this.encode, this.symbols[i].symbol, i); + update_array(this.encode2core, this.symbols[i].aliases, i); + update_array(this.encode, this.symbols[i].aliases, i); + } + // map ambigous symbols to index + ambigs = {}; + for (i = this.ncore; i < this.symbols.length; i++) { + update_array(this.encode, this.symbols[i].symbol, i); + update_array(this.encode, this.symbols[i].aliases, i); + ambigs[this.symbols[i].equals] = i; + } + // determine complements + for (i = 0; i < this.ncore; i++) { + complement = this.symbols[i].complement; + if (typeof complement === "string") { + this.complement[i] = this.encode2core[complement]; + } + } + next_symbol: + for (i = this.ncore; i < this.symbols.length; i++) { + complement = ""; + for (j = 0; j < this.symbols[i].equals.length; j++) { + comp_e_sym = this.complement[this.encode2core[this.symbols[i].equals.charAt(j)]]; + if (typeof comp_e_sym !== "number") continue next_symbol; + complement += this.symbols[comp_e_sym].symbol; + } + complement = complement.split("").sort().join(""); + if (typeof ambigs[complement] === "number") { + this.complement[i] = ambigs[complement]; + } + } + // determine case insensitivity + this.case_insensitive = true; + if (seen_uc == seen_lc) { + // when there is a mixture of cases it probably won't + // be case insensitive but we still need to check + loop: + for (i = 0; i < this.symbols.length; i++) { + sym = this.symbols[i].symbol; + if (sym >= 'A' && sym <= 'Z') { + if (this.encode[sym.toLowerCase()] != i) { + this.case_insensitive = false; + break loop; + } + } else if (sym >= 'a' && sym <= 'z') { + if (this.encode[sym.toUpperCase()] != i) { + this.case_insensitive = false; + break loop; + } + } + aliases = this.symbols[i].aliases; + if (aliases != null) { + for (j = 0; j < aliases.length; j++) { + sym = aliases.charAt(j); + if (sym >= 'A' && sym <= 'Z') { + if (this.encode[sym.toLowerCase()] != i) { + this.case_insensitive = false; + break loop; + } + } else if (sym >= 'a' && sym <= 'z') { + if (this.encode[sym.toUpperCase()] != i) { + this.case_insensitive = false; + break loop; + } + } + } + } + } + } + // normalise aliases to remove the prime symbol and eliminate + // the alternate cases when the alphabet is case insensitive + var seen, out; + for (i = 0; i < this.symbols.length; i++) { + sym = this.symbols[i].symbol; + aliases = this.symbols[i].aliases; + if (typeof aliases != "string") aliases = ""; + seen = {}; + out = []; + if (this.case_insensitive) { + sym = sym.toUpperCase(); + aliases = aliases.toUpperCase(); + } + seen[sym] = true; + for (j = 0; j < aliases.length; j++) { + if (!seen[aliases.charAt(j)]) { + seen[aliases.charAt(j)] = true; + out.push(aliases.charAt(j)); + } + } + this.symbols[i].aliases = out.sort().join(""); + } +}; +// return the name of the alphabet +Alphabet.prototype.get_alphabet_name = function() { + return this.name; +}; +// return if the alphabet can be complemented +Alphabet.prototype.has_complement = function() { + return (typeof this.symbols[0].complement === "string"); +}; +// return true if an uppercase letter has the same meaning as the lowercase form +Alphabet.prototype.is_case_insensitive = function() { + return this.case_insensitive; +}; +// return the information content of an alphabet letter +Alphabet.prototype.get_ic = function() { + return Math.log(this.ncore) / Math.LN2; +}; +// return the count of the core alphabet symbols +Alphabet.prototype.get_size_core = function() { + return this.ncore; +}; +// return the count of all alphabet symbols +Alphabet.prototype.get_size_full = function() { + return this.symbols.length; +}; +// return the symbol for the given alphabet index +Alphabet.prototype.get_symbol = function(alph_index) { + "use strict"; + if (alph_index < 0 || alph_index >= this.symbols.length) { + throw new Error("Alphabet index out of bounds"); + } + return this.symbols[alph_index].symbol; +}; +// return the aliases for the given alphabet index +Alphabet.prototype.get_aliases = function(alph_index) { + "use strict"; + if (alph_index < 0 || alph_index >= this.symbols.length) { + throw new Error("Alphabet index out of bounds"); + } + var sym_obj = this.symbols[alph_index]; + return (sym_obj.aliases != null ? sym_obj.aliases : ""); +}; +// return the name for the given alphabet index +Alphabet.prototype.get_name = function(alph_index) { + "use strict"; + var sym; + if (alph_index < 0 || alph_index >= this.symbols.length) { + throw new Error("Alphabet index out of bounds"); + } + sym = this.symbols[alph_index]; + return (typeof sym.name === "string" ? sym.name : sym.symbol); +}; +// return the alphabet it is like or null +Alphabet.prototype.get_like = function() { + "use strict"; + return this.like; +}; +// return the index of the complement for the given alphabet index +Alphabet.prototype.get_complement = function(alph_index) { + var comp_e_sym = this.complement[alph_index]; + if (typeof comp_e_sym === "number") { + return comp_e_sym; + } else { + return -1; + } +}; +// return a string containing the core symbols +Alphabet.prototype.get_symbols = function() { + "use strict"; + var i, core_symbols; + core_symbols = ""; + for (i = 0; i < this.ncore; i++) { + core_symbols += this.symbols[i].symbol; + } + return core_symbols; +}; +// return if the background was not a uniform generated background +Alphabet.prototype.has_bg = function() { + "use strict"; + return !this.genbg; +}; +// get the background frequency for the index +Alphabet.prototype.get_bg_freq = function(alph_index) { + "use strict"; + var freq, i, symbols; + if (alph_index >= 0) { + if (alph_index < this.ncore) { + return this.background[alph_index]; + } else if (alph_index < this.symbols.length) { + freq = 0; + symbols = this.symbols[alph_index].equals; + for (i = 0; i < symbols.length; i++) { + freq += this.background[this.encode2core[symbols.charAt(i)]]; + } + return freq; + } + } + throw new Error("The alphabet index is out of range."); +}; +// get the colour of the index +Alphabet.prototype.get_colour = function(alph_index) { + "use strict"; + if (alph_index < 0 || alph_index >= this.symbols.length) { + throw new Error("BAD_ALPHABET_INDEX"); + } + if (typeof this.symbols[alph_index].colour != "string") { + return "black"; + } + return "#" + this.symbols[alph_index].colour; +}; +// get the rgb componets of the colour at the index +Alphabet.prototype.get_rgb = function(alph_index) { + "use strict"; + if (alph_index < 0 || alph_index >= this.symbols.length) { + throw new Error("BAD_ALPHABET_INDEX"); + } + if (typeof this.symbols[alph_index].colour != "string") { + return {"red": 0, "green": 0, "blue": 0}; + } + var colour = this.symbols[alph_index].colour; + var red = parseInt(colour.substr(0, 2), 16) / 255; + var green = parseInt(colour.substr(2, 2), 16) / 255; + var blue = parseInt(colour.substr(4, 2), 16) / 255; + return {"red": red, "green": green, "blue": blue}; +}; +// convert a symbol into the index +Alphabet.prototype.get_index = function(letter) { + "use strict"; + var alph_index; + alph_index = this.encode[letter]; + if (typeof alph_index === "undefined") { + return -1; + } + return alph_index; +}; +// convert a symbol into the list of core indexes that it equals +Alphabet.prototype.get_indexes = function(letter) { + "use strict"; + var alph_index, comprise_str, i, comprise_list; + alph_index = this.encode[letter]; + if (typeof alph_index === "undefined") { + throw new Error("Unknown letter"); + } + comprise_str = this.symbols[alph_index].equals; + comprise_list = []; + if (typeof comprise_str == "string") { + for (i = 0; i < comprise_str.length; i++) { + comprise_list.push(this.encode2core[comprise_str.charAt(i)]); + } + } else { + comprise_list.push(alph_index); + } + return comprise_list; +}; +// check if a symbol is the primary way of representing the symbol in the alphabet +Alphabet.prototype.is_prime_symbol = function(letter) { + var alph_index; + alph_index = this.encode[letter]; + if (alph_index == null) return false; + if (this.is_case_insensitive()) { + return (this.symbols[alph_index].symbol.toUpperCase() == letter.toUpperCase()); + } else { + return (this.symbols[alph_index].symbol == letter); + } +}; +// compare 2 alphabets +Alphabet.prototype.equals = function(other) { + "use strict"; + var i, sym1, sym2; + // first check that it's actually an alphabet object + if (!(typeof other === "object" && other != null && other instanceof Alphabet)) { + return false; + } + // second shortcircuit if it's the same object + if (this === other) return true; + // compare + if (this.name !== other.name) return false; + if (this.ncore !== other.ncore) return false; + if (this.symbols.length !== other.symbols.length) return false; + for (i = 0; i < this.symbols.length; i++) { + sym1 = this.symbols[i]; + sym2 = other.symbols[i]; + if (sym1.symbol !== sym2.symbol) return false; + if (sym1.aliases !== sym2.aliases) return false; + if (sym1.name !== sym2.name) return false; + if (typeof sym1.colour !== typeof sym2.colour || + (typeof sym1.colour === "string" && typeof sym2.colour === "string" && + parseInt(sym1.colour, 16) != parseInt(sym2.colour, 16))) { + return false; + } + if (sym1.complement !== sym2.complement) return false; + if (sym1.equals !== sym2.equals) return false; + } + return true; +}; +Alphabet.prototype.check_core_subset = function(super_alph) { + var complement_same = true; + var seen_set = {}; + var sub_i, sub_symbol, super_i, super_symbol; + for (sub_i = 0; sub_i < this.ncore; sub_i++) { + sub_symbol = this.symbols[sub_i]; + super_i = super_alph.encode[sub_symbol.symbol]; + if (super_i == null) return 0; + super_symbol = super_alph.symbols[super_i]; + if (seen_set[super_i]) return 0; + seen_set[super_i] = true; + // check complement + if (sub_symbol.complement != null && super_symbol.complement != null) { + if (super_alph.encode[sub_symbol.complement] != super_alph.encode[super_symbol.complement]) { + complement_same = false; + } + } else if (sub_symbol.complement != null || super_symbol.complement != null) { + complement_same = false; + } + } + return (complement_same ? 1 : -1); +}; +// convert a sequence to its reverse complement +Alphabet.prototype.invcomp_seq = function(seq) { + "use strict"; + var syms, i, e_sym, comp_e_sym; + if (!this.has_complement()) throw new Error("Alphabet must be complementable"); + syms = seq.split(""); + for (i = 0; i < syms.length; i++) { + e_sym = this.encode[syms[i]]; + if (typeof e_sym === "undefined") { + e_sym = this.ncore; // wildcard + } + comp_e_sym = this.complement[e_sym]; + if (typeof comp_e_sym === "undefined") { + comp_e_sym = e_sym; // not complementable + } + syms[i] = this.symbols[comp_e_sym].symbol; + } + return syms.reverse().join(""); +}; +// convert the alphabet to the text version +Alphabet.prototype.as_text = function() { + "use strict"; + function name_as_text(name) { + var i, c, out; + out = "\""; + for (i = 0; i < name.length; i++) { + c = name.charAt(i); + if (c == "\"") { + out += "\\\""; + } else if (c == "/") { + out += "\\/"; + } else if (c == "\\") { + out += "\\\\"; + } else { + out += c; + } + } + out += "\""; + return out; + } + function symbol_as_text(sym) { + var out; + out = sym.symbol; + if (typeof sym.name === "string" && sym.name != sym.symbol) { + out += " " + name_as_text(sym.name); + } + if (typeof sym.colour === "string") { + out += " " + sym.colour; + } + return out; + } + var out, i, j, c, sym; + out = ""; + // output core symbols with 2 way complements + for (i = 0; i < this.ncore; i++) { + c = this.complement[i]; + if (typeof c === "number" && i < c && this.complement[c] === i) { + out += symbol_as_text(this.symbols[i]) + " ~ " + symbol_as_text(this.symbols[c]) + "\n"; + } + } + // output core symbols with no complement + for (i = 0; i < this.ncore; i++) { + if (typeof this.complement[i] === "undefined") { + out += symbol_as_text(this.symbols[i]) + "\n"; + } + } + // output ambiguous symbols that have comprising characters + for (i = this.ncore; i < this.symbols.length; i++) { + if (this.symbols[i].equals.length == 0) break; + out += symbol_as_text(this.symbols[i]) + " = " + this.symbols[i].equals + "\n"; + if (typeof this.symbols[i].aliases === "string") { + for (j = 0; j < this.symbols[i].aliases.length; j++) { + if (this.symbols[i].aliases.charAt(j) == this.symbols[i].symbol) continue; + out += this.symbols[i].aliases.charAt(j) + " = " + this.symbols[i].equals + "\n"; + } + } + } + // output aliases of core symbols + for (i = 0; i < this.ncore; i++) { + if (typeof this.symbols[i].aliases === "string") { + for (j = 0; j < this.symbols[i].aliases.length; j++) { + if (this.symbols[i].aliases.charAt(j) == this.symbols[i].symbol) continue; + out += this.symbols[i].aliases.charAt(j) + " = " + this.symbols[i].symbol + "\n"; + } + } + } + // output gap symbols + i = this.symbols.length - 1; + if (this.symbols[i].equals.length == 0) { + out += symbol_as_text(this.symbols[i]) + " =\n"; + if (typeof this.symbols[i].aliases === "string") { + for (j = 0; j < this.symbols[i].aliases.length; j++) { + if (this.symbols[i].aliases.charAt(j) == this.symbols[i].symbol) continue; + out += this.symbols[i].aliases.charAt(j) + " =\n"; + } + } + } + return out; +}; +// output the alphabet as it appears in minimal MEME format +Alphabet.prototype.as_meme = function() { + "use strict"; + function name_as_text(name) { + var i, c, out; + out = "\""; + for (i = 0; i < name.length; i++) { + c = name.charAt(i); + if (c == "\"") { + out += "\\\""; + } else if (c == "/") { + out += "\\/"; + } else if (c == "\\") { + out += "\\\\"; + } else { + out += c; + } + } + out += "\""; + return out; + } + if (this.equals(AlphStd.DNA)) { + return "ALPHABET= ACGT\n"; + } else if (this.equals(AlphStd.PROTEIN)) { + return "ALPHABET= ACDEFGHIKLMNPQRSTVWY\n"; + } else { + return "ALPHABET" + + (this.name != null ? " " + name_as_text(this.name) : "") + + (this.like != null ? " " + this.like + "-LIKE" : "") + "\n" + + this.as_text() + "END ALPHABET\n"; + } +}; + +// Returns a table showing all the letters in the alphabet +Alphabet.prototype.as_table = function() { + "use strict"; + var i, j, row, th, td, aliases, equals, sym; + var table = document.createElement("table"); + // create the core symbol header + row = table.insertRow(table.rows.length); + th = document.createElement("th"); + th.appendChild(document.createTextNode("Symbol(s)")); + row.appendChild(th); + th = document.createElement("th"); + th.appendChild(document.createTextNode("Name")); + row.appendChild(th); + th = document.createElement("th"); + if (this.has_complement()) { + th.appendChild(document.createTextNode("Complement")); + } + row.appendChild(th); + // list the core symbols + for (i = 0; i < this.ncore; i++) { + row = table.insertRow(table.rows.length); + td = document.createElement("td"); + if (this.symbols[i].colour != null) { + td.style.color = '#' + this.symbols[i].colour; + } + td.appendChild(document.createTextNode(this.symbols[i].symbol)); + aliases = this.get_aliases(i); + if (aliases.length > 0) { + td.appendChild(document.createTextNode(' ' + aliases.split('').join(' '))); + } + row.appendChild(td); + td = document.createElement("td"); + if (this.symbols[i].name != null) { + td.appendChild(document.createTextNode(this.symbols[i].name)); + } + row.appendChild(td); + td = document.createElement("td"); + if (this.symbols[i].complement != null) { + td.style.color = this.get_colour(this.get_index(this.symbols[i].complement)); + td.appendChild(document.createTextNode(this.symbols[i].complement)); + } + row.appendChild(td); + } + // create the ambiguous symbol header + row = table.insertRow(table.rows.length); + th = document.createElement("th"); + th.appendChild(document.createTextNode("Symbol(s)")); + row.appendChild(th); + th = document.createElement("th"); + th.appendChild(document.createTextNode("Name")); + row.appendChild(th); + th = document.createElement("th"); + th.appendChild(document.createTextNode("Matches")); + row.appendChild(th); + // list the ambiguous symbols + for (i = this.ncore; i < this.symbols.length; i++) { + row = table.insertRow(table.rows.length); + td = document.createElement("td"); + if (this.symbols[i].colour != null) { + td.style.color = '#' + this.symbols[i].colour; + } + td.appendChild(document.createTextNode(this.symbols[i].symbol)); + aliases = this.get_aliases(i); + if (aliases.length > 0) { + td.appendChild(document.createTextNode(' ' + aliases.split('').join(' '))); + } + row.appendChild(td); + td = document.createElement("td"); + if (this.symbols[i].name != null) { + td.appendChild(document.createTextNode(this.symbols[i].name)); + } + row.appendChild(td); + td = document.createElement("td"); + equals = this.symbols[i].equals.split(''); + for (j = 0; j < equals.length; j++) { + if (j != 0) td.appendChild(document.createTextNode(' ')); + sym = document.createElement("span"); + sym.style.color = this.get_colour(this.get_index(equals[j])); + sym.appendChild(document.createTextNode(equals[j])); + td.appendChild(sym); + } + row.appendChild(td); + } + return table; +}; + +// returns a dictionary of the colours for EPS +Alphabet.prototype._as_eps_dict = function() { + "use strict"; + var i, sym, rgb; + var out = "/fullColourDict <<\n"; + for (i = 0; i < this.ncore; i++) { + sym = this.get_symbol(i); + sym = sym.replace(/\\/g, "\\\\"); + sym = sym.replace(/\(/g, "\\("); + sym = sym.replace(/\)/g, "\\)"); + rgb = this.get_rgb(i); + out += " (" + sym + ") [" + rgb.red.toFixed(4) + " " + rgb.green.toFixed(4) + " " + rgb.blue.toFixed(4) + "]\n"; + } + out += ">> def\n"; + out += "/mutedColourDict <<\n"; + for (i = 0; i < this.ncore; i++) { + sym = this.get_symbol(i); + sym = sym.replace(/\\/g, "\\\\"); + sym = sym.replace(/\(/g, "\\("); + sym = sym.replace(/\)/g, "\\)"); + rgb = Alphabet.lighten_colour(this.get_rgb(i)); + out += " (" + sym + ") [" + rgb.red.toFixed(4) + " " + rgb.green.toFixed(4) + " " + rgb.blue.toFixed(4) + "]\n"; + } + out += ">> def\n"; + return out; +}; + +// return the alphabet name or a list of primary symbols +Alphabet.prototype.toString = function() { + "use strict"; + if (this.name != null) { + return this.name; + } else { + return this.get_symbols(); + } +}; + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Helper functions +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +// Convert a colour specified in RGB colourspace values into LAB colourspace +Alphabet.rgb2lab = function(rgb) { + "use strict"; + var xyzHelper, labHelper; + // XYZ helper + xyzHelper = function(value) { + if (value > 0.0445) { + value = (value + 0.055) / 1.055; + value = Math.pow(value, 2.4); + } else { + value /= 12.92; + } + value *= 100; + return value; + }; + // lab helper + labHelper = function(value) { + if (value > 0.008856) { + value = Math.pow(value, 1.0 / 3.0); + } else { + value = (7.787 * value) + (16.0 / 116.0); + } + return value; + }; + // convert into XYZ colourspace + var c1, c2, c3; + if (typeof rgb == "number") { + c1 = xyzHelper(((rgb >> 16) & 0xFF) / 255.0); + c2 = xyzHelper(((rgb >> 8) & 0xFF) / 255.0); + c3 = xyzHelper((rgb & 0xFF) / 255.0); + } else { + c1 = xyzHelper(rgb.red); + c2 = xyzHelper(rgb.green); + c3 = xyzHelper(rgb.blue); + } + var x = (c1 * 0.4124) + (c2 * 0.3576) + (c3 * 0.1805); + var y = (c1 * 0.2126) + (c2 * 0.7152) + (c3 * 0.0722); + var z = (c1 * 0.0193) + (c2 * 0.1192) + (c3 * 0.9505); + // convert into Lab colourspace + c1 = labHelper(x / 95.047); + c2 = labHelper(y / 100.0); + c3 = labHelper(z / 108.883); + var l = (116.0 * c2) - 16; + var a = 500.0 * (c1 - c2); + var b = 200.0 * (c2 - c3); + return {"l": l, "a": a, "b": b}; +}; + +// Convert a colour specified in HSV colourspace into RGB colourspace +Alphabet.hsv2rgb = function(hue, sat, value, output_object) { + // achromatic (grey) + var r = value; + var g = value; + var b = value; + if (sat != 0) { + var h = hue / 60.0; + var i = Math.floor(h); + var f = h - i; + var p = value * (1.0 - sat); + var q = value * (1.0 - (sat * f)); + var t = value * (1.0 - (sat * (1.0 - f))); + if (i == 0) { + r = value; + g = t; + b = p; + } else if (i == 1) { + r = q; + g = value; + b = p; + } else if (i == 2) { + r = p; + g = value; + b = t; + } else if (i == 3) { + r = p; + g = q; + b = value; + } else if (i == 4) { + r = t; + g = p; + b = value; + } else { + r = value; + g = p; + b = q; + } + } + if (output_object) { + return {"red": r, "green": g, "blue": b}; + } else { + return (Math.floor(r * 255) << 15) | (Math.floor(g * 255) << 8) | (Math.floor(b * 255)); + } +}; + +// Calculate a distance score between two colours in LAB colourspace +Alphabet.lab_dist = function(lab1, lab2) { + var c1 = Math.sqrt((lab1.l * lab1.l) + (lab1.a * lab1.a)); + var c2 = Math.sqrt((lab2.l * lab2.l) + (lab2.a * lab2.a)); + var dc = c1 - c2; + var dl = lab1.l - lab2.l; + var da = lab1.a - lab2.a; + var db = lab1.b - lab2.b; + // we don't want NaN due to rounding errors so fudge things a bit... + var dh = 0; + var dh_squared = (da * da) + (db * db) - (dc * dc); + if (dh_squared > 0) { + dh = Math.sqrt(dh_squared); + } + var first = dl; + var second = dc / (1.0 + (0.045 * c1)); + var third = dh / (1.0 + (0.015 * c1)); + return Math.sqrt((first * first) + (second * second) + (third * third)); +}; + +// convert an RGB value into a HSL value +Alphabet.rgb2hsl = function(rgb) { + "use strict"; + var min, max, delta, h, s, l, r, g, b; + if (typeof rgb == "number") { + r = ((rgb >> 16) & 0xFF) / 255.0; + g = ((rgb >> 8) & 0xFF) / 255.0; + b = (rgb & 0xFF) / 255.0; + } else { + r = rgb.red; + g = rgb.green; + b = rgb.blue; + } + min = Math.min(r, g, b); + max = Math.max(r, g, b); + delta = max - min; + l = min + (delta / 2); + if (max == min) { + h = 0; // achromatic (grayscale) + s = 0; + } else { + if (l > 0.5) { + s = delta / (2 - max - min); + } else { + s = delta / (max + min); + } + if (max == r) { + h = (g - b) / delta; + if (g < b) h += 6; + } else if (max == g) { + h = ((b - r) / delta) + 2; + } else { + h = ((r - g) / delta) + 4; + } + h /= 6; + } + return {"h": h, "s": s, "l": l}; +}; + +// convert a HSL value into an RGB value +Alphabet.hsl2rgb = function(hsl, output_object) { + "use strict"; + function _hue(p, q, t) { + "use strict"; + if (t < 0) t += 1; + else if (t > 1) t -= 1; + if (t < (1.0 / 6.0)) { + return p + ((q - p) * 6.0 * t); + } else if (t < 0.5) { + return q; + } else if (t < (2.0 / 3.0)) { + return p + ((q - p) * ((2.0 / 3.0) - t) * 6.0); + } else { + return p; + } + } + var r, g, b, p, q; + if (hsl.s == 0) { + // achromatic (grayscale) + r = hsl.l; + g = hsl.l; + b = hsl.l; + } else { + if (hsl.l < 0.5) { + q = hsl.l * (1 + hsl.s); + } else { + q = hsl.l + hsl.s - (hsl.l * hsl.s); + } + p = (2 * hsl.l) - q; + r = _hue(p, q, hsl.h + (1.0 / 3.0)); + g = _hue(p, q, hsl.h); + b = _hue(p, q, hsl.h - (1.0 / 3.0)); + } + if (output_object) { + return {"red": r, "green": g, "blue": b}; + } else { + return (Math.floor(r * 255) << 15) | (Math.floor(g * 255) << 8) | (Math.floor(b * 255)); + } +}; + +Alphabet.lighten_colour = function(rgb) { + "use strict"; + var hsl = Alphabet.rgb2hsl(rgb); + hsl.l += (1.0 - hsl.l) * 2 / 3; + return Alphabet.hsl2rgb(hsl, typeof rgb != "number"); +}; + +//====================================================================== +// end Alphabet object +//====================================================================== + +//====================================================================== +// start StandardAlphabet object +//====================================================================== + +// an extension of the alphabet object to support some additional fields +// only present in standard alphabets. +var StandardAlphabet = function(enum_code, enum_name, alphabet_data) { + Alphabet.apply(this, [alphabet_data]); + this.enum_code = enum_code; + this.enum_name = enum_name; +}; +StandardAlphabet.prototype = Alphabet.prototype; +StandardAlphabet.prototype.constructor = StandardAlphabet; + +// A unique code for this standard alphabet. +// This code will be a power of 2 to enable creation of bitsets for +// a selection of standard alphabets. +StandardAlphabet.prototype.get_code = function() { + return this.enum_code; +}; + +// A unique name for this standard alphabet. +// this name will be all upper case and the same as the property that +// refers to this alphabet in the AlphStd collection. +StandardAlphabet.prototype.get_enum = function() { + return this.enum_name; +}; + +//====================================================================== +// end StandardAlphabet object +//====================================================================== + +// A collection of standard alphabets. +var AlphStd = { + RNA: new StandardAlphabet(1, "RNA", { + "name": "RNA", + "like": "RNA", + "ncore": 4, + "symbols": [ + {"symbol": "A", "name": "Adenine", "colour": "CC0000"}, + {"symbol": "C", "name": "Cytosine", "colour": "0000CC"}, + {"symbol": "G", "name": "Guanine", "colour": "FFB300"}, + {"symbol": "U", "name": "Uracil", "colour": "008000", + "aliases": "T"}, + {"symbol": "N", "name": "Any base", "equals": "ACGU", "aliases": "X."}, + {"symbol": "V", "name": "Not U", "equals": "ACG"}, + {"symbol": "H", "name": "Not G", "equals": "ACU"}, + {"symbol": "D", "name": "Not C", "equals": "AGU"}, + {"symbol": "B", "name": "Not A", "equals": "CGU"}, + {"symbol": "M", "name": "Amino", "equals": "AC"}, + {"symbol": "R", "name": "Purine", "equals": "AG"}, + {"symbol": "W", "name": "Weak", "equals": "AU"}, + {"symbol": "S", "name": "Strong", "equals": "CG"}, + {"symbol": "Y", "name": "Pyrimidine", "equals": "CU"}, + {"symbol": "K", "name": "Keto", "equals": "GU"} + ] + }), + DNA: new StandardAlphabet(2, "DNA", { + "name": "DNA", + "like": "DNA", + "ncore": 4, + "symbols": [ + {"symbol": "A", "name": "Adenine", "colour": "CC0000", "complement": "T"}, + {"symbol": "C", "name": "Cytosine", "colour": "0000CC", "complement": "G"}, + {"symbol": "G", "name": "Guanine", "colour": "FFB300", "complement": "C"}, + {"symbol": "T", "name": "Thymine", "colour": "008000", "complement": "A", + "aliases": "U"}, + {"symbol": "N", "name": "Any base", "equals": "ACGT", "aliases": "X."}, + {"symbol": "V", "name": "Not T", "equals": "ACG"}, + {"symbol": "H", "name": "Not G", "equals": "ACT"}, + {"symbol": "D", "name": "Not C", "equals": "AGT"}, + {"symbol": "B", "name": "Not A", "equals": "CGT"}, + {"symbol": "M", "name": "Amino", "equals": "AC"}, + {"symbol": "R", "name": "Purine", "equals": "AG"}, + {"symbol": "W", "name": "Weak", "equals": "AT"}, + {"symbol": "S", "name": "Strong", "equals": "CG"}, + {"symbol": "Y", "name": "Pyrimidine", "equals": "CT"}, + {"symbol": "K", "name": "Keto", "equals": "GT"} + ] + }), + PROTEIN: new StandardAlphabet(4, "PROTEIN", { + "name": "Protein", + "like": "PROTEIN", + "ncore": 20, + "symbols": [ + {"symbol": "A", "name": "Alanine", "colour": "0000CC"}, + {"symbol": "C", "name": "Cysteine", "colour": "0000CC"}, + {"symbol": "D", "name": "Aspartic acid", "colour": "FF00FF"}, + {"symbol": "E", "name": "Glutamic acid", "colour": "FF00FF"}, + {"symbol": "F", "name": "Phenylalanine", "colour": "0000CC"}, + {"symbol": "G", "name": "Glycine", "colour": "FFB300"}, + {"symbol": "H", "name": "Histidine", "colour": "FFCCCC"}, + {"symbol": "I", "name": "Isoleucine", "colour": "0000CC"}, + {"symbol": "K", "name": "Lysine", "colour": "CC0000"}, + {"symbol": "L", "name": "Leucine", "colour": "0000CC"}, + {"symbol": "M", "name": "Methionine", "colour": "0000CC"}, + {"symbol": "N", "name": "Asparagine", "colour": "008000"}, + {"symbol": "P", "name": "Proline", "colour": "FFFF00"}, + {"symbol": "Q", "name": "Glutamine", "colour": "008000"}, + {"symbol": "R", "name": "Arginine", "colour": "CC0000"}, + {"symbol": "S", "name": "Serine", "colour": "008000"}, + {"symbol": "T", "name": "Threonine", "colour": "008000"}, + {"symbol": "V", "name": "Valine", "colour": "0000CC"}, + {"symbol": "W", "name": "Tryptophan", "colour": "0000CC"}, + {"symbol": "Y", "name": "Tyrosine", "colour": "33E6CC"}, + {"symbol": "X", "name": "Any amino acid", "equals": "ACDEFGHIKLMNPQRSTVWY", "aliases": "*."}, + {"symbol": "B", "name": "Asparagine or Aspartic acid", "equals": "DN"}, + {"symbol": "Z", "name": "Glutamine or Glutamic acid", "equals": "EQ"}, + {"symbol": "J", "name": "Leucine or Isoleucine", "equals": "IL"} + ] + }) +}; + +//====================================================================== +// start Symbol object +//====================================================================== +var Symbol = function(alph_index, scale, alphabet) { + "use strict"; + //variable prototype + this.symbol = alphabet.get_symbol(alph_index); + this.scale = scale; + this.colour = alphabet.get_colour(alph_index); +}; + +Symbol.prototype.get_symbol = function() { + "use strict"; + return this.symbol; +}; + +Symbol.prototype.get_scale = function() { + "use strict"; + return this.scale; +}; + +Symbol.prototype.get_colour = function() { + "use strict"; + return this.colour; +}; + +Symbol.prototype.toString = function() { + "use strict"; + return this.symbol + " " + (Math.round(this.scale*1000)/10) + "%"; +}; + +function compare_symbol(sym1, sym2) { + "use strict"; + if (sym1.get_scale() < sym2.get_scale()) { + return -1; + } else if (sym1.get_scale() > sym2.get_scale()) { + return 1; + } else { + return 0; + } +} +//====================================================================== +// end Symbol object +//====================================================================== + +//====================================================================== +// start Pspm object +//====================================================================== +var Pspm = function(matrix, name, ltrim, rtrim, nsites, evalue, pssm, alt) { + "use strict"; + var row, col, data, row_sum, delta, evalue_re; + if (typeof name !== "string") { + name = ""; + } + this.name = name; + //construct + if (matrix instanceof Pspm) { + // copy constructor + this.alph_length = matrix.alph_length; + this.motif_length = matrix.motif_length; + this.name = matrix.name; + this.alt = matrix.alt; + this.nsites = matrix.nsites; + this.evalue = matrix.evalue; + this.ltrim = matrix.ltrim; + this.rtrim = matrix.rtrim; + this.pspm = []; + for (row = 0; row < matrix.motif_length; row++) { + this.pspm[row] = []; + for (col = 0; col < matrix.alph_length; col++) { + this.pspm[row][col] = matrix.pspm[row][col]; + } + } + if (matrix.pssm != null) { + this.pssm = []; + for (row = 0; row < matrix.motif_length; row++) { + this.pspm[row] = []; + for (col = 0; col < matrix.alph_length; col++) { + this.pssm[row][col] = matrix.pssm[row][col]; + } + } + } + } else { + // check parameters + if (ltrim == null) { + ltrim = 0; + } else if (typeof ltrim !== "number" || ltrim % 1 !== 0 || ltrim < 0) { + throw new Error("ltrim must be a non-negative integer, got: " + ltrim); + } + if (rtrim == null) { + rtrim = 0; + } else if (typeof rtrim !== "number" || rtrim % 1 !== 0 || rtrim < 0) { + throw new Error("rtrim must be a non-negative integer, got: " + rtrim); + } + if (nsites != null) { + if (typeof nsites !== "number" || nsites < 0) { + throw new Error("nsites must be a positive number, got: " + nsites); + } else if (nsites == 0) { + nsites = null; + } + } + if (evalue != null) { + if (typeof evalue === "number") { + if (evalue < 0) { + throw new Error("evalue must be a non-negative number, got: " + evalue); + } + } else if (typeof evalue === "string") { + evalue_re = /^((?:[+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?)|inf)$/; + if (!evalue_re.test(evalue)) { + throw new Error("evalue must be a non-negative number, got: " + evalue); + } + } else { + throw new Error("evalue must be a non-negative number, got: " + evalue); + } + } + // set properties + this.name = name; + this.alt = alt; + this.nsites = nsites; + this.evalue = evalue; + this.ltrim = ltrim; + this.rtrim = rtrim; + if (typeof matrix === "string") { + // string constructor + data = parse_pspm_string(matrix); + this.alph_length = data["alph_length"]; + this.motif_length = data["motif_length"]; + this.pspm = data["pspm"]; + if (this.evalue == null) { + if (data["evalue"] != null) { + this.evalue = data["evalue"]; + } else { + this.evalue = 0; + } + } + if (this.nsites == null) { + if (typeof data["nsites"] === "number") { + this.nsites = data["nsites"]; + } else { + this.nsites = 20; + } + } + } else { + // assume pspm is a nested array + this.motif_length = matrix.length; + this.alph_length = (matrix.length > 0 ? matrix[0].length : 0); + if (this.nsites == null) { + this.nsites = 20; + } + if (this.evalue == null) { + this.evalue = 0; + } + this.pspm = []; + // copy pspm and check + for (row = 0; row < this.motif_length; row++) { + if (this.alph_length != matrix[row].length) { + throw new Error("COLUMN_MISMATCH"); + } + this.pspm[row] = []; + row_sum = 0; + for (col = 0; col < this.alph_length; col++) { + this.pspm[row][col] = matrix[row][col]; + row_sum += this.pspm[row][col]; + } + delta = 0.1; + if (isNaN(row_sum) || (row_sum > 1 && (row_sum - 1) > delta) || + (row_sum < 1 && (1 - row_sum) > delta)) { + throw new Error("INVALID_SUM"); + } + } + // copy pssm + if (pssm != null) { + this.pssm = []; + for (row = 0; row < this.motif_length; row++) { + this.pssm[row] = []; + for (col = 0; col < this.alph_length; col++) { + this.pssm[row][col] = pssm[row][col]; + } + } + } + } + } +}; + +Pspm.prototype.copy = function() { + "use strict"; + return new Pspm(this); +}; + +Pspm.prototype.reverse = function() { + "use strict"; + var x, y, temp, temp_trim; + //reverse + x = 0; + y = this.motif_length-1; + while (x < y) { + temp = this.pspm[x]; + this.pspm[x] = this.pspm[y]; + this.pspm[y] = temp; + x++; + y--; + } + // reverse pssm (if defined) + if (typeof this.pssm !== "undefined") { + //reverse + x = 0; + y = this.motif_length-1; + while (x < y) { + temp = this.pssm[x]; + this.pspm[x] = this.pssm[y]; + this.pssm[y] = temp; + x++; + y--; + } + } + //swap triming + temp_trim = this.ltrim; + this.ltrim = this.rtrim; + this.rtrim = temp_trim; + return this; //allow function chaining... +}; + +Pspm.prototype.reverse_complement = function(alphabet) { + "use strict"; + var x, y, temp, i, row, c, temp_trim; + if (this.alph_length != alphabet.get_size_core()) { + throw new Error("The alphabet size does not match the size of the pspm."); + } + if (!alphabet.has_complement()) { + throw new Error("The specified alphabet can not be complemented."); + } + // reverse motif + this.reverse(); + //complement + for (x = 0; x < this.motif_length; x++) { + row = this.pspm[x]; + for (i = 0; i < row.length; i++) { + c = alphabet.get_complement(i); + if (c < i) continue; + temp = row[i]; + row[i] = row[c]; + row[c] = temp; + } + } + // complement pssm (if defined) + if (typeof this.pssm !== "undefined") { + //complement + for (x = 0; x < this.motif_length; x++) { + row = this.pssm[x]; + for (i = 0; i < row.length; i++) { + c = alphabet.get_complement(i); + if (c < i) continue; + temp = row[i]; + row[i] = row[c]; + row[c] = temp; + } + } + } + return this; //allow function chaining... +}; + +Pspm.prototype.get_stack = function(position, alphabet, ssc) { + "use strict"; + var row, stack_ic, alphabet_ic, stack, i, sym; + if (this.alph_length != alphabet.get_size_core()) { + throw new Error("The alphabet size does not match the size of the pspm."); + } + row = this.pspm[position]; + stack_ic = this.get_stack_ic(position, alphabet); + if (ssc) stack_ic -= this.get_error(alphabet); + alphabet_ic = alphabet.get_ic(); + stack = []; + for (i = 0; i < this.alph_length; i++) { + sym = new Symbol(i, row[i]*stack_ic/alphabet_ic, alphabet); + if (sym.get_scale() <= 0) { + continue; + } + stack.push(sym); + } + stack.sort(compare_symbol); + return stack; +}; + +Pspm.prototype.get_stack_ic = function(position, alphabet) { + "use strict"; + var row, H, i; + if (this.alph_length != alphabet.get_size_core()) { + throw new Error("The alphabet size does not match the size fo the pspm."); + } + row = this.pspm[position]; + H = 0; + for (i = 0; i < this.alph_length; i++) { + if (row[i] === 0) { + continue; + } + H -= (row[i] * (Math.log(row[i]) / Math.LN2)); + } + return alphabet.get_ic() - H; +}; + +Pspm.prototype.get_error = function(alphabet) { + "use strict"; + if (this.nsites === 0) { + return 0; + } + return (alphabet.get_size_core()-1) / (2 * Math.LN2 * this.nsites); +}; + +Pspm.prototype.get_motif_length = function() { + "use strict"; + return this.motif_length; +}; + +Pspm.prototype.get_alph_length = function() { + "use strict"; + return this.alph_length; +}; + +Pspm.prototype.get_left_trim = function() { + "use strict"; + return this.ltrim; +}; + +Pspm.prototype.get_right_trim = function() { + "use strict"; + return this.rtrim; +}; + +Pspm.prototype.as_best_match = function(alphabet) { + "use strict"; + var match, odds, best_odds, best_index; + var i, j; + match = ""; + for (i = 0; i < this.motif_length; i++) { + best_index = 0; + best_odds = this.pspm[i][0] / alphabet.get_bg_freq(0); + for (j = 1; j < this.alph_length; j++) { + odds = this.pspm[i][j] / alphabet.get_bg_freq(j); + if (odds > best_odds) { + best_odds = odds; + best_index = j; + } + } + match += alphabet.get_symbol(best_index); + } + return match; +}; + +Pspm.prototype.as_count_matrix = function() { + "use strict"; + var count, count_text, text; + var i, j; + text = ""; + for (i = 0; i < this.motif_length; i++) { + if (i !== 0) { + text += "\n"; + } + for (j = 0; j < this.alph_length; j++) { + if (j !== 0) { + text += " "; + } + count = Math.round(this.nsites * this.pspm[i][j]); + count_text = "" + count; + // pad up to length of 4 + if (count_text.length < 4) { + text += (new Array(5 - count_text.length)).join(" ") + count_text; + } else { + text += count_text; + } + } + } + return text; +}; + +Pspm.prototype.as_probability_matrix = function() { + "use strict"; + var text; + var i, j; + text = ""; + for (i = 0; i < this.motif_length; i++) { + if (i !== 0) { + text += "\n"; + } + for (j = 0; j < this.alph_length; j++) { + if (j !== 0) { + text += " "; + } + text += this.pspm[i][j].toFixed(6); + } + } + return text; +}; + +Pspm.prototype.as_score_matrix = function(alphabet, pseudo) { + "use strict"; + var me, score, out, row, col, score_text; + me = this; + if (typeof this.pssm === "undefined") { + if (!(typeof alphabet === "object" && alphabet != null && alphabet instanceof Alphabet)) { + throw new Error("The alphabet is required to generate the pssm."); + } + if (typeof pseudo === "undefined") { + pseudo = 0.01; + } else if (typeof pseudo !== "number" || pseudo < 0) { + throw new Error("Expected positive number for pseudocount"); + } + score = function(row, col) { + "use strict"; + var p, bg, p2; + p = me.pspm[row][col]; + bg = alphabet.get_bg_freq(col); + p2 = (p * me.nsites + bg * pseudo) / (me.nsites + pseudo); + return (p2 > 0 ? Math.round((Math.log(p2 / bg) / Math.LN2) * 100) : -10000); + }; + } else { + score = function(row, col) { + "use strict"; + return me.pssm[row][col]; + }; + } + out = ""; + for (row = 0; row < this.motif_length; row++) { + for (col = 0; col < this.alph_length; col++) { + if (col !== 0) { + out += " "; + } + score_text = "" + score(row, col); + // pad out to 6 characters + if (score_text.length < 6) { + out += (new Array(7 - score_text.length)).join(" ") + score_text; + } else { + out += score_text; + } + } + out += "\n"; + } + return out; +} + +Pspm.prototype.as_pspm = function() { + "use strict"; + return "letter-probability matrix: alength= " + this.alph_length + + " w= " + this.motif_length + " nsites= " + this.nsites + + " E= " + (typeof this.evalue === "number" ? + this.evalue.toExponential() : this.evalue) + "\n" + + this.as_probability_matrix(); +}; + +Pspm.prototype.as_pssm = function(alphabet, pseudo) { + "use strict"; + return "log-odds matrix: alength= " + this.alph_length + + " w= " + this.motif_length + + " E= " + (typeof this.evalue == "number" ? + this.evalue.toExponential() : this.evalue) + "\n" + + this.as_score_matrix(alphabet, pseudo); +}; + +Pspm.prototype.as_meme = function(options) { + var with_header, with_pspm, with_pssm, version, alphabet, bg_source, pseudocount, strands; + var out, alen, i; + // get the options + if (typeof options !== "object" || options === null) { + options = {}; + } + with_header = (typeof options["with_header"] === "boolean" ? options["with_header"] : false); + with_pspm = (typeof options["with_pspm"] === "boolean" ? options["with_pspm"] : false); + with_pssm = (typeof options["with_pssm"] === "boolean" ? options["with_pssm"] : false); + if (!with_pspm && !with_pssm) with_pspm = true; + if (with_header) { + if (typeof options["version"] === "string" && /^\d+(?:\.\d+){0,2}$/.test(options["version"])) { + version = options["version"]; + } else if (typeof options["version"] === "number") { + version = options["version"].toFixed(0); + } else { + version = "4"; + } + if (typeof options["strands"] === "number" && options["strands"] === 1) { + strands = 1; + } else { + strands = 2; + } + if (typeof options["bg_source"] === "string") { + bg_source = options["bg_source"]; + } else { + bg_source = "unknown source"; + } + if (typeof options["alphabet"] === "object" && options["alphabet"] != null + && options["alphabet"] instanceof Alphabet) { + alphabet = options["alphabet"]; + } else { + throw new Error("The alphabet is required to generate the header."); + } + } + // now create the output + out = ""; + if (with_header) { + out = "MEME version " + version + "\n\n"; + out += alphabet.as_meme() + "\n"; + if (alphabet.has_complement()) { // assume DNA has both strands unless otherwise specified + out += "strands: " + (strands === 1 ? "+" : "+ -") + "\n\n"; + } + out += "Background letter frequencies (from " + bg_source + "):\n"; + alen = alphabet.get_size_core(); + for (i = 0; i < alen; i++) { + if (i !== 0) { + if (i % 9 === 0) { // maximum of nine entries per line + out += "\n"; + } else { + out += " "; + } + } + out += alphabet.get_symbol(i) + " " + alphabet.get_bg_freq(i).toFixed(3); + } + } + out += "\n\n"; + out += "MOTIF " + this.name + (this.alt == null ? "" : " " + this.alt); + if (with_pssm) { + out += "\n\n"; + out += this.as_pssm(options["alphabet"], options["pseudocount"]); + } + if (with_pspm) { + out += "\n\n"; + out += this.as_pspm(); + } + return out; +} + +Pspm.prototype.toString = function() { + "use strict"; + var str, i, row; + str = ""; + for (i = 0; i < this.pspm.length; i++) { + row = this.pspm[i]; + str += row.join("\t") + "\n"; + } + return str; +}; + +function parse_pspm_properties(str) { + "use strict"; + var parts, i, eqpos, before, after, properties, prop, num, num_re; + num_re = /^((?:[+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?)|inf)$/; + parts = trim(str).split(/\s+/); + // split up words containing = + for (i = 0; i < parts.length;) { + eqpos = parts[i].indexOf("="); + if (eqpos != -1) { + before = parts[i].substr(0, eqpos); + after = parts[i].substr(eqpos+1); + if (before.length > 0 && after.length > 0) { + parts.splice(i, 1, before, "=", after); + i += 3; + } else if (before.length > 0) { + parts.splice(i, 1, before, "="); + i += 2; + } else if (after.length > 0) { + parts.splice(i, 1, "=", after); + i += 2; + } else { + parts.splice(i, 1, "="); + i++; + } + } else { + i++; + } + } + properties = {}; + for (i = 0; i < parts.length; i += 3) { + if (parts.length - i < 3) { + throw new Error("Expected PSPM property was incomplete. "+ + "Remaing parts are: " + parts.slice(i).join(" ")); + } + if (parts[i+1] !== "=") { + throw new Error("Expected '=' in PSPM property between key and " + + "value but got " + parts[i+1]); + } + prop = parts[i].toLowerCase(); + num = parts[i+2]; + if (!num_re.test(num)) { + throw new Error("Expected numeric value for PSPM property '" + + prop + "' but got '" + num + "'"); + } + properties[prop] = num; + } + return properties; +} + +function parse_pspm_string(pspm_string) { + "use strict"; + var header_re, lines, first_line, line_num, col_num, alph_length, + motif_length, nsites, evalue, pspm, i, line, match, props, parts, + j, prob; + header_re = /^letter-probability\s+matrix:(.*)$/i; + lines = pspm_string.split(/\n/); + first_line = true; + line_num = 0; + col_num = 0; + alph_length; + motif_length; + nsites; + evalue; + pspm = []; + for (i = 0; i < lines.length; i++) { + line = trim(lines[i]); + if (line.length === 0) { + continue; + } + // check the first line for a header though allow matrices without it + if (first_line) { + first_line = false; + match = header_re.exec(line); + if (match !== null) { + props = parse_pspm_properties(match[1]); + if (props.hasOwnProperty("alength")) { + alph_length = parseFloat(props["alength"]); + if (alph_length != 4 && alph_length != 20) { + throw new Error("PSPM property alength should be 4 or 20" + + " but got " + alph_length); + } + } + if (props.hasOwnProperty("w")) { + motif_length = parseFloat(props["w"]); + if (motif_length % 1 !== 0 || motif_length < 1) { + throw new Error("PSPM property w should be an integer larger " + + "than zero but got " + motif_length); + } + } + if (props.hasOwnProperty("nsites")) { + nsites = parseFloat(props["nsites"]); + if (nsites <= 0) { + throw new Error("PSPM property nsites should be larger than " + + "zero but got " + nsites); + } + } + if (props.hasOwnProperty("e")) { + evalue = props["e"]; + if (evalue < 0) { + throw new Error("PSPM property evalue should be " + + "non-negative but got " + evalue); + } + } + continue; + } + } + pspm[line_num] = []; + col_num = 0; + parts = line.split(/\s+/); + for (j = 0; j < parts.length; j++) { + prob = parseFloat(parts[j]); + if (prob != parts[j] || prob < 0 || prob > 1) { + throw new Error("Expected probability but got '" + parts[j] + "'"); + } + pspm[line_num][col_num] = prob; + col_num++; + } + line_num++; + } + if (typeof motif_length === "number") { + if (pspm.length != motif_length) { + throw new Error("Expected PSPM to have a motif length of " + + motif_length + " but it was actually " + pspm.length); + } + } else { + motif_length = pspm.length; + } + if (typeof alph_length !== "number") { + alph_length = pspm[0].length; + if (alph_length != 4 && alph_length != 20) { + throw new Error("Expected length of first row in the PSPM to be " + + "either 4 or 20 but got " + alph_length); + } + } + for (i = 0; i < pspm.length; i++) { + if (pspm[i].length != alph_length) { + throw new Error("Expected PSPM row " + i + " to have a length of " + + alph_length + " but the length was " + pspm[i].length); + } + } + return {"pspm": pspm, "motif_length": motif_length, + "alph_length": alph_length, "nsites": nsites, "evalue": evalue}; +} +//====================================================================== +// end Pspm object +//====================================================================== + +//====================================================================== +// start Logo object +//====================================================================== + +var Logo = function(alphabet, options) { + "use strict"; + this.alphabet = alphabet; + this.fine_text = ""; + this.x_axis = 1; + this.y_axis = true; + this.xlate_nsyms = 1; + this.xlate_start = null; + this.xlate_end = null; + this.pspm_list = []; + this.pspm_column = []; + this.rows = 0; + this.columns = 0; + if (typeof options === "string") { + // the old method signature had fine_text here so we support that + this.fine_text = options; + } else if (typeof options === "object" && options != null) { + this.fine_text = (typeof options.fine_text === "string" ? options.fine_text : ""); + this.x_axis = (typeof options.x_axis === "boolean" ? (options.x_axis ? 1 : 0) : 1); + if (options.x_axis_hidden != null && options.x_axis_hidden) this.x_axis = -1; + this.y_axis = (typeof options.y_axis === "boolean" ? options.y_axis : true); + this.xlate_nsyms = (typeof options.xlate_nsyms === "number" ? options.xlate_nsyms : this.xlate_nsyms); + this.xlate_start = (typeof options.xlate_start === "number" ? options.xlate_start : this.xlate_start); + this.xlate_end = (typeof options.xlate_end === "number" ? options.xlate_end : this.xlate_end); + } +}; + +Logo.prototype.add_pspm = function(pspm, column) { + "use strict"; + var col; + if (typeof column === "undefined") { + column = 0; + } else if (column < 0) { + throw new Error("Column index out of bounds."); + } + this.pspm_list[this.rows] = pspm; + this.pspm_column[this.rows] = column; + this.rows++; + col = column + pspm.get_motif_length(); + if (col > this.columns) { + this.columns = col; + } +}; + +Logo.prototype.get_columns = function() { + "use strict"; + return this.columns; +}; + +Logo.prototype.get_xlate_nsyms = function() { + "use strict"; + return this.xlate_nsyms; +}; + +Logo.prototype.get_xlate_start = function() { + "use strict"; + return (this.xlate_start != null ? this.xlate_start : 0); +}; + +Logo.prototype.get_xlate_end = function() { + "use strict"; + return (this.xlate_end != null ? this.xlate_end : this.columns * this.xlate_nsyms); +}; + +Logo.prototype.get_xlate_columns = function() { + "use strict"; + return this.get_xlate_end() - this.get_xlate_start(); +}; + +Logo.prototype.get_rows = function() { + "use strict"; + return this.rows; +}; + +Logo.prototype.get_pspm = function(row_index) { + "use strict"; + if (row_index < 0 || row_index >= this.rows) { + throw new Error("INDEX_OUT_OF_BOUNDS"); + } + return this.pspm_list[row_index]; +}; + +Logo.prototype.get_offset = function(row_index) { + "use strict"; + if (row_index < 0 || row_index >= this.rows) { + throw new Error("INDEX_OUT_OF_BOUNDS"); + } + return this.pspm_column[row_index]; +}; + +Logo.prototype._as_eps_data = function(ssc, errbars) { + var i, j, pos, stack_pos, pspm, stack, sym, out; + out = ""; + for (i = 0; i < this.rows; i++) { + out += "\nStartLine\n"; + // Indent + for (j = 0; j < this.pspm_column[i]; j++) { + out += "() startstack\nendstack\n\n"; + } + pspm = this.pspm_list[i]; + if (pspm.get_left_trim() > 0) { + out += "MuteColour\nDrawTrimEdge\n" + pspm.get_left_trim() + " DrawTrimBg\n"; + } + for (pos = 0; pos < pspm.get_motif_length(); pos++) { + if (pos != 0 && pos == pspm.get_left_trim()) { // enable full colour + out += "DrawTrimEdge\nRestoreColour\n"; + } else if (pos == (pspm.get_motif_length() - pspm.get_right_trim())) { + out += "MuteColour\n" + pspm.get_right_trim() + " DrawTrimBg\n"; + } + out += "(" + (pos + 1) + ") startstack\n"; + stack = pspm.get_stack(pos, this.alphabet, ssc); + for (stack_pos = 0; stack_pos < stack.length; stack_pos++) { + sym = stack[stack_pos]; + out += " " + (sym.get_scale() * this.alphabet.get_ic()) + " (" + sym.get_symbol() + ") numchar\n"; + } + if (errbars) { + out += " " + pspm.get_error(this.alphabet) + " Ibeam\n"; + } + out += "endstack\n\n"; + } + if (pspm.get_right_trim() > 0 || pspm.get_left_trim() == pspm.get_motif_length()) { + out += "RestoreColour\n"; + } + out += "EndLine\n"; + } + return out; +}; + +Logo.prototype.as_eps = function(options) { + "use strict"; + if (this.xlate_nsyms != 1) throw new Error("Unsupported setting xlate_nsyms for EPS"); + if (this.xlate_start != null) throw new Error("Unsupported setting xlate_start for EPS"); + if (this.xlate_end != null) throw new Error("Unsupported setting xlate_end for EPS"); + + var LOGOHEIGHT = 7.5; // default height of line in cm + var cm2pts, height, width, now, ssc, errbars; + if (typeof options === "undefined") { + options = {}; + } + cm2pts = 72 / 2.54; + if (typeof options.logo_height == "number") { + height = options.logo_height; + } else { + height = LOGOHEIGHT * this.rows; + } + if (typeof options.logo_width == "number") { + width = options.logo_width; + } else { + width = this.columns + 2; + } + now = new Date(); + ssc = (typeof options.ssc == "boolean" ? options.ssc : false); + errbars = (typeof options.show_error_bar == "boolean" ? options.show_error_bar : ssc); + var values = { + "LOGOHEIGHT": height, + "LOGOWIDTH": width, + "BOUNDINGHEIGHT": Math.round(height * cm2pts), + "BOUNDINGWIDTH": Math.round(width * cm2pts), + "LOGOLINEHEIGHT": (height / this.rows), + "CHARSPERLINE": this.columns, + "BARBITS": this.alphabet.get_ic(), + "LOGOTYPE": (this.alphabet.has_complement() ? "NA" : "AA"), + "CREATIONDATE": now.getDate() + "." + (now.getMonth() + 1) + "." + now.getFullYear() + " " + now.getHours() + ":" + now.getMinutes() + ":" + now.getSeconds(), + "ERRORBARFRACTION": (typeof options.error_bar_fraction == "number" ? options.error_bar_fraction : 1.0), + "TICBITS": (typeof options.ticbits == "number" ? options.ticbits : 1.0), + "TITLE": (typeof options.title == "string" ? options.title : ""), + "FINEPRINT": (typeof options.fineprint == "string" ? options.fineprint : this.fine_text), + "XAXISLABEL": (typeof options.xaxislabel == "string" ? options.xaxislabel : ""), + "YAXISLABEL": (typeof options.yaxislabel == "string" ? options.yaxislabel : "bits"), + "SSC": ssc, + "YAXIS": (typeof options.show_y_axis == "boolean" ? options.show_y_axis : this.y_axis), + "SHOWENDS": (typeof options.show_ends == "boolean" ? options.show_ends : false), + "ERRBAR": errbars, + "OUTLINE": (typeof options.show_outline == "boolean" ? options.show_outline : false), + "NUMBERING": (typeof options.show_numbering == "boolean" ? options.show_numbering : this.x_axis != 0), + "SHOWINGBOX": (typeof options.show_box == "boolean" ? options.show_box : false), + "CREATOR": (typeof options.creator == "string" ? options.creator : "motif_logo.js"), + "FONTSIZE": (typeof options.label_font_size == "number" ? options.label_font_size : 12), + "TITLEFONTSIZE": (typeof options.title_font_size == "number" ? options.title_font_size : 12), + "SMALLFONTSIZE": (typeof options.small_font_size == "number" ? options.small_font_size : 6), + "TOPMARGIN" : (typeof options.top_margin == "number" ? options.top_margin : 0.9), + "BOTTOMMARGIN": (typeof options.bottom_margin == "number" ? options.bottom_margin : 0.9), + "COLORDICT": this.alphabet._as_eps_dict(), + "DATA": this._as_eps_data(ssc, errbars) + }; + // now this requires that the script containing the template has been imported! + return motif_logo_template(values); +}; + +//====================================================================== +// end Logo object +//====================================================================== + +// calculate the exact size (in pixels) of an object drawn on the +// canvas assuming that the background of the canvas is transparent. +function canvas_bounds(ctx, cwidth, cheight) { + "use strict"; + var data, r, c, top_line, bottom_line, left_line, right_line, + txt_width, txt_height; + + // extract the image data + data = ctx.getImageData(0, 0, cwidth, cheight).data; + + // set initial values + top_line = -1; bottom_line = -1; left_line = -1; right_line = -1; + txt_width = 0; txt_height = 0; + + // Find the top-most line with a non-transparent pixel + for (r = 0; r < cheight; r++) { + for (c = 0; c < cwidth; c++) { + if (data[r * cwidth * 4 + c * 4 + 3]) { + top_line = r; + break; + } + } + if (top_line != -1) { + break; + } + } + + // Only bother looking if we found at least one set pixel... + if (top_line != -1) { + + //find the last line with a non-transparent pixel + for (r = cheight-1; r >= top_line; r--) { + for(c = 0; c < cwidth; c++) { + if(data[r * cwidth * 4 + c * 4 + 3]) { + bottom_line = r; + break; + } + } + if (bottom_line != -1) { + break; + } + } + // calculate height + txt_height = bottom_line - top_line + 1; + + // Find the left-most line with a non-transparent pixel + for (c = 0; c < cwidth; c++) { + for (r = top_line; r <= bottom_line; r++) { + if (data[r * cwidth * 4 + c * 4 + 3]) { + left_line = c; + break; + } + } + if (left_line != -1) { + break; + } + } + + //find the right most line with a non-transparent pixel + for (c = cwidth-1; c >= left_line; c--) { + for(r = top_line; r <= bottom_line; r++) { + if(data[r * cwidth * 4 + c * 4 + 3]) { + right_line = c; + break; + } + } + if (right_line != -1) { + break; + } + } + txt_width = right_line - left_line + 1; + } + + //return the bounds + return {bound_top: top_line, bound_bottom: bottom_line, + bound_left: left_line, bound_right: right_line, width: txt_width, + height: txt_height}; +} + +//====================================================================== +// start RasterizedAlphabet +//====================================================================== + +// Rasterize Alphabet +// 1) Measure width of text at default font for all symbols in alphabet +// 2) sort in width ascending +// 3) Drop the top and bottom 10% (designed to ignore outliers like 'W' and 'I') +// 4) Calculate the average as the maximum scaling factor (designed to stop I becoming a rectangular blob). +// 5) Assume scale of zero would result in width of zero, interpolate scale required to make perfect width font +// 6) Draw text onto temp canvas at calculated scale +// 7) Find bounds of drawn text +// 8) Paint on to another canvas at the desired height (but only scaling width to fit if larger). +var RasterizedAlphabet = function(alphabet, logo_scale, font, width) { + "use strict"; + var default_size, safety_pad, canvas, ctx, middle, baseline, widths, sizes, + i, sym, size, tenpercent, avg_width, scale, + target_width, target_height; + //variable prototypes + this.alphabet = alphabet; + this.scale = logo_scale; + this.sym_cache = {}; + this.stack_num_cache = []; + this.scale_num_cache = []; + // size of canvas + default_size = 60; // size of measuring canvas + safety_pad = 20; // pixels to pad around so we don't miss the edges + // create a canvas to do our measuring + canvas = document.createElement("canvas"); + if (!canvas.getContext) throw new Error("No canvas support"); + canvas.width = default_size + 2 * safety_pad; + canvas.height = default_size + 2 * safety_pad; + middle = Math.round(canvas.width / 2); + baseline = Math.round(canvas.height - safety_pad); + ctx = canvas.getContext('2d'); + if (!supports_text(ctx)) throw new Error("Canvas does not support text"); + ctx.font = font; + ctx.textAlign = "center"; + ctx.translate(middle, baseline); + // list of widths + widths = []; + sizes = []; + //now measure each letter in the alphabet + for (i = 0; i < alphabet.get_size_core(); ++i) { + // reset the canvas + ctx.clearRect(0, 0, canvas.width, canvas.height); + ctx.fillStyle = alphabet.get_colour(i); + // draw the test text + ctx.fillText(alphabet.get_symbol(i), 0, 0); + //measure + size = canvas_bounds(ctx, canvas.width, canvas.height); + if (size.width === 0) throw new Error("Invisible symbol!"); + widths.push(size.width); + sizes[i] = size; + } + //sort the widths + widths.sort(function(a,b) {return a - b;}); + //drop 10% of the items off each end + tenpercent = Math.floor(widths.length / 10); + for (i = 0; i < tenpercent; ++i) { + widths.pop(); + widths.shift(); + } + //calculate average width + avg_width = 0; + for (i = 0; i < widths.length; ++i) { + avg_width += widths[i]; + } + avg_width /= widths.length; + // calculate the target width + target_width = width * this.scale * 2; + // calculate scales + for (i = 0; i < alphabet.get_size_core(); ++i) { + sym = alphabet.get_symbol(i); + size = sizes[i]; + // calculate scale + scale = target_width / Math.max(avg_width, size.width); + // estimate scaled height + target_height = size.height * scale; + // create an appropriately sized canvas + canvas = document.createElement("canvas"); + canvas.width = target_width; + canvas.height = target_height + safety_pad * 2; + // calculate the middle + middle = Math.round(canvas.width / 2); + // calculate the baseline + baseline = Math.round(canvas.height - safety_pad); + // get the context and prepare to draw the rasterized text + ctx = canvas.getContext('2d'); + ctx.font = font; + ctx.fillStyle = alphabet.get_colour(i); + ctx.textAlign = "center"; + ctx.translate(middle, baseline); + ctx.save(); + ctx.scale(scale, scale); + // draw the text + ctx.fillText(sym, 0, 0); + ctx.restore(); + this.sym_cache[sym] = {"image": canvas, "size": canvas_bounds(ctx, canvas.width, canvas.height)}; + } +}; + +RasterizedAlphabet.prototype.get_alphabet = function() { + return this.alphabet; +}; + +RasterizedAlphabet.prototype.get_scale = function() { + return this.scale; +}; + +RasterizedAlphabet.prototype.draw_stack_sym = function(ctx, letter, dx, dy, dWidth, dHeight) { + "use strict"; + var entry, image, size; + entry = this.sym_cache[letter]; + image = entry.image; + size = entry.size; + ctx.drawImage(image, 0, size.bound_top -1, image.width, size.height+1, dx, dy, dWidth, dHeight); +}; + +RasterizedAlphabet.prototype.draw_stack_num = function(ctx, font, stack_width, index) { + var image, image_ctx, text_length; + if (index >= this.stack_num_cache.length) { + image = document.createElement("canvas"); + // measure the text + image_ctx = image.getContext('2d'); + image_ctx.save(); + image_ctx.font = font; + text_length = image_ctx.measureText("" + (index + 1)).width; + image_ctx.restore(); + // resize the canvas to fit + image.width = Math.ceil(stack_width); + image.height = Math.ceil(text_length); + // draw the text + image_ctx = image.getContext('2d'); + image_ctx.translate(Math.round(stack_width / 2), 0); + image_ctx.font = font; + image_ctx.textBaseline = "middle"; + image_ctx.textAlign = "right"; + image_ctx.rotate(-(Math.PI / 2)); + image_ctx.fillText("" + (index + 1), 0, 0); + this.stack_num_cache[index] = image; + } else { + image = this.stack_num_cache[index]; + } + ctx.drawImage(image, 0, 0); +} + +RasterizedAlphabet.prototype.draw_scale_num = function(ctx, font, num) { + var image, image_ctx, text_size, m_length; + if (num >= this.scale_num_cache.length) { + image = document.createElement("canvas"); + // measure the text + image_ctx = image.getContext('2d'); + image_ctx.font = font; + text_size = image_ctx.measureText("" + num); + if (text_size.actualBoundingBoxAscent && text_size.actualBoundingBoxDesent) { + // resize the canvas to fit + image.width = Math.ceil(text_size.width); + image.height = Math.ceil(text_size.actualBoundingBoxAscent + text_size.actualBoundingBoxDesent); + // draw the text + image_ctx = image.getContext('2d'); + image_ctx.font = font; + image_ctx.textAlign = "right"; + image_ctx.fillText("" + num, image.width, text_size.actualBoundingBoxAscent); + } else { + // measure width of 'm' to approximate height, we double it later anyway + m_length = image_ctx.measureText("m").width; + // resize the canvas to fit + image.width = Math.ceil(text_size.width); + image.height = Math.ceil(2 * m_length); + // draw the text + image_ctx = image.getContext('2d'); + image_ctx.font = font; + image_ctx.textAlign = "right"; + image_ctx.textBaseline = "middle"; + image_ctx.fillText("" + num, image.width, m_length); + } + this.scale_num_cache[num] = image; + } else { + image = this.scale_num_cache[num]; + } + ctx.drawImage(image, -image.width, -Math.round(image.height / 2)) +} + +//====================================================================== +// end RasterizedAlphabet +//====================================================================== + +//====================================================================== +// start LogoMetrics object +//====================================================================== + +var LogoMetrics = function(ctx, logo_columns, logo_rows, has_names, has_finetext, x_axis, y_axis) { + "use strict"; + var i, row_height; + //variable prototypes + this.pad_top = (has_names ? 5 : 0); + this.pad_left = (y_axis ? 10 : 0); + this.pad_right = (has_finetext ? 15 : 0); + this.pad_bottom = 0; + this.pad_middle = 20; + this.name_height = 14; + this.name_font = "bold " + this.name_height + "px Times, sans-serif"; + this.name_spacer = 0; + this.y_axis = y_axis; + this.y_label = "bits"; + this.y_label_height = 12; + this.y_label_font = "bold " + this.y_label_height + "px Helvetica, sans-serif"; + this.y_label_spacer = 3; + this.y_num_height = 12; + this.y_num_width = 0; + this.y_num_font = "bold " + this.y_num_height + "px Helvetica, sans-serif"; + this.y_tic_width = 5; + this.stack_pad_left = 0; + this.stack_font = "bold 25px Helvetica, sans-serif"; + this.stack_height = 90; + this.stack_width = 26; + this.stacks_pad_right = 5; + this.x_axis = x_axis; + this.x_num_above = 2; + this.x_num_height = 12; + this.x_num_width = 0; + this.x_num_font = "bold " + this.x_num_height + "px Helvetica, sans-serif"; + this.fine_txt_height = 6; + this.fine_txt_above = 2; + this.fine_txt_font = "normal " + this.fine_txt_height + "px Helvetica, sans-serif"; + this.letter_metrics = new Array(); + this.summed_width = 0; + this.summed_height = 0; + //calculate the width of the y axis numbers + ctx.font = this.y_num_font; + for (i = 0; i <= 2; i++) { + this.y_num_width = Math.max(this.y_num_width, ctx.measureText("" + i).width); + } + //calculate the width of the x axis numbers (but they are rotated so it becomes height) + if (x_axis == 1) { + ctx.font = this.x_num_font; + for (i = 1; i <= logo_columns; i++) { + this.x_num_width = Math.max(this.x_num_width, ctx.measureText("" + i).width); + } + } else if (x_axis == 0) { + this.x_num_height = 4; + this.x_num_width = 4; + } else { + this.x_num_height = 0; + this.x_num_width = 0; + } + + //calculate how much vertical space we want to draw this + //first we add the padding at the top and bottom since that's always there + this.summed_height += this.pad_top + this.pad_bottom; + //all except the last row have the same amount of space allocated to them + if (logo_rows > 1) { + row_height = this.stack_height + this.pad_middle; + if (has_names) { + row_height += this.name_height; + //the label is allowed to overlap into the spacer + row_height += Math.max(this.y_num_height/2, this.name_spacer); + //the label is allowed to overlap the space used by the other label + row_height += Math.max(this.y_num_height/2, this.x_num_height + this.x_num_above); + } else { + row_height += this.y_num_height/2; + //the label is allowed to overlap the space used by the other label + row_height += Math.max(this.y_num_height/2, this.x_num_height + this.x_num_above); + } + this.summed_height += row_height * (logo_rows - 1); + } + //the last row has the name and fine text below it but no padding + this.summed_height += this.stack_height + (this.y_axis ? this.y_num_height/2 : 0); + + var fine_txt_total = (has_finetext ? this.fine_txt_height + this.fine_txt_above : 0); + if (has_names) { + this.summed_height += fine_txt_total + this.name_height; + this.summed_height += Math.max((this.y_axis ? this.y_num_height/2 : 0), + this.x_num_height + this.x_num_above + this.name_spacer); + } else { + this.summed_height += Math.max((this.y_axis ? this.y_num_height/2 : 0), + this.x_num_height + this.x_num_above + fine_txt_total); + } + + //calculate how much horizontal space we want to draw this + //first add the padding at the left and right since that's always there + this.summed_width += this.pad_left + this.pad_right; + if (this.y_axis) { + //add on the space for the y-axis label + this.summed_width += this.y_label_height + this.y_label_spacer; + //add on the space for the y-axis + this.summed_width += this.y_num_width + this.y_tic_width; + } + //add on the space for the stacks + this.summed_width += (this.stack_pad_left + this.stack_width) * logo_columns; + //add on the padding after the stacks (an offset from the fine text) + this.summed_width += this.stacks_pad_right; + +}; + +//====================================================================== +// end LogoMetrics object +//====================================================================== + +//found this trick at http://talideon.com/weblog/2005/02/detecting-broken-images-js.cfm +function image_ok(img) { + "use strict"; + // During the onload event, IE correctly identifies any images that + // weren't downloaded as not complete. Others should too. Gecko-based + // browsers act like NS4 in that they report this incorrectly. + if (!img.complete) { + return false; + } + // However, they do have two very useful properties: naturalWidth and + // naturalHeight. These give the true size of the image. If it failed + // to load, either of these should be zero. + if (typeof img.naturalWidth !== "undefined" && img.naturalWidth === 0) { + return false; + } + // No other way of checking: assume it's ok. + return true; +} + +function supports_text(ctx) { + "use strict"; + if (!ctx.fillText) { + return false; + } + if (!ctx.measureText) { + return false; + } + return true; +} + +//draws the scale, returns the width +function draw_scale(ctx, metrics, alphabet_ic, raster) { + "use strict"; + var tic_height, i; + tic_height = metrics.stack_height / alphabet_ic; + ctx.save(); + ctx.translate(metrics.y_label_height, metrics.y_num_height/2); + //draw the axis label + ctx.save(); + ctx.font = metrics.y_label_font; + ctx.translate(0, metrics.stack_height/2); + ctx.rotate(-(Math.PI / 2)); + ctx.textAlign = "center"; + ctx.fillText("bits", 0, 0); + ctx.restore(); + + ctx.translate(metrics.y_label_spacer + metrics.y_num_width, 0); + + //draw the axis tics + ctx.save(); + ctx.translate(0, metrics.stack_height); + for (i = 0; i <= alphabet_ic; i++) { + //draw the number + ctx.save(); + ctx.translate(-1, 0); + raster.draw_scale_num(ctx, metrics.y_num_font, i); + ctx.restore(); + //draw the tic + ctx.fillRect(0, -1, metrics.y_tic_width, 2); + //prepare for next tic + ctx.translate(0, -tic_height); + } + ctx.restore(); + + ctx.fillRect(metrics.y_tic_width - 2, 0, 2, metrics.stack_height) + + ctx.restore(); +} + +function draw_stack_num(ctx, metrics, row_index, raster) { + "use strict"; + ctx.save(); + ctx.translate(0, Math.round(metrics.stack_height + metrics.x_num_above)); + if (metrics.x_axis == 1) { + raster.draw_stack_num(ctx, metrics.x_num_font, metrics.stack_width, row_index); + } else if (metrics.x_axis == 0) { + // draw dots instead of the numbers (good for small logos) + ctx.beginPath(); + var radius = Math.round(metrics.x_num_height / 2); + ctx.arc(Math.round(metrics.stack_width / 2), radius, radius, 0, 2 * Math.PI, false); + ctx.fill(); + } + ctx.restore(); +} + +function draw_stack(ctx, metrics, symbols, raster) { + "use strict"; + var preferred_pad, sym_min, i, sym, sym_height, pad; + preferred_pad = 0; + sym_min = 5; + + ctx.save();//1 + ctx.translate(0, metrics.stack_height); + for (i = 0; i < symbols.length; i++) { + sym = symbols[i]; + sym_height = metrics.stack_height * sym.get_scale(); + + pad = preferred_pad; + if (sym_height - pad < sym_min) { + pad = Math.min(pad, Math.max(0, sym_height - sym_min)); + } + sym_height -= pad; + + //translate to the correct position + ctx.translate(0, -(pad/2 + sym_height)); + + //draw + raster.draw_stack_sym(ctx, sym.get_symbol(), 0, 0, metrics.stack_width, sym_height); + //translate past the padding + ctx.translate(0, -(pad/2)); + } + ctx.restore();//1 +} + +function draw_dashed_line(ctx, pattern, start, x1, y1, x2, y2) { + "use strict"; + var x, y, len, i, dx, dy, tlen, theta, mulx, muly, lx, ly; + dx = x2 - x1; + dy = y2 - y1; + tlen = Math.pow(dx*dx + dy*dy, 0.5); + theta = Math.atan2(dy,dx); + mulx = Math.cos(theta); + muly = Math.sin(theta); + lx = []; + ly = []; + for (i = 0; i < pattern; ++i) { + lx.push(pattern[i] * mulx); + ly.push(pattern[i] * muly); + } + i = start; + x = x1; + y = y1; + len = 0; + ctx.beginPath(); + while (len + pattern[i] < tlen) { + ctx.moveTo(x, y); + x += lx[i]; + y += ly[i]; + ctx.lineTo(x, y); + len += pattern[i]; + i = (i + 1) % pattern.length; + x += lx[i]; + y += ly[i]; + len += pattern[i]; + i = (i + 1) % pattern.length; + } + if (len < tlen) { + ctx.moveTo(x, y); + x += mulx * (tlen - len); + y += muly * (tlen - len); + ctx.lineTo(x, y); + } + ctx.stroke(); +} + +function draw_trim_background(ctx, metrics, left_start, left_end, left_divider, right_start, right_end, right_divider) { + "use strict"; + var left_size = left_end - left_start; + var right_size = right_end - right_start; + var line_x; + + ctx.save();//s8 + ctx.fillStyle = "rgb(240, 240, 240)"; + if (left_size > 0) { + ctx.fillRect(left_start * metrics.stack_width, 0, left_size * metrics.stack_width, metrics.stack_height); + } + if (right_size > 0) { + ctx.fillRect(right_start * metrics.stack_width, 0, right_size * metrics.stack_width, metrics.stack_height); + } + ctx.fillStyle = "rgb(51, 51, 51)"; + if (left_size > 0 && left_divider) { + line_x = (left_end * metrics.stack_width) - 0.5; + draw_dashed_line(ctx, [3], 0, line_x, 0, line_x, metrics.stack_height); + } + if (right_size > 0 && right_divider) { + line_x = (right_start * metrics.stack_width) + 0.5; + draw_dashed_line(ctx, [3], 0, line_x, 0, line_x, metrics.stack_height); + } + ctx.restore();//s8 +} + +function size_logo_on_canvas(logo, canvas, show_names, scale) { + "use strict"; + var draw_name, draw_finetext, metrics; + draw_name = (typeof show_names === "boolean" ? show_names : (logo.get_rows() > 1)); + draw_finetext = (logo.fine_text.length > 0); + if (canvas.width !== 0 && canvas.height !== 0) { + return; + } + metrics = new LogoMetrics(canvas.getContext('2d'), + logo.get_xlate_columns(), logo.get_rows(), draw_name, draw_finetext, logo.x_axis, logo.y_axis); + if (typeof scale == "number") { + //resize the canvas to fit the scaled logo + canvas.width = metrics.summed_width * scale; + canvas.height = metrics.summed_height * scale; + } else { + if (canvas.width === 0 && canvas.height === 0) { + canvas.width = metrics.summed_width; + canvas.height = metrics.summed_height; + } else if (canvas.width === 0) { + canvas.width = metrics.summed_width * (canvas.height / metrics.summed_height); + } else if (canvas.height === 0) { + canvas.height = metrics.summed_height * (canvas.width / metrics.summed_width); + } + } +} + +function draw_logo_on_canvas(logo, canvas, show_names, scale) { + "use strict"; + var i, draw_name, draw_finetext, ctx, metrics, raster, pspm_i, pspm, + offset, col_index, motif_position, ssc; + ssc = false; + draw_name = (typeof show_names === "boolean" ? show_names : (logo.get_rows() > 1)); + draw_finetext = (logo.fine_text.length > 0); + ctx = canvas.getContext('2d'); + //assume that the user wants the canvas scaled equally so calculate what the best width for this image should be + metrics = new LogoMetrics(ctx, logo.get_xlate_columns(), logo.get_rows(), draw_name, draw_finetext, logo.x_axis, logo.y_axis); + if (typeof scale == "number") { + //resize the canvas to fit the scaled logo + canvas.width = metrics.summed_width * scale; + canvas.height = metrics.summed_height * scale; + } else { + if (canvas.width === 0 && canvas.height === 0) { + scale = 1; + canvas.width = metrics.summed_width; + canvas.height = metrics.summed_height; + } else if (canvas.width === 0) { + scale = canvas.height / metrics.summed_height; + canvas.width = metrics.summed_width * scale; + } else if (canvas.height === 0) { + scale = canvas.width / metrics.summed_width; + canvas.height = metrics.summed_height * scale; + } else { + scale = Math.min(canvas.width / metrics.summed_width, canvas.height / metrics.summed_height); + } + } + // cache the raster based on the assumption that we will be drawing a lot + // of logos the same size and alphabet + if (typeof draw_logo_on_canvas.raster_cache === "undefined") { + draw_logo_on_canvas.raster_cache = []; + } + for (i = 0; i < draw_logo_on_canvas.raster_cache.length; i++) { + raster = draw_logo_on_canvas.raster_cache[i]; + if (raster.get_alphabet().equals(logo.alphabet) && + Math.abs(raster.get_scale() - scale) < 0.1) break; + raster = null; + } + if (raster == null) { + raster = new RasterizedAlphabet(logo.alphabet, scale, metrics.stack_font, metrics.stack_width); + draw_logo_on_canvas.raster_cache.push(raster); + } + ctx = canvas.getContext('2d'); + ctx.save();//s1 + ctx.scale(scale, scale); + ctx.save();//s2 + ctx.save();//s7 + //create margin + ctx.translate(Math.round(metrics.pad_left), Math.round(metrics.pad_top)); + for (pspm_i = 0; pspm_i < logo.get_rows(); ++pspm_i) { + pspm = logo.get_pspm(pspm_i); + offset = logo.get_offset(pspm_i); + //optionally draw name if this isn't the last row or is the only row + if (draw_name && (logo.get_rows() == 1 || pspm_i != (logo.get_rows()-1))) { + ctx.save();//s4 + ctx.translate(Math.round(metrics.summed_width/2), Math.round(metrics.name_height)); + ctx.font = metrics.name_font; + ctx.textAlign = "center"; + ctx.fillText(pspm.name, 0, 0); + ctx.restore();//s4 + ctx.translate(0, Math.round(metrics.name_height + + Math.min(0, metrics.name_spacer - metrics.y_num_height/2))); + } + //draw scale + if (logo.y_axis) draw_scale(ctx, metrics, logo.alphabet.get_ic(), raster); + ctx.save();//s5 + //translate across past the scale + if (logo.y_axis) { + ctx.translate(Math.round(metrics.y_label_height + metrics.y_label_spacer + + metrics.y_num_width + metrics.y_tic_width), Math.round(metrics.y_num_height / 2)); + } + //draw the trimming background + if (pspm.get_left_trim() > 0 || pspm.get_right_trim() > 0) { + var left_start = offset * logo.get_xlate_nsyms(); + var left_end = (offset + pspm.get_left_trim()) * logo.get_xlate_nsyms(); + var left_divider = true; + if (left_end < logo.get_xlate_start() || left_start > logo.get_xlate_end()) { + // no overlap + left_start = 0; + left_end = 0; + left_divider = false; + } else { + if (left_start < logo.get_xlate_start()) { + left_start = logo.get_xlate_start(); + } + if (left_end > logo.get_xlate_end()) { + left_end = logo.get_xlate_end(); + left_divider = false; + } + left_start -= logo.get_xlate_start(); + left_end -= logo.get_xlate_start(); + if (left_end < left_start) { + left_start = 0; + left_end = 0; + left_divider = false; + } + } + var right_end = (offset + pspm.get_motif_length()) * logo.get_xlate_nsyms(); + //var right_start = right_end - (pspm.get_left_trim() * logo.get_xlate_nsyms()); + var right_start = right_end - (pspm.get_right_trim() * logo.get_xlate_nsyms()); + var right_divider = true; + if (right_end < logo.get_xlate_start() || right_start > logo.get_xlate_end()) { + // no overlap + right_start = 0; + right_end = 0; + right_divider = false; + } else { + if (right_start < logo.get_xlate_start()) { + right_start = logo.get_xlate_start(); + right_divider = false; + } + if (right_end > logo.get_xlate_end()) { + right_end = logo.get_xlate_end(); + } + right_start -= logo.get_xlate_start(); + right_end -= logo.get_xlate_start(); + if (right_end < right_start) { + right_start = 0; + right_end = 0; + right_divider = false; + } + } + draw_trim_background(ctx, metrics, left_start, left_end, left_divider, right_start, right_end, right_divider); + } + //draw letters + var xlate_col; + for (xlate_col = logo.get_xlate_start(); xlate_col < logo.get_xlate_end(); xlate_col++) { + ctx.translate(metrics.stack_pad_left,0); + col_index = Math.floor(xlate_col / logo.get_xlate_nsyms()); + if (xlate_col % logo.get_xlate_nsyms() == 0) { + if (col_index >= offset && col_index < (offset + pspm.get_motif_length())) { + motif_position = col_index - offset; + draw_stack_num(ctx, metrics, motif_position, raster); + draw_stack(ctx, metrics, pspm.get_stack(motif_position, logo.alphabet, ssc), raster); + } + } else { + if (col_index >= offset && col_index < (offset + pspm.get_motif_length())) { + ctx.save();// s5.1 + ctx.translate(0, Math.round(metrics.stack_height)); + // TODO draw a dot or dash or something to indicate continuity of the motif + ctx.restore(); //s5.1 + } + } + ctx.translate(Math.round(metrics.stack_width), 0); + } + ctx.restore();//s5 + ////optionally draw name if this is the last row but isn't the only row + if (draw_name && (logo.get_rows() != 1 && pspm_i == (logo.get_rows()-1))) { + //translate vertically past the stack and axis's + ctx.translate(0, metrics.y_num_height/2 + metrics.stack_height + + Math.max(metrics.y_num_height/2, metrics.x_num_above + metrics.x_num_width + metrics.name_spacer)); + + ctx.save();//s6 + ctx.translate(metrics.summed_width/2, metrics.name_height); + ctx.font = metrics.name_font; + ctx.textAlign = "center"; + ctx.fillText(pspm.name, 0, 0); + ctx.restore();//s6 + ctx.translate(0, metrics.name_height); + } else { + //translate vertically past the stack and axis's + ctx.translate(0, metrics.y_num_height/2 + metrics.stack_height + + Math.max(metrics.y_num_height/2, metrics.x_num_above + metrics.x_num_width)); + } + //if not the last row then add middle padding + if (pspm_i != (logo.get_rows() -1)) { + ctx.translate(0, metrics.pad_middle); + } + } + ctx.restore();//s7 + if (logo.fine_text.length > 0) { + ctx.translate(metrics.summed_width - metrics.pad_right, metrics.summed_height - metrics.pad_bottom); + ctx.font = metrics.fine_txt_font; + ctx.textAlign = "right"; + ctx.fillText(logo.fine_text, 0,0); + } + ctx.restore();//s2 + ctx.restore();//s1 +} + +function create_canvas(c_width, c_height, c_id, c_title, c_display) { + "use strict"; + var canvas = document.createElement("canvas"); + //check for canvas support before attempting anything + if (!canvas.getContext) { + return null; + } + var ctx = canvas.getContext('2d'); + //check for html5 text drawing support + if (!supports_text(ctx)) { + return null; + } + //size the canvas + canvas.width = c_width; + canvas.height = c_height; + canvas.id = c_id; + canvas.title = c_title; + canvas.style.display = c_display; + return canvas; +} + +function logo_1(alphabet, fine_text, pspm) { + "use strict"; + var logo = new Logo(alphabet, fine_text); + logo.add_pspm(pspm); + return logo; +} + +function logo_2(alphabet, fine_text, target, query, query_offset) { + "use strict"; + var logo = new Logo(alphabet, fine_text); + if (query_offset < 0) { + logo.add_pspm(target, -query_offset); + logo.add_pspm(query); + } else { + logo.add_pspm(target); + logo.add_pspm(query, query_offset); + } + return logo; +} + +/* + * Specifies an alternate source for an image. + * If the image with the image_id specified has + * not loaded then a generated logo will be used + * to replace it. + * + * Note that the image must either have dimensions + * or a scale must be set. + */ +function alternate_logo(logo, image_id, scale) { + "use strict"; + var image = document.getElementById(image_id); + if (!image) { + alert("Can't find specified image id (" + image_id + ")"); + return; + } + //if the image has loaded then there is no reason to use the canvas + if (image_ok(image)) { + return; + } + //the image has failed to load so replace it with a canvas if we can. + var canvas = create_canvas(image.width, image.height, image_id, image.title, image.style.display); + if (canvas === null) { + return; + } + //draw the logo on the canvas + draw_logo_on_canvas(logo, canvas, null, scale); + //replace the image with the canvas + image.parentNode.replaceChild(canvas, image); +} + +/* + * Specifes that the element with the specified id + * should be replaced with a generated logo. + */ +function replace_logo(logo, replace_id, scale, title_txt, display_style) { + "use strict"; + var element = document.getElementById(replace_id); + if (!replace_id) { + alert("Can't find specified id (" + replace_id + ")"); + return; + } + //found the element! + var canvas = create_canvas(50, 120, replace_id, title_txt, display_style); + if (canvas === null) { + return; + } + //draw the logo on the canvas + draw_logo_on_canvas(logo, canvas, null, scale); + //replace the element with the canvas + element.parentNode.replaceChild(canvas, element); +} + +/* + * Fast string trimming implementation found at + * http://blog.stevenlevithan.com/archives/faster-trim-javascript + * + * Note that regex is good at removing leading space but + * bad at removing trailing space as it has to first go through + * the whole string. + */ +function trim (str) { + "use strict"; + var ws, i; + str = str.replace(/^\s\s*/, ''); + ws = /\s/; i = str.length; + while (ws.test(str.charAt(--i))); + return str.slice(0, i + 1); +} +</script> + <script> + +// PRIVATE GLOBAL (uhoh) +var _block_colour_lookup = {}; + +function block_colour(index) { + function hsl2rgb(hue, saturation, lightness) { + "use strict"; + function _hue(p, q, t) { + "use strict"; + if (t < 0) t += 1; + else if (t > 1) t -= 1; + if (t < (1.0 / 6.0)) { + return p + ((q - p) * 6.0 * t); + } else if (t < 0.5) { + return q; + } else if (t < (2.0 / 3.0)) { + return p + ((q - p) * ((2.0 / 3.0) - t) * 6.0); + } else { + return p; + } + } + function _pad_hex(value) { + var hex = Math.round(value * 255).toString(16); + if (hex.length < 2) hex = "0" + hex; + return hex; + } + var r, g, b, p, q; + if (saturation == 0) { + // achromatic (grayscale) + r = lightness; + g = lightness; + b = lightness; + } else { + if (lightness < 0.5) { + q = lightness * (1 + saturation); + } else { + q = lightness + saturation - (lightness * saturation); + } + p = (2 * lightness) - q; + r = _hue(p, q, hue + (1.0 / 3.0)); + g = _hue(p, q, hue); + b = _hue(p, q, hue - (1.0 / 3.0)); + } + return "#" + _pad_hex(r) + _pad_hex(g) + _pad_hex(b); + } + if (typeof index !== "number" || index % 1 !== 0 || index < 0) return "#000000"; + // check for override + if (_block_colour_lookup[index] == null) { + var start = 0; //red + var sat = 100; + var light = 50; + var divisions = 1 << Math.ceil(Math.log(index + 1) / Math.LN2); + hue = start + (360 / divisions) * ((index - (divisions >> 1)) * 2 + 1); + // colour input fields only support values in the form #RRGGBB + _block_colour_lookup[index] = hsl2rgb(hue / 360, sat / 100, light / 100); + } + return _block_colour_lookup[index]; +} + +function set_block_colour(index, new_colour) { + _block_colour_lookup[index] = new_colour; + var blocks = document.querySelectorAll("div.block_motif[data-colour-index=\"" + index + "\"]"); + var i; + for (i = 0; i < blocks.length; i++) { + blocks[i].style.backgroundColor = new_colour; + } + var swatches = document.querySelectorAll("div.legend_swatch[data-colour-index=\"" + index + "\"]"); + var picker; + for (i = 0; i < swatches.length; i++) { + swatches[i].style.backgroundColor = new_colour; + picker = swatches[i].querySelector("input[type=\"color\"]"); + if (picker != null) picker.value = new_colour; + } +} + +function make_block_legend_entry(motif_name, motif_colour_index) { + if (typeof make_block_legend_entry.has_colour_picker !== "boolean") { + // test if colour picker is supported, based off Modernizer + // see http://stackoverflow.com/a/7787648/66387 + make_block_legend_entry.has_colour_picker = (function() { + var doc_ele = document.documentElement; + // We first check to see if the type we give it sticks.. + var input_ele = document.createElement('input'); + input_ele.setAttribute('type', 'color'); + var value_ok = input_ele.type !== 'text'; + if (value_ok) { + // If the type does, we feed it a textual value, which shouldn't be valid. + // If the value doesn't stick, we know there's input sanitization which infers a custom UI + var smile = ':)'; + input_ele.value = smile; + input_ele.style.cssText = 'position:absolute;visibility:hidden;'; + // chuck into DOM and force reflow for Opera bug in 11.00 + // github.com/Modernizr/Modernizr/issues#issue/159 + doc_ele.appendChild(input_ele); + doc_ele.offsetWidth; + value_ok = input_ele.value != smile; + doc_ele.removeChild(input_ele); + } + return value_ok; + })(); + } + var entry = document.createElement("div"); + entry.className = "legend_entry"; + var swatch; + swatch = document.createElement("div"); + swatch.className = "legend_swatch"; + swatch.setAttribute("data-colour-index", motif_colour_index); + swatch.style.backgroundColor = block_colour(motif_colour_index); + if (make_block_legend_entry.has_colour_picker) { + var picker = document.createElement("input"); + picker.type = "color"; + picker.value = block_colour(motif_colour_index); + picker.addEventListener("change", function(e) { + set_block_colour(motif_colour_index, picker.value); + }, false); + swatch.addEventListener("click", function(e) { + picker.click(); + }, false); + swatch.appendChild(picker); + } + entry.appendChild(swatch); + var name = document.createElement("div"); + name.className = "legend_text"; + name.appendChild(document.createTextNode(motif_name)); + entry.appendChild(name); + return entry; +} + +function make_block_ruler(max_len) { + var container = document.createElement("div"); + container.className = "block_container"; + var step; + if (max_len < 50) { + step = 1; + } else if (max_len < 100) { + step = 2; + } else if (max_len < 200) { + step = 4; + } else if (max_len < 500) { + step = 10; + } else if (max_len < 1000) { + step = 20; + } else if (max_len < 2000) { + step = 40; + } else if (max_len < 5000) { + step = 100; + } else if (max_len < 10000) { + step = 200; + } else if (max_len < 20000) { + step = 400; + } else { + step = Math.floor(max_len / 20000) * 400; + } + var peroid; + if (max_len < 10) { + peroid = 1; + } else if (max_len < 20) { + peroid = 2; + } else { + peroid = 5; + } + var i, cycle, offset, tic, label; + for (i = 0, cycle = 0; i < max_len; i += step, cycle = (cycle + 1) % peroid) { + offset = "" + ((i / max_len) * 100) + "%"; + tic = document.createElement("div"); + tic.style.left = offset; + tic.className = (cycle == 0 ? "tic_major" : "tic_minor"); + container.appendChild(tic); + if (cycle == 0) { + label = document.createElement("div"); + label.className = "tic_label"; + label.style.left = offset; + label.appendChild(document.createTextNode(i)); + container.appendChild(label); + } + } + return container; +} + +function _calculate_block_needle_drag_pos(e, data) { + var mouse; + e = e || window.event; + if (e.pageX || ev.pageY) { + mouse = {"x": e.pageX, "y": e.pageY}; + } else { + mouse = { + x:e.clientX + document.body.scrollLeft - document.body.clientLeft, + y:e.clientY + document.body.scrollTop - document.body.clientTop + }; + } + var cont = data.container; + var dragable_length = cont.clientWidth - + (cont.style.paddingLeft ? cont.style.paddingLeft : 0) - + (cont.style.paddingRight ? cont.style.paddingRight : 0); + //I believe that the offset parent is the body + //otherwise I would need to make this recursive + //maybe clientLeft would work, but the explanation of + //it is hard to understand and it apparently doesn't work + //in firefox 2. + var diff = mouse.x - cont.offsetLeft; + if (diff < 0) diff = 0; + if (diff > dragable_length) diff = dragable_length; + var pos = Math.round(diff / dragable_length * data.max); + if (pos > data.len) pos = data.len; + return pos; +} + +function _update_block_needle_drag(e, data, done) { + "use strict"; + var pos = _calculate_block_needle_drag_pos(e, data); + // read the needle positions + var left = parseInt(data.llabel.textContent, 10) - data.off - 1; + var right = parseInt(data.rlabel.textContent, 10) - data.off; + // validate needle positions + if (left >= data.len) left = data.len - 1; + if (left < 0) left = 0; + if (right > data.len) right = data.len; + if (right <= left) right = left + 1; + // calculate the new needle positions + if (data.moveboth) { + var size = right - left; + if (data.isleft) { + if ((pos + size) > data.len) pos = data.len - size; + left = pos; + right = pos + size; + } else { + if ((pos - size) < 0) pos = size; + left = pos - size; + right = pos; + } + } else { + if (data.isleft) { + if (pos >= right) pos = right - 1; + left = pos; + } else { + if (pos <= left) pos = left + 1; + right = pos; + } + } + // update the needle positions + data.lneedle.style.left = "" + (left / data.max * 100) + "%"; + data.llabel.textContent = "" + (left + data.off + 1); + data.rneedle.style.left = "" + (right / data.max * 100) + "%"; + data.rlabel.textContent = "" + (right + data.off); + data.handler(left, right, done); +} + +function _make_block_needle_drag_start_handler(isleft, data) { + return function (e) { + data.isleft = isleft; + data.moveboth = !(e.shiftKey); + document.addEventListener("mousemove", data.drag_during, false); + document.addEventListener("mouseup", data.drag_end, false); + }; +} + +function _make_block_needle_drag_end_handler(data) { + return function (e) { + document.removeEventListener("mousemove", data.drag_during, false); + document.removeEventListener("mouseup", data.drag_end, false); + _update_block_needle_drag(e, data, true); + }; +} + +function _make_block_needle_drag_during_handler(data) { + return function (e) { + _update_block_needle_drag(e, data, false); + }; +} + +// private function used by make_block_container +function _make_block_needle(isleft, value, data) { + var vbar = document.createElement('div'); + vbar.className = "block_needle " + (isleft ? "left" : "right"); + vbar.style.left = "" + (value / data.max * 100)+ "%"; + var label = document.createElement('div'); + label.className = "block_handle " + (isleft ? "left" : "right"); + // The needles sit between the sequence positions, so the left one sits at the + // start and the right at the end. This is why 1 is added to the displayed + // value for a left handle as the user doesn't need to know about this detail + label.textContent = "" + (isleft ? value + data.off + 1 : value + data.off); + label.unselectable = "on"; // so IE and Opera don't select the text, others are done in css + label.title = "Drag to move the displayed range. Hold shift and drag to change " + (isleft ? "lower" : "upper") + " bound of the range."; + vbar.appendChild(label); + if (isleft) { + data.lneedle = vbar; + data.llabel = label; + } else { + data.rneedle = vbar; + data.rlabel = label; + } + label.addEventListener("mousedown", _make_block_needle_drag_start_handler(isleft, data), false); + return vbar; +} + +function make_block_container(is_stranded, has_both_strands, max_len, show_len, offset, range_handler) { + offset = (offset != null ? offset : 0); + // make the container for the block diagram + var container = document.createElement("div"); + container.className = "block_container"; + container.setAttribute("data-max", max_len); + container.setAttribute("data-off", offset); + if (is_stranded) { + var plus = document.createElement("div"); + plus.appendChild(document.createTextNode("+")); + plus.className = "block_plus_sym"; + container.appendChild(plus); + if (has_both_strands) { + var minus = document.createElement("div"); + minus.appendChild(document.createTextNode("-")); + minus.className = "block_minus_sym"; + container.appendChild(minus); + } + } + var rule = document.createElement("div"); + rule.className = "block_rule"; + rule.style.width = ((show_len / max_len) * 100) + "%"; + container.appendChild(rule); + if (range_handler != null) { + var range_data = { + "max": max_len, + "len": show_len, + "off": offset, + "handler": range_handler, + "container": container, + "lneedle": null, "llabel": null, + "rneedle": null, "rlabel": null, + "isleft": false, "moveboth" : false + }; + range_data.drag_during = _make_block_needle_drag_during_handler(range_data); + range_data.drag_end = _make_block_needle_drag_end_handler(range_data); + container.appendChild(_make_block_needle(false, 1, range_data)); // add right first so z-index works + container.appendChild(_make_block_needle(true, 0, range_data)); + } + return container; +} + +function make_block_label(container, max_len, pos, length, message) { + "use strict"; + var label = document.createElement("div"); + label.className = "block_label"; + label.style.left = (((pos + (length / 2)) / max_len) * 100) + "%"; + label.appendChild(document.createTextNode(message)); + container.appendChild(label); +} + +function make_block(container, max_len, + site_pos, site_len, site_pvalue, site_rc, site_colour_index, site_secondary) { + "use strict"; + var block_height, block, block_region1, block_region2; + var max_block_height = 12; + var max_pvalue = 1e-10; + // calculate the height of the block + block_height = (site_pvalue < max_pvalue ? max_block_height : + (Math.log(site_pvalue) / Math.log(max_pvalue)) * max_block_height); + if (block_height < 1) block_height = 1; + // create a block to represent the motif + block = document.createElement("div"); + block.className = "block_motif" + (site_secondary ? " scanned_site" : "") + (site_rc ? " bottom" : " top"); + block.style.left = ((site_pos / max_len) * 100) + "%"; + block.style.top = (!site_rc ? max_block_height - block_height : + max_block_height + 1) + "px"; + block.style.width = ((site_len / max_len) * 100) + "%"; + block.style.height = block_height + "px"; + block.style.backgroundColor = block_colour(site_colour_index); + block.setAttribute("data-colour-index", site_colour_index); + // add to container + container.appendChild(block); + var activator = function (e) { + toggle_class(block, "active", true); + var new_e = new e.constructor(e.type, e); + block.dispatchEvent(new_e); + }; + var deactivator = function (e) { + toggle_class(block, "active", false); + var new_e = new e.constructor(e.type, e); + block.dispatchEvent(new_e); + } + // create a larger region to detect mouseover for the block + block_region1 = document.createElement("div"); + block_region1.className = "block_region top" + + (site_secondary ? " scanned_site" : "") + (site_rc ? "" : " main"); + block_region1.style.left = block.style.left; + block_region1.style.width = block.style.width; + block_region1.addEventListener('mouseover', activator, false); + block_region1.addEventListener('mouseout', deactivator, false); + container.appendChild(block_region1); + block_region2 = document.createElement("div"); + block_region2.className = "block_region bottom" + + (site_secondary ? " scanned_site" : "") + (site_rc ? " main" : ""); + block_region2.style.left = block.style.left; + block_region2.style.width = block.style.width; + block_region2.addEventListener('mouseover', activator, false); + block_region2.addEventListener('mouseout', deactivator, false); + container.appendChild(block_region2); + return block; +} + +function set_block_needle_positions(containingNode, start, end) { + var container, lneedle, llabel, rneedle, rlabel, max, off, left, right; + container = (/\bblock_container\b/.test(containingNode.className) ? containingNode : containingNode.querySelector(".block_container")); + max = parseInt(container.getAttribute("data-max"), 10); + off = parseInt(container.getAttribute("data-off"), 10); + left = start - off; + right = end - off; + lneedle = containingNode.querySelector(".block_needle.left"); + llabel = lneedle.querySelector(".block_handle.left"); + rneedle = containingNode.querySelector(".block_needle.right"); + rlabel = rneedle.querySelector(".block_handle.right"); + // update the needle positions + lneedle.style.left = "" + (left / max * 100) + "%"; + llabel.textContent = "" + (left + off + 1); + rneedle.style.left = "" + (right / max * 100) + "%"; + rlabel.textContent = "" + (right + off); +} + +function get_block_needle_positions(containingNode) { + var container, llabel, rlabel, max, off, left, right; + container = (/\bblock_container\b/.test(containingNode.className) ? containingNode : containingNode.querySelector(".block_container")); + max = parseInt(container.getAttribute("data-max"), 10); + off = parseInt(container.getAttribute("data-off"), 10); + llabel = containingNode.querySelector(".block_needle.left > .block_handle.left"); + rlabel = containingNode.querySelector(".block_needle.right > .block_handle.right"); + left = parseInt(llabel.textContent, 10) - off - 1; + right = parseInt(rlabel.textContent, 10) - off; + return {"start": left + off, "end": right + off}; +} +</script> + <script> +function make_alpha_bg_table(alph, freqs) { + function colour_symbol(index) { + var span = document.createElement("span"); + span.appendChild(document.createTextNode(alph.get_symbol(index))); + span.style.color = alph.get_colour(index); + span.className = "alpha_symbol"; + return span; + } + var table, thead, tbody, row, th, span, i; + // create table + table = document.createElement("table"); + table.className = "alpha_bg_table"; + // create header + thead = document.createElement("thead"); + table.appendChild(thead); + row = thead.insertRow(thead.rows.length); + if (alph.has_complement()) { + add_text_header_cell(row, "Name", "pop_alph_name"); + if (freqs != null) add_text_header_cell(row, "Freq.", "pop_alph_freq"); + if (alph.has_bg()) add_text_header_cell(row, "Bg.", "pop_alph_bg"); + add_text_header_cell(row, ""); + add_text_header_cell(row, ""); + add_text_header_cell(row, ""); + if (alph.has_bg()) add_text_header_cell(row, "Bg.", "pop_alph_bg"); + if (freqs != null) add_text_header_cell(row, "Freq.", "pop_alph_freq"); + add_text_header_cell(row, "Name", "pop_alph_name"); + } else { + add_text_header_cell(row, ""); + add_text_header_cell(row, "Name", "pop_alph_name"); + if (freqs != null) add_text_header_cell(row, "Freq.", "pop_alph_freq"); + if (alph.has_bg()) add_text_header_cell(row, "Bg.", "pop_alph_bg"); + } + // add alphabet entries + tbody = document.createElement("tbody"); + table.appendChild(tbody); + if (alph.has_complement()) { + for (i = 0; i < alph.get_size_core(); i++) { + var c = alph.get_complement(i); + if (i > c) continue; + row = tbody.insertRow(tbody.rows.length); + add_text_cell(row, alph.get_name(i)); + if (freqs != null) add_text_cell(row, "" + freqs[i].toFixed(3)); + if (alph.has_bg()) add_text_cell(row, "" + alph.get_bg_freq(i).toFixed(3)); + add_cell(row, colour_symbol(i)); + add_text_cell(row, "~"); + add_cell(row, colour_symbol(c)); + if (alph.has_bg()) add_text_cell(row, "" + alph.get_bg_freq(c).toFixed(3)); + if (freqs != null) add_text_cell(row, "" + freqs[c].toFixed(3)); + add_text_cell(row, alph.get_name(c)); + } + } else { + for (i = 0; i < alph.get_size_core(); i++) { + row = tbody.insertRow(tbody.rows.length); + add_cell(row, colour_symbol(i)); + add_text_cell(row, alph.get_name(i)); + if (freqs != null) add_text_cell(row, "" + freqs[i].toFixed(3)); + if (alph.has_bg()) add_text_cell(row, "" + alph.get_bg_freq(i).toFixed(3)); + } + } + return table; +} + +</script> + <script> +var current_motif = 0; +var meme_alphabet = new Alphabet(data.alphabet, data.background.freqs); + +var DelayLogoTask = function(logo, canvas) { + this.logo = logo; + this.canvas = canvas; +}; + +DelayLogoTask.prototype.run = function () { + draw_logo_on_canvas(this.logo, this.canvas, false); +}; + +function motif_pspm(index) { + var motif, pwm, psm, name, ltrim, rtrim, nsites, evalue; + // get motif + motif = data["motifs"][index]; + // get motif paramters + pwm = motif["pwm"]; + psm = motif["psm"]; + name = "" + (index + 1); ltrim = 0; rtrim = 0; + nsites = motif["nsites"]; evalue = motif["evalue"]; + // make pspm + return new Pspm(pwm, name, ltrim, rtrim, nsites, evalue, psm); +} + +function motif_count_matrix(index) { + return motif_pspm(index).as_count_matrix(); +} + +function motif_prob_matrix(index) { + return motif_pspm(index).as_probability_matrix(); +} + +function motif_minimal_meme(index) { + return motif_pspm(index).as_meme({ + "with_header": true, + "with_pspm": true, + "with_pssm": true, + "version": data["version"], + "alphabet": meme_alphabet, + "strands": (meme_alphabet.has_complement() && data.options.revcomp ? 2 : 1) + }); +} + +function motif_fasta(index) { + "use strict"; + var motif, sites, site, seq, sequences, sequence, i, num, counter, out; + counter = {}; + sequences = data["sequence_db"]["sequences"]; + motif = data["motifs"][index]; + sites = motif["sites"]; + out = ""; + for (i = 0; i < sites.length; i++) { + site = sites[i]; + seq = site["seq"]; + sequence = sequences[seq]; + counter[seq] = (num = counter[seq]) ? (++num) : (num = 1); // inc counter + if (i !== 0) {out += "\n";} + out += ">" + sequence["name"] + "_site_" + num + " offset= " + site["pos"] + + (site["rc"] ? " RC\n" : "\n"); + out += site["match"]; + } + return out; +} + +function motif_raw(index) { + "use strict"; + var sites, i, out; + sites = data["motifs"][index]["sites"]; + out = ""; + for (i = 0; i < sites.length; i++) { + if (i !== 0) {out += "\n";} + out += sites[i]["match"]; + } + return out; +} + +function clone_template(template) { + "use strict"; + var node, help_btns, i, button; + node = $(template).cloneNode(true); + toggle_class(node, "template", false); + node.id = ""; + help_btns = node.querySelectorAll(".help"); + for (i = 0; i < help_btns.length; i++) { + button = help_btns[i]; + if (button.hasAttribute("data-topic")) { + button.tabIndex = "0"; + button.addEventListener("click", __toggle_help, false); + button.addEventListener("keydown", __toggle_help, false); + } + } + return node; +} + +function set_tvar(template, tvar, value) { + var node; + node = find_child(template, tvar); + if (node === null) { + throw new Error("Template does not contain variable " + tvar); + } + node.innerHTML = ""; + if (typeof value !== "object") { + node.appendChild(document.createTextNode(value)); + } else { + node.appendChild(value); + } +} + +function make_logo(alphabet, pspm, rc, offset, className) { + if (rc) pspm = pspm.copy().reverse_complement(alphabet); + var logo = new Logo(alphabet, ""); + logo.add_pspm(pspm, offset); + var canvas = document.createElement('canvas'); + canvas.height = 50; + canvas.width = 0; + canvas.className = className; + size_logo_on_canvas(logo, canvas, false); + add_draw_task(canvas, new DelayLogoTask(logo, canvas)); + return canvas; +} + +function make_small_logo(alphabet, pspm, options) { + if (typeof options === "undefined") options = {}; + if (options.rc) pspm = pspm.copy().reverse_complement(alphabet); + var logo = new Logo(alphabet, {x_axis: false, y_axis: false}); + logo.add_pspm(pspm, (typeof options.offset === "number" ? options.offset : 0)); + var canvas = document.createElement('canvas'); + if (typeof options.className === "string") canvas.className = options.className; + if (typeof options.width === "number" && options.width > 0) { + canvas.height = 0; + canvas.width = options.width; + draw_logo_on_canvas(logo, canvas, false); + } else { + draw_logo_on_canvas(logo, canvas, false, 1/3); + } + return canvas; +} + +function make_large_logo(alphabet, pspm, rc, offset, className) { + if (rc) pspm = pspm.copy().reverse_complement(alphabet); + var logo = new Logo(alphabet, ""); + logo.add_pspm(pspm, offset); + var canvas = document.createElement('canvas'); + canvas.height = 200; + canvas.width = 0; + canvas.className = className; + size_logo_on_canvas(logo, canvas, false); + add_draw_task(canvas, new DelayLogoTask(logo, canvas)); + return canvas; +} + +function make_sym_btn(symbol, title, action) { + var box; + box = document.createElement("div"); + box.tabIndex = 0; + box.className = "sym_btn"; + box.appendChild(document.createTextNode(symbol)); + box.title = title; + box.addEventListener('click', action, false); + box.addEventListener('keydown', action, false); + return box; +} + +function make_seq(alphabet, seq) { + var i, j, letter, lbox, sbox; + sbox = document.createElement("span"); + for (i = 0; i < seq.length; i = j) { + letter = seq.charAt(i); + for (j = i+1; j < seq.length; j++) { + if (seq.charAt(j) !== letter) { + break; + } + } + lbox = document.createElement("span"); + lbox.style.color = alphabet.get_colour(alphabet.get_index(letter)); + lbox.appendChild(document.createTextNode(seq.substring(i, j))); + sbox.appendChild(lbox); + } + return sbox; +} + +// +// make_pv_text +// +// Returns the string p-value, with the p italicised. +/// +function make_pv_text() { + var pv_text = document.createElement("span"); + var pv_italic_text = document.createElement("span"); + pv_italic_text.appendChild(document.createTextNode("p")); + pv_italic_text.style.fontStyle = "italic"; + pv_text.appendChild(pv_italic_text); + pv_text.appendChild(document.createTextNode("-value")); + return pv_text; +} + +function append_site_entries(tbody, motif, site_index, count) { + "use strict"; + var i, end; + var sites, site, sequences, sequence; + var rbody; + if (typeof count !== "number") { + count = 20; + } + sequences = data["sequence_db"]["sequences"]; + sites = motif["sites"]; + end = Math.min(site_index + count, sites.length); + for (i = site_index; i < end; i++) { + site = sites[i]; + sequence = sequences[site["seq"]]; + + rbody = tbody.insertRow(tbody.rows.length); + add_text_cell(rbody, "" + (site["seq"] + 1) + ".", "site_num"); + add_text_cell(rbody, sequence["name"], "site_name"); + add_text_cell(rbody, site["rc"] ? "-" : "+", "site_strand"); + add_text_cell(rbody, site["pos"] + 1, "site_start"); + add_text_cell(rbody, site["pvalue"].toExponential(2), "site_pvalue"); + add_text_cell(rbody, site["lflank"], "site lflank"); + add_cell(rbody, make_seq(meme_alphabet, site["match"]), "site match"); + add_text_cell(rbody, site["rflank"], "site rflank"); + } + return i; +} + +function make_site_entries() { + "use strict"; + var region; + region = this; + if (region.data_site_index >= region.data_motif["sites"].length) { + // all sites created + region.removeEventListener('scroll', make_site_entries, false); + return; + } + // if there's still 100 pixels to scroll than don't do anything yet + if (region.scrollHeight - (region.scrollTop + region.offsetHeight) > 100) { + return; + } + + region.data_site_index = append_site_entries( + find_child(region, "sites_tbl").tBodies[0], + region.data_motif, region.data_site_index, 20 + ); +} + +function make_sites(motif) { + "use strict"; + function add_site_header(row, title, nopad, help_topic, tag_class) { + var div, divcp, th; + th = document.createElement("th"); + div = document.createElement("div"); + div.className = "sites_th_inner"; + if (typeof title !== "object") { + title = document.createTextNode("" + title); + } + div.appendChild(title); + if (help_topic) { + div.appendChild(document.createTextNode("\xA0")); + div.appendChild(help_button(help_topic)); + } + divcp = div.cloneNode(true); + divcp.className = "sites_th_hidden"; + th.appendChild(div); + th.appendChild(divcp); + if (nopad) { + th.className = "nopad"; + } + if (tag_class) { + th.className += " " + tag_class; + } + row.appendChild(th); + } + var outer_tbl, inner_tbl, tbl, thead, tbody, rhead; + + outer_tbl = document.createElement("div"); + outer_tbl.className = "sites_outer"; + + inner_tbl = document.createElement("div"); + inner_tbl.className = "sites_inner"; + outer_tbl.appendChild(inner_tbl); + + tbl = document.createElement("table"); + tbl.className = "sites_tbl"; + inner_tbl.appendChild(tbl); + + thead = document.createElement("thead"); + tbl.appendChild(thead); + tbody = document.createElement("tbody"); + tbl.appendChild(tbody); + + rhead = thead.insertRow(thead.rows.length); + add_site_header(rhead, "", true); + add_site_header(rhead, "Name", false, "pop_seq_name"); + add_site_header(rhead, "Strand", false, "pop_site_strand", "site_strand_title"); + add_site_header(rhead, "Start", false, "pop_site_start"); + add_site_header(rhead, make_pv_text(), false, "pop_site_pvalue"); + add_site_header(rhead, "", false); + add_site_header(rhead, "Sites", true, "pop_site_match"); + add_site_header(rhead, "", false); + + inner_tbl.data_motif = motif; + inner_tbl.data_site_index = append_site_entries(tbody, motif, 0, 20); + if (inner_tbl.data_site_index < motif["sites"].length) { + inner_tbl.addEventListener('scroll', make_site_entries, false); + } + return outer_tbl; +} + +function make_motif_table_entry(row, alphabet, ordinal, motif, colw) { + "use strict"; + function ev_sig(evalue_str) { + "use strict"; + var ev_re, match, sig, exp, num; + ev_re = /^(.*)e(.*)$/; + if (match = ev_re.exec(evalue_str)) { + sig = parseFloat(match[1]); + exp = parseInt(match[2]); + if (exp >= 0) { + return false; + } else if (exp <= -3) { + return true; + } else { + return sig * Math.pow(10, exp) <= 0.05; + } + } + return true; + } + function make_preview(alphabet, motif) { + "use strict"; + var pspm, preview, preview_rc; + var box, btn_box, logo_box, btn_plus, btn_minus; + if (motif["preview_logo"]) { + preview = motif["preview_logo"]; + preview_rc = motif["preview_logo_rc"]; + } else { + pspm = new Pspm(motif["pwm"]); + preview = make_logo(alphabet, pspm); + motif["preview_logo"] = preview; + if (alphabet.has_complement()) { + preview_rc = make_logo(alphabet, pspm, true, 0, "logo_rc"); + motif["preview_logo_rc"] = preview_rc; + } + } + if (preview_rc) { + btn_plus = document.createElement("div"); + btn_plus.appendChild(document.createTextNode("+")); + btn_plus.className = "preview_btn plus"; + btn_plus.tabIndex = "0"; + btn_plus.addEventListener("click", action_btn_rc, false); + btn_plus.addEventListener("keydown", action_btn_rc, false); + btn_minus = document.createElement("div"); + btn_minus.appendChild(document.createTextNode("-")); + btn_minus.className = "preview_btn minus"; + btn_minus.tabIndex = "0"; + btn_minus.addEventListener("click", action_btn_rc, false); + btn_minus.addEventListener("keydown", action_btn_rc, false); + btn_box = document.createElement("div"); + btn_box.className = "preview_btn_box"; + btn_box.appendChild(btn_plus); + btn_box.appendChild(btn_minus); + } + logo_box = document.createElement("div"); + logo_box.className = "preview_logo_box"; + logo_box.appendChild(preview); + if (preview_rc) logo_box.appendChild(preview_rc); + box = document.createElement("div"); + box.className = "preview_box"; + if (preview_rc) box.appendChild(btn_box); + box.appendChild(logo_box); + if (preview_rc) { + if (motif["rc"]) { + btn_minus.className += " active"; + logo_box.className += " show_rc_logo"; + } else { + btn_plus.className += " active"; + } + } + return box; + } + var pspm, preview, preview_rc, c; + row.data_motif = motif; + row.data_ordinal = ordinal; + if (!ev_sig(motif["evalue"])) { + row.style.opacity = 0.4; + } + add_text_cell(row, "" + ordinal + ".", "motif_ordinal"); + add_cell(row, make_preview(alphabet, motif), "motif_logo"); + add_text_cell(row, motif["evalue"], "motif_evalue"); + add_text_cell(row, motif["nsites"], "motif_nsites"); + add_text_cell(row, motif["len"], "motif_width"); + add_cell(row, make_sym_btn("\u21A7", "Show more information.", + action_show_more), "motif_more"); + add_cell(row, + make_sym_btn("\u21E2", + "Submit the motif to another MEME Suite program or download it.", + action_show_outpop), + "motif_submit"); + if (colw) { + for (c = 0; c < row.cells.length; c++) { + row.cells[c].style.minWidth = colw[c] + "px"; + } + } +} + +function make_motifs_table(alphabet, start_ordinal, motifs, colw, stop_reason) { + var i, j; + var tbl, thead, tbody, tfoot, row, preview; + var motif, pspm; + + tbl = document.createElement("table"); + + thead = document.createElement("thead"); + tbl.appendChild(thead); + tbody = document.createElement("tbody"); + tbl.appendChild(tbody); + tfoot = document.createElement("tfoot"); + tbl.appendChild(tfoot); + + row = thead.insertRow(thead.rows.length); + add_text_header_cell(row, "", "", "motif_ordinal"); + add_text_header_cell(row, "Logo", "", "motif_logo"); + add_text_header_cell(row, "E-value", "pop_ev", "motif_evalue"); + add_text_header_cell(row, "Sites", "pop_sites", "motif_nsites"); + add_text_header_cell(row, "Width", "pop_width", "motif_width"); + add_text_header_cell(row, "More", "pop_more", "motif_more"); + add_text_header_cell(row, "Submit/Download", "pop_submit_dl", "motif_submit"); + + for (i = 0; i < motifs.length; i++) { + row = tbody.insertRow(tbody.rows.length); + make_motif_table_entry(row, alphabet, start_ordinal + i, motifs[i], colw); + } + + row = tfoot.insertRow(tfoot.rows.length); + add_text_header_cell(row, stop_reason, "", "stop_reason", "", 6); + + return tbl; +} + +function make_expanded_motif(alphabet, ordinal, motif, less_x, submit_x) { + "use strict"; + var box, pspm, logo_box, large_logo, large_logo_rc, tab_logo, tab_logo_rc; + var btn, offset, norc; + + box = clone_template("tmpl_motif_expanded"); + box.data_motif = motif; + box.data_ordinal = ordinal; + + pspm = new Pspm(motif["pwm"]); + if (typeof motif["rc"] !== "boolean") { + motif["rc"] = false; + } + if (motif["large_logo"]) { + large_logo = motif["large_logo"]; + large_logo_rc = motif["large_logo_rc"]; + } else { + large_logo = make_large_logo(alphabet, pspm, false, 0); + motif["large_logo"] = large_logo; + if (alphabet.has_complement()) { + large_logo_rc = make_large_logo(alphabet, pspm, true, 0, "logo_rc"); + motif["large_logo_rc"] = large_logo_rc; + } + } + norc = (large_logo_rc == null); + toggle_class(box, "norc", norc); + + logo_box = find_child(box, "tvar_logo"); + logo_box.appendChild(large_logo); + if (large_logo_rc) logo_box.appendChild(large_logo_rc); + toggle_class(logo_box, "show_rc_logo", motif["rc"]); + + tab_logo = find_child(box, "tvar_tab"); + tab_logo_rc = find_child(box, "tvar_tab_rc"); + + toggle_class(tab_logo, "activeTab", !motif["rc"]); + toggle_class(tab_logo_rc, "activeTab", motif["rc"]); + + tab_logo.addEventListener('click', action_rc_tab, false); + tab_logo.addEventListener('keydown', action_rc_tab, false); + tab_logo_rc.addEventListener('click', action_rc_tab, false); + tab_logo_rc.addEventListener('keydown', action_rc_tab, false); + + set_tvar(box, "tvar_ordinal", ordinal); + set_tvar(box, "tvar_evalue", motif["evalue"]); + set_tvar(box, "tvar_width", motif["len"]); + set_tvar(box, "tvar_site_count", motif["nsites"]); + set_tvar(box, "tvar_llr", motif["llr"]); + set_tvar(box, "tvar_ic", motif["ic"]); + set_tvar(box, "tvar_re", motif["re"]); + set_tvar(box, "tvar_bt", motif["bt"]); + set_tvar(box, "tvar_sites", make_sites(motif)); + + offset = 32; // 1* 5px padding + 2 * 10px padding + 2 * 2px border + 3px ?? + + btn = find_child(box, "tvar_less"); + btn.style.left = (less_x - offset) + "px"; + btn.addEventListener('click', action_show_less, false); + btn.addEventListener('keydown', action_show_less, false); + btn = find_child(box, "tvar_submit"); + btn.style.left = (submit_x - offset) + "px"; + btn.addEventListener('click', action_show_outpop, false); + btn.addEventListener('keydown', action_show_outpop, false); + return box; +} + + +// +// +/// +function make_motifs() { + "use strict"; + function pixel_value(str_in) { + "use strict"; + var px_re, match; + px_re = /^(\d+)px$/; + if (match = px_re.exec(str_in)) { + return parseInt(match[1], 10); + } + return 0; + } + var container, tbl; + var colw, r, row, c, cell, cell_style, pad_left, pad_right; + + // make the motifs table + container = $("motifs"); + container.innerHTML = ""; // clear content + + tbl = make_motifs_table(meme_alphabet, 1, data["motifs"], colw, data["stop_reason"]); + container.appendChild(tbl); + + // measure table column widths + colw = []; + row = tbl.tBodies[0].rows[0]; + for (c = 0; c < row.cells.length; c++) { + var padLeft, padRight; + cell = row.cells[c]; + cell_style = window.getComputedStyle(cell, null); + pad_left = pixel_value(cell_style.getPropertyValue("padding-left")); + pad_right = pixel_value(cell_style.getPropertyValue("padding-right")); + colw[c] = cell.clientWidth - pad_left - pad_right; + if (typeof colw[c] !== "number" || colw[c] < 0) { + colw[c] = 1; + } + } + + // set minimum table column widths on each row so later when we remove rows it still aligns + for (r = 0; r < tbl.tBodies[0].rows.length; r++) { + row = tbl.tBodies[0].rows[r]; + for (c = 0; c < row.cells.length; c++) { + row.cells[c].style.minWidth = colw[c] + "px"; + } + } + + // store the table column widths so we can create rows latter with the same minimums + container.data_colw = colw; + + // calculate the x offset for the buttons + row = tbl.tBodies[0].rows[0]; + container.data_more_x = coords(find_child(find_child(row, "motif_more"), "sym_btn"))[0]; + container.data_submit_x = coords(find_child(find_child(row, "motif_submit"), "sym_btn"))[0]; + + draw_on_screen(); +} + +function make_meme_block(container, max_seq_len, is_scan, site) { + "use strict"; + var motif = data.motifs[site.motif]; + var block = make_block(container, max_seq_len, site.pos, motif.len, + site.pvalue, site.rc, site.motif, is_scan); + var handler = (is_scan ? + make_scan_popup(site, motif, block) : + make_block_popup(site, motif, block)); + block.addEventListener("mouseover", handler, false); + block.addEventListener("mouseout", handler, false); +} + +function append_blocks_entries(tbody, seq_index, count) { + "use strict"; + var i, end, j; + var max_pvalue, max_block_height, max_seq_len, sequences; + var sequence, sites, scans, scan; + var container, plus, minus, rule, row; + // define some constants + max_seq_len = data.sequence_db.max_length; + // determine how many to load + end = Math.min(seq_index + count, data.sequence_db.sequences.length); + for (i = seq_index; i < end; i++) { + // get the sequence + sequence = data.sequence_db.sequences[i]; + // make the containers for the block diagram + container = make_block_container(meme_alphabet.has_complement(), + data.options.revcomp, max_seq_len, sequence.length); + // create blocks for the motif sites + sites = sequence["sites"]; + for (j = 0; j < sites.length; j++) + make_meme_block(container, max_seq_len, false, sites[j]); + // create blocks for the scanned sites + scan = data.scan[i]; + for (j = 0; j < scan.sites.length; j++) + make_meme_block(container, max_seq_len, true, scan.sites[j]); + // create a row for the sequence + row = tbody.insertRow(tbody.rows.length); + toggle_class(row, "empty_seq", sites.length == 0 && scan.sites.length == 0); + toggle_class(row, "only_scan", sites.length == 0 && scan.sites.length > 0); + add_text_cell(row, (i + 1) + ".", "blockdiag_num"); + add_text_cell(row, sequence["name"], "blockdiag_name"); + add_text_cell(row, scan["pvalue"].toExponential(2), "blockdiag_pvalue"); + add_cell(row, container, "block_td"); + } + return end; +} + +function make_blocks_entries() { + "use strict"; + var region; + region = this; + if (region.data_blocks_index >= data["sequence_db"]["sequences"].length) { + // all sites created + region.removeEventListener('scroll', make_blocks_entries, false); + return; + } + // if there's still 100 pixels to scroll than don't do anything yet + if (region.scrollHeight - (region.scrollTop + region.offsetHeight) > 100) { + return; + } + + region.data_blocks_index = append_blocks_entries( + find_child(region, "blocks_tbl").tBodies[0], + region.data_blocks_index, 20 + ); +} + +function make_blocks() { + "use strict"; + function add_seqs_filter(container, id, checked, label_text, help_topic) { + "use strict"; + var label, radio; + radio = document.createElement("input"); + radio.type = "radio"; + radio.name = "seqs_display"; + radio.id = id; + radio.checked = checked; + radio.addEventListener('click', action_seqs_filter, false); + label = document.createElement("label"); + label.appendChild(document.createTextNode(label_text)); + label.htmlFor = id; + container.appendChild(radio); + container.appendChild(label); + if (help_topic) { + container.appendChild(document.createTextNode("\xA0")); + container.appendChild(help_button(help_topic)); + } + } + function add_blocks_header(row, title, nopad, help_topic) { + "use strict"; + var div, divcp, th; + th = document.createElement("th"); + div = document.createElement("div"); + div.className = "blocks_th_inner"; + if (typeof title !== "object") { + title = document.createTextNode("" + title); + } + div.appendChild(title); + if (help_topic) { + div.appendChild(document.createTextNode("\xA0")); + div.appendChild(help_button(help_topic)); + } + divcp = div.cloneNode(true); + divcp.className = "blocks_th_hidden"; + th.appendChild(div); + th.appendChild(divcp); + if (nopad) { + th.className = "nopad"; + } + row.appendChild(th); + } + var container; + var page, view_height, outer_tbl, inner_tbl, tbl, thead, tbody, rhead; + var in_view, i, seq_count; + + page = (document.compatMode === "CSS1Compat") ? document.documentElement : document.body; + view_height = Math.max(page.clientHeight - 300, 300); + + container = $("blocks"); + toggle_class(container, "hide_empty_seqs", true); + toggle_class(container, "hide_only_scan", true); + container.innerHTML = ""; + add_seqs_filter(container, "rdo_sites_only", true, "Only Motif Sites", "pop_motif_sites"); + add_seqs_filter(container, "rdo_sites_and_scan", false, "Motif Sites+Scanned Sites", "pop_scanned_sites"); + add_seqs_filter(container, "rdo_all_seqs", false, "All Sequences", "pop_all_sequences"); + + outer_tbl = document.createElement("div"); + outer_tbl.className = "blocks_outer"; + + inner_tbl = document.createElement("div"); + inner_tbl.id = "blocks_scroll"; + inner_tbl.className = "blocks_inner"; + inner_tbl.style.maxHeight = view_height + "px"; + outer_tbl.appendChild(inner_tbl); + + tbl = document.createElement("table"); + tbl.className = "blocks_tbl"; + inner_tbl.appendChild(tbl); + + thead = document.createElement("thead"); + tbl.appendChild(thead); + tbody = document.createElement("tbody"); + tbl.appendChild(tbody); + + rhead = thead.insertRow(thead.rows.length); + add_blocks_header(rhead, "", true); + add_blocks_header(rhead, "Name", false, "pop_seq_name"); + add_blocks_header(rhead, make_pv_text(), false, "pop_seq_pvalue"); + add_blocks_header(rhead, "Motif Location", false, "pop_motif_location"); + + container.appendChild(outer_tbl); + + + seq_count = data["sequence_db"]["sequences"].length; + in_view = Math.max(Math.ceil(view_height / 25), 1); + i = append_blocks_entries(tbody, 0, in_view); + + while (i < seq_count && inner_tbl.scrollHeight - (inner_tbl.scrollTop + inner_tbl.offsetHeight) < 400) { + i = append_blocks_entries(tbody, i, 20); + } + inner_tbl.data_blocks_index = i; + if (i < seq_count) { + inner_tbl.addEventListener('scroll', make_blocks_entries, false); + } +} + +function make_scan_popup(site, motif) { + return function (e) { + "use strict"; + var pop, xy, padding, edge_padding, pop_left, pop_top, page_width; + var lflank, match, rflank, pspm; + if (!e) var e = window.event; + pop = make_scan_popup.pop; + if (e.type === "mouseover") { + if (pop) return; + pop = clone_template("tmpl_scan_info"); + pspm = new Pspm(motif.pwm); + if (site.rc) pspm.reverse_complement(meme_alphabet); + set_tvar(pop, "tvar_logo", make_small_logo(meme_alphabet, pspm, {"className": "scan_logo"})); + set_tvar(pop, "tvar_motif", motif.id); + set_tvar(pop, "tvar_pvalue", site.pvalue.toExponential(2)); + set_tvar(pop, "tvar_start", site.pos + 1); + set_tvar(pop, "tvar_end", site.pos + motif.len); + + document.body.appendChild(pop); + position_popup(this, pop); + make_scan_popup.pop = pop; + } else if (e.type === "mouseout") { + if (pop) { + pop.parentNode.removeChild(pop); + make_scan_popup.pop = null; + } + } + }; +} + +function make_block_popup(site, motif, block) { + return function (e) { + "use strict"; + var pop; + var lflank, match, rflank, pspm, ruler, match_seq, match_width; + if (!e) var e = window.event; + pop = make_block_popup.pop; + if (e.type === "mouseover") { + if (pop) return; + pop = clone_template("tmpl_block_info"); + pspm = new Pspm(motif.pwm); + if (site.rc) { // must be dna + pspm.reverse_complement(meme_alphabet); + lflank = meme_alphabet.invcomp_seq(site.rflank); + match = meme_alphabet.invcomp_seq(site.match); + rflank = meme_alphabet.invcomp_seq(site.lflank); + } else { + lflank = site.lflank; + match = site.match; + rflank = site.rflank; + } + ruler = document.getElementById("measure_match"); + match_seq = make_seq(meme_alphabet, match); + ruler.innerHTML = ""; + ruler.appendChild(match_seq); + match_width = ruler.clientWidth; + ruler.removeChild(match_seq); + set_tvar(pop, "tvar_lflank", lflank); + set_tvar(pop, "tvar_match", match_seq); + set_tvar(pop, "tvar_rflank", rflank); + set_tvar(pop, "tvar_logo_pad", lflank); + set_tvar(pop, "tvar_logo", make_small_logo(meme_alphabet, pspm, {"width": match_width})); + set_tvar(pop, "tvar_motif", motif.id); + set_tvar(pop, "tvar_pvalue", site.pvalue.toExponential(2)); + set_tvar(pop, "tvar_start", site.pos + 1); + set_tvar(pop, "tvar_end", site.pos + motif.len); + + document.body.appendChild(pop); + position_popup(block, pop); + make_block_popup.pop = pop; + } else if (e.type === "mouseout") { + if (pop) { + pop.parentNode.removeChild(pop); + make_block_popup.pop = null; + } + } + }; +} + +function update_outpop_format(index) { + switch(parseInt($("text_format").value)) { + case 0: // count matrix + $("outpop_text").value = motif_count_matrix(index); + $("text_name").value = "motif_" + (index + 1) + "_counts.txt"; + break; + case 1: // prob matrix + $("outpop_text").value = motif_prob_matrix(index); + $("text_name").value = "motif_" + (index + 1) + "_freqs.txt"; + break; + case 2: // minimal meme + $("outpop_text").value = motif_minimal_meme(index); + $("text_name").value = "motif_" + (index + 1) + ".txt"; + break; + case 3: // fasta + $("outpop_text").value = motif_fasta(index); + $("text_name").value = "motif_" + (index + 1) + "_fasta.txt"; + break; + case 4: // raw + $("outpop_text").value = motif_raw(index); + $("text_name").value = "motif_" + (index + 1) + "_raw.txt"; + break; + default: + throw new Error("Unknown motif format"); + } +} + +function update_outpop_motif(index) { + "use strict"; + var motifs, motif, pspm, logo, canvas, num; + motifs = data["motifs"]; + if (index < 0 || index >= motifs.length) {return;} + current_motif = index; + motif = motifs[index]; + pspm = new Pspm(motif["pwm"]); + logo = new Logo(meme_alphabet, ""); + logo.add_pspm(pspm, 0); + canvas = $("outpop_logo"); + canvas.width = canvas.width; // clear canvas + draw_logo_on_canvas(logo, canvas, false); + if (meme_alphabet.has_complement()) { + pspm.reverse_complement(meme_alphabet); + logo = new Logo(meme_alphabet, ""); + canvas = $("outpop_logo_rc"); + canvas.width = canvas.width; // clear canvas + draw_logo_on_canvas(logo, canvas, false); + } + num = $("outpop_num"); + num.innerHTML = ""; + num.appendChild(document.createTextNode("" + (index + 1))); + update_outpop_format(index); +} + +// +// action_show_more +// +// Show more information on the motif. +/// +function action_show_more(e) { + var node, tr, tbody, table, container, motif, ordinal; + var expanded_motif; + if (!e) e = window.event; + if (e.type === "keydown") { + if (e.keyCode !== 13 && e.keyCode !== 32) { + return; + } + // stop a submit or something like that + e.preventDefault(); + } + // find the row that contains the cell + node = this; + do { + if (node.tagName === "TR") break; + } while (node = node.parentNode); + if (!node) throw new Error("Expected to find row!?"); + tr = node; + // get info + motif = tr.data_motif; + ordinal = tr.data_ordinal; + // find tbody + do { + if (node.tagName === "TBODY") break; + } while (node = node.parentNode); + if (!node) throw new Error("Expected to find tbody!?"); + tbody = node; + // find table + do { + if (node.tagName === "TABLE") break; + } while (node = node.parentNode); + if (!node) throw new Error("Expected to find table!?"); + table = node; + // find container + container = node.parentNode; + // make a expanded motif + motif["expanded"] = true; + expanded_motif = make_expanded_motif(meme_alphabet, ordinal, motif, + container.data_more_x, container.data_submit_x); + // now determine how to place it + if (tbody.rows.length === 1) { + // only us in the table so the table can be replaced + container.replaceChild(expanded_motif, table); + } else if (tbody.rows[0] === tr) { + // first row, so remove and insert an expanded motif before + table.deleteRow(tr.rowIndex); + container.insertBefore(expanded_motif, table); + } else if (tbody.rows[tbody.rows.length -1] === tr) { + // last row, so remove and insert an expanded motif after + table.deleteRow(tr.rowIndex); + container.insertBefore(expanded_motif, table.nextSibling); + } else { + var table2, tbody2; + table2 = table.cloneNode(false); + table2.appendChild(table.tHead.cloneNode(true)); + tbody2 = table.tBodies[0].cloneNode(false); + table2.appendChild(tbody2); + container.insertBefore(table2, table.nextSibling); + for (i = tbody.rows.length - 1; i >= 0; i--) { + row = tbody.rows[i]; + row.parentNode.removeChild(row); + if (row === tr) { + break; + } + tbody2.insertBefore(row, tbody2.rows[0]); + } + container.insertBefore(expanded_motif, table2); + } + find_child(expanded_motif, "tvar_less").focus(); +} + +// +// action_show_less +// +// Show less information on the motif. +/// +function action_show_less(e) { + var btn; + var expanded_motif, container, motif, ordinal, colw, focus_target; + var table, tbody, tbody2, row, table_before, table_after; + if (!e) e = window.event; + if (e.type === "keydown") { + if (e.keyCode !== 13 && e.keyCode !== 32) { + return; + } + // stop a submit or something like that + e.preventDefault(); + } + btn = this; + // find expanded motif + expanded_motif = find_parent(btn, "expanded_motif"); + if (!expanded_motif) throw new Error("Expected expanded motif."); + // find the container + container = expanded_motif.parentNode; + // get data + motif = expanded_motif.data_motif; + ordinal = expanded_motif.data_ordinal; + colw = container.data_colw; + // get the table before + table_before = expanded_motif.previousSibling; + if (table_before && table_before.tagName !== "TABLE") { + table_before = null; + } + // get the table after + table_after = expanded_motif.nextSibling; + if (table_after && table_after.tagName !== "TABLE") { + table_after = null; + } + // see if there is a table below or above that we can put this in. + // if there is a table both below and above then add this motif and + // all ones below to the above table + motif["expanded"] = false; + if (table_before && table_after) { + tbody = table_before.tBodies[0]; + row = tbody.insertRow(tbody.rows.length); + make_motif_table_entry(row, meme_alphabet, ordinal, motif, colw); + focus_target = find_child(row.cells[5], "sym_btn"); + container.removeChild(expanded_motif); + tbody2 = table_after.tBodies[0]; + while (tbody2.rows.length > 0) { + row = tbody2.rows[0]; + row.parentNode.removeChild(row); + tbody.appendChild(row); + } + container.removeChild(table_after); + } else if (table_before) { + tbody = table_before.tBodies[0]; + row = tbody.insertRow(tbody.rows.length); + make_motif_table_entry(row, meme_alphabet, ordinal, motif, colw); + focus_target = find_child(row.cells[5], "sym_btn"); + container.removeChild(expanded_motif); + } else if (table_after) { + tbody = table_after.tBodies[0]; + row = tbody.insertRow(0); + make_motif_table_entry(row, meme_alphabet, ordinal, motif, colw); + focus_target = find_child(row.cells[5], "sym_btn"); + container.removeChild(expanded_motif); + } else { + //no table above or below! + // make a new table + table = make_motifs_table(meme_alphabet, ordinal, [motif], colw, data["stop_reason"]); + focus_target = find_child(table.tBodies[0].rows[0].cells[5], "sym_btn"); + container.replaceChild(table, expanded_motif); + } + focus_target.focus(); +} + +function action_show_outpop(e) { + "use strict"; + function init() { + "use strict"; + var close_btn, next_btn, prev_btn, cancel_btn, do_btn; + var tab1, tab2, tab3; + var pnl1, pnl2, pnl3; + var format_list; + var tbl_submit, inputs, i, default_prog; + close_btn = $("outpop_close"); + close_btn.addEventListener("click", action_hide_outpop, false); + close_btn.addEventListener("keydown", action_hide_outpop, false); + next_btn = $("outpop_next"); + next_btn.addEventListener("click", action_outpop_next, false); + next_btn.addEventListener("keydown", action_outpop_next, false); + prev_btn = $("outpop_prev"); + prev_btn.addEventListener("click", action_outpop_prev, false); + prev_btn.addEventListener("keydown", action_outpop_prev, false); + cancel_btn = $("outpop_cancel"); + cancel_btn.addEventListener("click", action_hide_outpop, false); + do_btn = $("outpop_do"); + do_btn.addEventListener("click", action_outpop_submit, false); + tab1 = $("outpop_tab_1"); + tab1.tabIndex = 0; + tab1.addEventListener("click", action_outpop_tab, false); + tab1.addEventListener("keydown", action_outpop_tab, false); + tab2 = $("outpop_tab_2"); + tab2.tabIndex = 0; + tab2.addEventListener("click", action_outpop_tab, false); + tab2.addEventListener("keydown", action_outpop_tab, false); + tab3 = $("outpop_tab_3"); + tab3.tabIndex = 0; + tab3.addEventListener("click", action_outpop_tab, false); + tab3.addEventListener("keydown", action_outpop_tab, false); + pnl1 = $("outpop_pnl_1"); + pnl2 = $("outpop_pnl_2"); + pnl3 = $("outpop_pnl_3"); + toggle_class(tab1, "activeTab", true); + toggle_class(tab2, "activeTab", false); + toggle_class(tab3, "activeTab", false); + pnl1.style.display = "block"; + pnl2.style.display = "none"; + pnl3.style.display = "none"; + format_list = $("text_format"); + format_list.addEventListener("change", action_outpop_format, false); + // setup program selection + tbl_submit = $("programs"); + // when not dna, hide the inputs for programs that require dna motifs + toggle_class(tbl_submit, "alphabet_dna", meme_alphabet.has_complement());//TODO FIXME alphabet_dna is a bad name for a field when allowing custom alphabets + // add a click listener for the radio buttons + inputs = tbl_submit.querySelectorAll("input[type='radio']"); + for (i = 0; i < inputs.length; i++) { + inputs[i].addEventListener("click", action_outpop_program, false); + } + // ensure that a default program option is selected for DNA and Protein + default_prog = document.getElementById(meme_alphabet.has_complement() ? "submit_tomtom" : "submit_fimo"); //TODO FIXME Tomtom might require a more strict definition of DNA + default_prog.checked = true; + action_outpop_program.call(default_prog); + // disable reverse-complement when not DNA + $("logo_rc_option").disabled = !meme_alphabet.has_complement(); + // set errorbars on when ssc is on + $("logo_ssc").addEventListener("change", action_outpop_ssc, false); + } + var node; + // store the focused element + action_hide_outpop.last_active = document.activeElement; + if (!e) e = window.event; + if (e.type === "keydown") { + if (e.keyCode !== 13 && e.keyCode !== 32) { + return; + } + // stop a submit or something like that + e.preventDefault(); + } + // hide the help popup + help_popup(); + // on first load initilize the popup + if (!action_show_outpop.ready) { + init(); + action_show_outpop.ready = true; + } + // load the motif logo + node = this; + do { + if (/\bexpanded_motif\b/.test(node.className) || node.tagName === "TR") break; + } while (node = node.parentNode); + if (node === null) throw new Error("Expected node!"); + update_outpop_motif(node.data_ordinal - 1); + // display the download popup + $("grey_out_page").style.display = "block"; + $("download").style.display = "block"; + $("outpop_close").focus(); +} + +function action_hide_outpop(e) { + if (!e) e = window.event; + if (e.type === "keydown") { + if (e.keyCode !== 13 && e.keyCode !== 32) { + return; + } + // stop a submit or something like that + e.preventDefault(); + } + $("download").style.display = "none"; + $("grey_out_page").style.display = "none"; + if (typeof action_hide_outpop.last_active !== "undefined") { + action_hide_outpop.last_active.focus(); + } +} + +function action_outpop_next(e) { + if (!e) e = window.event; + if (e.type === "keydown") { + if (e.keyCode !== 13 && e.keyCode !== 32) { + return; + } + // stop a submit or something like that + e.preventDefault(); + } + update_outpop_motif(current_motif + 1); +} + +function action_outpop_prev(e) { + if (!e) e = window.event; + if (e.type === "keydown") { + if (e.keyCode !== 13 && e.keyCode !== 32) { + return; + } + // stop a submit or something like that + e.preventDefault(); + } + update_outpop_motif(current_motif - 1); +} + +function action_outpop_program() { + "use strict"; + var table, tr, rows, i; + tr = find_parent_tag(this, "TR"); + table = find_parent_tag(tr, "TABLE"); + rows = table.querySelectorAll("tr"); + for (i = 0; i < rows.length; i++) { + toggle_class(rows[i], "selected", rows[i] === tr); + } +} + +function action_outpop_ssc() { + "use strict"; + $("logo_err").value = $("logo_ssc").value; +} + +function action_outpop_submit(e) { + "use strict"; + var form, input, program, motifs; + // find out which program is selected + var radios, i; + radios = document.getElementsByName("program"); + program = "fimo"; // default to fimo, since it works with all alphabet types + for (i = 0; i < radios.length; i++) { + if (radios[i].checked) program = radios[i].value; + } + + motifs = motif_minimal_meme(current_motif); + form = document.createElement("form"); + form.setAttribute("method", "post"); + form.setAttribute("action", site_url + "/tools/" + program); + + input = document.createElement("input"); + input.setAttribute("type", "hidden"); + input.setAttribute("name", "motifs_embed"); + input.setAttribute("value", motifs); + form.appendChild(input); + + document.body.appendChild(form); + form.submit(); + document.body.removeChild(form); +} + +function action_outpop_download_motif(e) { + $("text_form").submit(); +} + +function action_outpop_download_logo(e) { + "use strict"; + $("logo_motifs").value = motif_minimal_meme(current_motif); + $("logo_form").submit(); +} + +function action_btn_rc(e) { + "use strict"; + var node, tr, motif, box, logo_box, tab_st, tab_rc, rc; + if (!e) e = window.event; + if (e.type === "keydown") { + if (e.keyCode !== 13 && e.keyCode !== 32) { + return; + } + // stop a submit or something like that + e.preventDefault(); + } + node = this; + do { + if (node.tagName === "TR") break; + } while (node = node.parentNode); + if (!node) throw new Error("Expected to find row!?"); + tr = node; + // get info + motif = tr.data_motif; + box = find_parent(this, "preview_box"); + logo_box = find_child(box, "preview_logo_box"); + tab_st = find_child(box, "plus"); + tab_rc = find_child(box, "minus"); + rc = (this === tab_rc); + motif["rc"] = rc; + toggle_class(logo_box, "show_rc_logo", rc); + toggle_class(tab_st, "active", !rc); + toggle_class(tab_rc, "active", rc); +} + +function action_rc_tab(e) { + "use strict"; + var box, logo_box, tab_st, tab_rc, rc; + if (!e) e = window.event; + if (e.type === "keydown") { + if (e.keyCode !== 13 && e.keyCode !== 32) { + return; + } + // stop a submit or something like that + e.preventDefault(); + } + box = find_parent(this, "expanded_motif"); + logo_box = find_child(box, "tvar_logo"); + tab_st = find_child(box, "tvar_tab"); + tab_rc = find_child(box, "tvar_tab_rc"); + rc = (this === tab_rc); + box.data_motif["rc"] = rc; + toggle_class(logo_box, "show_rc_logo", rc); + toggle_class(tab_st, "activeTab", !rc); + toggle_class(tab_rc, "activeTab", rc); +} + +function action_outpop_tab(e) { + "use strict"; + var tab1, tab2, tab3, pnl1, pnl2, pnl3, do_btn; + if (!e) e = window.event; + if (e.type === "keydown") { + if (e.keyCode !== 13 && e.keyCode !== 32) { + return; + } + // stop a submit or something like that + e.preventDefault(); + } + tab1 = $("outpop_tab_1"); + tab2 = $("outpop_tab_2"); + tab3 = $("outpop_tab_3"); + pnl1 = $("outpop_pnl_1"); + pnl2 = $("outpop_pnl_2"); + pnl3 = $("outpop_pnl_3"); + do_btn = $("outpop_do"); + + toggle_class(tab1, "activeTab", (this === tab1)); + toggle_class(tab2, "activeTab", (this === tab2)); + toggle_class(tab3, "activeTab", (this === tab3)); + pnl1.style.display = ((this === tab1) ? "block" : "none"); + pnl2.style.display = ((this === tab2) ? "block" : "none"); + pnl3.style.display = ((this === tab3) ? "block" : "none"); + do_btn.value = ((this === tab1) ? "Submit" : "Download"); + do_btn.removeEventListener("click", action_outpop_submit, false); + do_btn.removeEventListener("click", action_outpop_download_logo, false); + do_btn.removeEventListener("click", action_outpop_download_motif, false); + if (this === tab1) { + do_btn.addEventListener("click", action_outpop_submit, false); + } else if (this === tab2) { + do_btn.addEventListener("click", action_outpop_download_motif, false); + } else { + do_btn.addEventListener("click", action_outpop_download_logo, false); + } +} + +function action_seqs_filter() { + "use strict"; + var block_container; + block_container = $("blocks"); + if ($("rdo_all_seqs").checked) { + toggle_class(block_container, "hide_empty_seqs", false); + toggle_class(block_container, "hide_only_scan", false); + } else if ($("rdo_sites_and_scan").checked) { + toggle_class(block_container, "hide_empty_seqs", true); + toggle_class(block_container, "hide_only_scan", false); + } else if ($("rdo_sites_only").checked) { + toggle_class(block_container, "hide_empty_seqs", true); + toggle_class(block_container, "hide_only_scan", true); + } +} + +function action_outpop_format() { + update_outpop_format(current_motif); +} + +// +// page_loaded +// +// Called when the page has loaded for the first time. +/// +function page_loaded() { + post_load_setup(); +} + +// +// page_loaded +// +// Called when a cached page is reshown. +/// +function page_shown(e) { + if (e.persisted) post_load_setup(); +} + +// +// page_loaded +// +// Called when the page is resized +/// +function page_resized() { + var page, blocks_scroll; + update_scroll_pad(); + page = (document.compatMode === "CSS1Compat") ? document.documentElement : document.body; + blocks_scroll = $("blocks_scroll"); + if (blocks_scroll) { + blocks_scroll.style.maxHeight = Math.max(page.clientHeight - 300, 300) + "px"; + } +} + +// +// pre_load_setup +// +// Run before the page is displayed +/// +function pre_load_setup() { + var start, hue, sat, light, divisions; + var i, j, motifs, motif, sites, site, sequences, sequence; + var max_seq_len; + motifs = data["motifs"]; + sequences = data["sequence_db"]["sequences"]; + max_seq_len = 1; + for (i = 0; i < sequences.length; i++) { + sequence = sequences[i]; + sequence["sites"] = []; + if (sequence["length"] > max_seq_len) { + max_seq_len = sequence["length"]; + } + } + data["sequence_db"]["max_length"] = max_seq_len; + // use hsl colours + start = 0; //red + sat = 100; + light = 50; + for (i = 0; i < motifs.length; i++) { + motif = motifs[i]; + // give the motif a colour + divisions = 1 << Math.ceil(Math.log(i + 1) / Math.LN2); + hue = start + (360 / divisions) * ((i - (divisions >> 1)) * 2 + 1); + motif["colour"] = "hsl(" + hue + ", " + sat + "%, " + light + "%)"; + // associate sites with sequences as well + // to make generating the block diagram easier + sites = motif["sites"]; + for (j = 0; j < sites.length; j++) { + site = sites[j]; + sequence = sequences[site["seq"]]; + // record the motif index + site["motif"] = i; + // add the site to the sequence + sequence["sites"].push(site); + } + } +} + +// +// post_load_setup +// +// Run when the page has loaded, or been reloaded. +// +function post_load_setup() { + update_scroll_pad(); + if (data["motifs"].length > 0) { + make_motifs(); + make_blocks(); + } else { + $("motifs").innerHTML = "<p>No significant motifs found!</p>"; // clear content + $("motifs").innerHTML += "<p><b>" + data["stop_reason"] + "</b></p>"; + $("blocks").innerHTML = "<p>No significant motifs found!</p>"; + } +} + +pre_load_setup(); +</script> + <style> +/* The following is the content of meme.css */ +body { background-color:white; font-size: 12px; font-family: Verdana, Arial, Helvetica, sans-serif;} + +div.help { + display: inline-block; + margin: 0px; + padding: 0px; + width: 12px; + height: 13px; + cursor: pointer; + background-image: url(data:image/gif;base64,R0lGODlhDAANAIABANR0AP///yH5BAEAAAEALAAAAAAMAA0AAAIdhI8Xy22MIFgv1DttrrJ7mlGNNo4c+aFg6SQuUAAAOw==); +} + +div.help:hover { + background-image: url(data:image/gif;base64,R0lGODlhDAANAKEAANR0AP///9R0ANR0ACH+EUNyZWF0ZWQgd2l0aCBHSU1QACH5BAEAAAIALAAAAAAMAA0AAAIdDGynCe3PgoxONntvwqz2/z2K2ImjR0KhmSIZUgAAOw==); +} + +p.spaced { line-height: 1.8em;} + +span.citation { font-family: "Book Antiqua", "Palatino Linotype", serif; color: #004a4d;} + +p.pad { padding-left: 30px; padding-top: 5px; padding-bottom: 10px;} + +td.jump { font-size: 13px; color: #ffffff; background-color: #00666a; + font-family: Georgia, "Times New Roman", Times, serif;} + +a.jump { margin: 15px 0 0; font-style: normal; font-variant: small-caps; + font-weight: bolder; font-family: Georgia, "Times New Roman", Times, serif;} + +h2.mainh {font-size: 1.5em; font-style: normal; margin: 15px 0 0; + font-variant: small-caps; font-family: Georgia, "Times New Roman", Times, serif;} + +h2.line {border-bottom: 1px solid #CCCCCC; font-size: 1.5em; font-style: normal; + margin: 15px 0 0; padding-bottom: 3px; font-variant: small-caps; + font-family: Georgia, "Times New Roman", Times, serif;} + +h4 {border-bottom: 1px solid #CCCCCC; font-size: 1.2em; font-style: normal; + margin: 10px 0 0; padding-bottom: 3px; font-family: Georgia, "Times New Roman", Times, serif;} + +h5 {margin: 0px} + +a.help { font-size: 9px; font-style: normal; text-transform: uppercase; + font-family: Georgia, "Times New Roman", Times, serif;} + +div.pad { padding-left: 30px; padding-top: 5px; padding-bottom: 10px;} + +div.pad1 { margin: 10px 5px;} + +div.pad2 { margin: 25px 5px 5px;} +h2.pad2 { padding: 25px 5px 5px;} + +div.pad3 { padding: 5px 0px 10px 30px;} + +div.box { border: 2px solid #CCCCCC; padding:10px; overflow: hidden;} + +div.bar { border-left: 7px solid #00666a; padding:5px; margin-top:25px; } + +div.subsection {margin:25px 0px;} + +img {border:0px none;} + +th.majorth {text-align:left;} +th.minorth {font-weight:normal; text-align:left; width:8em; padding: 3px 0px;} +th.actionth {font-weight:normal; text-align:left;} + +.explain h5 {font-size:1em; margin-left: 1em;} + +div.doc {margin-left: 2em; margin-bottom: 3em;} + +th.trainingset { + border-bottom: thin dashed black; + font-weight:normal; + padding:0px 10px; +} +div.pop_content { + position:absolute; + z-index:50; + width:300px; + padding: 5px; + background: #E4ECEC; + font-size: 12px; + font-family: Arial; + border-style: double; + border-width: 3px; + border-color: #AA2244; + display:none; +} + +div.pop_content > *:first-child { + margin-top: 0px; +} + +div.pop_content h1, div.pop_content h2, div.pop_content h3, div.pop_content h4, +div.pop_content h5, div.pop_content h6, div.pop_content p { + margin: 0px; +} + +div.pop_content p + h1, div.pop_content p + h2, div.pop_content p + h3, +div.pop_content p + h4, div.pop_content p + h5, div.pop_content p + h6 { + margin-top: 5px; +} + +div.pop_content p + p { + margin-top: 5px; +} + +div.pop_content > *:last-child { + margin-bottom: 0px; +} + +div.pop_content div.pop_close { + /* old definition */ + float:right; + bottom: 0; +} + +div.pop_content span.pop_close, div.pop_content span.pop_back { + display: inline-block; + border: 2px outset #661429; + background-color: #CCC; + padding-left: 1px; + padding-right: 1px; + padding-top: 0px; + padding-bottom: 0px; + cursor: pointer; + color: #AA2244; /*#661429;*/ + font-weight: bold; +} + +div.pop_content span.pop_close:active, div.pop_content span.pop_back:active { + border-style: inset; +} + +div.pop_content span.pop_close { + float:right; + /*border: 2px outset #AA002B;*/ + /*color: #AA2244;*/ +} + +div.pop_content:not(.nested) .nested_only { + display: none; +} + +div.pop_back_sec { + margin-bottom: 5px; +} + +div.pop_close_sec { + margin-top: 5px; +} + +table.hide_advanced tr.advanced { + display: none; +} +span.show_more { + display: none; +} +table.hide_advanced span.show_more { + display: inline; +} +table.hide_advanced span.show_less { + display: none; +} + + +/***************************************************************************** + * Program logo styling + ****************************************************************************/ +div.prog_logo { + border-bottom: 0.25em solid #0f5f60; + height: 4.5em; + width: 24em; + display:inline-block; +} +div.prog_logo img { + float:left; + width: 4em; + border-style: none; + margin-right: 0.2em; +} +div.prog_logo h1, div.prog_logo h1:hover, div.prog_logo h1:active, div.prog_logo h1:visited { + margin:0; + padding:0; + font-family: Arial, Helvetica, sans-serif; + font-size: 3.2em; + line-height: 1em; + vertical-align: top; + display: block; + color: #026666; + letter-spacing: -0.06em; + text-shadow: 0.04em 0.06em 0.05em #666; +} +div.prog_logo h2, div.prog_logo h2:hover, div.prog_logo h2:active, div.prog_logo h2:visited { + display: block; + margin:0; + padding:0; + font-family: Helvetica, sans-serif; + font-size: 0.9em; + line-height: 1em; + letter-spacing: -0.06em; + color: black; +} + +div.big.prog_logo { + font-size: 18px; +} + +</style> + <style> +.block_td { + height:25px; +} +.block_container { + position:relative; + box-sizing: border-box; + height: 25px; + padding: 0px; + margin: 0px; + margin-left: 1em; +} +.block_label { + position: absolute; + display: inline-block; + padding: 3px; + z-index: 4; + top: 6px; + height: 12px; + line-height: 12px; + font-size: 12px; + background-color: white; + border: 1px solid black; + -moz-border-radius: 12px; + -webkit-border-radius: 12px; + border-radius: 12px; + transform: translateX(-50%); +} +.block_motif { + position: absolute; + z-index: 3; + top: 0px; + box-sizing: border-box; + border: 1px solid black; + height: 12px; + background-color: cyan; +} +.block_motif.top { + border-bottom-width: 0; +} +.block_motif.bottom { + border-top-width: 0; +} +.block_motif.scanned_site { + opacity: 0.3; +} +.block_motif.scanned_site.active { + opacity: 0.9; +} +.block_region { + position:absolute; + z-index:6; + height:25px; + top:0px; +} +.block_region.main { + z-index:8; +} +.block_region.scanned_site { + z-index:5; +} +.block_region.scanned_site.main { + z-index:7; +} +.block_region.top { + height:13px; +} +.block_region.bottom { + height:13px; + top:12px; +} +.block_rule { + position:absolute; + z-index:2; + width:100%; + height:1px; + top:12px; + left:0px; + background-color:gray; +} +.block_plus_sym { + position:absolute; + z-index:4; + line-height:12px; + top:0px; + left:-1em; +} +.block_minus_sym { + position:absolute; + z-index:4; + line-height:12px; + top:13px; + left:-1em; +} + +.tic_major { + position:absolute; + top:0em; + height:0.5em; + width: 2px; + margin-left: -1px; + background-color: blue; +} +.tic_minor { + position:absolute; + top:0em; + height:0.2em; + width: 1px; + margin-left: -0.5px; + background-color: blue; +} +.tic_label { + position:absolute; + display: inline-block; + top:0.5em; + height: 1em; + color: blue; + transform: translateX(-50%); +} + +.block_needle { + position:absolute; + z-index:4; + height:30px; + width:1px; + top:-2px; + background-color:gray; +} +.block_needle.right { + height: 60px; +} +.block_handle { + position: absolute; + display: inline-block; + z-index: 5; + top: 27px; + min-width: 3ex; + text-align: center; + font-size: 12px; + line-height: 12px; + transform: translateX(-50%); + background-color: LightGrey; + border:3px outset grey; + cursor: pointer; + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ + /* Rules below not implemented in browsers yet */ + -o-user-select: none; + user-select: none; +} +.block_handle.right { + top: 47px; +} + +.legend_container { + text-align: right; +} +.legend_entry { + display: inline-block; + padding: 5px; +} +div.legend_swatch { + box-sizing: border-box; + width: 15px; + height: 15px; + border: 1px solid black; + background-color: cyan; + float: left; +} +div.legend_swatch input { + display: none; +} +.legend_text { + line-height: 15px; + margin-left: 20px; +} +</style> + <style> +/* meme output specific css */ + +div.pop_block { + position:absolute; + z-index:5; + padding: 5px; + border: 1px solid black; + display: inline-block; + background-color: white; +} + +#measure_match { + position: absolute; + visibility: hidden; + height: auto; + width: auto; + white-space: nowrap; +} + +div.template { + position: absolute; + z-index: 1; + left: 0; + top: 0; + visibility: hidden; +} + +table.block_information { + margin-left: auto; + margin-right: auto; +} + +table.block_information * th { + text-align: right; +} + +*.hide_empty_seqs * tr.empty_seq { + display: none; +} + +*.hide_only_scan * tr.only_scan { + display: none; +} + +*.hide_only_scan * div.scanned_site { + display: none; +} + +td.symaction { + text-align: center; + text-decoration: underline; + font-size: 20px; + cursor: pointer; +} +div.sym_btn { + display:inline-block; + text-decoration: underline; + cursor: pointer; + font-size: 20px; + line-height:20px; + text-align: center; + width: 20px; + height: 20px; + color: blue; +} +div.sym_btn:hover { + color: white; + background-color: blue; +} + +div.sym_btn.positioned { + position: absolute; + top: 0px; +} + +div.actionbutton { + display:inline-block; + cursor: pointer; + font-size: 18px; + line-height:20px; + padding: 5px; + margin: 10px 0; + border: 1px solid black; +} + +div.actionbutton:hover { + color:#FFF; + background-color:#000; +} + +div.param_box { + display: inline-block; + margin-right: 20px; +} + +span.param { + font-weight: bold; +} + +div.box + div.box { + margin-top: 5px; +} + +div.sites_outer { + position: relative; + padding-top: 20px; /* height of header */ + display: inline-block; +} + +div.sites_inner { + overflow-x: hidden; + overflow-y: auto; + max-height: 200px; +} +table.sites_tbl { + border-collapse: collapse; +} + +div.sites_th_inner { + position: absolute; + top: 0; + line-height: 20px; /* height of header */ + text-align: left; + padding-left: 5px; +} +th.nopad div.sites_th_inner { + padding-left: 0; +} +div.sites_th_hidden { + visibility: hidden; + height: 0; + padding: 0 10px; +} +th.nopad div.sites_th_hidden { + padding: 0; +} +div.sites_inner * th { + height: 0; +} + +table.sites_tbl { + overflow-x: hidden; + overflow-y: auto; +} + +.site_num { + text-align: right; +} +.site_name { + padding:0px 5px; + text-align:left; +} +.site_strand { + padding:0px 5px; + text-align:center; +} +.norc .site_strand, .norc .site_strand_title { + display: none; +} +.site_start { + padding:0px 15px; + text-align: right; +} +.site_pvalue { + text-align:center; + padding:0px 15px; + text-align:right; + white-space: nowrap; +} +.lflank, .rflank, .match, .alpha_symbol { + font-weight:bold; + font-size:15px; + font-family: 'Courier New', Courier, monospace; + color:gray; +} + +.site.lflank { + text-align:right; + padding-right:5px; + color:gray; +} +.site.match { + text-align:center; +} +.site.rflank { + text-align:left; + padding-left:5px; + padding-right: 20px; +} + +th.stop_reason { + text-align: left; + padding-right: 10px; +} + +th.motif_ordinal { + +} +td.motif_ordinal { + text-align: right; + padding-right: 10px; +} +th.motif_logo { + padding-right: 10px; +} +td.motif_logo { + padding-right: 10px; +} +th.motif_evalue { + text-align:right; + padding-right: 10px; +} +td.motif_evalue { + text-align: right; + white-space: nowrap; + padding-right: 20px; +} +th.motif_nsites { + text-align: right; + padding-right: 10px; +} +td.motif_nsites { + text-align: right; + padding-right: 20px; +} +th.motif_width { + text-align: right; + padding-right: 5px; +} +td.motif_width { + text-align: right; + padding-right: 15px; +} +th.motif_more { + padding: 0 5px; +} +td.motif_more { + text-align: center; + padding: 0 5px; +} +th.motif_submit { + padding: 0 5px; +} +td.motif_submit { + text-align: center; + padding: 0 5px; +} +th.motif_download { + padding-left: 5px; +} +td.motif_download { + text-align: center; + padding-left: 5px; +} + + +div.tabArea { + font-size: 80%; + font-weight: bold; +} + +.norc div.tabArea { + display: none; +} + +span.tab, span.tab:visited { + cursor: pointer; + color: #888; + background-color: #ddd; + border: 2px solid #ccc; + padding: 2px 1em; + text-decoration: none; +} +span.tab.middle { + border-left-width: 0px; +} +div.tabArea.base span.tab { + border-top-width: 0px; +} +div.tabArea.top span.tab { + border-bottom-width: 0px; +} + +span.tab:hover { + background-color: #bbb; + border-color: #bbb; + color: #666; +} +span.tab.activeTab, span.tab.activeTab:hover, span.tab.activeTab:visited { + background-color: white; + color: black; + cursor: default; +} +div.tabMain { + border: 2px solid #ccc; + background-color: white; + padding: 10px; +} +div.tabMain.base { + margin-top: 5px; + display: inline-block; + max-width: 98%; +} + +div.tabMain.top { + margin-bottom: 5px; +} + +div.tabCenter { + max-width: 100%; + overflow-x: auto; + height: 200px; + overflow-y: hidden; +} + +canvas.logo_rc { + display:none; +} +.show_rc_logo > canvas { + display: none; +} +.show_rc_logo > canvas.logo_rc { + display: block; +} + +canvas.scan_logo { + margin-left: 10px; +} + +div.blocks_outer { + position: relative; + padding-top: 20px; /* height of header */ +} + +div.blocks_inner { + overflow-x: hidden; + overflow-y: auto; + max-height: 200px; +} +table.blocks_tbl { + border-collapse: collapse; + width: 100%; +} + +div.blocks_th_inner { + position: absolute; + top: 0; + line-height: 20px; /* height of header */ + text-align: left; + padding-left: 5px; +} +th.nopad div.blocks_th_inner { + padding-left: 0; +} +div.blocks_th_hidden { + visibility: hidden; + height: 0; + padding: 0 10px; +} +th.nopad div.blocks_th_hidden { + padding: 0; +} +div.blocks_inner * th { + height: 0; +} + +table.blocks_tbl { + overflow-x: hidden; + overflow-y: auto; +} +td.block_td { + width: 99%; +} + +*.blockdiag_num { + text-align: right; +} + +td.blockdiag_name { + text-align: left; + padding:0px 10px; +} + +td.blockdiag_pvalue { + padding:0px 10px; + text-align:right; + white-space: nowrap; +} + +div.preview_btn { + border: 2px solid white; + height: 16px; + width: 16px; + font-size: 12px; + line-height: 16px; + text-align: center; + cursor: pointer; +} +div.preview_btn + div.preview_btn { + margin-top: 3px; +} + +div.preview_btn.active { + border: 2px solid black; + cursor: default; +} + +div.preview_btn:hover { + background-color: black; + color: white; + border-color: black; +} + +div.preview_btn.active:hover { + background-color: white; + color: black; + border-color: black; +} + + +div.preview_btn_box { + position: absolute; + left: 0px; + top: 0px; + padding: 3px; +} + +div.preview_logo_box { + height: 50px; + overflow-y: hidden; +} + +div.preview_btn_box + div.preview_logo_box { + margin-left: 25px; +} + +div.preview_box { + position: relative; +} + +div.grey_background { + position:fixed; + z-index: 8; + background-color: #000; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + opacity: 0.5; + left: 0; + top: 0; + width: 100%; + height: 100%; +} + +div.popup_wrapper { + position:fixed; + z-index:9; + width:100%; + height:0; + top:50%; + left:0; +} + +div.popup { + width: 600px; + z-index:9; + margin-left: auto; + margin-right: auto; + padding: 5px; + background-color: #FFF; + border-style: double; + border-width: 5px; + border-color: #00666a; + position:relative; +} +div.close { + cursor: pointer; + border: 1px solid black; + width:15px; + height:15px; + line-height:15px; /* this causes vertical centering */ + text-align:center; + background-color:#FFF; + color:#000; + font-size:15px; + font-family:monospace; +} + +div.close:hover { + color:#FFF; + background-color:#000; +} + +div.navnum { + width:100%; + height:20px; + line-height:20px; + text-align:center; + font-size:medium; +} + +div.navarrow { + font-size: 30px; + text-decoration:none; + cursor: pointer; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; +} + +div.navarrow > span.inactive { + display: inline; +} +div.navarrow > span.active { + display: none; +} + +div.navarrow:hover > span.active { + display: inline; +} +div.navarrow:hover > span.inactive { + display: none; +} + +table.programs { + width: 100%; +} + +table.programs tr { + background-color: #EFE; +} + +table.programs tr.selected { + background-color: #262; + color: #FFF; +} + +table.programs tr.dna_only { + display: none; +} + +table.programs.alphabet_dna tr.dna_only { + display: table-row; +} + +div.programs_scroll { + width: 100%; + height: 90px; + overflow-y: auto; + overflow-x: hidden; + margin: 0 auto; +} +table.inputs, table.alpha_bg_table { + margin-top: 20px; + border-collapse:collapse; +} +table.inputs * td, table.inputs * th, table.alpha_bg_table * td, table.alpha_bg_table * th { + padding-left: 15px; + padding-right: 15px; + padding-top: 1px; + padding-bottom: 1px; +} + +table.hide_psp td.col_psp, table.hide_psp th.col_psp { + display: none; +} + +/* program settings */ +span.mod_oops, span.mod_zoops, span.mod_anr { + display: none; +} +td.oops span.mod_oops,td.zoops span.mod_zoops, td.anr span.mod_anr { + display: inline; +} +span.strand_none, span.strand_given, span.strand_both { + display: none; +} +td.none span.strand_none, td.given span.strand_given, td.both span.strand_both { + display: inline; +} +span.spmap_uni, span.spmap_pam { + display: none; +} +td.uni span.spmap_uni, td.pam span.spmap_pam { + display: inline; +} +span.prior_dirichlet, span.prior_dmix, span.prior_mega, span.prior_megap, span.prior_addone { + display: none; +} +td.dirichlet span.prior_dirichlet, td.dmix span.prior_dmix, td.mega span.prior_mega, +td.megap span.prior_megap, td.addone span.prior_addone { + display: inline; +} +span.noendgaps_on, span.noendgaps_off { + display: none; +} +td.on span.noendgaps_on, td.off span.noendgaps_off { + display: inline; +} +span.substring_on, span.substring_off { + display: none; +} +td.on span.substring_on, td.off span.substring_off { + display: inline; +} +</style> + </head> + <body onload="page_loaded()" onpageshow="page_shown(event)" onresize="page_resized()"> + <!-- --> + <div id="grey_out_page" class="grey_background" style="display:none;"> + </div> + <!-- Help popups --> + <div class="pop_content" id="pop_"> + <p>Help poup.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_ev"> + <p>The statistical significance of the motif. MEME usually finds the most + statistically significant (low E-value) motifs first. It is unusual to + consider a motif with an E-value larger than 0.05 significant so, as an + additional indicator, MEME displays these partially transparent.</p> + <p>The E-value of a motif is based on its log likelihood ratio, width, + sites, the background letter frequencies (given in the command line + summary), and the size of the training set.</p> + <p>The E-value is an estimate of the expected number of motifs with the + given log likelihood ratio (or higher), and with the same width and site + count, that one would find in a similarly sized set of random + sequences (sequences where each position is independent and letters are + chosen according to the background letter frequencies).</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_sites"> + <p>The number of sites contributing to the construction of the motif.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_width"> + <p>The width of the motif. Each motif describes a pattern of a fixed + width, as no gaps are allowed in MEME motifs.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_more"> + <p>Click on the blue symbol below to reveal more information about this motif.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_submit_dl"> + <p>Click on the blue symbol below to reveal options allowing you + to submit this motif to another MEME Suite motif analysis program, to download this + motif in various text formats, or to download a sequence "logo" of + this motif PNG or EPS format.</p> + <h5>Supported Programs</h5> + <dl> + <dt>Tomtom</dt> + <dd>Tomtom is a tool for searching for similar known motifs. + [<a href="http://meme-suite.org/doc/tomtom.html?man_type=web">manual</a>]</dd> + <dt>MAST</dt> + <dd>MAST is a tool for searching biological sequence databases for + sequences that contain one or more of a group of known motifs. + [<a href="http://meme-suite.org/doc/mast.html?man_type=web">manual</a>]</dd> + <dt>FIMO</dt> + <dd>FIMO is a tool for searching biological sequence databases for + sequences that contain one or more known motifs. + [<a href="http://meme-suite.org/doc/fimo.html?man_type=web">manual</a>]</dd> + <dt>GOMO</dt> + <dd>GOMO is a tool for identifying possible roles (Gene Ontology + terms) for DNA binding motifs. + [<a href="http://meme-suite.org/doc/gomo.html?man_type=web">manual</a>]</dd> + <dt>SpaMo</dt> + <dd>SpaMo is a tool for inferring possible transcription factor + complexes by finding motifs with enriched spacings. + [<a href="http://meme-suite.org/doc/spamo.html?man_type=web">manual</a>]</dd> + </dl> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_llr"> + <p>The log likelihood ratio of the motif.The log likelihood ratio is the + logarithm of the ratio of the probability of the occurrences of the motif + given the motif model (likelihood given the motif) versus their + probability given the background model (likelihood given the null model). + (Normally the background model is a 0-order Markov model using the + background letter frequencies, but higher order Markov models may be + specified via the -bfile option to MEME.).</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_ic"> + <p>The information content of the motif in bits. It is equal to the sum + of the uncorrected information content, R(), in the columns of the pwm. + This is equal relative entropy of the motif relative to a uniform + background frequency model.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_re"> + <p>The relative entropy of the motif.</p> + + <p style="font-family: monospace;">re = llr / (sites * ln(2))</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_bt"> + <p>The Bayes Threshold.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_site_strand"> + <p>The strand used for the motif site.</p> + <dl> + <dt>+</dt> + <dd>The motif site was found in the sequence as it was supplied.</dd> + <dt>-</dt> + <dd>The motif site was found in the reverse complement of the supplied sequence.</dd> + </dl> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_site_start"> + <p>The position in the sequence where the motif site starts. If a motif + started right at the begining of a sequence it would be described as + starting at position 1.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_site_pvalue"> + <p>The probability that an equal or better site would be found in a + random sequence of the same length conforming to the background letter + frequencies.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_site_match"> + <p>A motif site with the 10 flanking letters on either side.</p> + <p>When the site is not on the given strand then the site + and both flanks are reverse complemented so they align.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + + <div class="pop_content" id="pop_seq_name"> + <p>The name of the sequences as given in the FASTA file.</p> + <p>The number to the left of the sequence name is the ordinal + of the sequence.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + + <div class="pop_content" id="pop_motif_sites"> + <p>These are the motif sites predicted by MEME and used to build the motif.</p> + <p>These sites are shown in solid color and hovering the cursor + over a site will reveal details about the site. Only sequences + that contain a motif site are shown.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + + <div class="pop_content" id="pop_scanned_sites"> + <p>These are the motif sites predicted by MEME plus + any additional sites detected using a motif scanning + algorithm.</p> + <p>These MEME sites are shown in solid color and + additional scanned sites are shown in transparent color. + Hovering the cursor over a site will reveal details about the site. + Only sequences containing a predicted or scanned motif site are shown.</p> + <p>The scanned sites are predicted using a + log-odds scoring matrix constructed from the MEME sites. + Only scanned sites with position <i>p</i>-values less + than 0.0001 are shown.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + + <div class="pop_content" id="pop_all_sequences"> + <p>These are the same sites as shown by selecting the + "Motif Sites + Scanned Sites" button except that all + sequences, including those with no sites, are included + in the diagram.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + + <div class="pop_content" id="pop_seq_pvalue"> + <p>This is the combined match <i>p</i>-value.</p> + <p>The combined match <i>p</i>-value is defined as the probability that a + random sequence (with the same length and conforming to the background) + would have position <i>p</i>-values such that the product is smaller + or equal to the value calulated for the sequence under test.</p> + <p>The position <i>p</i>-value is defined as the probability that a + random sequence (with the same length and conforming to the background) + would have a match to the motif under test with a score greater or equal + to the largest found in the sequence under test.</p> + <p>Hovering your mouse over a motif site in the motif location + block diagram will show its position <i>p</i>-value and other information + about the site.</p> + + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_motif_location"> + <p>This diagram shows the location of motif sites.</p> + <p>Each block shows the position and strength of a motif + site. The height of a block gives an indication of the + significance of the site as taller blocks are more significant. + The height is calculated to be proportional to the negative + logarithm of the <i>p</i>-value of the site, truncated at + the height for a <i>p</i>-value of 1e-10.</p> + <p>For complementable alphabets (like DNA), sites on the + positive strand are shown above the line, + sites on the negative strand are shown below.</p> + <p>Placing the cursor + over a motif site will reveal more information about the site + including its position <i>p</i>-value. (See the help + for the <i>p</i>-value column for an explanation of position + <i>p</i>-values.)</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + + <div class="pop_content" id="pop_seq_source"> + <p>The name of the file of sequences input to MEME.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_psp_source"> + <p>The position specific priors file used by MEME to find the motifs.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_seq_alph"> + <p>The alphabet used by the sequences.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_seq_count"> + <p>The number of sequences provided as input to MEME.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + + <div class="pop_content" id="pop_alph_name"> + <p>The name of the alphabet symbol.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_alph_freq"> + <p>The frequency of the alphabet symbol in the dataset with a pseudocount + so it is never zero.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_alph_bg"> + <p>The frequency of the alphabet symbol as defined by the background model.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + + <!-- templates --> + <div id="measure_match" class="match"></div> + <div class="template pop_block" id="tmpl_block_info"> + <div> + <span class="tvar_logo_pad lflank" style="visibility:hidden;"></span> + <span class="tvar_logo"></span> + </div> + <div class="block_sequence_fragment"> + <span class="tvar_lflank lflank"></span> + <span class="tvar_match match"></span> + <span class="tvar_rflank rflank"></span> + </div> + <table class="block_information"> + <tr><th>Motif</th><td class="tvar_motif">1</td></tr> + <tr><th><i>p</i>-value</th><td class="tvar_pvalue">8.23e-7</td></tr> + <tr><th>Start</th><td class="tvar_start">23</td></tr> + <tr><th>End</th><td class="tvar_end">33</td></tr> + </table> + </div> + + <div class="template pop_block" id="tmpl_scan_info"> + <h5>Scanned Site</h5> + <div class="tvar_logo"></div> + <table class="block_information"> + <tr><th>Motif</th><td class="tvar_motif">1</td></tr> + <tr><th><i>p</i>-value</th><td class="tvar_pvalue">8.23e-7</td></tr> + <tr><th>Start</th><td class="tvar_start">23</td></tr> + <tr><th>End</th><td class="tvar_end">33</td></tr> + </table> + </div> + + <div class="template box expanded_motif" id="tmpl_motif_expanded"> + <div style="position: relative; min-height: 20px"> + <div class="param_box"> + <span class="param"><span class="tvar_ordinal"></span>.</span> + </div> + <div class="sym_btn positioned tvar_less" tabindex="0" + title="Show less information.">↥</div> + <div class="sym_btn positioned tvar_submit" tabindex="0" + title="Submit the motif to another MEME Suite program or download it.">⇢</div> + </div> + <div> + <div class="param_box"> + <span class="param"><i>E</i>-value:</span> + <span class="tvar_evalue"></span> + <div class="help" data-topic="pop_ev"></div> + </div> + <div class="param_box"> + <span class="param">Site Count:</span> + <span class="tvar_site_count"></span> + <div class="help" data-topic="pop_sites"></div> + </div> + <div class="param_box"> + <span class="param">Width:</span> + <span class="tvar_width"></span> + <div class="help" data-topic="pop_width"></div> + </div> + </div> + <div class="tabMain base"> + <div class="tabCenter tvar_logo"></div> + </div> + <div class="tabArea base"> + <span class="tvar_tab tab" tabindex="0">Standard</span><span + class="tvar_tab_rc tab middle" tabindex="0">Reverse + Complement</span> + </div> + <div style="padding: 10px 0"> + <div class="param_box"> + <span class="param">Log Likelihood Ratio:</span> + <span class="tvar_llr"></span> + <div class="help" data-topic="pop_llr"></div> + </div> + <div class="param_box"> + <span class="param">Information Content:</span> + <span class="tvar_ic"></span> + <div class="help" data-topic="pop_ic"></div> + </div> + <div class="param_box"> + <span class="param">Relative Entropy:</span> + <span class="tvar_re"></span> + <div class="help" data-topic="pop_re"></div> + </div> + <div class="param_box"> + <span class="param">Bayes Threshold:</span> + <span class="tvar_bt"></span> + <div class="help" data-topic="pop_bt"></div> + </div> + </div> + <div class="tvar_sites"></div> + </div> + + + <div class="popup_wrapper"> + <div class="popup" style="display:none; top: -150px;" id="download"> + <div> + <div style="float:right; "> + <div id="outpop_close" class="close" tabindex="0">x</div> + </div> + <h2 class="mainh" style="margin:0; padding:0;">Submit or Download</h2> + <div style="clear:both"></div> + </div> + <div style="height:100px"> + <div style="float:right; width: 30px;"> + <div id="outpop_prev" class="navarrow" tabindex="0"> + <span class="inactive">⇧</span><span class="active">⬆</span> + </div> + <div id="outpop_num" class="navnum"></div> + <div id="outpop_next" class="navarrow" tabindex="0"> + <span class="inactive">⇩</span><span class="active">⬇</span> + </div> + </div> + <div id="logo_box" style="height: 100px; margin-right: 40px;"> + <canvas id="outpop_logo" height="100" width="580"></canvas> + <canvas id="outpop_logo_rc" class="logo_rc" height="100" width="580"></canvas> + </div> + </div> + <div> + <!-- tabs start --> + <div class="tabArea top"> + <span id="outpop_tab_1" class="tab">Submit Motif</span><span + id="outpop_tab_2" class="tab middle">Download Motif</span><span + id="outpop_tab_3" class="tab middle">Download Logo</span> + </div> + <div class="tabMain top"> + <!-- Submit to another program --> + <div id="outpop_pnl_1"> + <h4 class="compact">Submit to program</h4> + <table id="programs" class="programs"> + <tr class="dna_only"> + <td><input type="radio" name="program" value="tomtom" id="submit_tomtom"></td> + <td><label for="submit_tomtom">Tomtom</label></td> + <td><label for="submit_tomtom">Find similar motifs in + published libraries or a library you supply.</label></td> + </tr> + <tr> + <td><input type="radio" name="program" value="fimo" id="submit_fimo"></td> + <td><label for="submit_fimo">FIMO</label></td> + <td><label for="submit_fimo">Find motif occurrences in + sequence data.</label></td> + </tr> + <tr> + <td><input type="radio" name="program" value="mast" id="submit_mast"></td> + <td><label for="submit_mast">MAST</label></td> + <td><label for="submit_mast">Rank sequences by affinity to + groups of motifs.</label></td> + </tr> + <tr class="dna_only"> + <td><input type="radio" name="program" value="gomo" id="submit_gomo"></td> + <td><label for="submit_gomo">GOMo</label></td> + <td><label for="submit_gomo">Identify possible roles (Gene + Ontology terms) for motifs.</label></td> + </tr> + <tr class="dna_only"> + <td><input type="radio" name="program" value="spamo" id="submit_spamo"></td> + <td><label for="submit_spamo">SpaMo</label></td> + <td><label for="submit_spamo">Find other motifs that are + enriched at specific close spacings which might imply the existance of a complex.</label></td> + </tr> + </table> + </div> + <!-- download text format --> + <div id="outpop_pnl_2"> + <div> + <label for="text_format">Format:</label> + <select id="text_format"> + <option value="0">Count Matrix</option> + <option value="1">Probability Matrix</option> + <option value="2">Minimal MEME</option> + <option value="3">FASTA</option> + <option value="4">Raw</option> + </select> + </div> + <form id="text_form" method="post" action=""> + <script>$("text_form").action = site_url + "/utilities/save_generated_file";</script> + <input type="hidden" id="text_name" name="name" value="motif.txt"> + <input type="hidden" name="mime_type" value="text/plain"> + <textarea id="outpop_text" name="content" + style="width:99%; white-space: pre; word-wrap: normal; overflow-x: scroll;" + rows="8" readonly="readonly" wrap="off"></textarea> + </form> + </div> + <!-- download logo format --> + <div id="outpop_pnl_3"> + <form id="logo_form" method="post" action=""> + <script>$("logo_form").action = site_url + "/utilities/generate_logo";</script> + <input type="hidden" name="program" value="MEME"/> + <input type="hidden" id="logo_motifs" name="motifs" value=""/> + <table> + <tr> + <td><label for="logo_format">Format:</label></td> + <td> + <select id="logo_format" name="png"> + <option value="1">PNG (for web)</option> + <option value="0">EPS (for publication)</option> + </select> + </td> + </tr> + <tr> + <td><label for="logo_rc">Orientation:</label></td> + <td> + <select id="logo_rc" name="rc1"> + <option value="0">Normal</option> + <option value="1" id="logo_rc_option">Reverse Complement</option> + </select> + </td> + </tr> + <tr> + <td><label for="logo_ssc">Small Sample Correction:</label></td> + <td> + <input type="hidden" id="logo_err" name="errbars" value="0"/> + <select id="logo_ssc" name="ssc"> + <option value="0">Off</option> + <option value="1">On</option> + </select> + </td> + </tr> + <tr> + <td><label for="logo_width">Width:</label></td> + <td> + <input type="text" id="logo_width" size="4" placeholder="default" name="width"/> cm + </td> + </tr> + <tr> + <td><label for="logo_height">Height:</label></td> + <td> + <input type="text" id="logo_height" size="4" placeholder="default" name="height"/> cm + </td> + </tr> + </table> + </form> + </div> + <!-- Buttons --> + <div> + <div style="float:left;"> + <input type="button" id="outpop_do" value="Submit" /> + </div> + <div style="float:right;"> + <input id="outpop_cancel" type="button" value="Cancel" /> + </div> + <div style="clear:both;"></div> + </div> + </div> + </div> + </div> + </div> + + + + <!-- Page starts here --> + <div id="top" class="pad1"> + <div class="prog_logo big"> + <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAD4AAABGCAYAAACUsCfoAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU1FB9wLHAInL7an9JAAAA8eSURBVHja7ZpZbxv3ucZ/s3AZ7qQkypZELZS3WHKiRJbTFnHqOjZcGzCQBf0A7cUB8glOb89dz30vChRp7xK0aZo4TYq6dtKqSew6iuJWpmPJlrVFFCmKI+7LLJw5F81MFZyec5rTILJaP8AAnAty+Pzf933ebeAhHuIhHuIhHmJPo6TpaeGLfimTydhLS0sUCgWazSbVahXDMOh0Ong8HiKRCAMDAxw+fJhHH31UeFDJ/91/bHp62r558ya6rmOaJuvr6+TzeYrFIoZhAOD1epFlmWAwSDqdZnR0lCNHjjA+Ps7+/fuFPUU8k8nYV69epVKpEA6HuXPnDrOzs7RaLbxeL93d3fj9foLBIB6Ph0ajQaVSAUBRFNLpNI888ggHDhzg3Llzwp4g/vbbb9szMzPE43FyuRwffPAB2WyWnp4ehoaGiMVi2LZNvV6n3W7j8/mIRqN4vV4ajQa1Wo2trS0OHTqEaZo89dRTfO973xMeaOKvvfaaffv2bcLhMCsrK/z+979HVVWOHz/O0NAQxWIRVVVRVRW/348oihiGgSiKxGIxurq6CAQCBINB3n//fcbGxiiXyxw7dowXX3yx1Nvbm3igiBcKhY9u3rw5OTMzQzgc5vbt23zwwQfIsszExAS2bZPP55EkiVAoRCQSIRwOI8sy5XKZ7e1tWq0WnU6HTqfD4OAggUAAVVXpdDo0m01GRkb44Q9/KDxQxH/729/as7Oz+Hw+Pv30U37zm9/g9Xrp6emht7eXYDCI3+/H6/UiCALtdhvLsuh0OkiSRCAQQJZl6vU65XKZ1dVV+vv7SSQS5PN5vF4vhUKBgwcP8qMf/WjXyIs7b+7cuWMvLi4iCAL1ep133nkHXdcZHh4mlUoRDofp7+8nHo9jGAaCIBCPx+nr6yOdTtPX14fH40HTNGRZpqenh76+PrLZLMVikYGBARRFwTRN5ubm+PGPf2zvFnF5583c3BzlchlZlrl16xa1Wo2xsTGi0SiDg4OutUzTJBKJIIoiXq+XQCBAIpEgFAphmiaqqlIoFKjVaoyOjhKJRFhfXycajRKNRunp6WFhYYG33nqLQqHwUTKZPP5VE5ecD5cvX7bv37+Poijkcjl++ctfMjo6ytDQEMlkEo/HQ7lcpt1u4/F4kGUZQRDw+Xz09fVx4MABRkZGSKVSdHV10el0KJVK1Ot14vE4kiRRKpVQFIV4PI5t23z66ad0Op2+K1eu/MeuWVxVVUzTRNd17t27RzKZJJFIEI1GEUWRdruNaZqIoogkSYiiiCiK+P1+AoEA0WiUQ4cOCQCbm5vb5XI5Xi6XWVtbw7ZtZFnG7/e7D1YUhWAwSLVaJZvN2v39/cJXHuOLi4t2sVhEEAS2t7eZn59n//79JBIJwuEwlmXRbDbRdR1BEBAEAcuysCwL2/5LmIriX+Wit7c3EY/HSSQSeDweDMPA4/EQCoWwbRvbtgmFQoTDYUqlErlcbnfE7f79+64gbWxs0G63icViRCIRBEHANE0Mw0CSJLxer0vSUfVKpUKxWGRtbc12UmKr1cI0TQD3t4PBoHtwgUAAv99Ps9kkn8/vjrjlcjlkWabdbrO8vEx3dzfhcJhoNEq9XkfTNERRxOfz4fV6sW0bSZJcBS+VSqytrdFqtbh+/bq9sLBALpdje3sbXddd4jutLwh/8WzLslBVdXeI12o1RFFkc3PTLTFjsRixWAxVVbEsC1mWkSTJdVXnMgyDarWKrusUi0X8fj+WZVGtVimXyxiGgW3bblh4PB78fj/tdhvbthFF0a3tv3Liuq4jiiKFQgFZlolEInR3d6MoConEXytLp1Bx0Ol0sG0bXdfRdZ1arYYgCNi2jaZptFot1zOcQ3LSnxMGzsHvCnHH/RqNBtFoFEmSCIfDAAwNDWFZFu12m0ajgaZpWJbl/oDH4/ncoTii5xBz1N+2bTqdDrIs4/P53MxgWRaapu2exQOBgHsAnU6HdrvN5uYmgUCASCRCJBIhkUhgmibNZpNarUaj0XAt71jfET1RFN1YliTJfUa73SaZTLK1tUWtVkPTNKampnaHuFNGyrKM1+t141bTNGq1GrVazS1EIpEI8XjcLWJqtdrnYthNF58pv23beL1eJEly1VzXder1Oq1Wi2AwiK7ru0PcSSs73bBYLBIMBpEkCdM0qVQq6LpOq9UiHA673Vmn08E0TfdyRM85CNM08Xq9bkoMhULugRqGgd/v3z1Xl2X5c24aDodRVZV4PO7W406/raoqtVqNYDCIz+dDURQ3vp3LuXeEz4nlTqdDOBxG13U3TBRF2b0mJRAI0Gg0EAQBTdPw+/2Uy2VXoJzRkkPEifNWq0UgEHCLEsedLcty1X1nzIdCIRRFoVQqUSqVsCyLYDBIPB7fncotlUq5JaWu6xiGgWmabG1tuanINE0EQXAPwSlk6vU6zWaTdruNpmnud3eWsk6fnkwmMU2Tzc1NVFVFURSi0SjpdHp3iB89ehRRFOnt7XWHCNFolFwu58ar08AYhuEWNH6/H4/H8zlL71R4J5XJskwgECAWi5HP51lZWaHVajE8PEw8Hufw4cO7Q3zfvn0C4E5MNU2jq6uLarVKPp//nPA5hYgzcYlEIoRCIfcQHLd3SDvEPR4PHo+HfD5PPp9HEARGRkYIhUIMDQ0Ju0Ic4NixY3g8Hnp7e8lms8RiMcLhMNlsFk3TXHW3bZtgMOjmfScEvF6vW8s7qczxgGazSSAQ4M9//jOqqlKpVHj88cfx+XyMjY3t7ujp1KlTQrlcdicupVKJkZER1tbWuHfvHqqqEolEiMVitNtt6vW6q+iNRoNms4kkSfh8PtfC0WgURVHo7+9nc3OTjY0N3n33XQYGBkilUiSTSU6ePCnsKnGA559/nkqlwtGjR8nn8/j9fh5//HEsy+LWrVvMz8+j6zqhUAifz4dhGG7z0mq1UFUVXdeJRCIEg0F32loqlbh37x53796lq6sLRVGIRCJMTEzs2pT1c8Qfe+wxYWpqyv1j2WyWVCpFIpGgUqkwNzfHnTt33JTnDCUlSaK7u5v+/n66u7vxeDxun16r1SgUCly/fp3bt29z+vRpBgcHqdVqRKPRB2uh8LOf/cyemZlhYWGBYDBIJBIBoFgs0mw2CYfDxONxfD4fg4ODros7vXWhUKDT6bg5/v3332dlZYWhoSHS6TSnTp1i3759VKtVzpw5w1c9dvpfNymvvPKKff36dbLZLIqiuBVWs9mk0WhgWZbbn4fDYURRRNM0AoEAvb29+Hw+Go0Gly9fZmNjg4mJCcbGxti/f787mJyfn6darTI5OcmJEyeEB4J4sVj8wfT09L/Pzs6SzWbdpWEikXBJGoZBs9kkGo0iyzKmabrLhtXVVTKZDJubm5w9e5YjR44wMDDAd7/7XWF2dtZeXFzkyJEj7pZm//79pFIpenp6vhIP+D8f8NZbb9nr6+ssLy+ztbXl1t5er9fdhxeLRSRJoquri0qlQiaTYXt7m0gkwpkzZ5BlmbGxMV544QX3eR9//LE9Pz/PsWPHuHHjBouLi0iSxMDAAMePH2dqakrYVeIAKysr9u3bt1leXnZn65qmoeu6W9AYhkGj0aBYLGKaJocOHeLRRx8lkUgwOTnpjp4d5HI5++OPP6ZcLjM+Ps61a9dYWFig2Wzi9Xp5/vnnOX36tLCrxHfi1q1b9tLSkuv+9XrdbTEVRSEWi5FMJhkdHWV4eJiDBw/+j8/Y2tr6+WuvvfYdwzBIpVJIkoSqqszPz1Ov17lw4QJf+9rXziYSiau7TvxvoVQqpUul0n2n2/oibz+899579k9/+lPC4TCnTp3i61//Orlcjp/85CdomsbTTz/NiRMn/pvH/CMotrQfyF/GD8Xj8aX/7yEePnx4dnx8fPJ3v/sdiqIwODjI5OSkcOPGDfvNN9/kypUr5PN5MpmMPT4+/qWQ71Z835fZZSSTyeMrKyt2vV7n7t27vPrqq1y7ds1+8sknhT/+8Y/2pUuXuHnzJs1mk6WlJTudTn8p5EUeAAwPDwvPPfccBw4cYHV1lc+KJ3t0dPTVixcvcvDgQebn53n55ZeZmZn5h1fLalv/twfqTaRMJmP/4he/YH19nSNHjnDhwgVisRj37t3jnXfeYWFhgQMHDnD+/HmeeuopYc9b3MH4+LjwrW99C0EQuHXrFtPT09RqNfr7+zlx4gTpdJqNjQ3efPNN3njjDbtYLP5gV1X9y8bly5ft119/nUqlwsmTJzl9+jQej4ePPvqITz75hLW1NYLBIJOTk5w7d46+vr4vzEN+EImfO3dOuHr1qv3666/z3nvvoWkaZ8+e5YknnnBXU5qmcfPmTQzDYG1tzR4cHBT2vMUdTE9P25cuXaJQKDA5OcmFCxfQdZ3Z2VkWFhbY2NhAURRSqRTPPvssY2Njwp62uINvfvObwp/+9Cf7V7/6FTdu3KDT6XD+/HmmpqbcoaaqqszOzmIYxhfK9Q80cYCJiQlhbm7OFgSBubk5vF4vzzzzDBMTE+7CMRgMsrCwwEsvvcS1a9fsb3zjG8KedvWd+OSTT+y3336bubk5JicnOXnyJJZl8eGHH7K2tkahUKDRaLBv3z4uXrzI2bNnhT1tcQdHjx4VMpmM3el0WFxcJBQKMTU1xbFjx6hWqwC0221WVlb49a9/zY0bN+wnn3xS2BN5/O/J88899xzDw8NkMhnm5uaIx+M8/fTT9PT0YFkWg4ODrK6u8sorrzA/P2/veVffidXVVfvdd99lenqa8+fPMzo6iqZp/OEPf2BhYYFWq4Usy4yMjHDx4kX+luXlvUh8aGhImJmZsS3L4vr165imSSqVYt++fbTbbWq1GtVqlWq1yt27d7l//749Ojoq7HniAFNTU8LS0pJdLpe5e/cu6+vrRCIRhoeHqVarrK6uous66+vrZLNZSqVS+rP2eW8TB0in00I2m3XVHqCvr49YLEYikXBfRiqXy+Ryufs7Q1tkj6O/v1/49re/zTPPPIMgCMzPz7sraJ/Ph9/vd/d3pVIp/U9hcQdOnX7p0iU7k8kgiqK76lIUxX19dKerC/wTYXt7+8zm5uaV5eVlNjY2iMfj+P1+hoeH6enpmd35evg/FXEHm1uF7ZXltXgg6EcSPSR7u/+zO9H1ff6VsFWq/pyHeIiHeIh/FfwXjVDdIW9O2PAAAAAASUVORK5CYII=" alt="MEME Logo"> + <h1>MEME</h1> + <h2>Multiple Em for Motif Elicitation</h2> + </div> + <p> + For further information on how to interpret these results or to get a + copy of the MEME software please access + <a href="http://meme-suite.org/">http://meme-suite.org</a>. + </p> + <p>If you use MEME in your research, please cite the following paper:<br /> + <span class="citation"> + Timothy L. Bailey and Charles Elkan, + "Fitting a mixture model by expectation maximization to discover motifs in biopolymers", + <em>Proceedings of the Second International Conference on Intelligent Systems + for Molecular Biology</em>, pp. 28-36, AAAI Press, Menlo Park, California, 1994. + <a href="http://meme-suite.org/doc/ismb94.pdf">[pdf]</a> + </span> + </p> + </div> + <!-- navigation --> + <div class="pad2"> + <a class="jump" href="#motifs_sec">Discovered Motifs</a> + | + <a class="jump" href="#sites_sec">Motif Locations</a> + | + <a class="jump" href="#inputs_sec">Inputs & Settings</a> + | + <a class="jump" href="#info_sec">Program information</a> + </div> + <!-- alert the user when their browser is not up to the task --> + <noscript><h1 style="color:red">Javascript is required to view these results!</h1></noscript> + <h1 id="html5_warning" style="color:red; display:none;">Your browser does not support canvas!</h1> + <script> + if (!window.HTMLCanvasElement) $("html5_warning").style.display = "block"; + </script> + <h2 class="mainh pad2" id="motifs_sec">Discovered Motifs</h2> + <div id="motifs" class="box"> + <p>Please wait... Loading...</p> + <p>If the page has fully loaded and this message does not disappear then an error may have occurred.</p> + </div> + <h2 class="mainh pad2" id="sites_sec">Motif Locations</h2> + <div id="blocks" class="box"> + <p>Please wait... Loading...</p> + <p>If the page has fully loaded and this message does not disappear then an error may have occurred.</p> + </div> + <h2 class="mainh pad2" id="inputs_sec">Inputs & Settings</h2> + <div class="box"> + <h4>Sequences</h4> + <table id="seq_info" class="inputs"> + <tr><th>Source <div class="help" data-topic="pop_seq_source"></div></th> + <th class="col_psp">PSP Source <div class="help" data-topic="pop_psp_source"></div></th> + <th>Alphabet <div class="help" data-topic="pop_seq_alph"></div></th> + <th>Sequence Count <div class="help" data-topic="pop_seq_count"></div></th> + </tr> + <tr> + <td id="ins_seq_source"></td> + <td id="ins_seq_psp" class="col_psp"></td> + <td id="ins_seq_alphabet"></td> + <td id="ins_seq_count"></td> + </tr> + </table> + <script> + { + var db = data.sequence_db; + $("ins_seq_source").innerHTML = db.source; + $("ins_seq_alphabet").innerHTML = meme_alphabet.get_alphabet_name(); + $("ins_seq_count").innerHTML = db.sequences.length; + if (db.psp) { + $("ins_seq_psp").innerHTML = db.psp; + } + toggle_class($("seq_info"), "hide_psp", !(db.psp)); + } + </script> + <h4>Background</h4> + <span id="alpha_bg"></span> + <script> + { + $("alpha_bg").appendChild(make_alpha_bg_table(meme_alphabet, data.sequence_db.freqs)); + } + </script> + <h4>Other Settings</h4> + <table id="tbl_settings" class="inputs hide_advanced"> + <tr> + <th>Motif Site Distribution</th> + <td id="opt_mod"> + <span class="mod_zoops">ZOOPS: Zero or one site per sequence</span> + <span class="mod_oops">OOPS: Exactly one site per sequence</span> + <span class="mod_anr">ANR: Any number of sites per sequence</span> + </td> + </tr> + <tr> + <th>Site Strand Handling</th> + <td id="opt_strand"> + <span class="strand_none">This alphabet only has one strand</span> + <span class="strand_given">Sites must be on the given strand</span> + <span class="strand_both">Sites may be on either strand</span> + </td> + </tr> + <tr> + <th>Maximum Number of Motifs</th> + <td id="opt_nmotifs"></td> + </tr> + <tr> + <th>Motif E-value Threshold</th> + <td id="opt_evt"></td> + </tr> + <tr> + <th>Minimum Motif Width</th> + <td id="opt_minw"></td> + </tr> + <tr> + <th>Maximum Motif Width</th> + <td id="opt_maxw"></td> + </tr> + <tr> + <th>Minimum Sites per Motif</th> + <td id="opt_minsites"></td> + </tr> + <tr> + <th>Maximum Sites per Motif</th> + <td id="opt_maxsites"></td> + </tr> + <tr class="advanced"> + <th>Bias on Number of Sites</th> + <td id="opt_wnsites"></td> + </tr> + <tr class="advanced"> + <th>Sequence Prior</th> + <td id="opt_prior"> + <span class="prior_dirichlet">Simple Dirichlet</span> + <span class="prior_dmix">Dirichlets Mix</span> + <span class="prior_mega">Mega-weight Dirichlets Mix</span> + <span class="prior_megap">Mega-weight Dirichlets Mix Plus</span> + <span class="prior_addone">Add One</span> + </td> + </tr> + <tr class="advanced"> + <th>Sequence Prior Strength</th> + <td id="opt_b"></td> + </tr> + <tr class="advanced"> + <th>EM Starting Point Source</th> + <td id="opt_substring"> + <span class="substring_on">From substrings in input sequences</span> + <span class="substring_off">From strings on command line (-cons)</span> + </td> + </tr> + <tr class="advanced"> + <th>EM Starting Point Map Type</th> + <td id="opt_spmap"> + <span class="spmap_uni">Uniform</span> + <span class="spmap_pam">Point Accepted Mutation</span> + </td> + </tr> + <tr class="advanced"> + <th>EM Starting Point Fuzz</th> + <td id="opt_spfuzz"></td> + </tr> + <tr class="advanced"> + <th>EM Maximum Iterations</th> + <td id="opt_maxiter"></td> + </tr> + <tr class="advanced"> + <th>EM Improvement Threshold</th> + <td id="opt_distance"></td> + </tr> + <tr class="advanced"> + <th>Trim Gap Open Cost</th> + <td id="opt_wg"></td> + </tr> + <tr class="advanced"> + <th>Trim Gap Extend Cost</th> + <td id="opt_ws"></td> + </tr> + <tr class="advanced"> + <th>End Gap Treatment</th> + <td id="opt_noendgaps"> + <span class="noendgaps_on">No cost</span> + <span class="noendgaps_off">Same cost as other gaps</span> + </td> + </tr> + <tr> + <td colspan="2" style="text-align: center"> + <a href="javascript:toggle_class(document.getElementById('tbl_settings'), 'hide_advanced')"> + <span class="show_more">Show Advanced Settings</span> + <span class="show_less">Hide Advanced Settings</span> + </a> + </td> + </tr> + </table> + <script> + { + $("opt_mod").className = data.options.mod; + $("opt_strand").className = (meme_alphabet.has_complement() ? (data.options.revcomp ? "both" : "given") : "none"); + $("opt_nmotifs").textContent = data.options.nmotifs; + $("opt_evt").textContent = (typeof data.options.evt === "number" ? data.options.evt : "no limit"); + $("opt_minw").textContent = data.options.minw; + $("opt_maxw").textContent = data.options.maxw; + $("opt_minsites").textContent = data.options.minsites; + $("opt_maxsites").textContent = data.options.maxsites; + $("opt_wnsites").textContent = data.options.wnsites; + $("opt_spmap").className = data.options.spmap; + $("opt_spfuzz").textContent = data.options.spfuzz; + $("opt_prior").className = data.options.prior; + $("opt_b").textContent = data.options.b; + $("opt_maxiter").textContent = data.options.maxiter; + $("opt_distance").textContent = data.options.distance; + $("opt_wg").textContent = data.options.wg; + $("opt_ws").textContent = data.options.ws; + $("opt_noendgaps").className = (data.options.noendgaps ? "on" : "off"); + $("opt_substring").className = (data.options.substring ? "on" : "off"); + } + </script> + </div> + <!-- list information on this program --> + <div id="info_sec" class="bar"> + <div class="subsection"> + <h5 id="version">MEME version</h5> + <span id="ins_version"></span> + (Release date: <span id="ins_release"></span>)<br> + </div> + <script> + $("ins_version").innerHTML = data["version"]; + $("ins_release").innerHTML = data["release"]; + </script> + <div class="subsection"> + <h5 id="reference">Reference</h5> + <span class="citation"> + Timothy L. Bailey and Charles Elkan, + "Fitting a mixture model by expectation maximization to discover motifs in biopolymers", + <em>Proceedings of the Second International Conference on Intelligent Systems + for Molecular Biology</em>, pp. 28-36, AAAI Press, Menlo Park, California, 1994. + </span> + </div> + <div class="subsection"> + <h5 id="command">Command line</h5> + <textarea id="cmd" rows="5" style="width:100%;" readonly="readonly"> + </textarea> + <script>$("cmd").value = data["cmd"].join(" ");</script> + </div> + </div> + + </body> +</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/meme_output_test1.txt Thu May 17 14:11:00 2018 -0400 @@ -0,0 +1,325 @@ +******************************************************************************** +MEME - Motif discovery tool +******************************************************************************** +MEME version 4.12.0 (Release date: Tue Jun 27 16:22:50 2017 -0700) + +For further information on how to interpret these results or to get +a copy of the MEME software please access http://meme-suite.org . + +This file may be used as input to the MAST algorithm for searching +sequence databases for matches to groups of motifs. MAST is available +for interactive use and downloading at http://meme-suite.org . +******************************************************************************** + + +******************************************************************************** +REFERENCE +******************************************************************************** +If you use this program in your research, please cite: + +Timothy L. Bailey and Charles Elkan, +"Fitting a mixture model by expectation maximization to discover +motifs in biopolymers", Proceedings of the Second International +Conference on Intelligent Systems for Molecular Biology, pp. 28-36, +AAAI Press, Menlo Park, California, 1994. +******************************************************************************** + + +******************************************************************************** +TRAINING SET +******************************************************************************** +DATAFILE= meme_input_1.fasta +ALPHABET= ACDEFGHIKLMNPQRSTVWY +Sequence name Weight Length Sequence name Weight Length +------------- ------ ------ ------------- ------ ------ +chr21_19617074_19617124_ 1.0000 50 chr21_26934381_26934431_ 1.0000 50 +chr21_28217753_28217803_ 1.0000 50 chr21_31710037_31710087_ 1.0000 50 +chr21_31744582_31744632_ 1.0000 50 chr21_31768316_31768366_ 1.0000 50 +chr21_31914206_31914256_ 1.0000 50 chr21_31933633_31933683_ 1.0000 50 +chr21_31962741_31962791_ 1.0000 50 chr21_31964683_31964733_ 1.0000 50 +chr21_31973364_31973414_ 1.0000 50 chr21_31992870_31992920_ 1.0000 50 +chr21_32185595_32185645_ 1.0000 50 chr21_32202076_32202126_ 1.0000 50 +chr21_32253899_32253949_ 1.0000 50 chr21_32410820_32410870_ 1.0000 50 +chr21_36411748_36411798_ 1.0000 50 chr21_37838750_37838800_ 1.0000 50 +chr21_45705687_45705737_ 1.0000 50 chr21_45971413_45971463_ 1.0000 50 +chr21_45978668_45978718_ 1.0000 50 chr21_45993530_45993580_ 1.0000 50 +chr21_46020421_46020471_ 1.0000 50 chr21_46031920_46031970_ 1.0000 50 +chr21_46046964_46047014_ 1.0000 50 chr21_46057197_46057247_ 1.0000 50 +chr21_46086869_46086919_ 1.0000 50 chr21_46102103_46102153_ 1.0000 50 +chr21_47517957_47518007_ 1.0000 50 chr21_47575506_47575556_ 1.0000 50 +******************************************************************************** + +******************************************************************************** +COMMAND LINE SUMMARY +******************************************************************************** +This information can also be useful in the event you wish to report a +problem with the MEME software. + +command: meme meme_input_1.fasta -o meme_test1_out -nostatus -maxsize 1000000 + +model: mod= zoops nmotifs= 1 evt= inf +object function= E-value of product of p-values +width: minw= 8 maxw= 50 +width: wg= 11 ws= 1 endgaps= yes +nsites: minsites= 2 maxsites= 30 wnsites= 0.8 +theta: spmap= pam spfuzz= 120 +global: substring= yes branching= no wbranch= no +em: prior= megap b= 7500 maxiter= 50 + distance= 1e-05 +data: n= 1500 N= 30 shuffle= -1 + +sample: seed= 0 ctfrac= -1 maxwords= -1 +Dirichlet mixture priors file: prior30.plib +Letter frequencies in dataset: +A 0.294 C 0.231 D 0.000 E 0.000 F 0.000 G 0.257 H 0.000 I 0.000 K 0.000 +L 0.000 M 0.000 N 0.000 P 0.000 Q 0.000 R 0.000 S 0.000 T 0.217 V 0.000 +W 0.000 Y 0.000 +Background letter frequencies (from dataset with add-one prior applied): +A 0.291 C 0.229 D 0.001 E 0.001 F 0.001 G 0.255 H 0.001 I 0.001 K 0.001 +L 0.001 M 0.001 N 0.001 P 0.001 Q 0.001 R 0.001 S 0.001 T 0.215 V 0.001 +W 0.001 Y 0.001 +******************************************************************************** + + +******************************************************************************** +MOTIF GGGGTATAAAA MEME-1 width = 11 sites = 25 llr = 239 E-value = 2.4e-011 +******************************************************************************** +-------------------------------------------------------------------------------- + Motif GGGGTATAAAA MEME-1 Description +-------------------------------------------------------------------------------- +Simplified A 2323:a:a8a8 +pos.-specific C ::3:::::::: +probability D ::::::::::: +matrix E ::::::::::: + F ::::::::::: + G 7746::::::1 + H ::::::::::: + I ::::::::::: + K ::::::::::: + L ::::::::::: + M ::::::::::: + N ::::::::::: + P ::::::::::: + Q ::::::::::: + R ::::::::::: + S ::::::::::: + T 1:2:a:a:2:: + V ::::::::::: + W ::::::::::: + Y ::::::::::: + + bits 10.6 + 9.5 + 8.5 + 7.4 +Relative 6.3 +Entropy 5.3 +(13.8 bits) 4.2 + 3.2 + 2.1 * ** + 1.1 ** ******** + 0.0 ----------- + +Multilevel GGGGTATAAAA +consensus AACA T +sequence + + +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- + Motif GGGGTATAAAA MEME-1 sites sorted by position p-value +-------------------------------------------------------------------------------- +Sequence name Start P-value Site +------------- ----- --------- ----------- +chr21_46046964_46047014_ 13 1.06e-06 AAGGCCAGGA GGGGTATAAAA GCCTGAGAGC +chr21_46057197_46057247_ 37 3.41e-06 ACAGGCCCTG GGCATATAAAA GCC +chr21_45971413_45971463_ 10 3.41e-06 CAGGCCCTG GGCATATAAAA GCCCCAGCAG +chr21_31964683_31964733_ 14 3.41e-06 GATTCACTGA GGCATATAAAA GGCCCTCTGC +chr21_45993530_45993580_ 8 4.00e-06 CCAAGGA GGAGTATAAAA GCCCCACAAA +chr21_32202076_32202126_ 14 5.01e-06 CCACCAGCTT GAGGTATAAAA AGCCCTGTAC +chr21_46031920_46031970_ 16 6.06e-06 ATACCCAGGG AGGGTATAAAA CCTCAGCAGC +chr21_32410820_32410870_ 22 8.67e-06 AATCACTGAG GATGTATAAAA GTCCCAGGGA +chr21_32185595_32185645_ 19 8.67e-06 CACCAGAGCT GGGATATATAA AGAAGGTTCT +chr21_31992870_31992920_ 17 8.67e-06 CACTATTGAA GATGTATAAAA TTTCATTTGC +chr21_46020421_46020471_ 3 1.21e-05 GA GACATATAAAA GCCAACATCC +chr21_47517957_47518007_ 33 1.59e-05 CCGGCGGGGC GGGGTATAAAG GGGGCGG +chr21_45978668_45978718_ 5 1.59e-05 CAGA GGGGTATAAAG GTTCCGACCA +chr21_31914206_31914256_ 16 1.68e-05 CCCACTACTT AGAGTATAAAA TCATTCTGAG +chr21_32253899_32253949_ 20 2.03e-05 CACCAGCAAG GATATATAAAA GCTCAGGAGT +chr21_31744582_31744632_ 13 3.06e-05 CAGGTCTAAG AGCATATATAA CTTGGAGTCC +chr21_19617074_19617124_ 40 3.06e-05 CCTCGGGACG TGGGTATATAA +chr21_45705687_45705737_ 38 3.82e-05 CGTGGTCGCG GGGGTATAACA GC +chr21_31768316_31768366_ 1 3.82e-05 . AACGTATATAA ATGGTCCTGT +chr21_47575506_47575556_ 31 4.02e-05 GCTGCCGGTG AGCGTATAAAG GCCCTGGCG +chr21_26934381_26934431_ 28 5.52e-05 AGTCACAAGT GAGTTATAAAA GGGTCGCACG +chr21_31710037_31710087_ 15 5.94e-05 CCCAGGTTTC TGAGTATATAA TCGCCGCACC +chr21_36411748_36411798_ 23 6.78e-05 AGTTTCAGTT GGCATCtaaaa attatataac +chr21_31933633_31933683_ 3 2.08e-04 TC AGAGTATATAT AAATGTTCCT +chr21_31962741_31962791_ 14 4.05e-04 TATAACTCAG GTTGGATAAAA TAATTTGTAC +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- + Motif GGGGTATAAAA MEME-1 block diagrams +-------------------------------------------------------------------------------- +SEQUENCE NAME POSITION P-VALUE MOTIF DIAGRAM +------------- ---------------- ------------- +chr21_46046964_46047014_ 1.1e-06 12_[1]_27 +chr21_46057197_46057247_ 3.4e-06 36_[1]_3 +chr21_45971413_45971463_ 3.4e-06 9_[1]_30 +chr21_31964683_31964733_ 3.4e-06 13_[1]_26 +chr21_45993530_45993580_ 4e-06 7_[1]_32 +chr21_32202076_32202126_ 5e-06 13_[1]_26 +chr21_46031920_46031970_ 6.1e-06 15_[1]_24 +chr21_32410820_32410870_ 8.7e-06 21_[1]_18 +chr21_32185595_32185645_ 8.7e-06 18_[1]_21 +chr21_31992870_31992920_ 8.7e-06 16_[1]_23 +chr21_46020421_46020471_ 1.2e-05 2_[1]_37 +chr21_47517957_47518007_ 1.6e-05 32_[1]_7 +chr21_45978668_45978718_ 1.6e-05 4_[1]_35 +chr21_31914206_31914256_ 1.7e-05 15_[1]_24 +chr21_32253899_32253949_ 2e-05 19_[1]_20 +chr21_31744582_31744632_ 3.1e-05 12_[1]_27 +chr21_19617074_19617124_ 3.1e-05 39_[1] +chr21_45705687_45705737_ 3.8e-05 37_[1]_2 +chr21_31768316_31768366_ 3.8e-05 [1]_39 +chr21_47575506_47575556_ 4e-05 30_[1]_9 +chr21_26934381_26934431_ 5.5e-05 27_[1]_12 +chr21_31710037_31710087_ 5.9e-05 14_[1]_25 +chr21_36411748_36411798_ 6.8e-05 22_[1]_17 +chr21_31933633_31933683_ 0.00021 2_[1]_37 +chr21_31962741_31962791_ 0.0004 13_[1]_26 +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- + Motif GGGGTATAAAA MEME-1 in BLOCKS format +-------------------------------------------------------------------------------- +BL MOTIF GGGGTATAAAA width=11 seqs=25 +chr21_46046964_46047014_ ( 13) GGGGTATAAAA 1 +chr21_46057197_46057247_ ( 37) GGCATATAAAA 1 +chr21_45971413_45971463_ ( 10) GGCATATAAAA 1 +chr21_31964683_31964733_ ( 14) GGCATATAAAA 1 +chr21_45993530_45993580_ ( 8) GGAGTATAAAA 1 +chr21_32202076_32202126_ ( 14) GAGGTATAAAA 1 +chr21_46031920_46031970_ ( 16) AGGGTATAAAA 1 +chr21_32410820_32410870_ ( 22) GATGTATAAAA 1 +chr21_32185595_32185645_ ( 19) GGGATATATAA 1 +chr21_31992870_31992920_ ( 17) GATGTATAAAA 1 +chr21_46020421_46020471_ ( 3) GACATATAAAA 1 +chr21_47517957_47518007_ ( 33) GGGGTATAAAG 1 +chr21_45978668_45978718_ ( 5) GGGGTATAAAG 1 +chr21_31914206_31914256_ ( 16) AGAGTATAAAA 1 +chr21_32253899_32253949_ ( 20) GATATATAAAA 1 +chr21_31744582_31744632_ ( 13) AGCATATATAA 1 +chr21_19617074_19617124_ ( 40) TGGGTATATAA 1 +chr21_45705687_45705737_ ( 38) GGGGTATAACA 1 +chr21_31768316_31768366_ ( 1) AACGTATATAA 1 +chr21_47575506_47575556_ ( 31) AGCGTATAAAG 1 +chr21_26934381_26934431_ ( 28) GAGTTATAAAA 1 +chr21_31710037_31710087_ ( 15) TGAGTATATAA 1 +chr21_36411748_36411798_ ( 23) GGCATCTAAAA 1 +chr21_31933633_31933683_ ( 3) AGAGTATATAT 1 +chr21_31962741_31962791_ ( 14) GTTGGATAAAA 1 +// + +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- + Motif GGGGTATAAAA MEME-1 position-specific scoring matrix +-------------------------------------------------------------------------------- +log-odds matrix: alength= 20 w= 11 n= 1200 bayes= 5.33554 E= 2.4e-011 + -32 -680 91 77 7 138 -20 55 64 107 11 150 142 72 87 396 -148 221 -140 -36 + -11 -680 89 76 7 137 -21 55 63 107 10 149 141 71 87 396 -239 220 -140 -36 + -79 41 4 21 -7 44 -62 42 -5 99 0 99 138 52 42 399 -46 223 -173 -68 + 11 -677 48 47 -2 127 -43 46 27 101 3 124 138 60 62 397 -235 220 -160 -55 + -596 -820 12 -21 -53 -267 -74 37 16 44 -37 98 31 9 19 319 212 127 -193 -95 + 165 -261 70 110 77 -521 -4 147 95 201 90 121 124 91 107 425 -527 314 -95 8 + -838 -990 -89 -149 -151 -841 -161 -117 -113 -66 -209 -68 -69 -129 -91 111 221 -55 -255 -173 + 176 -858 -79 -103 -115 -717 -148 -95 -108 -17 -162 -61 -12 -95 -69 193 -737 52 -240 -153 + 134 -686 0 16 -12 -553 -68 44 -8 96 -9 88 124 41 36 384 11 216 -177 -71 + 165 -261 70 110 77 -521 -4 147 95 201 90 121 124 91 107 425 -527 314 -95 8 + 147 -614 89 129 93 -121 12 160 113 217 108 144 144 111 125 447 -241 332 -81 22 +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- + Motif GGGGTATAAAA MEME-1 position-specific probability matrix +-------------------------------------------------------------------------------- +letter-probability matrix: alength= 20 w= 11 nsites= 25 E= 2.4e-011 + 0.240000 0.000000 0.000000 0.000000 0.000000 0.680000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.080000 0.000000 0.000000 0.000000 + 0.280000 0.000000 0.000000 0.000000 0.000000 0.680000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.040000 0.000000 0.000000 0.000000 + 0.160000 0.320000 0.000000 0.000000 0.000000 0.360000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.160000 0.000000 0.000000 0.000000 + 0.320000 0.000000 0.000000 0.000000 0.000000 0.640000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.040000 0.000000 0.000000 0.000000 + 0.000000 0.000000 0.000000 0.000000 0.000000 0.040000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.960000 0.000000 0.000000 0.000000 + 0.960000 0.040000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 + 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 + 1.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 + 0.760000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.240000 0.000000 0.000000 0.000000 + 0.960000 0.040000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 + 0.840000 0.000000 0.000000 0.000000 0.000000 0.120000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.040000 0.000000 0.000000 0.000000 +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- + Motif GGGGTATAAAA MEME-1 regular expression +-------------------------------------------------------------------------------- +[GA][GA][GC][GA]TATA[AT]AA +-------------------------------------------------------------------------------- + + + + +Time 0.77 secs. + +******************************************************************************** + + +******************************************************************************** +SUMMARY OF MOTIFS +******************************************************************************** + +-------------------------------------------------------------------------------- + Combined block diagrams: non-overlapping sites with p-value < 0.0001 +-------------------------------------------------------------------------------- +SEQUENCE NAME COMBINED P-VALUE MOTIF DIAGRAM +------------- ---------------- ------------- +chr21_19617074_19617124_ 1.22e-03 39_[1(3.06e-05)] +chr21_26934381_26934431_ 2.21e-03 27_[1(5.52e-05)]_12 +chr21_28217753_28217803_ 7.29e-01 50 +chr21_31710037_31710087_ 2.37e-03 14_[1(5.94e-05)]_25 +chr21_31744582_31744632_ 1.22e-03 12_[1(3.06e-05)]_27 +chr21_31768316_31768366_ 1.53e-03 [1(3.82e-05)]_39 +chr21_31914206_31914256_ 6.70e-04 15_[1(1.68e-05)]_24 +chr21_31933633_31933683_ 1.81e-03 4_[1(4.54e-05)]_35 +chr21_31962741_31962791_ 1.61e-02 50 +chr21_31964683_31964733_ 1.36e-04 13_[1(3.41e-06)]_26 +chr21_31973364_31973414_ 1.99e-01 50 +chr21_31992870_31992920_ 3.47e-04 16_[1(8.67e-06)]_23 +chr21_32185595_32185645_ 3.47e-04 18_[1(8.67e-06)]_21 +chr21_32202076_32202126_ 2.01e-04 13_[1(5.01e-06)]_26 +chr21_32253899_32253949_ 8.11e-04 19_[1(2.03e-05)]_20 +chr21_32410820_32410870_ 3.47e-04 21_[1(8.67e-06)]_18 +chr21_36411748_36411798_ 2.71e-03 22_[1(6.78e-05)]_17 +chr21_37838750_37838800_ 8.23e-02 50 +chr21_45705687_45705737_ 1.53e-03 37_[1(3.82e-05)]_2 +chr21_45971413_45971463_ 1.36e-04 9_[1(3.41e-06)]_30 +chr21_45978668_45978718_ 6.37e-04 4_[1(1.59e-05)]_35 +chr21_45993530_45993580_ 1.60e-04 7_[1(4.00e-06)]_32 +chr21_46020421_46020471_ 4.83e-04 2_[1(1.21e-05)]_37 +chr21_46031920_46031970_ 2.43e-04 15_[1(6.06e-06)]_24 +chr21_46046964_46047014_ 4.26e-05 12_[1(1.06e-06)]_27 +chr21_46057197_46057247_ 1.36e-04 36_[1(3.41e-06)]_3 +chr21_46086869_46086919_ 4.30e-02 50 +chr21_46102103_46102153_ 4.30e-02 50 +chr21_47517957_47518007_ 6.37e-04 32_[1(1.59e-05)]_7 +chr21_47575506_47575556_ 1.61e-03 30_[1(4.02e-05)]_9 +-------------------------------------------------------------------------------- + +******************************************************************************** + + +******************************************************************************** +Stopped because requested number of motifs (1) found. +******************************************************************************** + +CPU: ThinkPad-T450s + +********************************************************************************
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/meme_output_test1.xml Thu May 17 14:11:00 2018 -0400 @@ -0,0 +1,1292 @@ +<?xml version='1.0' encoding='UTF-8' standalone='yes'?> +<!-- Document definition --> +<!DOCTYPE MEME[ +<!ELEMENT MEME ( + training_set, + model, + motifs, + scanned_sites_summary? +)> +<!ATTLIST MEME + version CDATA #REQUIRED + release CDATA #REQUIRED +> +<!-- Training-set elements --> +<!ELEMENT training_set (alphabet, ambigs, sequence*, letter_frequencies)> +<!ATTLIST training_set datafile CDATA #REQUIRED length CDATA #REQUIRED> +<!ELEMENT alphabet (letter*)> +<!ATTLIST alphabet name CDATA #REQUIRED> +<!ELEMENT ambigs (letter*)> +<!ELEMENT letter EMPTY> +<!ATTLIST letter id ID #REQUIRED> +<!ATTLIST letter symbol CDATA #REQUIRED> +<!ATTLIST letter equals CDATA #IMPLIED> +<!ATTLIST letter aliases CDATA #IMPLIED> +<!ATTLIST letter complement CDATA #IMPLIED> +<!ATTLIST letter name CDATA #IMPLIED> +<!ATTLIST letter colour CDATA #IMPLIED> +<!ELEMENT sequence EMPTY> +<!ATTLIST sequence id ID #REQUIRED + name CDATA #REQUIRED + length CDATA #REQUIRED + weight CDATA #REQUIRED +> +<!ELEMENT letter_frequencies (alphabet_array)> + +<!-- Model elements --> +<!ELEMENT model ( + command_line, + host, + type, + nmotifs, + evalue_threshold, + object_function, + spfun, + min_width, + max_width, + wg, + ws, + endgaps, + minsites, + maxsites, + wnsites, + spmap, + spfuzz, + prior, + beta, + maxiter, + distance, + num_sequences, + num_positions, + seed, + hsfrac, + maxwords, + maxsize, + csites, + strands, + priors_file, + reason_for_stopping, + back_order, + background_frequencies +)> +<!ELEMENT command_line (#PCDATA)*> +<!ELEMENT host (#PCDATA)*> +<!ELEMENT type (#PCDATA)*> +<!ELEMENT nmotifs (#PCDATA)*> +<!ELEMENT evalue_threshold (#PCDATA)*> +<!ELEMENT object_function (#PCDATA)*> +<!ELEMENT spfun (#PCDATA)*> +<!ELEMENT min_width (#PCDATA)*> +<!ELEMENT max_width (#PCDATA)*> +<!ELEMENT wg (#PCDATA)*> +<!ELEMENT ws (#PCDATA)*> +<!ELEMENT endgaps (#PCDATA)*> +<!ELEMENT minsites (#PCDATA)*> +<!ELEMENT maxsites (#PCDATA)*> +<!ELEMENT wnsites (#PCDATA)*> +<!ELEMENT spmap (#PCDATA)*> +<!ELEMENT spfuzz (#PCDATA)*> +<!ELEMENT prior (#PCDATA)*> +<!ELEMENT beta (#PCDATA)*> +<!ELEMENT maxiter (#PCDATA)*> +<!ELEMENT distance (#PCDATA)*> +<!ELEMENT num_sequences (#PCDATA)*> +<!ELEMENT num_positions (#PCDATA)*> +<!ELEMENT seed (#PCDATA)*> +<!ELEMENT hsfrac (#PCDATA)*> +<!ELEMENT maxwords (#PCDATA)*> +<!ELEMENT maxsites (#PCDATA)*> +<!ELEMENT csites (#PCDATA)*> +<!ELEMENT strands (#PCDATA)*> +<!ELEMENT priors_file (#PCDATA)*> +<!ELEMENT reason_for_stopping (#PCDATA)*> +<!ELEMENT back_order (#PCDATA)*> +<!ELEMENT background_frequencies (alphabet_array)> +<!ATTLIST background_frequencies source CDATA #REQUIRED> + +<!-- Motif elements --> +<!ELEMENT motifs (motif*)> +<!ELEMENT motif (scores, probabilities, regular_expression?, contributing_sites)> +<!ATTLIST motif id ID #REQUIRED + name CDATA #REQUIRED + alt CDATA "" + width CDATA #REQUIRED + sites CDATA #REQUIRED + llr CDATA #REQUIRED + ic CDATA #REQUIRED + re CDATA #REQUIRED + bayes_threshold CDATA #REQUIRED + e_value CDATA #REQUIRED + elapsed_time CDATA #REQUIRED + url CDATA "" +> +<!ELEMENT scores (alphabet_matrix)> +<!ELEMENT probabilities (alphabet_matrix)> +<!ELEMENT regular_expression (#PCDATA)*> + +<!-- Contributing site elements --> +<!-- Contributing sites are motif occurences found during the motif discovery phase --> +<!ELEMENT contributing_sites (contributing_site*)> +<!ELEMENT contributing_site (left_flank, site, right_flank)> +<!ATTLIST contributing_site sequence_id IDREF #REQUIRED + position CDATA #REQUIRED + strand (plus|minus|none) 'none' + pvalue CDATA #REQUIRED +> +<!-- The left_flank contains the sequence for 10 bases to the left of the motif start --> +<!ELEMENT left_flank (#PCDATA)> +<!-- The site contains the sequence for the motif instance --> +<!ELEMENT site (letter_ref*)> +<!-- The right_flank contains the sequence for 10 bases to the right of the motif end --> +<!ELEMENT right_flank (#PCDATA)> + +<!-- Scanned site elements --> +<!-- Scanned sites are motif occurences found during the sequence scan phase --> +<!ELEMENT scanned_sites_summary (scanned_sites*)> +<!ATTLIST scanned_sites_summary p_thresh CDATA #REQUIRED> +<!ELEMENT scanned_sites (scanned_site*)> +<!ATTLIST scanned_sites sequence_id IDREF #REQUIRED + pvalue CDATA #REQUIRED + num_sites CDATA #REQUIRED> +<!ELEMENT scanned_site EMPTY> +<!ATTLIST scanned_site motif_id IDREF #REQUIRED + strand (plus|minus|none) 'none' + position CDATA #REQUIRED + pvalue CDATA #REQUIRED> + +<!-- Utility elements --> +<!-- A reference to a letter in the alphabet --> +<!ELEMENT letter_ref EMPTY> +<!ATTLIST letter_ref letter_id IDREF #REQUIRED> +<!-- A alphabet-array contains one floating point value for each letter in an alphabet --> +<!ELEMENT alphabet_array (value*)> +<!ELEMENT value (#PCDATA)> +<!ATTLIST value letter_id IDREF #REQUIRED> + +<!-- A alphabet_matrix contains one alphabet_array for each position in a motif --> +<!ELEMENT alphabet_matrix (alphabet_array*)> + +]> +<!-- Begin document body --> +<MEME version="4.12.0" release="Tue Jun 27 16:22:50 2017 -0700"> +<training_set datafile="meme_input_1.fasta" length="30"> +<alphabet name="Protein" like="protein"> +<letter id="A" symbol="A" name="Alanine" colour="0000CC"/> +<letter id="C" symbol="C" name="Cysteine" colour="0000CC"/> +<letter id="D" symbol="D" name="Aspartic acid" colour="FF00FF"/> +<letter id="E" symbol="E" name="Glutamic acid" colour="FF00FF"/> +<letter id="F" symbol="F" name="Phenylalanine" colour="0000CC"/> +<letter id="G" symbol="G" name="Glycine" colour="FFB300"/> +<letter id="H" symbol="H" name="Histidine" colour="FFCCCC"/> +<letter id="I" symbol="I" name="Isoleucine" colour="0000CC"/> +<letter id="K" symbol="K" name="Lysine" colour="CC0000"/> +<letter id="L" symbol="L" name="Leucine" colour="0000CC"/> +<letter id="M" symbol="M" name="Methionine" colour="0000CC"/> +<letter id="N" symbol="N" name="Asparagine" colour="008000"/> +<letter id="P" symbol="P" name="Proline" colour="FFFF00"/> +<letter id="Q" symbol="Q" name="Glutamine" colour="008000"/> +<letter id="R" symbol="R" name="Arginine" colour="CC0000"/> +<letter id="S" symbol="S" name="Serine" colour="008000"/> +<letter id="T" symbol="T" name="Threonine" colour="008000"/> +<letter id="V" symbol="V" name="Valine" colour="0000CC"/> +<letter id="W" symbol="W" name="Tryptophan" colour="0000CC"/> +<letter id="Y" symbol="Y" name="Tyrosine" colour="33E6CC"/> +<letter id="X" symbol="X" aliases="*." equals="ACDEFGHIKLMNPQRSTVWY" name="Any amino acid"/> +<letter id="B" symbol="B" equals="DN" name="Asparagine or Aspartic acid"/> +<letter id="Z" symbol="Z" equals="EQ" name="Glutamine or Glutamic acid"/> +<letter id="J" symbol="J" equals="IL" name="Leucine or Isoleucine"/> +</alphabet> +<sequence id="sequence_0" name="chr21_19617074_19617124_+" length="50" weight="1.000000" /> +<sequence id="sequence_1" name="chr21_26934381_26934431_+" length="50" weight="1.000000" /> +<sequence id="sequence_2" name="chr21_28217753_28217803_-" length="50" weight="1.000000" /> +<sequence id="sequence_3" name="chr21_31710037_31710087_-" length="50" weight="1.000000" /> +<sequence id="sequence_4" name="chr21_31744582_31744632_-" length="50" weight="1.000000" /> +<sequence id="sequence_5" name="chr21_31768316_31768366_+" length="50" weight="1.000000" /> +<sequence id="sequence_6" name="chr21_31914206_31914256_-" length="50" weight="1.000000" /> +<sequence id="sequence_7" name="chr21_31933633_31933683_-" length="50" weight="1.000000" /> +<sequence id="sequence_8" name="chr21_31962741_31962791_-" length="50" weight="1.000000" /> +<sequence id="sequence_9" name="chr21_31964683_31964733_+" length="50" weight="1.000000" /> +<sequence id="sequence_10" name="chr21_31973364_31973414_+" length="50" weight="1.000000" /> +<sequence id="sequence_11" name="chr21_31992870_31992920_+" length="50" weight="1.000000" /> +<sequence id="sequence_12" name="chr21_32185595_32185645_-" length="50" weight="1.000000" /> +<sequence id="sequence_13" name="chr21_32202076_32202126_-" length="50" weight="1.000000" /> +<sequence id="sequence_14" name="chr21_32253899_32253949_-" length="50" weight="1.000000" /> +<sequence id="sequence_15" name="chr21_32410820_32410870_-" length="50" weight="1.000000" /> +<sequence id="sequence_16" name="chr21_36411748_36411798_-" length="50" weight="1.000000" /> +<sequence id="sequence_17" name="chr21_37838750_37838800_-" length="50" weight="1.000000" /> +<sequence id="sequence_18" name="chr21_45705687_45705737_+" length="50" weight="1.000000" /> +<sequence id="sequence_19" name="chr21_45971413_45971463_-" length="50" weight="1.000000" /> +<sequence id="sequence_20" name="chr21_45978668_45978718_-" length="50" weight="1.000000" /> +<sequence id="sequence_21" name="chr21_45993530_45993580_+" length="50" weight="1.000000" /> +<sequence id="sequence_22" name="chr21_46020421_46020471_+" length="50" weight="1.000000" /> +<sequence id="sequence_23" name="chr21_46031920_46031970_+" length="50" weight="1.000000" /> +<sequence id="sequence_24" name="chr21_46046964_46047014_+" length="50" weight="1.000000" /> +<sequence id="sequence_25" name="chr21_46057197_46057247_+" length="50" weight="1.000000" /> +<sequence id="sequence_26" name="chr21_46086869_46086919_-" length="50" weight="1.000000" /> +<sequence id="sequence_27" name="chr21_46102103_46102153_-" length="50" weight="1.000000" /> +<sequence id="sequence_28" name="chr21_47517957_47518007_+" length="50" weight="1.000000" /> +<sequence id="sequence_29" name="chr21_47575506_47575556_-" length="50" weight="1.000000" /> +<letter_frequencies> +<alphabet_array> +<value letter_id="A">0.294</value> +<value letter_id="C">0.231</value> +<value letter_id="D">0.000</value> +<value letter_id="E">0.000</value> +<value letter_id="F">0.000</value> +<value letter_id="G">0.257</value> +<value letter_id="H">0.000</value> +<value letter_id="I">0.000</value> +<value letter_id="K">0.000</value> +<value letter_id="L">0.000</value> +<value letter_id="M">0.000</value> +<value letter_id="N">0.000</value> +<value letter_id="P">0.000</value> +<value letter_id="Q">0.000</value> +<value letter_id="R">0.000</value> +<value letter_id="S">0.000</value> +<value letter_id="T">0.217</value> +<value letter_id="V">0.000</value> +<value letter_id="W">0.000</value> +<value letter_id="Y">0.000</value> +</alphabet_array> +</letter_frequencies> +</training_set> +<model> +<command_line>meme meme_input_1.fasta -o meme_test1_out -nostatus -maxsize 1000000 </command_line> +<host>ThinkPad-T450s</host> +<type>zoops</type> +<nmotifs>1</nmotifs> +<evalue_threshold>inf</evalue_threshold> +<object_function>E-value of product of p-values</object_function> +<use_llr>0</use_llr> +<min_width>8</min_width> +<max_width>50</max_width> +<wg>11</wg> +<ws>1</ws> +<endgaps>yes</endgaps> +<substring>yes</substring> +<minsites>2</minsites> +<maxsites>30</maxsites> +<wnsites>0.8</wnsites> +<spmap>pam</spmap> +<spfuzz>120</spfuzz> +<prior>megap</prior> +<beta>7500</beta> +<maxiter>50</maxiter> +<distance>1e-05</distance> +<num_sequences>30</num_sequences> +<num_positions>1500</num_positions> +<seed>0</seed> +<ctfrac>-1</ctfrac> +<maxwords>-1</maxwords> +<strands>none</strands> +<priors_file>prior30.plib</priors_file> +<reason_for_stopping>Stopped because requested number of motifs (1) found.</reason_for_stopping> +<background_frequencies source="dataset with add-one prior applied"> +<alphabet_array> +<value letter_id="A">0.291</value> +<value letter_id="C">0.229</value> +<value letter_id="D">0.001</value> +<value letter_id="E">0.001</value> +<value letter_id="F">0.001</value> +<value letter_id="G">0.255</value> +<value letter_id="H">0.001</value> +<value letter_id="I">0.001</value> +<value letter_id="K">0.001</value> +<value letter_id="L">0.001</value> +<value letter_id="M">0.001</value> +<value letter_id="N">0.001</value> +<value letter_id="P">0.001</value> +<value letter_id="Q">0.001</value> +<value letter_id="R">0.001</value> +<value letter_id="S">0.001</value> +<value letter_id="T">0.215</value> +<value letter_id="V">0.001</value> +<value letter_id="W">0.001</value> +<value letter_id="Y">0.001</value> +</alphabet_array> +</background_frequencies> +</model> +<motifs> +<motif id="motif_1" name="GGGGTATAAAA" alt="MEME-1" width="11" sites="25" ic="40.0" re="13.8" llr="239" e_value="2.4e-011" bayes_threshold="5.33554" elapsed_time="0.772000"> +<scores> +<alphabet_matrix> +<alphabet_array> +<value letter_id="A">-32</value> +<value letter_id="C">-680</value> +<value letter_id="D">91</value> +<value letter_id="E">77</value> +<value letter_id="F">7</value> +<value letter_id="G">138</value> +<value letter_id="H">-20</value> +<value letter_id="I">55</value> +<value letter_id="K">64</value> +<value letter_id="L">107</value> +<value letter_id="M">11</value> +<value letter_id="N">150</value> +<value letter_id="P">142</value> +<value letter_id="Q">72</value> +<value letter_id="R">87</value> +<value letter_id="S">396</value> +<value letter_id="T">-148</value> +<value letter_id="V">221</value> +<value letter_id="W">-140</value> +<value letter_id="Y">-36</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">-11</value> +<value letter_id="C">-680</value> +<value letter_id="D">89</value> +<value letter_id="E">76</value> +<value letter_id="F">7</value> +<value letter_id="G">137</value> +<value letter_id="H">-21</value> +<value letter_id="I">55</value> +<value letter_id="K">63</value> +<value letter_id="L">107</value> +<value letter_id="M">10</value> +<value letter_id="N">149</value> +<value letter_id="P">141</value> +<value letter_id="Q">71</value> +<value letter_id="R">87</value> +<value letter_id="S">396</value> +<value letter_id="T">-239</value> +<value letter_id="V">220</value> +<value letter_id="W">-140</value> +<value letter_id="Y">-36</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">-79</value> +<value letter_id="C">41</value> +<value letter_id="D">4</value> +<value letter_id="E">21</value> +<value letter_id="F">-7</value> +<value letter_id="G">44</value> +<value letter_id="H">-62</value> +<value letter_id="I">42</value> +<value letter_id="K">-5</value> +<value letter_id="L">99</value> +<value letter_id="M">0</value> +<value letter_id="N">99</value> +<value letter_id="P">138</value> +<value letter_id="Q">52</value> +<value letter_id="R">42</value> +<value letter_id="S">399</value> +<value letter_id="T">-46</value> +<value letter_id="V">223</value> +<value letter_id="W">-173</value> +<value letter_id="Y">-68</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">11</value> +<value letter_id="C">-677</value> +<value letter_id="D">48</value> +<value letter_id="E">47</value> +<value letter_id="F">-2</value> +<value letter_id="G">127</value> +<value letter_id="H">-43</value> +<value letter_id="I">46</value> +<value letter_id="K">27</value> +<value letter_id="L">101</value> +<value letter_id="M">3</value> +<value letter_id="N">124</value> +<value letter_id="P">138</value> +<value letter_id="Q">60</value> +<value letter_id="R">62</value> +<value letter_id="S">397</value> +<value letter_id="T">-235</value> +<value letter_id="V">220</value> +<value letter_id="W">-160</value> +<value letter_id="Y">-55</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">-596</value> +<value letter_id="C">-820</value> +<value letter_id="D">12</value> +<value letter_id="E">-21</value> +<value letter_id="F">-53</value> +<value letter_id="G">-267</value> +<value letter_id="H">-74</value> +<value letter_id="I">37</value> +<value letter_id="K">16</value> +<value letter_id="L">44</value> +<value letter_id="M">-37</value> +<value letter_id="N">98</value> +<value letter_id="P">31</value> +<value letter_id="Q">9</value> +<value letter_id="R">19</value> +<value letter_id="S">319</value> +<value letter_id="T">212</value> +<value letter_id="V">127</value> +<value letter_id="W">-193</value> +<value letter_id="Y">-95</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">165</value> +<value letter_id="C">-261</value> +<value letter_id="D">70</value> +<value letter_id="E">110</value> +<value letter_id="F">77</value> +<value letter_id="G">-521</value> +<value letter_id="H">-4</value> +<value letter_id="I">147</value> +<value letter_id="K">95</value> +<value letter_id="L">201</value> +<value letter_id="M">90</value> +<value letter_id="N">121</value> +<value letter_id="P">124</value> +<value letter_id="Q">91</value> +<value letter_id="R">107</value> +<value letter_id="S">425</value> +<value letter_id="T">-527</value> +<value letter_id="V">314</value> +<value letter_id="W">-95</value> +<value letter_id="Y">8</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">-838</value> +<value letter_id="C">-990</value> +<value letter_id="D">-89</value> +<value letter_id="E">-149</value> +<value letter_id="F">-151</value> +<value letter_id="G">-841</value> +<value letter_id="H">-161</value> +<value letter_id="I">-117</value> +<value letter_id="K">-113</value> +<value letter_id="L">-66</value> +<value letter_id="M">-209</value> +<value letter_id="N">-68</value> +<value letter_id="P">-69</value> +<value letter_id="Q">-129</value> +<value letter_id="R">-91</value> +<value letter_id="S">111</value> +<value letter_id="T">221</value> +<value letter_id="V">-55</value> +<value letter_id="W">-255</value> +<value letter_id="Y">-173</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">176</value> +<value letter_id="C">-858</value> +<value letter_id="D">-79</value> +<value letter_id="E">-103</value> +<value letter_id="F">-115</value> +<value letter_id="G">-717</value> +<value letter_id="H">-148</value> +<value letter_id="I">-95</value> +<value letter_id="K">-108</value> +<value letter_id="L">-17</value> +<value letter_id="M">-162</value> +<value letter_id="N">-61</value> +<value letter_id="P">-12</value> +<value letter_id="Q">-95</value> +<value letter_id="R">-69</value> +<value letter_id="S">193</value> +<value letter_id="T">-737</value> +<value letter_id="V">52</value> +<value letter_id="W">-240</value> +<value letter_id="Y">-153</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">134</value> +<value letter_id="C">-686</value> +<value letter_id="D">0</value> +<value letter_id="E">16</value> +<value letter_id="F">-12</value> +<value letter_id="G">-553</value> +<value letter_id="H">-68</value> +<value letter_id="I">44</value> +<value letter_id="K">-8</value> +<value letter_id="L">96</value> +<value letter_id="M">-9</value> +<value letter_id="N">88</value> +<value letter_id="P">124</value> +<value letter_id="Q">41</value> +<value letter_id="R">36</value> +<value letter_id="S">384</value> +<value letter_id="T">11</value> +<value letter_id="V">216</value> +<value letter_id="W">-177</value> +<value letter_id="Y">-71</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">165</value> +<value letter_id="C">-261</value> +<value letter_id="D">70</value> +<value letter_id="E">110</value> +<value letter_id="F">77</value> +<value letter_id="G">-521</value> +<value letter_id="H">-4</value> +<value letter_id="I">147</value> +<value letter_id="K">95</value> +<value letter_id="L">201</value> +<value letter_id="M">90</value> +<value letter_id="N">121</value> +<value letter_id="P">124</value> +<value letter_id="Q">91</value> +<value letter_id="R">107</value> +<value letter_id="S">425</value> +<value letter_id="T">-527</value> +<value letter_id="V">314</value> +<value letter_id="W">-95</value> +<value letter_id="Y">8</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">147</value> +<value letter_id="C">-614</value> +<value letter_id="D">89</value> +<value letter_id="E">129</value> +<value letter_id="F">93</value> +<value letter_id="G">-121</value> +<value letter_id="H">12</value> +<value letter_id="I">160</value> +<value letter_id="K">113</value> +<value letter_id="L">217</value> +<value letter_id="M">108</value> +<value letter_id="N">144</value> +<value letter_id="P">144</value> +<value letter_id="Q">111</value> +<value letter_id="R">125</value> +<value letter_id="S">447</value> +<value letter_id="T">-241</value> +<value letter_id="V">332</value> +<value letter_id="W">-81</value> +<value letter_id="Y">22</value> +</alphabet_array> +</alphabet_matrix> +</scores> +<probabilities> +<alphabet_matrix> +<alphabet_array> +<value letter_id="A">0.240000</value> +<value letter_id="C">0.000000</value> +<value letter_id="D">0.000000</value> +<value letter_id="E">0.000000</value> +<value letter_id="F">0.000000</value> +<value letter_id="G">0.680000</value> +<value letter_id="H">0.000000</value> +<value letter_id="I">0.000000</value> +<value letter_id="K">0.000000</value> +<value letter_id="L">0.000000</value> +<value letter_id="M">0.000000</value> +<value letter_id="N">0.000000</value> +<value letter_id="P">0.000000</value> +<value letter_id="Q">0.000000</value> +<value letter_id="R">0.000000</value> +<value letter_id="S">0.000000</value> +<value letter_id="T">0.080000</value> +<value letter_id="V">0.000000</value> +<value letter_id="W">0.000000</value> +<value letter_id="Y">0.000000</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">0.280000</value> +<value letter_id="C">0.000000</value> +<value letter_id="D">0.000000</value> +<value letter_id="E">0.000000</value> +<value letter_id="F">0.000000</value> +<value letter_id="G">0.680000</value> +<value letter_id="H">0.000000</value> +<value letter_id="I">0.000000</value> +<value letter_id="K">0.000000</value> +<value letter_id="L">0.000000</value> +<value letter_id="M">0.000000</value> +<value letter_id="N">0.000000</value> +<value letter_id="P">0.000000</value> +<value letter_id="Q">0.000000</value> +<value letter_id="R">0.000000</value> +<value letter_id="S">0.000000</value> +<value letter_id="T">0.040000</value> +<value letter_id="V">0.000000</value> +<value letter_id="W">0.000000</value> +<value letter_id="Y">0.000000</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">0.160000</value> +<value letter_id="C">0.320000</value> +<value letter_id="D">0.000000</value> +<value letter_id="E">0.000000</value> +<value letter_id="F">0.000000</value> +<value letter_id="G">0.360000</value> +<value letter_id="H">0.000000</value> +<value letter_id="I">0.000000</value> +<value letter_id="K">0.000000</value> +<value letter_id="L">0.000000</value> +<value letter_id="M">0.000000</value> +<value letter_id="N">0.000000</value> +<value letter_id="P">0.000000</value> +<value letter_id="Q">0.000000</value> +<value letter_id="R">0.000000</value> +<value letter_id="S">0.000000</value> +<value letter_id="T">0.160000</value> +<value letter_id="V">0.000000</value> +<value letter_id="W">0.000000</value> +<value letter_id="Y">0.000000</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">0.320000</value> +<value letter_id="C">0.000000</value> +<value letter_id="D">0.000000</value> +<value letter_id="E">0.000000</value> +<value letter_id="F">0.000000</value> +<value letter_id="G">0.640000</value> +<value letter_id="H">0.000000</value> +<value letter_id="I">0.000000</value> +<value letter_id="K">0.000000</value> +<value letter_id="L">0.000000</value> +<value letter_id="M">0.000000</value> +<value letter_id="N">0.000000</value> +<value letter_id="P">0.000000</value> +<value letter_id="Q">0.000000</value> +<value letter_id="R">0.000000</value> +<value letter_id="S">0.000000</value> +<value letter_id="T">0.040000</value> +<value letter_id="V">0.000000</value> +<value letter_id="W">0.000000</value> +<value letter_id="Y">0.000000</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">0.000000</value> +<value letter_id="C">0.000000</value> +<value letter_id="D">0.000000</value> +<value letter_id="E">0.000000</value> +<value letter_id="F">0.000000</value> +<value letter_id="G">0.040000</value> +<value letter_id="H">0.000000</value> +<value letter_id="I">0.000000</value> +<value letter_id="K">0.000000</value> +<value letter_id="L">0.000000</value> +<value letter_id="M">0.000000</value> +<value letter_id="N">0.000000</value> +<value letter_id="P">0.000000</value> +<value letter_id="Q">0.000000</value> +<value letter_id="R">0.000000</value> +<value letter_id="S">0.000000</value> +<value letter_id="T">0.960000</value> +<value letter_id="V">0.000000</value> +<value letter_id="W">0.000000</value> +<value letter_id="Y">0.000000</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">0.960000</value> +<value letter_id="C">0.040000</value> +<value letter_id="D">0.000000</value> +<value letter_id="E">0.000000</value> +<value letter_id="F">0.000000</value> +<value letter_id="G">0.000000</value> +<value letter_id="H">0.000000</value> +<value letter_id="I">0.000000</value> +<value letter_id="K">0.000000</value> +<value letter_id="L">0.000000</value> +<value letter_id="M">0.000000</value> +<value letter_id="N">0.000000</value> +<value letter_id="P">0.000000</value> +<value letter_id="Q">0.000000</value> +<value letter_id="R">0.000000</value> +<value letter_id="S">0.000000</value> +<value letter_id="T">0.000000</value> +<value letter_id="V">0.000000</value> +<value letter_id="W">0.000000</value> +<value letter_id="Y">0.000000</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">0.000000</value> +<value letter_id="C">0.000000</value> +<value letter_id="D">0.000000</value> +<value letter_id="E">0.000000</value> +<value letter_id="F">0.000000</value> +<value letter_id="G">0.000000</value> +<value letter_id="H">0.000000</value> +<value letter_id="I">0.000000</value> +<value letter_id="K">0.000000</value> +<value letter_id="L">0.000000</value> +<value letter_id="M">0.000000</value> +<value letter_id="N">0.000000</value> +<value letter_id="P">0.000000</value> +<value letter_id="Q">0.000000</value> +<value letter_id="R">0.000000</value> +<value letter_id="S">0.000000</value> +<value letter_id="T">1.000000</value> +<value letter_id="V">0.000000</value> +<value letter_id="W">0.000000</value> +<value letter_id="Y">0.000000</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">1.000000</value> +<value letter_id="C">0.000000</value> +<value letter_id="D">0.000000</value> +<value letter_id="E">0.000000</value> +<value letter_id="F">0.000000</value> +<value letter_id="G">0.000000</value> +<value letter_id="H">0.000000</value> +<value letter_id="I">0.000000</value> +<value letter_id="K">0.000000</value> +<value letter_id="L">0.000000</value> +<value letter_id="M">0.000000</value> +<value letter_id="N">0.000000</value> +<value letter_id="P">0.000000</value> +<value letter_id="Q">0.000000</value> +<value letter_id="R">0.000000</value> +<value letter_id="S">0.000000</value> +<value letter_id="T">0.000000</value> +<value letter_id="V">0.000000</value> +<value letter_id="W">0.000000</value> +<value letter_id="Y">0.000000</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">0.760000</value> +<value letter_id="C">0.000000</value> +<value letter_id="D">0.000000</value> +<value letter_id="E">0.000000</value> +<value letter_id="F">0.000000</value> +<value letter_id="G">0.000000</value> +<value letter_id="H">0.000000</value> +<value letter_id="I">0.000000</value> +<value letter_id="K">0.000000</value> +<value letter_id="L">0.000000</value> +<value letter_id="M">0.000000</value> +<value letter_id="N">0.000000</value> +<value letter_id="P">0.000000</value> +<value letter_id="Q">0.000000</value> +<value letter_id="R">0.000000</value> +<value letter_id="S">0.000000</value> +<value letter_id="T">0.240000</value> +<value letter_id="V">0.000000</value> +<value letter_id="W">0.000000</value> +<value letter_id="Y">0.000000</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">0.960000</value> +<value letter_id="C">0.040000</value> +<value letter_id="D">0.000000</value> +<value letter_id="E">0.000000</value> +<value letter_id="F">0.000000</value> +<value letter_id="G">0.000000</value> +<value letter_id="H">0.000000</value> +<value letter_id="I">0.000000</value> +<value letter_id="K">0.000000</value> +<value letter_id="L">0.000000</value> +<value letter_id="M">0.000000</value> +<value letter_id="N">0.000000</value> +<value letter_id="P">0.000000</value> +<value letter_id="Q">0.000000</value> +<value letter_id="R">0.000000</value> +<value letter_id="S">0.000000</value> +<value letter_id="T">0.000000</value> +<value letter_id="V">0.000000</value> +<value letter_id="W">0.000000</value> +<value letter_id="Y">0.000000</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">0.840000</value> +<value letter_id="C">0.000000</value> +<value letter_id="D">0.000000</value> +<value letter_id="E">0.000000</value> +<value letter_id="F">0.000000</value> +<value letter_id="G">0.120000</value> +<value letter_id="H">0.000000</value> +<value letter_id="I">0.000000</value> +<value letter_id="K">0.000000</value> +<value letter_id="L">0.000000</value> +<value letter_id="M">0.000000</value> +<value letter_id="N">0.000000</value> +<value letter_id="P">0.000000</value> +<value letter_id="Q">0.000000</value> +<value letter_id="R">0.000000</value> +<value letter_id="S">0.000000</value> +<value letter_id="T">0.040000</value> +<value letter_id="V">0.000000</value> +<value letter_id="W">0.000000</value> +<value letter_id="Y">0.000000</value> +</alphabet_array> +</alphabet_matrix> +</probabilities> +<regular_expression> +[GA][GA][GC][GA]TATA[AT]AA +</regular_expression> +<contributing_sites> +<contributing_site sequence_id="sequence_24" position="12" strand="none" pvalue="1.06e-06" > +<left_flank>AAGGCCAGGA</left_flank> +<site> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GCCTGAGAGC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_25" position="36" strand="none" pvalue="3.41e-06" > +<left_flank>ACAGGCCCTG</left_flank> +<site> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GCC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_19" position="9" strand="none" pvalue="3.41e-06" > +<left_flank>CAGGCCCTG</left_flank> +<site> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GCCCCAGCAG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_9" position="13" strand="none" pvalue="3.41e-06" > +<left_flank>GATTCACTGA</left_flank> +<site> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GGCCCTCTGC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_21" position="7" strand="none" pvalue="4.00e-06" > +<left_flank>CCAAGGA</left_flank> +<site> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GCCCCACAAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_13" position="13" strand="none" pvalue="5.01e-06" > +<left_flank>CCACCAGCTT</left_flank> +<site> +<letter_ref letter_id="G"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>AGCCCTGTAC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_23" position="15" strand="none" pvalue="6.06e-06" > +<left_flank>ATACCCAGGG</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CCTCAGCAGC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_15" position="21" strand="none" pvalue="8.67e-06" > +<left_flank>AATCACTGAG</left_flank> +<site> +<letter_ref letter_id="G"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GTCCCAGGGA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_12" position="18" strand="none" pvalue="8.67e-06" > +<left_flank>CACCAGAGCT</left_flank> +<site> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>AGAAGGTTCT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_11" position="16" strand="none" pvalue="8.67e-06" > +<left_flank>CACTATTGAA</left_flank> +<site> +<letter_ref letter_id="G"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTTCATTTGC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_22" position="2" strand="none" pvalue="1.21e-05" > +<left_flank>GA</left_flank> +<site> +<letter_ref letter_id="G"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GCCAACATCC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_28" position="32" strand="none" pvalue="1.59e-05" > +<left_flank>CCGGCGGGGC</left_flank> +<site> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="G"/> +</site> +<right_flank>GGGGCGG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_20" position="4" strand="none" pvalue="1.59e-05" > +<left_flank>CAGA</left_flank> +<site> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="G"/> +</site> +<right_flank>GTTCCGACCA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_6" position="15" strand="none" pvalue="1.68e-05" > +<left_flank>CCCACTACTT</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TCATTCTGAG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_14" position="19" strand="none" pvalue="2.03e-05" > +<left_flank>CACCAGCAAG</left_flank> +<site> +<letter_ref letter_id="G"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GCTCAGGAGT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_4" position="12" strand="none" pvalue="3.06e-05" > +<left_flank>CAGGTCTAAG</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CTTGGAGTCC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_0" position="39" strand="none" pvalue="3.06e-05" > +<left_flank>CCTCGGGACG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank></right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_18" position="37" strand="none" pvalue="3.82e-05" > +<left_flank>CGTGGTCGCG</left_flank> +<site> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_5" position="0" strand="none" pvalue="3.82e-05" > +<left_flank></left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ATGGTCCTGT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_29" position="30" strand="none" pvalue="4.02e-05" > +<left_flank>GCTGCCGGTG</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="G"/> +</site> +<right_flank>GCCCTGGCG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_1" position="27" strand="none" pvalue="5.52e-05" > +<left_flank>AGTCACAAGT</left_flank> +<site> +<letter_ref letter_id="G"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GGGTCGCACG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_3" position="14" strand="none" pvalue="5.94e-05" > +<left_flank>CCCAGGTTTC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TCGCCGCACC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_16" position="22" strand="none" pvalue="6.78e-05" > +<left_flank>AGTTTCAGTT</left_flank> +<site> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>attatataac</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_7" position="2" strand="none" pvalue="2.08e-04" > +<left_flank>TC</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>AAATGTTCCT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_8" position="13" strand="none" pvalue="4.05e-04" > +<left_flank>TATAACTCAG</left_flank> +<site> +<letter_ref letter_id="G"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TAATTTGTAC</right_flank> +</contributing_site> +</contributing_sites> +</motif> +</motifs> +<scanned_sites_summary p_thresh="0.0001"> +<scanned_sites sequence_id="sequence_0" pvalue="1.22e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="39" pvalue="3.06e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_1" pvalue="2.21e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="27" pvalue="5.52e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_2" pvalue="7.29e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_3" pvalue="2.37e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="14" pvalue="5.94e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_4" pvalue="1.22e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="12" pvalue="3.06e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_5" pvalue="1.53e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="0" pvalue="3.82e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_6" pvalue="6.70e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="15" pvalue="1.68e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_7" pvalue="1.81e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="4" pvalue="4.54e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_8" pvalue="1.61e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_9" pvalue="1.36e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="13" pvalue="3.41e-06"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_10" pvalue="1.99e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_11" pvalue="3.47e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="16" pvalue="8.67e-06"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_12" pvalue="3.47e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="18" pvalue="8.67e-06"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_13" pvalue="2.01e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="13" pvalue="5.01e-06"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_14" pvalue="8.11e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="19" pvalue="2.03e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_15" pvalue="3.47e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="21" pvalue="8.67e-06"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_16" pvalue="2.71e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="22" pvalue="6.78e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_17" pvalue="8.23e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_18" pvalue="1.53e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="37" pvalue="3.82e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_19" pvalue="1.36e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="9" pvalue="3.41e-06"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_20" pvalue="6.37e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="4" pvalue="1.59e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_21" pvalue="1.60e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="7" pvalue="4.00e-06"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_22" pvalue="4.83e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="2" pvalue="1.21e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_23" pvalue="2.43e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="15" pvalue="6.06e-06"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_24" pvalue="4.26e-05" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="12" pvalue="1.06e-06"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_25" pvalue="1.36e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="36" pvalue="3.41e-06"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_26" pvalue="4.30e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_27" pvalue="4.30e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_28" pvalue="6.37e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="32" pvalue="1.59e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_29" pvalue="1.61e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="30" pvalue="4.02e-05"/> +</scanned_sites> +</scanned_sites_summary> +</MEME>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/meme_output_test2.html Thu May 17 14:11:00 2018 -0400 @@ -0,0 +1,7937 @@ +<!DOCTYPE HTML> +<html> + <head> + <meta charset="UTF-8"> + <title>MEME</title> + <script> + // @JSON_VAR data + var data = { + "program": "MEME", + "version": "4.12.0", + "release": "Tue Jun 27 16:22:50 2017 -0700", + "stop_reason": "Stopped because requested number of motifs (1) found.", + "cmd": [ + "meme", "meme_input_1.fasta", "-o", "meme_test2_out", "-nostatus", + "-maxsize", "1000000", "-sf", "Galaxy_FASTA_Input", "-dna", "-mod", + "zoops", "-nmotifs", "1", "-wnsites", "0.8", "-minw", "8", "-maxw", + "50", "-wg", "11", "-ws", "1", "-maxiter", "50", "-distance", + "0.001", "-prior", "dirichlet", "-b", "0.01", "-plib", + "prior30.plib", "-spmap", "uni", "-spfuzz", "0.5" + ], + "options": { + "mod": "zoops", + "revcomp": false, + "nmotifs": 1, + "minw": 8, + "maxw": 50, + "minsites": 2, + "maxsites": 30, + "wnsites": 0.8, + "spmap": "uni", + "spfuzz": 0.5, + "maxwords": -1, + "prior": "dirichlet", + "b": 0.01, + "maxiter": 50, + "distance": 0.001, + "wg": 11, + "ws": 1, + "noendgaps": false, + "substring": true + }, + "alphabet": { + "name": "DNA", + "like": "dna", + "ncore": 4, + "symbols": [ + { + "symbol": "A", + "name": "Adenine", + "colour": "CC0000", + "complement": "T" + }, { + "symbol": "C", + "name": "Cytosine", + "colour": "0000CC", + "complement": "G" + }, { + "symbol": "G", + "name": "Guanine", + "colour": "FFB300", + "complement": "C" + }, { + "symbol": "T", + "aliases": "U", + "name": "Thymine", + "colour": "008000", + "complement": "A" + }, { + "symbol": "N", + "aliases": "X.", + "name": "Any base", + "equals": "ACGT" + }, { + "symbol": "V", + "name": "Not T", + "equals": "ACG" + }, { + "symbol": "H", + "name": "Not G", + "equals": "ACT" + }, { + "symbol": "D", + "name": "Not C", + "equals": "AGT" + }, { + "symbol": "B", + "name": "Not A", + "equals": "CGT" + }, { + "symbol": "M", + "name": "Amino", + "equals": "AC" + }, { + "symbol": "R", + "name": "Purine", + "equals": "AG" + }, { + "symbol": "W", + "name": "Weak", + "equals": "AT" + }, { + "symbol": "S", + "name": "Strong", + "equals": "CG" + }, { + "symbol": "Y", + "name": "Pyrimidine", + "equals": "CT" + }, { + "symbol": "K", + "name": "Keto", + "equals": "GT" + } + ] + }, + "background": { + "freqs": [0.294, 0.231, 0.257, 0.217] + }, + "sequence_db": { + "source": "Galaxy_FASTA_Input", + "psp_source": "prior30.plib", + "freqs": [0.294, 0.231, 0.257, 0.217], + "sequences": [ + { + "name": "chr21_19617074_19617124_+", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_26934381_26934431_+", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_28217753_28217803_-", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_31710037_31710087_-", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_31744582_31744632_-", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_31768316_31768366_+", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_31914206_31914256_-", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_31933633_31933683_-", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_31962741_31962791_-", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_31964683_31964733_+", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_31973364_31973414_+", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_31992870_31992920_+", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_32185595_32185645_-", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_32202076_32202126_-", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_32253899_32253949_-", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_32410820_32410870_-", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_36411748_36411798_-", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_37838750_37838800_-", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_45705687_45705737_+", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_45971413_45971463_-", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_45978668_45978718_-", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_45993530_45993580_+", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_46020421_46020471_+", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_46031920_46031970_+", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_46046964_46047014_+", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_46057197_46057247_+", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_46086869_46086919_-", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_46102103_46102153_-", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_47517957_47518007_+", + "length": 50, + "weight": 1.000000 + }, { + "name": "chr21_47575506_47575556_-", + "length": 50, + "weight": 1.000000 + } + ] + }, + "motifs": [ + { + "db": 0, + "id": "GGSRTATAAAA", + "alt": "MEME-1", + "len": 11, + "nsites": 30, + "evalue": "5.1e-040", + "ic": 13.0, + "re": 12.2, + "llr": 254, + "bt": 5.2854, + "time": 0.376000, + "psm": [ + [-14, -179, 114, -112], [3, -1155, 137, -270], + [-114, 20, 86, -71], [3, -279, 122, -170], + [-1155, -1155, -295, 215], [156, -179, -1155, -170], + [-1155, -1155, -1155, 220], [172, -279, -1155, -1155], + [125, -1155, -1155, 46], [167, -179, -1155, -1155], + [144, -1155, -63, -270] + ], + "pwm": [ + [0.266667, 0.066667, 0.566667, 0.100000], + [0.300000, 0.000000, 0.666667, 0.033333], + [0.133333, 0.266667, 0.466667, 0.133333], + [0.300000, 0.033333, 0.600000, 0.066667], + [0.000000, 0.000000, 0.033333, 0.966667], + [0.866667, 0.066667, 0.000000, 0.066667], + [0.000000, 0.000000, 0.000000, 1.000000], + [0.966667, 0.033333, 0.000000, 0.000000], + [0.700000, 0.000000, 0.000000, 0.300000], + [0.933333, 0.066667, 0.000000, 0.000000], + [0.800000, 0.000000, 0.166667, 0.033333] + ], + "sites": [ + { + "seq": 24, + "pos": 12, + "rc": false, + "pvalue": 4.51e-07, + "lflank": "AAGGCCAGGA", + "match": "GGGGTATAAAA", + "rflank": "GCCTGAGAGC" + }, { + "seq": 23, + "pos": 15, + "rc": false, + "pvalue": 2.22e-06, + "lflank": "ATACCCAGGG", + "match": "AGGGTATAAAA", + "rflank": "CCTCAGCAGC" + }, { + "seq": 13, + "pos": 13, + "rc": false, + "pvalue": 2.74e-06, + "lflank": "CCACCAGCTT", + "match": "GAGGTATAAAA", + "rflank": "AGCCCTGTAC" + }, { + "seq": 25, + "pos": 36, + "rc": false, + "pvalue": 4.86e-06, + "lflank": "ACAGGCCCTG", + "match": "GGCATATAAAA", + "rflank": "GCC" + }, { + "seq": 21, + "pos": 7, + "rc": false, + "pvalue": 4.86e-06, + "lflank": "CCAAGGA", + "match": "GGAGTATAAAA", + "rflank": "GCCCCACAAA" + }, { + "seq": 19, + "pos": 9, + "rc": false, + "pvalue": 4.86e-06, + "lflank": "CAGGCCCTG", + "match": "GGCATATAAAA", + "rflank": "GCCCCAGCAG" + }, { + "seq": 9, + "pos": 13, + "rc": false, + "pvalue": 4.86e-06, + "lflank": "GATTCACTGA", + "match": "GGCATATAAAA", + "rflank": "GGCCCTCTGC" + }, { + "seq": 28, + "pos": 32, + "rc": false, + "pvalue": 6.48e-06, + "lflank": "CCGGCGGGGC", + "match": "GGGGTATAAAG", + "rflank": "GGGGCGG" + }, { + "seq": 20, + "pos": 4, + "rc": false, + "pvalue": 6.48e-06, + "lflank": "CAGA", + "match": "GGGGTATAAAG", + "rflank": "GTTCCGACCA" + }, { + "seq": 12, + "pos": 18, + "rc": false, + "pvalue": 6.48e-06, + "lflank": "CACCAGAGCT", + "match": "GGGATATATAA", + "rflank": "AGAAGGTTCT" + }, { + "seq": 15, + "pos": 21, + "rc": false, + "pvalue": 1.38e-05, + "lflank": "AATCACTGAG", + "match": "GATGTATAAAA", + "rflank": "GTCCCAGGGA" + }, { + "seq": 11, + "pos": 16, + "rc": false, + "pvalue": 1.38e-05, + "lflank": "CACTATTGAA", + "match": "GATGTATAAAA", + "rflank": "TTTCATTTGC" + }, { + "seq": 0, + "pos": 39, + "rc": false, + "pvalue": 1.41e-05, + "lflank": "CCTCGGGACG", + "match": "TGGGTATATAA", + "rflank": "" + }, { + "seq": 6, + "pos": 15, + "rc": false, + "pvalue": 1.61e-05, + "lflank": "CCCACTACTT", + "match": "AGAGTATAAAA", + "rflank": "TCATTCTGAG" + }, { + "seq": 22, + "pos": 2, + "rc": false, + "pvalue": 1.95e-05, + "lflank": "GA", + "match": "GACATATAAAA", + "rflank": "GCCAACATCC" + }, { + "seq": 14, + "pos": 17, + "rc": false, + "pvalue": 1.95e-05, + "lflank": "CCCACCAGCA", + "match": "AGGATATATAA", + "rflank": "AAGCTCAGGA" + }, { + "seq": 18, + "pos": 37, + "rc": false, + "pvalue": 2.16e-05, + "lflank": "CGTGGTCGCG", + "match": "GGGGTATAACA", + "rflank": "GC" + }, { + "seq": 29, + "pos": 30, + "rc": false, + "pvalue": 3.04e-05, + "lflank": "GCTGCCGGTG", + "match": "AGCGTATAAAG", + "rflank": "GCCCTGGCG" + }, { + "seq": 4, + "pos": 12, + "rc": false, + "pvalue": 3.04e-05, + "lflank": "CAGGTCTAAG", + "match": "AGCATATATAA", + "rflank": "CTTGGAGTCC" + }, { + "seq": 5, + "pos": 0, + "rc": false, + "pvalue": 3.67e-05, + "lflank": "", + "match": "AACGTATATAA", + "rflank": "ATGGTCCTGT" + }, { + "seq": 1, + "pos": 27, + "rc": false, + "pvalue": 3.93e-05, + "lflank": "AGTCACAAGT", + "match": "GAGTTATAAAA", + "rflank": "GGGTCGCACG" + }, { + "seq": 7, + "pos": 4, + "rc": false, + "pvalue": 5.65e-05, + "lflank": "TCAG", + "match": "AGTATATATAA", + "rflank": "ATGTTCCTGT" + }, { + "seq": 3, + "pos": 14, + "rc": false, + "pvalue": 6.24e-05, + "lflank": "CCCAGGTTTC", + "match": "TGAGTATATAA", + "rflank": "TCGCCGCACC" + }, { + "seq": 16, + "pos": 22, + "rc": false, + "pvalue": 7.15e-05, + "lflank": "AGTTTCAGTT", + "match": "GGCATCTAAAA", + "rflank": "attatataac" + }, { + "seq": 27, + "pos": 36, + "rc": false, + "pvalue": 1.39e-04, + "lflank": "TGCCTGGGTC", + "match": "CAGGTATAAAG", + "rflank": "GCT" + }, { + "seq": 26, + "pos": 37, + "rc": false, + "pvalue": 1.39e-04, + "lflank": "TGCCTGGGCC", + "match": "CAGGTATAAAG", + "rflank": "GC" + }, { + "seq": 17, + "pos": 2, + "rc": false, + "pvalue": 4.81e-04, + "lflank": "ga", + "match": "TGGTTTTATAA", + "rflank": "ggggcctcac" + }, { + "seq": 8, + "pos": 13, + "rc": false, + "pvalue": 8.57e-04, + "lflank": "TATAACTCAG", + "match": "GTTGGATAAAA", + "rflank": "TAATTTGTAC" + }, { + "seq": 10, + "pos": 7, + "rc": false, + "pvalue": 1.47e-03, + "lflank": "aaactta", + "match": "AAACTCTATAA", + "rflank": "acttaaaact" + }, { + "seq": 2, + "pos": 26, + "rc": false, + "pvalue": 2.64e-03, + "lflank": "GGTGGGGGTG", + "match": "GGGGTTTCACT", + "rflank": "GGTCCACTAT" + } + ] + } + ], + "scan": [ + { + "pvalue": 5.63e-04, + "sites": [ + { + "motif": 0, + "pos": 39, + "rc": false, + "pvalue": 1.41e-05 + } + ] + }, { + "pvalue": 1.57e-03, + "sites": [ + { + "motif": 0, + "pos": 27, + "rc": false, + "pvalue": 3.93e-05 + } + ] + }, { + "pvalue": 1.00e-01, + "sites": [] + }, { + "pvalue": 2.49e-03, + "sites": [ + { + "motif": 0, + "pos": 14, + "rc": false, + "pvalue": 6.24e-05 + } + ] + }, { + "pvalue": 1.22e-03, + "sites": [ + { + "motif": 0, + "pos": 12, + "rc": false, + "pvalue": 3.04e-05 + } + ] + }, { + "pvalue": 1.47e-03, + "sites": [ + { + "motif": 0, + "pos": 0, + "rc": false, + "pvalue": 3.67e-05 + } + ] + }, { + "pvalue": 6.45e-04, + "sites": [ + { + "motif": 0, + "pos": 15, + "rc": false, + "pvalue": 1.61e-05 + } + ] + }, { + "pvalue": 2.26e-03, + "sites": [ + { + "motif": 0, + "pos": 4, + "rc": false, + "pvalue": 5.65e-05 + } + ] + }, { + "pvalue": 3.37e-02, + "sites": [] + }, { + "pvalue": 1.95e-04, + "sites": [ + { + "motif": 0, + "pos": 13, + "rc": false, + "pvalue": 4.86e-06 + } + ] + }, { + "pvalue": 5.73e-02, + "sites": [] + }, { + "pvalue": 5.52e-04, + "sites": [ + { + "motif": 0, + "pos": 16, + "rc": false, + "pvalue": 1.38e-05 + } + ] + }, { + "pvalue": 2.59e-04, + "sites": [ + { + "motif": 0, + "pos": 18, + "rc": false, + "pvalue": 6.48e-06 + } + ] + }, { + "pvalue": 1.10e-04, + "sites": [ + { + "motif": 0, + "pos": 13, + "rc": false, + "pvalue": 2.74e-06 + } + ] + }, { + "pvalue": 7.78e-04, + "sites": [ + { + "motif": 0, + "pos": 17, + "rc": false, + "pvalue": 1.95e-05 + } + ] + }, { + "pvalue": 5.52e-04, + "sites": [ + { + "motif": 0, + "pos": 21, + "rc": false, + "pvalue": 1.38e-05 + } + ] + }, { + "pvalue": 2.85e-03, + "sites": [ + { + "motif": 0, + "pos": 22, + "rc": false, + "pvalue": 7.15e-05 + } + ] + }, { + "pvalue": 1.90e-02, + "sites": [] + }, { + "pvalue": 8.63e-04, + "sites": [ + { + "motif": 0, + "pos": 37, + "rc": false, + "pvalue": 2.16e-05 + } + ] + }, { + "pvalue": 1.95e-04, + "sites": [ + { + "motif": 0, + "pos": 9, + "rc": false, + "pvalue": 4.86e-06 + } + ] + }, { + "pvalue": 2.59e-04, + "sites": [ + { + "motif": 0, + "pos": 4, + "rc": false, + "pvalue": 6.48e-06 + } + ] + }, { + "pvalue": 1.95e-04, + "sites": [ + { + "motif": 0, + "pos": 7, + "rc": false, + "pvalue": 4.86e-06 + } + ] + }, { + "pvalue": 7.78e-04, + "sites": [ + { + "motif": 0, + "pos": 2, + "rc": false, + "pvalue": 1.95e-05 + } + ] + }, { + "pvalue": 8.89e-05, + "sites": [ + { + "motif": 0, + "pos": 15, + "rc": false, + "pvalue": 2.22e-06 + } + ] + }, { + "pvalue": 1.80e-05, + "sites": [ + { + "motif": 0, + "pos": 12, + "rc": false, + "pvalue": 4.51e-07 + } + ] + }, { + "pvalue": 1.95e-04, + "sites": [ + { + "motif": 0, + "pos": 36, + "rc": false, + "pvalue": 4.86e-06 + } + ] + }, { + "pvalue": 5.54e-03, + "sites": [] + }, { + "pvalue": 5.54e-03, + "sites": [] + }, { + "pvalue": 2.59e-04, + "sites": [ + { + "motif": 0, + "pos": 32, + "rc": false, + "pvalue": 6.48e-06 + } + ] + }, { + "pvalue": 1.22e-03, + "sites": [ + { + "motif": 0, + "pos": 30, + "rc": false, + "pvalue": 3.04e-05 + } + ] + } + ] + }; + </script> + <script> +var site_url = "http://meme-suite.org"; +</script> + <script> + +/* + * $ + * + * Shorthand function for getElementById + */ +function $(el) { + return document.getElementById(el); +} + + +/* + * See http://stackoverflow.com/a/5450113/66387 + * Does string multiplication like the perl x operator. + */ +function string_mult(pattern, count) { + if (count < 1) return ''; + var result = ''; + while (count > 1) { + if (count & 1) result += pattern; + count >>= 1, pattern += pattern; + } + return result + pattern; +} + +/* + * See http://stackoverflow.com/questions/814613/how-to-read-get-data-from-a-url-using-javascript + * Slightly modified with information from + * https://developer.mozilla.org/en/DOM/window.location + */ +function parse_params() { + "use strict"; + var search, queryStart, queryEnd, query, params, nvPairs, i, nv, n, v; + search = window.location.search; + queryStart = search.indexOf("?") + 1; + queryEnd = search.indexOf("#") + 1 || search.length + 1; + query = search.slice(queryStart, queryEnd - 1); + + if (query === search || query === "") return {}; + + params = {}; + nvPairs = query.replace(/\+/g, " ").split("&"); + + for (i = 0; i < nvPairs.length; i++) { + nv = nvPairs[i].split("="); + n = decodeURIComponent(nv[0]); + v = decodeURIComponent(nv[1]); + // allow a name to be used multiple times + // storing each value in the array + if (!(n in params)) { + params[n] = []; + } + params[n].push(nv.length === 2 ? v : null); + } + return params; +} + +/* + * coords + * + * Calculates the x and y offset of an element. + * From http://www.quirksmode.org/js/findpos.html + * with alterations to take into account scrolling regions + */ +function coords(elem) { + var myX = myY = 0; + if (elem.getBoundingClientRect) { + var rect; + rect = elem.getBoundingClientRect(); + myX = rect.left + ((typeof window.pageXOffset !== "undefined") ? + window.pageXOffset : document.body.scrollLeft); + myY = rect.top + ((typeof window.pageYOffset !== "undefined") ? + window.pageYOffset : document.body.scrollTop); + } else { + // this fall back doesn't properly handle absolutely positioned elements + // inside a scrollable box + var node; + if (elem.offsetParent) { + // subtract all scrolling + node = elem; + do { + myX -= node.scrollLeft ? node.scrollLeft : 0; + myY -= node.scrollTop ? node.scrollTop : 0; + } while (node = node.parentNode); + // this will include the page scrolling (which is unwanted) so add it back on + myX += (typeof window.pageXOffset !== "undefined") ? window.pageXOffset : document.body.scrollLeft; + myY += (typeof window.pageYOffset !== "undefined") ? window.pageYOffset : document.body.scrollTop; + // sum up offsets + node = elem; + do { + myX += node.offsetLeft; + myY += node.offsetTop; + } while (node = node.offsetParent); + } + } + return [myX, myY]; +} + +/* + * position_popup + * + * Positions a popup relative to an anchor element. + * + * The avaliable positions are: + * 0 - Centered below the anchor. + */ +function position_popup(anchor, popup, position) { + "use strict"; + var a_x, a_y, a_w, a_h, p_x, p_y, p_w, p_h; + var a_xy, spacer, margin, scrollbar, page_w; + // define constants + spacer = 5; + margin = 15; + scrollbar = 15; + // define the positions and widths + a_xy = coords(anchor); + a_x = a_xy[0]; + a_y = a_xy[1]; + a_w = anchor.offsetWidth; + a_h = anchor.offsetHeight; + p_w = popup.offsetWidth; + p_h = popup.offsetHeight; + page_w = null; + if (window.innerWidth) { + page_w = window.innerWidth; + } else if (document.body) { + page_w = document.body.clientWidth; + } + // check the position type is defined + if (typeof position !== "number") { + position = 0; + } + // calculate the popup position + switch (position) { + case 1: + p_x = a_x + a_w + spacer; + p_y = a_y + (a_h / 2) - (p_h / 2); + break; + case 0: + default: + p_x = a_x + (a_w / 2) - (p_w / 2); + p_y = a_y + a_h + spacer; + break; + } + // constrain the popup position + if (p_x < margin) { + p_x = margin; + } else if (page_w != null && (p_x + p_w) > (page_w - margin - scrollbar)) { + p_x = page_w - margin - scrollbar - p_w; + } + if (p_y < margin) { + p_y = margin; + } + // position the popup + popup.style.left = p_x + "px"; + popup.style.top = p_y + "px"; +} + +function lookup_help_popup(popup_id) { + var _body, pop, info; + pop = document.getElementById(popup_id); + if (pop == null) { + _body = document.getElementsByTagName("body")[0]; + pop = document.createElement("div"); + pop.className = "pop_content"; + pop.id = popup_id; + pop.style.backgroundColor = "#FFC"; + pop.style.borderColor = "black"; + info = document.createElement("p"); + info.style.fontWeight = "bold"; + info.appendChild(document.createTextNode("Error: No popup for topic \"" + popup_id + "\".")); + pop.appendChild(info); + // this might cause problems with the menu, but as this only happens + // when something is already wrong I don't think that's too much of a problem + _body.insertBefore(pop, _body.firstChild); + } + if (document.getElementsByTagName('body')[0].hasAttribute("data-autobtns")) { + if (!/\bauto_buttons\b/.test(pop.className)) { + pop.className += " auto_buttons"; + var back_btn_sec = document.createElement("div"); + back_btn_sec.className = "nested_only pop_back_sec"; + var back_btn = document.createElement("span"); + back_btn.className = "pop_back"; + back_btn.appendChild(document.createTextNode("<< back")); + back_btn.addEventListener("click", function(e) { + help_return(); + }, false); + back_btn_sec.appendChild(back_btn); + pop.insertBefore(back_btn_sec, pop.firstChild); + var close_btn_sec = document.createElement("div"); + close_btn_sec.className = "pop_close_sec"; + var close_btn = document.createElement("span"); + close_btn.className = "pop_close"; + close_btn.appendChild(document.createTextNode("close")); + close_btn.addEventListener("click", function(e) { + help_popup(); + }, false); + close_btn_sec.appendChild(close_btn); + pop.appendChild(close_btn_sec); + } + } + return pop; +} + +/* + * help_popup + * + * Moves around help pop-ups so they appear + * below an activator. + */ +function help_popup(activator, popup_id) { + "use strict"; + var pop; + // set default values + if (typeof help_popup.popup === "undefined") { + help_popup.popup = []; + } + if (typeof help_popup.activator === "undefined") { + help_popup.activator = null; + } + var last_pop = (help_popup.popup.length > 0 ? help_popup.popup[help_popup.popup.length - 1] : null); + if (typeof(activator) == "undefined") { // no activator so hide + if (last_pop != null) { + last_pop.style.display = 'none'; + help_popup.popup = []; + } + return; + } + pop = lookup_help_popup(popup_id); + if (pop == last_pop) { + if (activator == help_popup.activator) { + //hide popup (as we've already shown it for the current help button) + last_pop.style.display = 'none'; + help_popup.popup = []; + return; // toggling complete! + } + } else if (last_pop != null) { + //activating different popup so hide current one + last_pop.style.display = 'none'; + } + help_popup.popup = [pop]; + help_popup.activator = activator; + toggle_class(pop, "nested", false); + //must make the popup visible to measure it or it has zero width + pop.style.display = 'block'; + position_popup(activator, pop); +} + +/* + * help_refine + * + * Intended for links within a help popup. Stores a stack of state so + * you can go back. + */ +function help_refine(popup_id) { + if (help_popup.popup == null || help_popup.popup.length == 0 || help_popup.activator == null) { + throw new Error("Can not refine a help popup when one is not shown!"); + } + var pop = lookup_help_popup(popup_id); + var last_pop = help_popup.popup[help_popup.popup.length - 1]; + if (pop == last_pop) return; // slightly odd, but no real cause for alarm + help_popup.popup.push(pop); + toggle_class(pop, "nested", true); + last_pop.style.display = "none"; + //must make the popup visible to measure it or it has zero width + pop.style.display = "block"; + position_popup(help_popup.activator, pop); +} + +/* + * help_return + * + * Intended for links within a help popup. Stores a stack of state so + * you can go back. + */ +function help_return() { + if (help_popup.popup == null || help_popup.popup.length == 0 || help_popup.activator == null) { + throw new Error("Can not return to a earlier help popup when one is not shown!"); + } + var last_pop = help_popup.popup.pop(); + last_pop.style.display = "none"; + var pop = (help_popup.popup.length > 0 ? help_popup.popup[help_popup.popup.length - 1] : null); + if (pop != null) { + toggle_class(pop, "nested", help_popup.popup.length > 1); + pop.style.display = "block"; + position_popup(help_popup.activator, pop); + } else { + help_popup.activator = null; + } +} + +/* + * update_scroll_pad + * + * Creates padding at the bottom of the page to allow + * scrolling of anything into view. + */ +function update_scroll_pad() { + var page, pad; + page = (document.compatMode === "CSS1Compat") ? document.documentElement : document.body; + pad = $("scrollpad"); + if (pad === null) { + pad = document.createElement("div"); + pad.id = 'scrollpad'; + document.getElementsByTagName('body')[0].appendChild(pad); + } + pad.style.height = Math.abs(page.clientHeight - 100) + "px"; +} + +function substitute_classes(node, remove, add) { + "use strict"; + var list, all, i, cls, classes; + list = node.className.split(/\s+/); + all = {}; + for (i = 0; i < list.length; i++) { + if (list[i].length > 0) all[list[i]] = true; + } + for (i = 0; i < remove.length; i++) { + if (all.hasOwnProperty(remove[i])) { + delete all[remove[i]]; + } + } + for (i = 0; i < add.length; i++) { + all[add[i]] = true; + } + classes = ""; + for (cls in all) { + classes += cls + " "; + } + node.className = classes; +} + +/* + * toggle_class + * + * Adds or removes a class from the node. If the parameter 'enabled' is not + * passed then the existence of the class will be toggled, otherwise it will be + * included if enabled is true. + */ +function toggle_class(node, cls, enabled) { + var classes = node.className; + var list = classes.replace(/^\s+/, '').replace(/\s+$/, '').split(/\s+/); + var found = false; + for (var i = 0; i < list.length; i++) { + if (list[i] == cls) { + list.splice(i, 1); + i--; + found = true; + } + } + if (typeof enabled == "undefined") { + if (!found) list.push(cls); + } else { + if (enabled) list.push(cls); + } + node.className = list.join(" "); +} + +/* + * find_child + * + * Searches child nodes in depth first order and returns the first it finds + * with the className specified. + * TODO replace with querySelector + */ +function find_child(node, className) { + var pattern; + if (node == null || typeof node !== "object") { + return null; + } + if (typeof className === "string") { + pattern = new RegExp("\\b" + className + "\\b"); + } else { + pattern = className; + } + if (node.nodeType == Node.ELEMENT_NODE && + pattern.test(node.className)) { + return node; + } else { + var result = null; + for (var i = 0; i < node.childNodes.length; i++) { + result = find_child(node.childNodes[i], pattern); + if (result != null) break; + } + return result; + } +} + +/* + * find_parent + * + * Searches parent nodes outwards from the node and returns the first it finds + * with the className specified. + */ +function find_parent(node, className) { + var pattern; + pattern = new RegExp("\\b" + className + "\\b"); + do { + if (node.nodeType == Node.ELEMENT_NODE && + pattern.test(node.className)) { + return node; + } + } while (node = node.parentNode); + return null; +} + +/* + * find_parent_tag + * + * Searches parent nodes outwards from the node and returns the first it finds + * with the tag name specified. HTML tags should be specified in upper case. + */ +function find_parent_tag(node, tag_name) { + do { + if (node.nodeType == Node.ELEMENT_NODE && node.tagName == tag_name) { + return node; + } + } while (node = node.parentNode); + return null; +} + +/* + * __toggle_help + * + * Uses the 'topic' property of the this object to + * toggle display of a help topic. + * + * This function is not intended to be called directly. + */ +function __toggle_help(e) { + if (!e) e = window.event; + if (e.type === "keydown") { + if (e.keyCode !== 13 && e.keyCode !== 32) { + return; + } + // stop a submit or something like that + e.preventDefault(); + } + + help_popup(this, this.getAttribute("data-topic")); +} + +function setup_help_button(button) { + "use strict"; + var topic; + if (button.hasAttribute("data-topic")) { + topic = button.getAttribute("data-topic"); + if (document.getElementById(topic) != null) { + button.tabIndex = "0"; // make keyboard selectable + button.addEventListener("click", function() { + help_popup(button, topic); + }, false); + button.addEventListener("keydown", function(e) { + // toggle only on Enter or Spacebar, let other keys do their thing + if (e.keyCode !== 13 && e.keyCode !== 32) return; + // stop a submit or something like that + e.preventDefault(); + help_popup(button, topic); + }, false); + } else { + button.style.visibility = "hidden"; + } + } + button.className += " active"; +} + +/* + * help_button + * + * Makes a help button for the passed topic. + */ +function help_button(topic) { + var btn = document.createElement("div"); + btn.className = "help"; + btn.setAttribute("data-topic", topic); + setup_help_button(btn); + return btn; +} + +/* + * prepare_download + * + * Sets the attributes of a link to setup a file download using the given content. + * If no link is provided then create one and click it. + */ +function prepare_download(content, mimetype, filename, link) { + "use strict"; + // if no link is provided then create one and click it + var click_link = false; + if (!link) { + link = document.createElement("a"); + click_link = true; + } + try { + // Use a BLOB to convert the text into a data URL. + // We could do this manually with a base 64 conversion. + // This will only be supported on modern browsers, + // hence the try block. + var blob = new Blob([content], {type: mimetype}); + var reader = new FileReader(); + reader.onloadend = function() { + // If we're lucky the browser will also support the download + // attribute which will let us suggest a file name to save the link. + // Otherwise it is likely that the filename will be unintelligible. + link.setAttribute("download", filename); + link.href = reader.result; + if (click_link) { + // must add the link to click it + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + } + } + reader.readAsDataURL(blob); + } catch (error) { + if (console && console.log) console.log(error); + // probably an old browser + link.href = ""; + link.visible = false; + } +} + +/* + * add_cell + * + * Add a cell to the table row. + */ +function add_cell(row, node, cls, click_action) { + var cell = row.insertCell(row.cells.length); + if (node) cell.appendChild(node); + if (cls && cls !== "") cell.className = cls; + if (click_action) cell.addEventListener("click", click_action, false); +} + +/* + * add_header_cell + * + * Add a header cell to the table row. + */ +function add_header_cell(row, node, help_topic, cls, colspan) { + var th = document.createElement("th"); + if (node) th.appendChild(node); + if (help_topic && help_topic !== "") th.appendChild(help_button(help_topic)); + if (cls && cls !== "") th.className = cls; + if (typeof colspan == "number" && colspan > 1) th.colSpan = colspan; + row.appendChild(th); +} + +/* + * add_text_cell + * + * Add a text cell to the table row. + */ +function add_text_cell(row, text, cls, action) { + var node = null; + if (typeof(text) != 'undefined') node = document.createTextNode(text); + add_cell(row, node, cls, action); +} + +/* + * add_text_header_cell + * + * Add a text header cell to the table row. + */ +function add_text_header_cell(row, text, help_topic, cls, action, colspan) { + var node = null; + if (typeof(text) != 'undefined') { + var nbsp = (help_topic ? "\u00A0" : ""); + var str = "" + text; + var parts = str.split(/\n/); + if (parts.length === 1) { + if (action) { + node = document.createElement("span"); + node.appendChild(document.createTextNode(str + nbsp)); + } else { + node = document.createTextNode(str + nbsp); + } + } else { + node = document.createElement("span"); + for (var i = 0; i < parts.length; i++) { + if (i !== 0) { + node.appendChild(document.createElement("br")); + } + node.appendChild(document.createTextNode(parts[i])); + } + } + if (action) { + node.addEventListener("click", action, false); + node.style.cursor = "pointer"; + } + } + add_header_cell(row, node, help_topic, cls, colspan); +} + +function setup_help() { + "use strict"; + var help_buttons, i; + help_buttons = document.querySelectorAll(".help:not(.active)"); + for (i = 0; i < help_buttons.length; i++) { + setup_help_button(help_buttons[i]); + } +} + +function setup_scrollpad() { + "use strict"; + if (document.getElementsByTagName('body')[0].hasAttribute("data-scrollpad") && document.getElementById("scrollpad") == null) { + window.addEventListener("resize", update_scroll_pad, false); + update_scroll_pad(); + } +} + +// anon function to avoid polluting global scope +(function() { + "use strict"; + window.addEventListener("load", function load(evt) { + window.removeEventListener("load", load, false); + setup_help(); + setup_scrollpad(); + }, false); +})(); + +/* + * make_link + * + * Creates a text node and if a URL is specified it surrounds it with a link. + * If the URL doesn't begin with "http://" it automatically adds it, as + * relative links don't make much sense in this context. + */ +function make_link(text, url) { + var textNode = null; + var link = null; + if (typeof text !== "undefined" && text !== null) textNode = document.createTextNode(text); + if (typeof url === "string") { + if (url.indexOf("//") == -1) { + url = "http://" + url; + } + link = document.createElement('a'); + link.href = url; + if (textNode) link.appendChild(textNode); + return link; + } + return textNode; +} +</script> + <script> + // + // return true if any part of the passed element is visible in the viewport + // + function element_in_viewport(elem) { + var rect; + try { + rect = elem.getBoundingClientRect(); + } catch (e) { + return false; + } + return ( + rect.top < (window.innerHeight || document.body.clientHeight) && + rect.bottom > 0 && + rect.left < (window.innerWidth || document.body.clientWidth) && + rect.right > 0 + ); + } + + // + // Functions to delay a drawing task until it is required or it would not lag the display to do so + // + + // a list of items still to be drawn + var drawable_list = []; + // the delay between drawing objects that are not currently visible + var draw_delay = 1; + // the delay after a user interaction + var user_delay = 300; + // the delay after a user has stopped scrolling and is viewing the stuff drawn on the current page + var stop_delay = 300; + // the timer handle; allows resetting of the timer after user interactions + var draw_timer = null; + + // + // Drawable + // + // elem - a page element which defines the position on the page that drawing is to be done + // task - an object with the method run which takes care of painting the object + // + var Drawable = function(elem, task) { + this.elem = elem; + this.task = task; + } + + // + // Drawable.is_visible + // + // Determines if the element is visible in the viewport + // + Drawable.prototype.is_visible = function() { + return element_in_viewport(this.elem); + } + + // + // Drawable.run + // + // Run the task held by the drawable + Drawable.prototype.run = function() { + if (this.task) this.task.run(); + this.task = null; + } + + // + // Drawable.run + // + // Run the task iff visible + // returns true if the task ran or has already run + Drawable.prototype.run_visible = function() { + if (this.task) { + if (element_in_viewport(this.elem)) { + this.task.run(); + this.task = null; + return true; + } + return false; + } else { + return true; + } + } + + // + // draw_on_screen + // + // Checks each drawable object and draws those on screen. + // + function draw_on_screen() { + var found = false; + for (var i = 0; i < drawable_list.length; i++) { + if (drawable_list[i].run_visible()) { + drawable_list.splice(i--, 1); + found = true; + } + } + return found; + } + + // + // process_draw_tasks + // + // Called on a delay to process the next avaliable + // draw task. + // + function process_draw_tasks() { + var delay = draw_delay; + draw_timer = null; + if (drawable_list.length == 0) return; //no more tasks + if (draw_on_screen()) { + delay = stop_delay; //give the user a chance to scroll + } else { + //get next task + var drawable = drawable_list.shift(); + drawable.task.run(); + } + //allow UI updates between tasks + draw_timer = window.setTimeout("process_draw_tasks()", delay); + } + + // + // delayed_process_draw_tasks + // + // Call process_draw_tasks after a short delay. + // The delay serves to group multiple redundant events. + // Should be set as event handler for onscroll and onresize. + // + function delayed_process_draw_tasks() { + //reset the timer + if (drawable_list.length > 0) { + if (draw_timer != null) clearTimeout(draw_timer); + draw_timer = window.setTimeout("process_draw_tasks()", user_delay); + } + } + + // + // add_draw_task + // + // Add a drawing task to be called immediately if it is + // visible, or to be called on a delay to reduce stuttering + // effect on the web browser. + function add_draw_task(elem, task) { + drawable = new Drawable(elem, task); + if (drawable.is_visible()) { + task.run(); + } else { + drawable_list.push(drawable); + //reset timer + if (draw_timer != null) clearTimeout(draw_timer); + draw_timer = window.setTimeout("process_draw_tasks()", user_delay); + } + } + +</script> + <script> +//====================================================================== +// start Alphabet object +//====================================================================== +var Alphabet = function(alphabet, background) { + "use strict"; + var i, j, sym, aliases, complement, comp_e_sym, ambigs, generate_background; + generate_background = (background == null); + if (generate_background) { + background = []; + for (i = 0; i < alphabet.ncore; i++) background[i] = 1.0 / alphabet.ncore; + } else if (alphabet.ncore != background.length) { + throw new Error("The background length does not match the alphabet length."); + } + this.name = alphabet.name; + this.like = (alphabet.like != null ? alphabet.like.toUpperCase() : null); + this.ncore = alphabet.ncore; + this.symbols = alphabet.symbols; + this.background = background; + this.genbg = generate_background; + this.encode = {}; + this.encode2core = {}; + this.complement = {}; + // check if all symbols are same case + var seen_uc = false; + var seen_lc = false; + var check_case = function (syms) { + var s, sym; + if (typeof syms === "string") { + for (s = 0; s < syms.length; s++) { + sym = syms.charAt(s); + if (sym >= 'a' && sym <= 'z') seen_lc = true; + else if (sym >= 'A' && sym <= 'Z') seen_uc = true; + } + } + }; + for (i = 0; i < this.symbols.length; i++) { + check_case(this.symbols[i].symbol); + check_case(this.symbols[i].aliases); + } + // now map symbols to indexes + var update_array = function(array, syms, index) { + var s, sym; + if (typeof syms === "string") { + for (s = 0; s < syms.length; s++) { + sym = syms.charAt(s); + array[sym] = index; + // when only a single case is used, then encode as case insensitive + if (seen_uc != seen_lc) { + if (sym >= 'a' && sym <= 'z') { + array[sym.toUpperCase()] = index; + } else if (sym >= 'A' && sym <= 'Z') { + array[sym.toLowerCase()] = index; + } + } + } + } + } + // map core symbols to index + for (i = 0; i < this.ncore; i++) { + update_array(this.encode2core, this.symbols[i].symbol, i); + update_array(this.encode, this.symbols[i].symbol, i); + update_array(this.encode2core, this.symbols[i].aliases, i); + update_array(this.encode, this.symbols[i].aliases, i); + } + // map ambigous symbols to index + ambigs = {}; + for (i = this.ncore; i < this.symbols.length; i++) { + update_array(this.encode, this.symbols[i].symbol, i); + update_array(this.encode, this.symbols[i].aliases, i); + ambigs[this.symbols[i].equals] = i; + } + // determine complements + for (i = 0; i < this.ncore; i++) { + complement = this.symbols[i].complement; + if (typeof complement === "string") { + this.complement[i] = this.encode2core[complement]; + } + } + next_symbol: + for (i = this.ncore; i < this.symbols.length; i++) { + complement = ""; + for (j = 0; j < this.symbols[i].equals.length; j++) { + comp_e_sym = this.complement[this.encode2core[this.symbols[i].equals.charAt(j)]]; + if (typeof comp_e_sym !== "number") continue next_symbol; + complement += this.symbols[comp_e_sym].symbol; + } + complement = complement.split("").sort().join(""); + if (typeof ambigs[complement] === "number") { + this.complement[i] = ambigs[complement]; + } + } + // determine case insensitivity + this.case_insensitive = true; + if (seen_uc == seen_lc) { + // when there is a mixture of cases it probably won't + // be case insensitive but we still need to check + loop: + for (i = 0; i < this.symbols.length; i++) { + sym = this.symbols[i].symbol; + if (sym >= 'A' && sym <= 'Z') { + if (this.encode[sym.toLowerCase()] != i) { + this.case_insensitive = false; + break loop; + } + } else if (sym >= 'a' && sym <= 'z') { + if (this.encode[sym.toUpperCase()] != i) { + this.case_insensitive = false; + break loop; + } + } + aliases = this.symbols[i].aliases; + if (aliases != null) { + for (j = 0; j < aliases.length; j++) { + sym = aliases.charAt(j); + if (sym >= 'A' && sym <= 'Z') { + if (this.encode[sym.toLowerCase()] != i) { + this.case_insensitive = false; + break loop; + } + } else if (sym >= 'a' && sym <= 'z') { + if (this.encode[sym.toUpperCase()] != i) { + this.case_insensitive = false; + break loop; + } + } + } + } + } + } + // normalise aliases to remove the prime symbol and eliminate + // the alternate cases when the alphabet is case insensitive + var seen, out; + for (i = 0; i < this.symbols.length; i++) { + sym = this.symbols[i].symbol; + aliases = this.symbols[i].aliases; + if (typeof aliases != "string") aliases = ""; + seen = {}; + out = []; + if (this.case_insensitive) { + sym = sym.toUpperCase(); + aliases = aliases.toUpperCase(); + } + seen[sym] = true; + for (j = 0; j < aliases.length; j++) { + if (!seen[aliases.charAt(j)]) { + seen[aliases.charAt(j)] = true; + out.push(aliases.charAt(j)); + } + } + this.symbols[i].aliases = out.sort().join(""); + } +}; +// return the name of the alphabet +Alphabet.prototype.get_alphabet_name = function() { + return this.name; +}; +// return if the alphabet can be complemented +Alphabet.prototype.has_complement = function() { + return (typeof this.symbols[0].complement === "string"); +}; +// return true if an uppercase letter has the same meaning as the lowercase form +Alphabet.prototype.is_case_insensitive = function() { + return this.case_insensitive; +}; +// return the information content of an alphabet letter +Alphabet.prototype.get_ic = function() { + return Math.log(this.ncore) / Math.LN2; +}; +// return the count of the core alphabet symbols +Alphabet.prototype.get_size_core = function() { + return this.ncore; +}; +// return the count of all alphabet symbols +Alphabet.prototype.get_size_full = function() { + return this.symbols.length; +}; +// return the symbol for the given alphabet index +Alphabet.prototype.get_symbol = function(alph_index) { + "use strict"; + if (alph_index < 0 || alph_index >= this.symbols.length) { + throw new Error("Alphabet index out of bounds"); + } + return this.symbols[alph_index].symbol; +}; +// return the aliases for the given alphabet index +Alphabet.prototype.get_aliases = function(alph_index) { + "use strict"; + if (alph_index < 0 || alph_index >= this.symbols.length) { + throw new Error("Alphabet index out of bounds"); + } + var sym_obj = this.symbols[alph_index]; + return (sym_obj.aliases != null ? sym_obj.aliases : ""); +}; +// return the name for the given alphabet index +Alphabet.prototype.get_name = function(alph_index) { + "use strict"; + var sym; + if (alph_index < 0 || alph_index >= this.symbols.length) { + throw new Error("Alphabet index out of bounds"); + } + sym = this.symbols[alph_index]; + return (typeof sym.name === "string" ? sym.name : sym.symbol); +}; +// return the alphabet it is like or null +Alphabet.prototype.get_like = function() { + "use strict"; + return this.like; +}; +// return the index of the complement for the given alphabet index +Alphabet.prototype.get_complement = function(alph_index) { + var comp_e_sym = this.complement[alph_index]; + if (typeof comp_e_sym === "number") { + return comp_e_sym; + } else { + return -1; + } +}; +// return a string containing the core symbols +Alphabet.prototype.get_symbols = function() { + "use strict"; + var i, core_symbols; + core_symbols = ""; + for (i = 0; i < this.ncore; i++) { + core_symbols += this.symbols[i].symbol; + } + return core_symbols; +}; +// return if the background was not a uniform generated background +Alphabet.prototype.has_bg = function() { + "use strict"; + return !this.genbg; +}; +// get the background frequency for the index +Alphabet.prototype.get_bg_freq = function(alph_index) { + "use strict"; + var freq, i, symbols; + if (alph_index >= 0) { + if (alph_index < this.ncore) { + return this.background[alph_index]; + } else if (alph_index < this.symbols.length) { + freq = 0; + symbols = this.symbols[alph_index].equals; + for (i = 0; i < symbols.length; i++) { + freq += this.background[this.encode2core[symbols.charAt(i)]]; + } + return freq; + } + } + throw new Error("The alphabet index is out of range."); +}; +// get the colour of the index +Alphabet.prototype.get_colour = function(alph_index) { + "use strict"; + if (alph_index < 0 || alph_index >= this.symbols.length) { + throw new Error("BAD_ALPHABET_INDEX"); + } + if (typeof this.symbols[alph_index].colour != "string") { + return "black"; + } + return "#" + this.symbols[alph_index].colour; +}; +// get the rgb componets of the colour at the index +Alphabet.prototype.get_rgb = function(alph_index) { + "use strict"; + if (alph_index < 0 || alph_index >= this.symbols.length) { + throw new Error("BAD_ALPHABET_INDEX"); + } + if (typeof this.symbols[alph_index].colour != "string") { + return {"red": 0, "green": 0, "blue": 0}; + } + var colour = this.symbols[alph_index].colour; + var red = parseInt(colour.substr(0, 2), 16) / 255; + var green = parseInt(colour.substr(2, 2), 16) / 255; + var blue = parseInt(colour.substr(4, 2), 16) / 255; + return {"red": red, "green": green, "blue": blue}; +}; +// convert a symbol into the index +Alphabet.prototype.get_index = function(letter) { + "use strict"; + var alph_index; + alph_index = this.encode[letter]; + if (typeof alph_index === "undefined") { + return -1; + } + return alph_index; +}; +// convert a symbol into the list of core indexes that it equals +Alphabet.prototype.get_indexes = function(letter) { + "use strict"; + var alph_index, comprise_str, i, comprise_list; + alph_index = this.encode[letter]; + if (typeof alph_index === "undefined") { + throw new Error("Unknown letter"); + } + comprise_str = this.symbols[alph_index].equals; + comprise_list = []; + if (typeof comprise_str == "string") { + for (i = 0; i < comprise_str.length; i++) { + comprise_list.push(this.encode2core[comprise_str.charAt(i)]); + } + } else { + comprise_list.push(alph_index); + } + return comprise_list; +}; +// check if a symbol is the primary way of representing the symbol in the alphabet +Alphabet.prototype.is_prime_symbol = function(letter) { + var alph_index; + alph_index = this.encode[letter]; + if (alph_index == null) return false; + if (this.is_case_insensitive()) { + return (this.symbols[alph_index].symbol.toUpperCase() == letter.toUpperCase()); + } else { + return (this.symbols[alph_index].symbol == letter); + } +}; +// compare 2 alphabets +Alphabet.prototype.equals = function(other) { + "use strict"; + var i, sym1, sym2; + // first check that it's actually an alphabet object + if (!(typeof other === "object" && other != null && other instanceof Alphabet)) { + return false; + } + // second shortcircuit if it's the same object + if (this === other) return true; + // compare + if (this.name !== other.name) return false; + if (this.ncore !== other.ncore) return false; + if (this.symbols.length !== other.symbols.length) return false; + for (i = 0; i < this.symbols.length; i++) { + sym1 = this.symbols[i]; + sym2 = other.symbols[i]; + if (sym1.symbol !== sym2.symbol) return false; + if (sym1.aliases !== sym2.aliases) return false; + if (sym1.name !== sym2.name) return false; + if (typeof sym1.colour !== typeof sym2.colour || + (typeof sym1.colour === "string" && typeof sym2.colour === "string" && + parseInt(sym1.colour, 16) != parseInt(sym2.colour, 16))) { + return false; + } + if (sym1.complement !== sym2.complement) return false; + if (sym1.equals !== sym2.equals) return false; + } + return true; +}; +Alphabet.prototype.check_core_subset = function(super_alph) { + var complement_same = true; + var seen_set = {}; + var sub_i, sub_symbol, super_i, super_symbol; + for (sub_i = 0; sub_i < this.ncore; sub_i++) { + sub_symbol = this.symbols[sub_i]; + super_i = super_alph.encode[sub_symbol.symbol]; + if (super_i == null) return 0; + super_symbol = super_alph.symbols[super_i]; + if (seen_set[super_i]) return 0; + seen_set[super_i] = true; + // check complement + if (sub_symbol.complement != null && super_symbol.complement != null) { + if (super_alph.encode[sub_symbol.complement] != super_alph.encode[super_symbol.complement]) { + complement_same = false; + } + } else if (sub_symbol.complement != null || super_symbol.complement != null) { + complement_same = false; + } + } + return (complement_same ? 1 : -1); +}; +// convert a sequence to its reverse complement +Alphabet.prototype.invcomp_seq = function(seq) { + "use strict"; + var syms, i, e_sym, comp_e_sym; + if (!this.has_complement()) throw new Error("Alphabet must be complementable"); + syms = seq.split(""); + for (i = 0; i < syms.length; i++) { + e_sym = this.encode[syms[i]]; + if (typeof e_sym === "undefined") { + e_sym = this.ncore; // wildcard + } + comp_e_sym = this.complement[e_sym]; + if (typeof comp_e_sym === "undefined") { + comp_e_sym = e_sym; // not complementable + } + syms[i] = this.symbols[comp_e_sym].symbol; + } + return syms.reverse().join(""); +}; +// convert the alphabet to the text version +Alphabet.prototype.as_text = function() { + "use strict"; + function name_as_text(name) { + var i, c, out; + out = "\""; + for (i = 0; i < name.length; i++) { + c = name.charAt(i); + if (c == "\"") { + out += "\\\""; + } else if (c == "/") { + out += "\\/"; + } else if (c == "\\") { + out += "\\\\"; + } else { + out += c; + } + } + out += "\""; + return out; + } + function symbol_as_text(sym) { + var out; + out = sym.symbol; + if (typeof sym.name === "string" && sym.name != sym.symbol) { + out += " " + name_as_text(sym.name); + } + if (typeof sym.colour === "string") { + out += " " + sym.colour; + } + return out; + } + var out, i, j, c, sym; + out = ""; + // output core symbols with 2 way complements + for (i = 0; i < this.ncore; i++) { + c = this.complement[i]; + if (typeof c === "number" && i < c && this.complement[c] === i) { + out += symbol_as_text(this.symbols[i]) + " ~ " + symbol_as_text(this.symbols[c]) + "\n"; + } + } + // output core symbols with no complement + for (i = 0; i < this.ncore; i++) { + if (typeof this.complement[i] === "undefined") { + out += symbol_as_text(this.symbols[i]) + "\n"; + } + } + // output ambiguous symbols that have comprising characters + for (i = this.ncore; i < this.symbols.length; i++) { + if (this.symbols[i].equals.length == 0) break; + out += symbol_as_text(this.symbols[i]) + " = " + this.symbols[i].equals + "\n"; + if (typeof this.symbols[i].aliases === "string") { + for (j = 0; j < this.symbols[i].aliases.length; j++) { + if (this.symbols[i].aliases.charAt(j) == this.symbols[i].symbol) continue; + out += this.symbols[i].aliases.charAt(j) + " = " + this.symbols[i].equals + "\n"; + } + } + } + // output aliases of core symbols + for (i = 0; i < this.ncore; i++) { + if (typeof this.symbols[i].aliases === "string") { + for (j = 0; j < this.symbols[i].aliases.length; j++) { + if (this.symbols[i].aliases.charAt(j) == this.symbols[i].symbol) continue; + out += this.symbols[i].aliases.charAt(j) + " = " + this.symbols[i].symbol + "\n"; + } + } + } + // output gap symbols + i = this.symbols.length - 1; + if (this.symbols[i].equals.length == 0) { + out += symbol_as_text(this.symbols[i]) + " =\n"; + if (typeof this.symbols[i].aliases === "string") { + for (j = 0; j < this.symbols[i].aliases.length; j++) { + if (this.symbols[i].aliases.charAt(j) == this.symbols[i].symbol) continue; + out += this.symbols[i].aliases.charAt(j) + " =\n"; + } + } + } + return out; +}; +// output the alphabet as it appears in minimal MEME format +Alphabet.prototype.as_meme = function() { + "use strict"; + function name_as_text(name) { + var i, c, out; + out = "\""; + for (i = 0; i < name.length; i++) { + c = name.charAt(i); + if (c == "\"") { + out += "\\\""; + } else if (c == "/") { + out += "\\/"; + } else if (c == "\\") { + out += "\\\\"; + } else { + out += c; + } + } + out += "\""; + return out; + } + if (this.equals(AlphStd.DNA)) { + return "ALPHABET= ACGT\n"; + } else if (this.equals(AlphStd.PROTEIN)) { + return "ALPHABET= ACDEFGHIKLMNPQRSTVWY\n"; + } else { + return "ALPHABET" + + (this.name != null ? " " + name_as_text(this.name) : "") + + (this.like != null ? " " + this.like + "-LIKE" : "") + "\n" + + this.as_text() + "END ALPHABET\n"; + } +}; + +// Returns a table showing all the letters in the alphabet +Alphabet.prototype.as_table = function() { + "use strict"; + var i, j, row, th, td, aliases, equals, sym; + var table = document.createElement("table"); + // create the core symbol header + row = table.insertRow(table.rows.length); + th = document.createElement("th"); + th.appendChild(document.createTextNode("Symbol(s)")); + row.appendChild(th); + th = document.createElement("th"); + th.appendChild(document.createTextNode("Name")); + row.appendChild(th); + th = document.createElement("th"); + if (this.has_complement()) { + th.appendChild(document.createTextNode("Complement")); + } + row.appendChild(th); + // list the core symbols + for (i = 0; i < this.ncore; i++) { + row = table.insertRow(table.rows.length); + td = document.createElement("td"); + if (this.symbols[i].colour != null) { + td.style.color = '#' + this.symbols[i].colour; + } + td.appendChild(document.createTextNode(this.symbols[i].symbol)); + aliases = this.get_aliases(i); + if (aliases.length > 0) { + td.appendChild(document.createTextNode(' ' + aliases.split('').join(' '))); + } + row.appendChild(td); + td = document.createElement("td"); + if (this.symbols[i].name != null) { + td.appendChild(document.createTextNode(this.symbols[i].name)); + } + row.appendChild(td); + td = document.createElement("td"); + if (this.symbols[i].complement != null) { + td.style.color = this.get_colour(this.get_index(this.symbols[i].complement)); + td.appendChild(document.createTextNode(this.symbols[i].complement)); + } + row.appendChild(td); + } + // create the ambiguous symbol header + row = table.insertRow(table.rows.length); + th = document.createElement("th"); + th.appendChild(document.createTextNode("Symbol(s)")); + row.appendChild(th); + th = document.createElement("th"); + th.appendChild(document.createTextNode("Name")); + row.appendChild(th); + th = document.createElement("th"); + th.appendChild(document.createTextNode("Matches")); + row.appendChild(th); + // list the ambiguous symbols + for (i = this.ncore; i < this.symbols.length; i++) { + row = table.insertRow(table.rows.length); + td = document.createElement("td"); + if (this.symbols[i].colour != null) { + td.style.color = '#' + this.symbols[i].colour; + } + td.appendChild(document.createTextNode(this.symbols[i].symbol)); + aliases = this.get_aliases(i); + if (aliases.length > 0) { + td.appendChild(document.createTextNode(' ' + aliases.split('').join(' '))); + } + row.appendChild(td); + td = document.createElement("td"); + if (this.symbols[i].name != null) { + td.appendChild(document.createTextNode(this.symbols[i].name)); + } + row.appendChild(td); + td = document.createElement("td"); + equals = this.symbols[i].equals.split(''); + for (j = 0; j < equals.length; j++) { + if (j != 0) td.appendChild(document.createTextNode(' ')); + sym = document.createElement("span"); + sym.style.color = this.get_colour(this.get_index(equals[j])); + sym.appendChild(document.createTextNode(equals[j])); + td.appendChild(sym); + } + row.appendChild(td); + } + return table; +}; + +// returns a dictionary of the colours for EPS +Alphabet.prototype._as_eps_dict = function() { + "use strict"; + var i, sym, rgb; + var out = "/fullColourDict <<\n"; + for (i = 0; i < this.ncore; i++) { + sym = this.get_symbol(i); + sym = sym.replace(/\\/g, "\\\\"); + sym = sym.replace(/\(/g, "\\("); + sym = sym.replace(/\)/g, "\\)"); + rgb = this.get_rgb(i); + out += " (" + sym + ") [" + rgb.red.toFixed(4) + " " + rgb.green.toFixed(4) + " " + rgb.blue.toFixed(4) + "]\n"; + } + out += ">> def\n"; + out += "/mutedColourDict <<\n"; + for (i = 0; i < this.ncore; i++) { + sym = this.get_symbol(i); + sym = sym.replace(/\\/g, "\\\\"); + sym = sym.replace(/\(/g, "\\("); + sym = sym.replace(/\)/g, "\\)"); + rgb = Alphabet.lighten_colour(this.get_rgb(i)); + out += " (" + sym + ") [" + rgb.red.toFixed(4) + " " + rgb.green.toFixed(4) + " " + rgb.blue.toFixed(4) + "]\n"; + } + out += ">> def\n"; + return out; +}; + +// return the alphabet name or a list of primary symbols +Alphabet.prototype.toString = function() { + "use strict"; + if (this.name != null) { + return this.name; + } else { + return this.get_symbols(); + } +}; + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Helper functions +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +// Convert a colour specified in RGB colourspace values into LAB colourspace +Alphabet.rgb2lab = function(rgb) { + "use strict"; + var xyzHelper, labHelper; + // XYZ helper + xyzHelper = function(value) { + if (value > 0.0445) { + value = (value + 0.055) / 1.055; + value = Math.pow(value, 2.4); + } else { + value /= 12.92; + } + value *= 100; + return value; + }; + // lab helper + labHelper = function(value) { + if (value > 0.008856) { + value = Math.pow(value, 1.0 / 3.0); + } else { + value = (7.787 * value) + (16.0 / 116.0); + } + return value; + }; + // convert into XYZ colourspace + var c1, c2, c3; + if (typeof rgb == "number") { + c1 = xyzHelper(((rgb >> 16) & 0xFF) / 255.0); + c2 = xyzHelper(((rgb >> 8) & 0xFF) / 255.0); + c3 = xyzHelper((rgb & 0xFF) / 255.0); + } else { + c1 = xyzHelper(rgb.red); + c2 = xyzHelper(rgb.green); + c3 = xyzHelper(rgb.blue); + } + var x = (c1 * 0.4124) + (c2 * 0.3576) + (c3 * 0.1805); + var y = (c1 * 0.2126) + (c2 * 0.7152) + (c3 * 0.0722); + var z = (c1 * 0.0193) + (c2 * 0.1192) + (c3 * 0.9505); + // convert into Lab colourspace + c1 = labHelper(x / 95.047); + c2 = labHelper(y / 100.0); + c3 = labHelper(z / 108.883); + var l = (116.0 * c2) - 16; + var a = 500.0 * (c1 - c2); + var b = 200.0 * (c2 - c3); + return {"l": l, "a": a, "b": b}; +}; + +// Convert a colour specified in HSV colourspace into RGB colourspace +Alphabet.hsv2rgb = function(hue, sat, value, output_object) { + // achromatic (grey) + var r = value; + var g = value; + var b = value; + if (sat != 0) { + var h = hue / 60.0; + var i = Math.floor(h); + var f = h - i; + var p = value * (1.0 - sat); + var q = value * (1.0 - (sat * f)); + var t = value * (1.0 - (sat * (1.0 - f))); + if (i == 0) { + r = value; + g = t; + b = p; + } else if (i == 1) { + r = q; + g = value; + b = p; + } else if (i == 2) { + r = p; + g = value; + b = t; + } else if (i == 3) { + r = p; + g = q; + b = value; + } else if (i == 4) { + r = t; + g = p; + b = value; + } else { + r = value; + g = p; + b = q; + } + } + if (output_object) { + return {"red": r, "green": g, "blue": b}; + } else { + return (Math.floor(r * 255) << 15) | (Math.floor(g * 255) << 8) | (Math.floor(b * 255)); + } +}; + +// Calculate a distance score between two colours in LAB colourspace +Alphabet.lab_dist = function(lab1, lab2) { + var c1 = Math.sqrt((lab1.l * lab1.l) + (lab1.a * lab1.a)); + var c2 = Math.sqrt((lab2.l * lab2.l) + (lab2.a * lab2.a)); + var dc = c1 - c2; + var dl = lab1.l - lab2.l; + var da = lab1.a - lab2.a; + var db = lab1.b - lab2.b; + // we don't want NaN due to rounding errors so fudge things a bit... + var dh = 0; + var dh_squared = (da * da) + (db * db) - (dc * dc); + if (dh_squared > 0) { + dh = Math.sqrt(dh_squared); + } + var first = dl; + var second = dc / (1.0 + (0.045 * c1)); + var third = dh / (1.0 + (0.015 * c1)); + return Math.sqrt((first * first) + (second * second) + (third * third)); +}; + +// convert an RGB value into a HSL value +Alphabet.rgb2hsl = function(rgb) { + "use strict"; + var min, max, delta, h, s, l, r, g, b; + if (typeof rgb == "number") { + r = ((rgb >> 16) & 0xFF) / 255.0; + g = ((rgb >> 8) & 0xFF) / 255.0; + b = (rgb & 0xFF) / 255.0; + } else { + r = rgb.red; + g = rgb.green; + b = rgb.blue; + } + min = Math.min(r, g, b); + max = Math.max(r, g, b); + delta = max - min; + l = min + (delta / 2); + if (max == min) { + h = 0; // achromatic (grayscale) + s = 0; + } else { + if (l > 0.5) { + s = delta / (2 - max - min); + } else { + s = delta / (max + min); + } + if (max == r) { + h = (g - b) / delta; + if (g < b) h += 6; + } else if (max == g) { + h = ((b - r) / delta) + 2; + } else { + h = ((r - g) / delta) + 4; + } + h /= 6; + } + return {"h": h, "s": s, "l": l}; +}; + +// convert a HSL value into an RGB value +Alphabet.hsl2rgb = function(hsl, output_object) { + "use strict"; + function _hue(p, q, t) { + "use strict"; + if (t < 0) t += 1; + else if (t > 1) t -= 1; + if (t < (1.0 / 6.0)) { + return p + ((q - p) * 6.0 * t); + } else if (t < 0.5) { + return q; + } else if (t < (2.0 / 3.0)) { + return p + ((q - p) * ((2.0 / 3.0) - t) * 6.0); + } else { + return p; + } + } + var r, g, b, p, q; + if (hsl.s == 0) { + // achromatic (grayscale) + r = hsl.l; + g = hsl.l; + b = hsl.l; + } else { + if (hsl.l < 0.5) { + q = hsl.l * (1 + hsl.s); + } else { + q = hsl.l + hsl.s - (hsl.l * hsl.s); + } + p = (2 * hsl.l) - q; + r = _hue(p, q, hsl.h + (1.0 / 3.0)); + g = _hue(p, q, hsl.h); + b = _hue(p, q, hsl.h - (1.0 / 3.0)); + } + if (output_object) { + return {"red": r, "green": g, "blue": b}; + } else { + return (Math.floor(r * 255) << 15) | (Math.floor(g * 255) << 8) | (Math.floor(b * 255)); + } +}; + +Alphabet.lighten_colour = function(rgb) { + "use strict"; + var hsl = Alphabet.rgb2hsl(rgb); + hsl.l += (1.0 - hsl.l) * 2 / 3; + return Alphabet.hsl2rgb(hsl, typeof rgb != "number"); +}; + +//====================================================================== +// end Alphabet object +//====================================================================== + +//====================================================================== +// start StandardAlphabet object +//====================================================================== + +// an extension of the alphabet object to support some additional fields +// only present in standard alphabets. +var StandardAlphabet = function(enum_code, enum_name, alphabet_data) { + Alphabet.apply(this, [alphabet_data]); + this.enum_code = enum_code; + this.enum_name = enum_name; +}; +StandardAlphabet.prototype = Alphabet.prototype; +StandardAlphabet.prototype.constructor = StandardAlphabet; + +// A unique code for this standard alphabet. +// This code will be a power of 2 to enable creation of bitsets for +// a selection of standard alphabets. +StandardAlphabet.prototype.get_code = function() { + return this.enum_code; +}; + +// A unique name for this standard alphabet. +// this name will be all upper case and the same as the property that +// refers to this alphabet in the AlphStd collection. +StandardAlphabet.prototype.get_enum = function() { + return this.enum_name; +}; + +//====================================================================== +// end StandardAlphabet object +//====================================================================== + +// A collection of standard alphabets. +var AlphStd = { + RNA: new StandardAlphabet(1, "RNA", { + "name": "RNA", + "like": "RNA", + "ncore": 4, + "symbols": [ + {"symbol": "A", "name": "Adenine", "colour": "CC0000"}, + {"symbol": "C", "name": "Cytosine", "colour": "0000CC"}, + {"symbol": "G", "name": "Guanine", "colour": "FFB300"}, + {"symbol": "U", "name": "Uracil", "colour": "008000", + "aliases": "T"}, + {"symbol": "N", "name": "Any base", "equals": "ACGU", "aliases": "X."}, + {"symbol": "V", "name": "Not U", "equals": "ACG"}, + {"symbol": "H", "name": "Not G", "equals": "ACU"}, + {"symbol": "D", "name": "Not C", "equals": "AGU"}, + {"symbol": "B", "name": "Not A", "equals": "CGU"}, + {"symbol": "M", "name": "Amino", "equals": "AC"}, + {"symbol": "R", "name": "Purine", "equals": "AG"}, + {"symbol": "W", "name": "Weak", "equals": "AU"}, + {"symbol": "S", "name": "Strong", "equals": "CG"}, + {"symbol": "Y", "name": "Pyrimidine", "equals": "CU"}, + {"symbol": "K", "name": "Keto", "equals": "GU"} + ] + }), + DNA: new StandardAlphabet(2, "DNA", { + "name": "DNA", + "like": "DNA", + "ncore": 4, + "symbols": [ + {"symbol": "A", "name": "Adenine", "colour": "CC0000", "complement": "T"}, + {"symbol": "C", "name": "Cytosine", "colour": "0000CC", "complement": "G"}, + {"symbol": "G", "name": "Guanine", "colour": "FFB300", "complement": "C"}, + {"symbol": "T", "name": "Thymine", "colour": "008000", "complement": "A", + "aliases": "U"}, + {"symbol": "N", "name": "Any base", "equals": "ACGT", "aliases": "X."}, + {"symbol": "V", "name": "Not T", "equals": "ACG"}, + {"symbol": "H", "name": "Not G", "equals": "ACT"}, + {"symbol": "D", "name": "Not C", "equals": "AGT"}, + {"symbol": "B", "name": "Not A", "equals": "CGT"}, + {"symbol": "M", "name": "Amino", "equals": "AC"}, + {"symbol": "R", "name": "Purine", "equals": "AG"}, + {"symbol": "W", "name": "Weak", "equals": "AT"}, + {"symbol": "S", "name": "Strong", "equals": "CG"}, + {"symbol": "Y", "name": "Pyrimidine", "equals": "CT"}, + {"symbol": "K", "name": "Keto", "equals": "GT"} + ] + }), + PROTEIN: new StandardAlphabet(4, "PROTEIN", { + "name": "Protein", + "like": "PROTEIN", + "ncore": 20, + "symbols": [ + {"symbol": "A", "name": "Alanine", "colour": "0000CC"}, + {"symbol": "C", "name": "Cysteine", "colour": "0000CC"}, + {"symbol": "D", "name": "Aspartic acid", "colour": "FF00FF"}, + {"symbol": "E", "name": "Glutamic acid", "colour": "FF00FF"}, + {"symbol": "F", "name": "Phenylalanine", "colour": "0000CC"}, + {"symbol": "G", "name": "Glycine", "colour": "FFB300"}, + {"symbol": "H", "name": "Histidine", "colour": "FFCCCC"}, + {"symbol": "I", "name": "Isoleucine", "colour": "0000CC"}, + {"symbol": "K", "name": "Lysine", "colour": "CC0000"}, + {"symbol": "L", "name": "Leucine", "colour": "0000CC"}, + {"symbol": "M", "name": "Methionine", "colour": "0000CC"}, + {"symbol": "N", "name": "Asparagine", "colour": "008000"}, + {"symbol": "P", "name": "Proline", "colour": "FFFF00"}, + {"symbol": "Q", "name": "Glutamine", "colour": "008000"}, + {"symbol": "R", "name": "Arginine", "colour": "CC0000"}, + {"symbol": "S", "name": "Serine", "colour": "008000"}, + {"symbol": "T", "name": "Threonine", "colour": "008000"}, + {"symbol": "V", "name": "Valine", "colour": "0000CC"}, + {"symbol": "W", "name": "Tryptophan", "colour": "0000CC"}, + {"symbol": "Y", "name": "Tyrosine", "colour": "33E6CC"}, + {"symbol": "X", "name": "Any amino acid", "equals": "ACDEFGHIKLMNPQRSTVWY", "aliases": "*."}, + {"symbol": "B", "name": "Asparagine or Aspartic acid", "equals": "DN"}, + {"symbol": "Z", "name": "Glutamine or Glutamic acid", "equals": "EQ"}, + {"symbol": "J", "name": "Leucine or Isoleucine", "equals": "IL"} + ] + }) +}; + +//====================================================================== +// start Symbol object +//====================================================================== +var Symbol = function(alph_index, scale, alphabet) { + "use strict"; + //variable prototype + this.symbol = alphabet.get_symbol(alph_index); + this.scale = scale; + this.colour = alphabet.get_colour(alph_index); +}; + +Symbol.prototype.get_symbol = function() { + "use strict"; + return this.symbol; +}; + +Symbol.prototype.get_scale = function() { + "use strict"; + return this.scale; +}; + +Symbol.prototype.get_colour = function() { + "use strict"; + return this.colour; +}; + +Symbol.prototype.toString = function() { + "use strict"; + return this.symbol + " " + (Math.round(this.scale*1000)/10) + "%"; +}; + +function compare_symbol(sym1, sym2) { + "use strict"; + if (sym1.get_scale() < sym2.get_scale()) { + return -1; + } else if (sym1.get_scale() > sym2.get_scale()) { + return 1; + } else { + return 0; + } +} +//====================================================================== +// end Symbol object +//====================================================================== + +//====================================================================== +// start Pspm object +//====================================================================== +var Pspm = function(matrix, name, ltrim, rtrim, nsites, evalue, pssm, alt) { + "use strict"; + var row, col, data, row_sum, delta, evalue_re; + if (typeof name !== "string") { + name = ""; + } + this.name = name; + //construct + if (matrix instanceof Pspm) { + // copy constructor + this.alph_length = matrix.alph_length; + this.motif_length = matrix.motif_length; + this.name = matrix.name; + this.alt = matrix.alt; + this.nsites = matrix.nsites; + this.evalue = matrix.evalue; + this.ltrim = matrix.ltrim; + this.rtrim = matrix.rtrim; + this.pspm = []; + for (row = 0; row < matrix.motif_length; row++) { + this.pspm[row] = []; + for (col = 0; col < matrix.alph_length; col++) { + this.pspm[row][col] = matrix.pspm[row][col]; + } + } + if (matrix.pssm != null) { + this.pssm = []; + for (row = 0; row < matrix.motif_length; row++) { + this.pspm[row] = []; + for (col = 0; col < matrix.alph_length; col++) { + this.pssm[row][col] = matrix.pssm[row][col]; + } + } + } + } else { + // check parameters + if (ltrim == null) { + ltrim = 0; + } else if (typeof ltrim !== "number" || ltrim % 1 !== 0 || ltrim < 0) { + throw new Error("ltrim must be a non-negative integer, got: " + ltrim); + } + if (rtrim == null) { + rtrim = 0; + } else if (typeof rtrim !== "number" || rtrim % 1 !== 0 || rtrim < 0) { + throw new Error("rtrim must be a non-negative integer, got: " + rtrim); + } + if (nsites != null) { + if (typeof nsites !== "number" || nsites < 0) { + throw new Error("nsites must be a positive number, got: " + nsites); + } else if (nsites == 0) { + nsites = null; + } + } + if (evalue != null) { + if (typeof evalue === "number") { + if (evalue < 0) { + throw new Error("evalue must be a non-negative number, got: " + evalue); + } + } else if (typeof evalue === "string") { + evalue_re = /^((?:[+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?)|inf)$/; + if (!evalue_re.test(evalue)) { + throw new Error("evalue must be a non-negative number, got: " + evalue); + } + } else { + throw new Error("evalue must be a non-negative number, got: " + evalue); + } + } + // set properties + this.name = name; + this.alt = alt; + this.nsites = nsites; + this.evalue = evalue; + this.ltrim = ltrim; + this.rtrim = rtrim; + if (typeof matrix === "string") { + // string constructor + data = parse_pspm_string(matrix); + this.alph_length = data["alph_length"]; + this.motif_length = data["motif_length"]; + this.pspm = data["pspm"]; + if (this.evalue == null) { + if (data["evalue"] != null) { + this.evalue = data["evalue"]; + } else { + this.evalue = 0; + } + } + if (this.nsites == null) { + if (typeof data["nsites"] === "number") { + this.nsites = data["nsites"]; + } else { + this.nsites = 20; + } + } + } else { + // assume pspm is a nested array + this.motif_length = matrix.length; + this.alph_length = (matrix.length > 0 ? matrix[0].length : 0); + if (this.nsites == null) { + this.nsites = 20; + } + if (this.evalue == null) { + this.evalue = 0; + } + this.pspm = []; + // copy pspm and check + for (row = 0; row < this.motif_length; row++) { + if (this.alph_length != matrix[row].length) { + throw new Error("COLUMN_MISMATCH"); + } + this.pspm[row] = []; + row_sum = 0; + for (col = 0; col < this.alph_length; col++) { + this.pspm[row][col] = matrix[row][col]; + row_sum += this.pspm[row][col]; + } + delta = 0.1; + if (isNaN(row_sum) || (row_sum > 1 && (row_sum - 1) > delta) || + (row_sum < 1 && (1 - row_sum) > delta)) { + throw new Error("INVALID_SUM"); + } + } + // copy pssm + if (pssm != null) { + this.pssm = []; + for (row = 0; row < this.motif_length; row++) { + this.pssm[row] = []; + for (col = 0; col < this.alph_length; col++) { + this.pssm[row][col] = pssm[row][col]; + } + } + } + } + } +}; + +Pspm.prototype.copy = function() { + "use strict"; + return new Pspm(this); +}; + +Pspm.prototype.reverse = function() { + "use strict"; + var x, y, temp, temp_trim; + //reverse + x = 0; + y = this.motif_length-1; + while (x < y) { + temp = this.pspm[x]; + this.pspm[x] = this.pspm[y]; + this.pspm[y] = temp; + x++; + y--; + } + // reverse pssm (if defined) + if (typeof this.pssm !== "undefined") { + //reverse + x = 0; + y = this.motif_length-1; + while (x < y) { + temp = this.pssm[x]; + this.pspm[x] = this.pssm[y]; + this.pssm[y] = temp; + x++; + y--; + } + } + //swap triming + temp_trim = this.ltrim; + this.ltrim = this.rtrim; + this.rtrim = temp_trim; + return this; //allow function chaining... +}; + +Pspm.prototype.reverse_complement = function(alphabet) { + "use strict"; + var x, y, temp, i, row, c, temp_trim; + if (this.alph_length != alphabet.get_size_core()) { + throw new Error("The alphabet size does not match the size of the pspm."); + } + if (!alphabet.has_complement()) { + throw new Error("The specified alphabet can not be complemented."); + } + // reverse motif + this.reverse(); + //complement + for (x = 0; x < this.motif_length; x++) { + row = this.pspm[x]; + for (i = 0; i < row.length; i++) { + c = alphabet.get_complement(i); + if (c < i) continue; + temp = row[i]; + row[i] = row[c]; + row[c] = temp; + } + } + // complement pssm (if defined) + if (typeof this.pssm !== "undefined") { + //complement + for (x = 0; x < this.motif_length; x++) { + row = this.pssm[x]; + for (i = 0; i < row.length; i++) { + c = alphabet.get_complement(i); + if (c < i) continue; + temp = row[i]; + row[i] = row[c]; + row[c] = temp; + } + } + } + return this; //allow function chaining... +}; + +Pspm.prototype.get_stack = function(position, alphabet, ssc) { + "use strict"; + var row, stack_ic, alphabet_ic, stack, i, sym; + if (this.alph_length != alphabet.get_size_core()) { + throw new Error("The alphabet size does not match the size of the pspm."); + } + row = this.pspm[position]; + stack_ic = this.get_stack_ic(position, alphabet); + if (ssc) stack_ic -= this.get_error(alphabet); + alphabet_ic = alphabet.get_ic(); + stack = []; + for (i = 0; i < this.alph_length; i++) { + sym = new Symbol(i, row[i]*stack_ic/alphabet_ic, alphabet); + if (sym.get_scale() <= 0) { + continue; + } + stack.push(sym); + } + stack.sort(compare_symbol); + return stack; +}; + +Pspm.prototype.get_stack_ic = function(position, alphabet) { + "use strict"; + var row, H, i; + if (this.alph_length != alphabet.get_size_core()) { + throw new Error("The alphabet size does not match the size fo the pspm."); + } + row = this.pspm[position]; + H = 0; + for (i = 0; i < this.alph_length; i++) { + if (row[i] === 0) { + continue; + } + H -= (row[i] * (Math.log(row[i]) / Math.LN2)); + } + return alphabet.get_ic() - H; +}; + +Pspm.prototype.get_error = function(alphabet) { + "use strict"; + if (this.nsites === 0) { + return 0; + } + return (alphabet.get_size_core()-1) / (2 * Math.LN2 * this.nsites); +}; + +Pspm.prototype.get_motif_length = function() { + "use strict"; + return this.motif_length; +}; + +Pspm.prototype.get_alph_length = function() { + "use strict"; + return this.alph_length; +}; + +Pspm.prototype.get_left_trim = function() { + "use strict"; + return this.ltrim; +}; + +Pspm.prototype.get_right_trim = function() { + "use strict"; + return this.rtrim; +}; + +Pspm.prototype.as_best_match = function(alphabet) { + "use strict"; + var match, odds, best_odds, best_index; + var i, j; + match = ""; + for (i = 0; i < this.motif_length; i++) { + best_index = 0; + best_odds = this.pspm[i][0] / alphabet.get_bg_freq(0); + for (j = 1; j < this.alph_length; j++) { + odds = this.pspm[i][j] / alphabet.get_bg_freq(j); + if (odds > best_odds) { + best_odds = odds; + best_index = j; + } + } + match += alphabet.get_symbol(best_index); + } + return match; +}; + +Pspm.prototype.as_count_matrix = function() { + "use strict"; + var count, count_text, text; + var i, j; + text = ""; + for (i = 0; i < this.motif_length; i++) { + if (i !== 0) { + text += "\n"; + } + for (j = 0; j < this.alph_length; j++) { + if (j !== 0) { + text += " "; + } + count = Math.round(this.nsites * this.pspm[i][j]); + count_text = "" + count; + // pad up to length of 4 + if (count_text.length < 4) { + text += (new Array(5 - count_text.length)).join(" ") + count_text; + } else { + text += count_text; + } + } + } + return text; +}; + +Pspm.prototype.as_probability_matrix = function() { + "use strict"; + var text; + var i, j; + text = ""; + for (i = 0; i < this.motif_length; i++) { + if (i !== 0) { + text += "\n"; + } + for (j = 0; j < this.alph_length; j++) { + if (j !== 0) { + text += " "; + } + text += this.pspm[i][j].toFixed(6); + } + } + return text; +}; + +Pspm.prototype.as_score_matrix = function(alphabet, pseudo) { + "use strict"; + var me, score, out, row, col, score_text; + me = this; + if (typeof this.pssm === "undefined") { + if (!(typeof alphabet === "object" && alphabet != null && alphabet instanceof Alphabet)) { + throw new Error("The alphabet is required to generate the pssm."); + } + if (typeof pseudo === "undefined") { + pseudo = 0.01; + } else if (typeof pseudo !== "number" || pseudo < 0) { + throw new Error("Expected positive number for pseudocount"); + } + score = function(row, col) { + "use strict"; + var p, bg, p2; + p = me.pspm[row][col]; + bg = alphabet.get_bg_freq(col); + p2 = (p * me.nsites + bg * pseudo) / (me.nsites + pseudo); + return (p2 > 0 ? Math.round((Math.log(p2 / bg) / Math.LN2) * 100) : -10000); + }; + } else { + score = function(row, col) { + "use strict"; + return me.pssm[row][col]; + }; + } + out = ""; + for (row = 0; row < this.motif_length; row++) { + for (col = 0; col < this.alph_length; col++) { + if (col !== 0) { + out += " "; + } + score_text = "" + score(row, col); + // pad out to 6 characters + if (score_text.length < 6) { + out += (new Array(7 - score_text.length)).join(" ") + score_text; + } else { + out += score_text; + } + } + out += "\n"; + } + return out; +} + +Pspm.prototype.as_pspm = function() { + "use strict"; + return "letter-probability matrix: alength= " + this.alph_length + + " w= " + this.motif_length + " nsites= " + this.nsites + + " E= " + (typeof this.evalue === "number" ? + this.evalue.toExponential() : this.evalue) + "\n" + + this.as_probability_matrix(); +}; + +Pspm.prototype.as_pssm = function(alphabet, pseudo) { + "use strict"; + return "log-odds matrix: alength= " + this.alph_length + + " w= " + this.motif_length + + " E= " + (typeof this.evalue == "number" ? + this.evalue.toExponential() : this.evalue) + "\n" + + this.as_score_matrix(alphabet, pseudo); +}; + +Pspm.prototype.as_meme = function(options) { + var with_header, with_pspm, with_pssm, version, alphabet, bg_source, pseudocount, strands; + var out, alen, i; + // get the options + if (typeof options !== "object" || options === null) { + options = {}; + } + with_header = (typeof options["with_header"] === "boolean" ? options["with_header"] : false); + with_pspm = (typeof options["with_pspm"] === "boolean" ? options["with_pspm"] : false); + with_pssm = (typeof options["with_pssm"] === "boolean" ? options["with_pssm"] : false); + if (!with_pspm && !with_pssm) with_pspm = true; + if (with_header) { + if (typeof options["version"] === "string" && /^\d+(?:\.\d+){0,2}$/.test(options["version"])) { + version = options["version"]; + } else if (typeof options["version"] === "number") { + version = options["version"].toFixed(0); + } else { + version = "4"; + } + if (typeof options["strands"] === "number" && options["strands"] === 1) { + strands = 1; + } else { + strands = 2; + } + if (typeof options["bg_source"] === "string") { + bg_source = options["bg_source"]; + } else { + bg_source = "unknown source"; + } + if (typeof options["alphabet"] === "object" && options["alphabet"] != null + && options["alphabet"] instanceof Alphabet) { + alphabet = options["alphabet"]; + } else { + throw new Error("The alphabet is required to generate the header."); + } + } + // now create the output + out = ""; + if (with_header) { + out = "MEME version " + version + "\n\n"; + out += alphabet.as_meme() + "\n"; + if (alphabet.has_complement()) { // assume DNA has both strands unless otherwise specified + out += "strands: " + (strands === 1 ? "+" : "+ -") + "\n\n"; + } + out += "Background letter frequencies (from " + bg_source + "):\n"; + alen = alphabet.get_size_core(); + for (i = 0; i < alen; i++) { + if (i !== 0) { + if (i % 9 === 0) { // maximum of nine entries per line + out += "\n"; + } else { + out += " "; + } + } + out += alphabet.get_symbol(i) + " " + alphabet.get_bg_freq(i).toFixed(3); + } + } + out += "\n\n"; + out += "MOTIF " + this.name + (this.alt == null ? "" : " " + this.alt); + if (with_pssm) { + out += "\n\n"; + out += this.as_pssm(options["alphabet"], options["pseudocount"]); + } + if (with_pspm) { + out += "\n\n"; + out += this.as_pspm(); + } + return out; +} + +Pspm.prototype.toString = function() { + "use strict"; + var str, i, row; + str = ""; + for (i = 0; i < this.pspm.length; i++) { + row = this.pspm[i]; + str += row.join("\t") + "\n"; + } + return str; +}; + +function parse_pspm_properties(str) { + "use strict"; + var parts, i, eqpos, before, after, properties, prop, num, num_re; + num_re = /^((?:[+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?)|inf)$/; + parts = trim(str).split(/\s+/); + // split up words containing = + for (i = 0; i < parts.length;) { + eqpos = parts[i].indexOf("="); + if (eqpos != -1) { + before = parts[i].substr(0, eqpos); + after = parts[i].substr(eqpos+1); + if (before.length > 0 && after.length > 0) { + parts.splice(i, 1, before, "=", after); + i += 3; + } else if (before.length > 0) { + parts.splice(i, 1, before, "="); + i += 2; + } else if (after.length > 0) { + parts.splice(i, 1, "=", after); + i += 2; + } else { + parts.splice(i, 1, "="); + i++; + } + } else { + i++; + } + } + properties = {}; + for (i = 0; i < parts.length; i += 3) { + if (parts.length - i < 3) { + throw new Error("Expected PSPM property was incomplete. "+ + "Remaing parts are: " + parts.slice(i).join(" ")); + } + if (parts[i+1] !== "=") { + throw new Error("Expected '=' in PSPM property between key and " + + "value but got " + parts[i+1]); + } + prop = parts[i].toLowerCase(); + num = parts[i+2]; + if (!num_re.test(num)) { + throw new Error("Expected numeric value for PSPM property '" + + prop + "' but got '" + num + "'"); + } + properties[prop] = num; + } + return properties; +} + +function parse_pspm_string(pspm_string) { + "use strict"; + var header_re, lines, first_line, line_num, col_num, alph_length, + motif_length, nsites, evalue, pspm, i, line, match, props, parts, + j, prob; + header_re = /^letter-probability\s+matrix:(.*)$/i; + lines = pspm_string.split(/\n/); + first_line = true; + line_num = 0; + col_num = 0; + alph_length; + motif_length; + nsites; + evalue; + pspm = []; + for (i = 0; i < lines.length; i++) { + line = trim(lines[i]); + if (line.length === 0) { + continue; + } + // check the first line for a header though allow matrices without it + if (first_line) { + first_line = false; + match = header_re.exec(line); + if (match !== null) { + props = parse_pspm_properties(match[1]); + if (props.hasOwnProperty("alength")) { + alph_length = parseFloat(props["alength"]); + if (alph_length != 4 && alph_length != 20) { + throw new Error("PSPM property alength should be 4 or 20" + + " but got " + alph_length); + } + } + if (props.hasOwnProperty("w")) { + motif_length = parseFloat(props["w"]); + if (motif_length % 1 !== 0 || motif_length < 1) { + throw new Error("PSPM property w should be an integer larger " + + "than zero but got " + motif_length); + } + } + if (props.hasOwnProperty("nsites")) { + nsites = parseFloat(props["nsites"]); + if (nsites <= 0) { + throw new Error("PSPM property nsites should be larger than " + + "zero but got " + nsites); + } + } + if (props.hasOwnProperty("e")) { + evalue = props["e"]; + if (evalue < 0) { + throw new Error("PSPM property evalue should be " + + "non-negative but got " + evalue); + } + } + continue; + } + } + pspm[line_num] = []; + col_num = 0; + parts = line.split(/\s+/); + for (j = 0; j < parts.length; j++) { + prob = parseFloat(parts[j]); + if (prob != parts[j] || prob < 0 || prob > 1) { + throw new Error("Expected probability but got '" + parts[j] + "'"); + } + pspm[line_num][col_num] = prob; + col_num++; + } + line_num++; + } + if (typeof motif_length === "number") { + if (pspm.length != motif_length) { + throw new Error("Expected PSPM to have a motif length of " + + motif_length + " but it was actually " + pspm.length); + } + } else { + motif_length = pspm.length; + } + if (typeof alph_length !== "number") { + alph_length = pspm[0].length; + if (alph_length != 4 && alph_length != 20) { + throw new Error("Expected length of first row in the PSPM to be " + + "either 4 or 20 but got " + alph_length); + } + } + for (i = 0; i < pspm.length; i++) { + if (pspm[i].length != alph_length) { + throw new Error("Expected PSPM row " + i + " to have a length of " + + alph_length + " but the length was " + pspm[i].length); + } + } + return {"pspm": pspm, "motif_length": motif_length, + "alph_length": alph_length, "nsites": nsites, "evalue": evalue}; +} +//====================================================================== +// end Pspm object +//====================================================================== + +//====================================================================== +// start Logo object +//====================================================================== + +var Logo = function(alphabet, options) { + "use strict"; + this.alphabet = alphabet; + this.fine_text = ""; + this.x_axis = 1; + this.y_axis = true; + this.xlate_nsyms = 1; + this.xlate_start = null; + this.xlate_end = null; + this.pspm_list = []; + this.pspm_column = []; + this.rows = 0; + this.columns = 0; + if (typeof options === "string") { + // the old method signature had fine_text here so we support that + this.fine_text = options; + } else if (typeof options === "object" && options != null) { + this.fine_text = (typeof options.fine_text === "string" ? options.fine_text : ""); + this.x_axis = (typeof options.x_axis === "boolean" ? (options.x_axis ? 1 : 0) : 1); + if (options.x_axis_hidden != null && options.x_axis_hidden) this.x_axis = -1; + this.y_axis = (typeof options.y_axis === "boolean" ? options.y_axis : true); + this.xlate_nsyms = (typeof options.xlate_nsyms === "number" ? options.xlate_nsyms : this.xlate_nsyms); + this.xlate_start = (typeof options.xlate_start === "number" ? options.xlate_start : this.xlate_start); + this.xlate_end = (typeof options.xlate_end === "number" ? options.xlate_end : this.xlate_end); + } +}; + +Logo.prototype.add_pspm = function(pspm, column) { + "use strict"; + var col; + if (typeof column === "undefined") { + column = 0; + } else if (column < 0) { + throw new Error("Column index out of bounds."); + } + this.pspm_list[this.rows] = pspm; + this.pspm_column[this.rows] = column; + this.rows++; + col = column + pspm.get_motif_length(); + if (col > this.columns) { + this.columns = col; + } +}; + +Logo.prototype.get_columns = function() { + "use strict"; + return this.columns; +}; + +Logo.prototype.get_xlate_nsyms = function() { + "use strict"; + return this.xlate_nsyms; +}; + +Logo.prototype.get_xlate_start = function() { + "use strict"; + return (this.xlate_start != null ? this.xlate_start : 0); +}; + +Logo.prototype.get_xlate_end = function() { + "use strict"; + return (this.xlate_end != null ? this.xlate_end : this.columns * this.xlate_nsyms); +}; + +Logo.prototype.get_xlate_columns = function() { + "use strict"; + return this.get_xlate_end() - this.get_xlate_start(); +}; + +Logo.prototype.get_rows = function() { + "use strict"; + return this.rows; +}; + +Logo.prototype.get_pspm = function(row_index) { + "use strict"; + if (row_index < 0 || row_index >= this.rows) { + throw new Error("INDEX_OUT_OF_BOUNDS"); + } + return this.pspm_list[row_index]; +}; + +Logo.prototype.get_offset = function(row_index) { + "use strict"; + if (row_index < 0 || row_index >= this.rows) { + throw new Error("INDEX_OUT_OF_BOUNDS"); + } + return this.pspm_column[row_index]; +}; + +Logo.prototype._as_eps_data = function(ssc, errbars) { + var i, j, pos, stack_pos, pspm, stack, sym, out; + out = ""; + for (i = 0; i < this.rows; i++) { + out += "\nStartLine\n"; + // Indent + for (j = 0; j < this.pspm_column[i]; j++) { + out += "() startstack\nendstack\n\n"; + } + pspm = this.pspm_list[i]; + if (pspm.get_left_trim() > 0) { + out += "MuteColour\nDrawTrimEdge\n" + pspm.get_left_trim() + " DrawTrimBg\n"; + } + for (pos = 0; pos < pspm.get_motif_length(); pos++) { + if (pos != 0 && pos == pspm.get_left_trim()) { // enable full colour + out += "DrawTrimEdge\nRestoreColour\n"; + } else if (pos == (pspm.get_motif_length() - pspm.get_right_trim())) { + out += "MuteColour\n" + pspm.get_right_trim() + " DrawTrimBg\n"; + } + out += "(" + (pos + 1) + ") startstack\n"; + stack = pspm.get_stack(pos, this.alphabet, ssc); + for (stack_pos = 0; stack_pos < stack.length; stack_pos++) { + sym = stack[stack_pos]; + out += " " + (sym.get_scale() * this.alphabet.get_ic()) + " (" + sym.get_symbol() + ") numchar\n"; + } + if (errbars) { + out += " " + pspm.get_error(this.alphabet) + " Ibeam\n"; + } + out += "endstack\n\n"; + } + if (pspm.get_right_trim() > 0 || pspm.get_left_trim() == pspm.get_motif_length()) { + out += "RestoreColour\n"; + } + out += "EndLine\n"; + } + return out; +}; + +Logo.prototype.as_eps = function(options) { + "use strict"; + if (this.xlate_nsyms != 1) throw new Error("Unsupported setting xlate_nsyms for EPS"); + if (this.xlate_start != null) throw new Error("Unsupported setting xlate_start for EPS"); + if (this.xlate_end != null) throw new Error("Unsupported setting xlate_end for EPS"); + + var LOGOHEIGHT = 7.5; // default height of line in cm + var cm2pts, height, width, now, ssc, errbars; + if (typeof options === "undefined") { + options = {}; + } + cm2pts = 72 / 2.54; + if (typeof options.logo_height == "number") { + height = options.logo_height; + } else { + height = LOGOHEIGHT * this.rows; + } + if (typeof options.logo_width == "number") { + width = options.logo_width; + } else { + width = this.columns + 2; + } + now = new Date(); + ssc = (typeof options.ssc == "boolean" ? options.ssc : false); + errbars = (typeof options.show_error_bar == "boolean" ? options.show_error_bar : ssc); + var values = { + "LOGOHEIGHT": height, + "LOGOWIDTH": width, + "BOUNDINGHEIGHT": Math.round(height * cm2pts), + "BOUNDINGWIDTH": Math.round(width * cm2pts), + "LOGOLINEHEIGHT": (height / this.rows), + "CHARSPERLINE": this.columns, + "BARBITS": this.alphabet.get_ic(), + "LOGOTYPE": (this.alphabet.has_complement() ? "NA" : "AA"), + "CREATIONDATE": now.getDate() + "." + (now.getMonth() + 1) + "." + now.getFullYear() + " " + now.getHours() + ":" + now.getMinutes() + ":" + now.getSeconds(), + "ERRORBARFRACTION": (typeof options.error_bar_fraction == "number" ? options.error_bar_fraction : 1.0), + "TICBITS": (typeof options.ticbits == "number" ? options.ticbits : 1.0), + "TITLE": (typeof options.title == "string" ? options.title : ""), + "FINEPRINT": (typeof options.fineprint == "string" ? options.fineprint : this.fine_text), + "XAXISLABEL": (typeof options.xaxislabel == "string" ? options.xaxislabel : ""), + "YAXISLABEL": (typeof options.yaxislabel == "string" ? options.yaxislabel : "bits"), + "SSC": ssc, + "YAXIS": (typeof options.show_y_axis == "boolean" ? options.show_y_axis : this.y_axis), + "SHOWENDS": (typeof options.show_ends == "boolean" ? options.show_ends : false), + "ERRBAR": errbars, + "OUTLINE": (typeof options.show_outline == "boolean" ? options.show_outline : false), + "NUMBERING": (typeof options.show_numbering == "boolean" ? options.show_numbering : this.x_axis != 0), + "SHOWINGBOX": (typeof options.show_box == "boolean" ? options.show_box : false), + "CREATOR": (typeof options.creator == "string" ? options.creator : "motif_logo.js"), + "FONTSIZE": (typeof options.label_font_size == "number" ? options.label_font_size : 12), + "TITLEFONTSIZE": (typeof options.title_font_size == "number" ? options.title_font_size : 12), + "SMALLFONTSIZE": (typeof options.small_font_size == "number" ? options.small_font_size : 6), + "TOPMARGIN" : (typeof options.top_margin == "number" ? options.top_margin : 0.9), + "BOTTOMMARGIN": (typeof options.bottom_margin == "number" ? options.bottom_margin : 0.9), + "COLORDICT": this.alphabet._as_eps_dict(), + "DATA": this._as_eps_data(ssc, errbars) + }; + // now this requires that the script containing the template has been imported! + return motif_logo_template(values); +}; + +//====================================================================== +// end Logo object +//====================================================================== + +// calculate the exact size (in pixels) of an object drawn on the +// canvas assuming that the background of the canvas is transparent. +function canvas_bounds(ctx, cwidth, cheight) { + "use strict"; + var data, r, c, top_line, bottom_line, left_line, right_line, + txt_width, txt_height; + + // extract the image data + data = ctx.getImageData(0, 0, cwidth, cheight).data; + + // set initial values + top_line = -1; bottom_line = -1; left_line = -1; right_line = -1; + txt_width = 0; txt_height = 0; + + // Find the top-most line with a non-transparent pixel + for (r = 0; r < cheight; r++) { + for (c = 0; c < cwidth; c++) { + if (data[r * cwidth * 4 + c * 4 + 3]) { + top_line = r; + break; + } + } + if (top_line != -1) { + break; + } + } + + // Only bother looking if we found at least one set pixel... + if (top_line != -1) { + + //find the last line with a non-transparent pixel + for (r = cheight-1; r >= top_line; r--) { + for(c = 0; c < cwidth; c++) { + if(data[r * cwidth * 4 + c * 4 + 3]) { + bottom_line = r; + break; + } + } + if (bottom_line != -1) { + break; + } + } + // calculate height + txt_height = bottom_line - top_line + 1; + + // Find the left-most line with a non-transparent pixel + for (c = 0; c < cwidth; c++) { + for (r = top_line; r <= bottom_line; r++) { + if (data[r * cwidth * 4 + c * 4 + 3]) { + left_line = c; + break; + } + } + if (left_line != -1) { + break; + } + } + + //find the right most line with a non-transparent pixel + for (c = cwidth-1; c >= left_line; c--) { + for(r = top_line; r <= bottom_line; r++) { + if(data[r * cwidth * 4 + c * 4 + 3]) { + right_line = c; + break; + } + } + if (right_line != -1) { + break; + } + } + txt_width = right_line - left_line + 1; + } + + //return the bounds + return {bound_top: top_line, bound_bottom: bottom_line, + bound_left: left_line, bound_right: right_line, width: txt_width, + height: txt_height}; +} + +//====================================================================== +// start RasterizedAlphabet +//====================================================================== + +// Rasterize Alphabet +// 1) Measure width of text at default font for all symbols in alphabet +// 2) sort in width ascending +// 3) Drop the top and bottom 10% (designed to ignore outliers like 'W' and 'I') +// 4) Calculate the average as the maximum scaling factor (designed to stop I becoming a rectangular blob). +// 5) Assume scale of zero would result in width of zero, interpolate scale required to make perfect width font +// 6) Draw text onto temp canvas at calculated scale +// 7) Find bounds of drawn text +// 8) Paint on to another canvas at the desired height (but only scaling width to fit if larger). +var RasterizedAlphabet = function(alphabet, logo_scale, font, width) { + "use strict"; + var default_size, safety_pad, canvas, ctx, middle, baseline, widths, sizes, + i, sym, size, tenpercent, avg_width, scale, + target_width, target_height; + //variable prototypes + this.alphabet = alphabet; + this.scale = logo_scale; + this.sym_cache = {}; + this.stack_num_cache = []; + this.scale_num_cache = []; + // size of canvas + default_size = 60; // size of measuring canvas + safety_pad = 20; // pixels to pad around so we don't miss the edges + // create a canvas to do our measuring + canvas = document.createElement("canvas"); + if (!canvas.getContext) throw new Error("No canvas support"); + canvas.width = default_size + 2 * safety_pad; + canvas.height = default_size + 2 * safety_pad; + middle = Math.round(canvas.width / 2); + baseline = Math.round(canvas.height - safety_pad); + ctx = canvas.getContext('2d'); + if (!supports_text(ctx)) throw new Error("Canvas does not support text"); + ctx.font = font; + ctx.textAlign = "center"; + ctx.translate(middle, baseline); + // list of widths + widths = []; + sizes = []; + //now measure each letter in the alphabet + for (i = 0; i < alphabet.get_size_core(); ++i) { + // reset the canvas + ctx.clearRect(0, 0, canvas.width, canvas.height); + ctx.fillStyle = alphabet.get_colour(i); + // draw the test text + ctx.fillText(alphabet.get_symbol(i), 0, 0); + //measure + size = canvas_bounds(ctx, canvas.width, canvas.height); + if (size.width === 0) throw new Error("Invisible symbol!"); + widths.push(size.width); + sizes[i] = size; + } + //sort the widths + widths.sort(function(a,b) {return a - b;}); + //drop 10% of the items off each end + tenpercent = Math.floor(widths.length / 10); + for (i = 0; i < tenpercent; ++i) { + widths.pop(); + widths.shift(); + } + //calculate average width + avg_width = 0; + for (i = 0; i < widths.length; ++i) { + avg_width += widths[i]; + } + avg_width /= widths.length; + // calculate the target width + target_width = width * this.scale * 2; + // calculate scales + for (i = 0; i < alphabet.get_size_core(); ++i) { + sym = alphabet.get_symbol(i); + size = sizes[i]; + // calculate scale + scale = target_width / Math.max(avg_width, size.width); + // estimate scaled height + target_height = size.height * scale; + // create an appropriately sized canvas + canvas = document.createElement("canvas"); + canvas.width = target_width; + canvas.height = target_height + safety_pad * 2; + // calculate the middle + middle = Math.round(canvas.width / 2); + // calculate the baseline + baseline = Math.round(canvas.height - safety_pad); + // get the context and prepare to draw the rasterized text + ctx = canvas.getContext('2d'); + ctx.font = font; + ctx.fillStyle = alphabet.get_colour(i); + ctx.textAlign = "center"; + ctx.translate(middle, baseline); + ctx.save(); + ctx.scale(scale, scale); + // draw the text + ctx.fillText(sym, 0, 0); + ctx.restore(); + this.sym_cache[sym] = {"image": canvas, "size": canvas_bounds(ctx, canvas.width, canvas.height)}; + } +}; + +RasterizedAlphabet.prototype.get_alphabet = function() { + return this.alphabet; +}; + +RasterizedAlphabet.prototype.get_scale = function() { + return this.scale; +}; + +RasterizedAlphabet.prototype.draw_stack_sym = function(ctx, letter, dx, dy, dWidth, dHeight) { + "use strict"; + var entry, image, size; + entry = this.sym_cache[letter]; + image = entry.image; + size = entry.size; + ctx.drawImage(image, 0, size.bound_top -1, image.width, size.height+1, dx, dy, dWidth, dHeight); +}; + +RasterizedAlphabet.prototype.draw_stack_num = function(ctx, font, stack_width, index) { + var image, image_ctx, text_length; + if (index >= this.stack_num_cache.length) { + image = document.createElement("canvas"); + // measure the text + image_ctx = image.getContext('2d'); + image_ctx.save(); + image_ctx.font = font; + text_length = image_ctx.measureText("" + (index + 1)).width; + image_ctx.restore(); + // resize the canvas to fit + image.width = Math.ceil(stack_width); + image.height = Math.ceil(text_length); + // draw the text + image_ctx = image.getContext('2d'); + image_ctx.translate(Math.round(stack_width / 2), 0); + image_ctx.font = font; + image_ctx.textBaseline = "middle"; + image_ctx.textAlign = "right"; + image_ctx.rotate(-(Math.PI / 2)); + image_ctx.fillText("" + (index + 1), 0, 0); + this.stack_num_cache[index] = image; + } else { + image = this.stack_num_cache[index]; + } + ctx.drawImage(image, 0, 0); +} + +RasterizedAlphabet.prototype.draw_scale_num = function(ctx, font, num) { + var image, image_ctx, text_size, m_length; + if (num >= this.scale_num_cache.length) { + image = document.createElement("canvas"); + // measure the text + image_ctx = image.getContext('2d'); + image_ctx.font = font; + text_size = image_ctx.measureText("" + num); + if (text_size.actualBoundingBoxAscent && text_size.actualBoundingBoxDesent) { + // resize the canvas to fit + image.width = Math.ceil(text_size.width); + image.height = Math.ceil(text_size.actualBoundingBoxAscent + text_size.actualBoundingBoxDesent); + // draw the text + image_ctx = image.getContext('2d'); + image_ctx.font = font; + image_ctx.textAlign = "right"; + image_ctx.fillText("" + num, image.width, text_size.actualBoundingBoxAscent); + } else { + // measure width of 'm' to approximate height, we double it later anyway + m_length = image_ctx.measureText("m").width; + // resize the canvas to fit + image.width = Math.ceil(text_size.width); + image.height = Math.ceil(2 * m_length); + // draw the text + image_ctx = image.getContext('2d'); + image_ctx.font = font; + image_ctx.textAlign = "right"; + image_ctx.textBaseline = "middle"; + image_ctx.fillText("" + num, image.width, m_length); + } + this.scale_num_cache[num] = image; + } else { + image = this.scale_num_cache[num]; + } + ctx.drawImage(image, -image.width, -Math.round(image.height / 2)) +} + +//====================================================================== +// end RasterizedAlphabet +//====================================================================== + +//====================================================================== +// start LogoMetrics object +//====================================================================== + +var LogoMetrics = function(ctx, logo_columns, logo_rows, has_names, has_finetext, x_axis, y_axis) { + "use strict"; + var i, row_height; + //variable prototypes + this.pad_top = (has_names ? 5 : 0); + this.pad_left = (y_axis ? 10 : 0); + this.pad_right = (has_finetext ? 15 : 0); + this.pad_bottom = 0; + this.pad_middle = 20; + this.name_height = 14; + this.name_font = "bold " + this.name_height + "px Times, sans-serif"; + this.name_spacer = 0; + this.y_axis = y_axis; + this.y_label = "bits"; + this.y_label_height = 12; + this.y_label_font = "bold " + this.y_label_height + "px Helvetica, sans-serif"; + this.y_label_spacer = 3; + this.y_num_height = 12; + this.y_num_width = 0; + this.y_num_font = "bold " + this.y_num_height + "px Helvetica, sans-serif"; + this.y_tic_width = 5; + this.stack_pad_left = 0; + this.stack_font = "bold 25px Helvetica, sans-serif"; + this.stack_height = 90; + this.stack_width = 26; + this.stacks_pad_right = 5; + this.x_axis = x_axis; + this.x_num_above = 2; + this.x_num_height = 12; + this.x_num_width = 0; + this.x_num_font = "bold " + this.x_num_height + "px Helvetica, sans-serif"; + this.fine_txt_height = 6; + this.fine_txt_above = 2; + this.fine_txt_font = "normal " + this.fine_txt_height + "px Helvetica, sans-serif"; + this.letter_metrics = new Array(); + this.summed_width = 0; + this.summed_height = 0; + //calculate the width of the y axis numbers + ctx.font = this.y_num_font; + for (i = 0; i <= 2; i++) { + this.y_num_width = Math.max(this.y_num_width, ctx.measureText("" + i).width); + } + //calculate the width of the x axis numbers (but they are rotated so it becomes height) + if (x_axis == 1) { + ctx.font = this.x_num_font; + for (i = 1; i <= logo_columns; i++) { + this.x_num_width = Math.max(this.x_num_width, ctx.measureText("" + i).width); + } + } else if (x_axis == 0) { + this.x_num_height = 4; + this.x_num_width = 4; + } else { + this.x_num_height = 0; + this.x_num_width = 0; + } + + //calculate how much vertical space we want to draw this + //first we add the padding at the top and bottom since that's always there + this.summed_height += this.pad_top + this.pad_bottom; + //all except the last row have the same amount of space allocated to them + if (logo_rows > 1) { + row_height = this.stack_height + this.pad_middle; + if (has_names) { + row_height += this.name_height; + //the label is allowed to overlap into the spacer + row_height += Math.max(this.y_num_height/2, this.name_spacer); + //the label is allowed to overlap the space used by the other label + row_height += Math.max(this.y_num_height/2, this.x_num_height + this.x_num_above); + } else { + row_height += this.y_num_height/2; + //the label is allowed to overlap the space used by the other label + row_height += Math.max(this.y_num_height/2, this.x_num_height + this.x_num_above); + } + this.summed_height += row_height * (logo_rows - 1); + } + //the last row has the name and fine text below it but no padding + this.summed_height += this.stack_height + (this.y_axis ? this.y_num_height/2 : 0); + + var fine_txt_total = (has_finetext ? this.fine_txt_height + this.fine_txt_above : 0); + if (has_names) { + this.summed_height += fine_txt_total + this.name_height; + this.summed_height += Math.max((this.y_axis ? this.y_num_height/2 : 0), + this.x_num_height + this.x_num_above + this.name_spacer); + } else { + this.summed_height += Math.max((this.y_axis ? this.y_num_height/2 : 0), + this.x_num_height + this.x_num_above + fine_txt_total); + } + + //calculate how much horizontal space we want to draw this + //first add the padding at the left and right since that's always there + this.summed_width += this.pad_left + this.pad_right; + if (this.y_axis) { + //add on the space for the y-axis label + this.summed_width += this.y_label_height + this.y_label_spacer; + //add on the space for the y-axis + this.summed_width += this.y_num_width + this.y_tic_width; + } + //add on the space for the stacks + this.summed_width += (this.stack_pad_left + this.stack_width) * logo_columns; + //add on the padding after the stacks (an offset from the fine text) + this.summed_width += this.stacks_pad_right; + +}; + +//====================================================================== +// end LogoMetrics object +//====================================================================== + +//found this trick at http://talideon.com/weblog/2005/02/detecting-broken-images-js.cfm +function image_ok(img) { + "use strict"; + // During the onload event, IE correctly identifies any images that + // weren't downloaded as not complete. Others should too. Gecko-based + // browsers act like NS4 in that they report this incorrectly. + if (!img.complete) { + return false; + } + // However, they do have two very useful properties: naturalWidth and + // naturalHeight. These give the true size of the image. If it failed + // to load, either of these should be zero. + if (typeof img.naturalWidth !== "undefined" && img.naturalWidth === 0) { + return false; + } + // No other way of checking: assume it's ok. + return true; +} + +function supports_text(ctx) { + "use strict"; + if (!ctx.fillText) { + return false; + } + if (!ctx.measureText) { + return false; + } + return true; +} + +//draws the scale, returns the width +function draw_scale(ctx, metrics, alphabet_ic, raster) { + "use strict"; + var tic_height, i; + tic_height = metrics.stack_height / alphabet_ic; + ctx.save(); + ctx.translate(metrics.y_label_height, metrics.y_num_height/2); + //draw the axis label + ctx.save(); + ctx.font = metrics.y_label_font; + ctx.translate(0, metrics.stack_height/2); + ctx.rotate(-(Math.PI / 2)); + ctx.textAlign = "center"; + ctx.fillText("bits", 0, 0); + ctx.restore(); + + ctx.translate(metrics.y_label_spacer + metrics.y_num_width, 0); + + //draw the axis tics + ctx.save(); + ctx.translate(0, metrics.stack_height); + for (i = 0; i <= alphabet_ic; i++) { + //draw the number + ctx.save(); + ctx.translate(-1, 0); + raster.draw_scale_num(ctx, metrics.y_num_font, i); + ctx.restore(); + //draw the tic + ctx.fillRect(0, -1, metrics.y_tic_width, 2); + //prepare for next tic + ctx.translate(0, -tic_height); + } + ctx.restore(); + + ctx.fillRect(metrics.y_tic_width - 2, 0, 2, metrics.stack_height) + + ctx.restore(); +} + +function draw_stack_num(ctx, metrics, row_index, raster) { + "use strict"; + ctx.save(); + ctx.translate(0, Math.round(metrics.stack_height + metrics.x_num_above)); + if (metrics.x_axis == 1) { + raster.draw_stack_num(ctx, metrics.x_num_font, metrics.stack_width, row_index); + } else if (metrics.x_axis == 0) { + // draw dots instead of the numbers (good for small logos) + ctx.beginPath(); + var radius = Math.round(metrics.x_num_height / 2); + ctx.arc(Math.round(metrics.stack_width / 2), radius, radius, 0, 2 * Math.PI, false); + ctx.fill(); + } + ctx.restore(); +} + +function draw_stack(ctx, metrics, symbols, raster) { + "use strict"; + var preferred_pad, sym_min, i, sym, sym_height, pad; + preferred_pad = 0; + sym_min = 5; + + ctx.save();//1 + ctx.translate(0, metrics.stack_height); + for (i = 0; i < symbols.length; i++) { + sym = symbols[i]; + sym_height = metrics.stack_height * sym.get_scale(); + + pad = preferred_pad; + if (sym_height - pad < sym_min) { + pad = Math.min(pad, Math.max(0, sym_height - sym_min)); + } + sym_height -= pad; + + //translate to the correct position + ctx.translate(0, -(pad/2 + sym_height)); + + //draw + raster.draw_stack_sym(ctx, sym.get_symbol(), 0, 0, metrics.stack_width, sym_height); + //translate past the padding + ctx.translate(0, -(pad/2)); + } + ctx.restore();//1 +} + +function draw_dashed_line(ctx, pattern, start, x1, y1, x2, y2) { + "use strict"; + var x, y, len, i, dx, dy, tlen, theta, mulx, muly, lx, ly; + dx = x2 - x1; + dy = y2 - y1; + tlen = Math.pow(dx*dx + dy*dy, 0.5); + theta = Math.atan2(dy,dx); + mulx = Math.cos(theta); + muly = Math.sin(theta); + lx = []; + ly = []; + for (i = 0; i < pattern; ++i) { + lx.push(pattern[i] * mulx); + ly.push(pattern[i] * muly); + } + i = start; + x = x1; + y = y1; + len = 0; + ctx.beginPath(); + while (len + pattern[i] < tlen) { + ctx.moveTo(x, y); + x += lx[i]; + y += ly[i]; + ctx.lineTo(x, y); + len += pattern[i]; + i = (i + 1) % pattern.length; + x += lx[i]; + y += ly[i]; + len += pattern[i]; + i = (i + 1) % pattern.length; + } + if (len < tlen) { + ctx.moveTo(x, y); + x += mulx * (tlen - len); + y += muly * (tlen - len); + ctx.lineTo(x, y); + } + ctx.stroke(); +} + +function draw_trim_background(ctx, metrics, left_start, left_end, left_divider, right_start, right_end, right_divider) { + "use strict"; + var left_size = left_end - left_start; + var right_size = right_end - right_start; + var line_x; + + ctx.save();//s8 + ctx.fillStyle = "rgb(240, 240, 240)"; + if (left_size > 0) { + ctx.fillRect(left_start * metrics.stack_width, 0, left_size * metrics.stack_width, metrics.stack_height); + } + if (right_size > 0) { + ctx.fillRect(right_start * metrics.stack_width, 0, right_size * metrics.stack_width, metrics.stack_height); + } + ctx.fillStyle = "rgb(51, 51, 51)"; + if (left_size > 0 && left_divider) { + line_x = (left_end * metrics.stack_width) - 0.5; + draw_dashed_line(ctx, [3], 0, line_x, 0, line_x, metrics.stack_height); + } + if (right_size > 0 && right_divider) { + line_x = (right_start * metrics.stack_width) + 0.5; + draw_dashed_line(ctx, [3], 0, line_x, 0, line_x, metrics.stack_height); + } + ctx.restore();//s8 +} + +function size_logo_on_canvas(logo, canvas, show_names, scale) { + "use strict"; + var draw_name, draw_finetext, metrics; + draw_name = (typeof show_names === "boolean" ? show_names : (logo.get_rows() > 1)); + draw_finetext = (logo.fine_text.length > 0); + if (canvas.width !== 0 && canvas.height !== 0) { + return; + } + metrics = new LogoMetrics(canvas.getContext('2d'), + logo.get_xlate_columns(), logo.get_rows(), draw_name, draw_finetext, logo.x_axis, logo.y_axis); + if (typeof scale == "number") { + //resize the canvas to fit the scaled logo + canvas.width = metrics.summed_width * scale; + canvas.height = metrics.summed_height * scale; + } else { + if (canvas.width === 0 && canvas.height === 0) { + canvas.width = metrics.summed_width; + canvas.height = metrics.summed_height; + } else if (canvas.width === 0) { + canvas.width = metrics.summed_width * (canvas.height / metrics.summed_height); + } else if (canvas.height === 0) { + canvas.height = metrics.summed_height * (canvas.width / metrics.summed_width); + } + } +} + +function draw_logo_on_canvas(logo, canvas, show_names, scale) { + "use strict"; + var i, draw_name, draw_finetext, ctx, metrics, raster, pspm_i, pspm, + offset, col_index, motif_position, ssc; + ssc = false; + draw_name = (typeof show_names === "boolean" ? show_names : (logo.get_rows() > 1)); + draw_finetext = (logo.fine_text.length > 0); + ctx = canvas.getContext('2d'); + //assume that the user wants the canvas scaled equally so calculate what the best width for this image should be + metrics = new LogoMetrics(ctx, logo.get_xlate_columns(), logo.get_rows(), draw_name, draw_finetext, logo.x_axis, logo.y_axis); + if (typeof scale == "number") { + //resize the canvas to fit the scaled logo + canvas.width = metrics.summed_width * scale; + canvas.height = metrics.summed_height * scale; + } else { + if (canvas.width === 0 && canvas.height === 0) { + scale = 1; + canvas.width = metrics.summed_width; + canvas.height = metrics.summed_height; + } else if (canvas.width === 0) { + scale = canvas.height / metrics.summed_height; + canvas.width = metrics.summed_width * scale; + } else if (canvas.height === 0) { + scale = canvas.width / metrics.summed_width; + canvas.height = metrics.summed_height * scale; + } else { + scale = Math.min(canvas.width / metrics.summed_width, canvas.height / metrics.summed_height); + } + } + // cache the raster based on the assumption that we will be drawing a lot + // of logos the same size and alphabet + if (typeof draw_logo_on_canvas.raster_cache === "undefined") { + draw_logo_on_canvas.raster_cache = []; + } + for (i = 0; i < draw_logo_on_canvas.raster_cache.length; i++) { + raster = draw_logo_on_canvas.raster_cache[i]; + if (raster.get_alphabet().equals(logo.alphabet) && + Math.abs(raster.get_scale() - scale) < 0.1) break; + raster = null; + } + if (raster == null) { + raster = new RasterizedAlphabet(logo.alphabet, scale, metrics.stack_font, metrics.stack_width); + draw_logo_on_canvas.raster_cache.push(raster); + } + ctx = canvas.getContext('2d'); + ctx.save();//s1 + ctx.scale(scale, scale); + ctx.save();//s2 + ctx.save();//s7 + //create margin + ctx.translate(Math.round(metrics.pad_left), Math.round(metrics.pad_top)); + for (pspm_i = 0; pspm_i < logo.get_rows(); ++pspm_i) { + pspm = logo.get_pspm(pspm_i); + offset = logo.get_offset(pspm_i); + //optionally draw name if this isn't the last row or is the only row + if (draw_name && (logo.get_rows() == 1 || pspm_i != (logo.get_rows()-1))) { + ctx.save();//s4 + ctx.translate(Math.round(metrics.summed_width/2), Math.round(metrics.name_height)); + ctx.font = metrics.name_font; + ctx.textAlign = "center"; + ctx.fillText(pspm.name, 0, 0); + ctx.restore();//s4 + ctx.translate(0, Math.round(metrics.name_height + + Math.min(0, metrics.name_spacer - metrics.y_num_height/2))); + } + //draw scale + if (logo.y_axis) draw_scale(ctx, metrics, logo.alphabet.get_ic(), raster); + ctx.save();//s5 + //translate across past the scale + if (logo.y_axis) { + ctx.translate(Math.round(metrics.y_label_height + metrics.y_label_spacer + + metrics.y_num_width + metrics.y_tic_width), Math.round(metrics.y_num_height / 2)); + } + //draw the trimming background + if (pspm.get_left_trim() > 0 || pspm.get_right_trim() > 0) { + var left_start = offset * logo.get_xlate_nsyms(); + var left_end = (offset + pspm.get_left_trim()) * logo.get_xlate_nsyms(); + var left_divider = true; + if (left_end < logo.get_xlate_start() || left_start > logo.get_xlate_end()) { + // no overlap + left_start = 0; + left_end = 0; + left_divider = false; + } else { + if (left_start < logo.get_xlate_start()) { + left_start = logo.get_xlate_start(); + } + if (left_end > logo.get_xlate_end()) { + left_end = logo.get_xlate_end(); + left_divider = false; + } + left_start -= logo.get_xlate_start(); + left_end -= logo.get_xlate_start(); + if (left_end < left_start) { + left_start = 0; + left_end = 0; + left_divider = false; + } + } + var right_end = (offset + pspm.get_motif_length()) * logo.get_xlate_nsyms(); + //var right_start = right_end - (pspm.get_left_trim() * logo.get_xlate_nsyms()); + var right_start = right_end - (pspm.get_right_trim() * logo.get_xlate_nsyms()); + var right_divider = true; + if (right_end < logo.get_xlate_start() || right_start > logo.get_xlate_end()) { + // no overlap + right_start = 0; + right_end = 0; + right_divider = false; + } else { + if (right_start < logo.get_xlate_start()) { + right_start = logo.get_xlate_start(); + right_divider = false; + } + if (right_end > logo.get_xlate_end()) { + right_end = logo.get_xlate_end(); + } + right_start -= logo.get_xlate_start(); + right_end -= logo.get_xlate_start(); + if (right_end < right_start) { + right_start = 0; + right_end = 0; + right_divider = false; + } + } + draw_trim_background(ctx, metrics, left_start, left_end, left_divider, right_start, right_end, right_divider); + } + //draw letters + var xlate_col; + for (xlate_col = logo.get_xlate_start(); xlate_col < logo.get_xlate_end(); xlate_col++) { + ctx.translate(metrics.stack_pad_left,0); + col_index = Math.floor(xlate_col / logo.get_xlate_nsyms()); + if (xlate_col % logo.get_xlate_nsyms() == 0) { + if (col_index >= offset && col_index < (offset + pspm.get_motif_length())) { + motif_position = col_index - offset; + draw_stack_num(ctx, metrics, motif_position, raster); + draw_stack(ctx, metrics, pspm.get_stack(motif_position, logo.alphabet, ssc), raster); + } + } else { + if (col_index >= offset && col_index < (offset + pspm.get_motif_length())) { + ctx.save();// s5.1 + ctx.translate(0, Math.round(metrics.stack_height)); + // TODO draw a dot or dash or something to indicate continuity of the motif + ctx.restore(); //s5.1 + } + } + ctx.translate(Math.round(metrics.stack_width), 0); + } + ctx.restore();//s5 + ////optionally draw name if this is the last row but isn't the only row + if (draw_name && (logo.get_rows() != 1 && pspm_i == (logo.get_rows()-1))) { + //translate vertically past the stack and axis's + ctx.translate(0, metrics.y_num_height/2 + metrics.stack_height + + Math.max(metrics.y_num_height/2, metrics.x_num_above + metrics.x_num_width + metrics.name_spacer)); + + ctx.save();//s6 + ctx.translate(metrics.summed_width/2, metrics.name_height); + ctx.font = metrics.name_font; + ctx.textAlign = "center"; + ctx.fillText(pspm.name, 0, 0); + ctx.restore();//s6 + ctx.translate(0, metrics.name_height); + } else { + //translate vertically past the stack and axis's + ctx.translate(0, metrics.y_num_height/2 + metrics.stack_height + + Math.max(metrics.y_num_height/2, metrics.x_num_above + metrics.x_num_width)); + } + //if not the last row then add middle padding + if (pspm_i != (logo.get_rows() -1)) { + ctx.translate(0, metrics.pad_middle); + } + } + ctx.restore();//s7 + if (logo.fine_text.length > 0) { + ctx.translate(metrics.summed_width - metrics.pad_right, metrics.summed_height - metrics.pad_bottom); + ctx.font = metrics.fine_txt_font; + ctx.textAlign = "right"; + ctx.fillText(logo.fine_text, 0,0); + } + ctx.restore();//s2 + ctx.restore();//s1 +} + +function create_canvas(c_width, c_height, c_id, c_title, c_display) { + "use strict"; + var canvas = document.createElement("canvas"); + //check for canvas support before attempting anything + if (!canvas.getContext) { + return null; + } + var ctx = canvas.getContext('2d'); + //check for html5 text drawing support + if (!supports_text(ctx)) { + return null; + } + //size the canvas + canvas.width = c_width; + canvas.height = c_height; + canvas.id = c_id; + canvas.title = c_title; + canvas.style.display = c_display; + return canvas; +} + +function logo_1(alphabet, fine_text, pspm) { + "use strict"; + var logo = new Logo(alphabet, fine_text); + logo.add_pspm(pspm); + return logo; +} + +function logo_2(alphabet, fine_text, target, query, query_offset) { + "use strict"; + var logo = new Logo(alphabet, fine_text); + if (query_offset < 0) { + logo.add_pspm(target, -query_offset); + logo.add_pspm(query); + } else { + logo.add_pspm(target); + logo.add_pspm(query, query_offset); + } + return logo; +} + +/* + * Specifies an alternate source for an image. + * If the image with the image_id specified has + * not loaded then a generated logo will be used + * to replace it. + * + * Note that the image must either have dimensions + * or a scale must be set. + */ +function alternate_logo(logo, image_id, scale) { + "use strict"; + var image = document.getElementById(image_id); + if (!image) { + alert("Can't find specified image id (" + image_id + ")"); + return; + } + //if the image has loaded then there is no reason to use the canvas + if (image_ok(image)) { + return; + } + //the image has failed to load so replace it with a canvas if we can. + var canvas = create_canvas(image.width, image.height, image_id, image.title, image.style.display); + if (canvas === null) { + return; + } + //draw the logo on the canvas + draw_logo_on_canvas(logo, canvas, null, scale); + //replace the image with the canvas + image.parentNode.replaceChild(canvas, image); +} + +/* + * Specifes that the element with the specified id + * should be replaced with a generated logo. + */ +function replace_logo(logo, replace_id, scale, title_txt, display_style) { + "use strict"; + var element = document.getElementById(replace_id); + if (!replace_id) { + alert("Can't find specified id (" + replace_id + ")"); + return; + } + //found the element! + var canvas = create_canvas(50, 120, replace_id, title_txt, display_style); + if (canvas === null) { + return; + } + //draw the logo on the canvas + draw_logo_on_canvas(logo, canvas, null, scale); + //replace the element with the canvas + element.parentNode.replaceChild(canvas, element); +} + +/* + * Fast string trimming implementation found at + * http://blog.stevenlevithan.com/archives/faster-trim-javascript + * + * Note that regex is good at removing leading space but + * bad at removing trailing space as it has to first go through + * the whole string. + */ +function trim (str) { + "use strict"; + var ws, i; + str = str.replace(/^\s\s*/, ''); + ws = /\s/; i = str.length; + while (ws.test(str.charAt(--i))); + return str.slice(0, i + 1); +} +</script> + <script> + +// PRIVATE GLOBAL (uhoh) +var _block_colour_lookup = {}; + +function block_colour(index) { + function hsl2rgb(hue, saturation, lightness) { + "use strict"; + function _hue(p, q, t) { + "use strict"; + if (t < 0) t += 1; + else if (t > 1) t -= 1; + if (t < (1.0 / 6.0)) { + return p + ((q - p) * 6.0 * t); + } else if (t < 0.5) { + return q; + } else if (t < (2.0 / 3.0)) { + return p + ((q - p) * ((2.0 / 3.0) - t) * 6.0); + } else { + return p; + } + } + function _pad_hex(value) { + var hex = Math.round(value * 255).toString(16); + if (hex.length < 2) hex = "0" + hex; + return hex; + } + var r, g, b, p, q; + if (saturation == 0) { + // achromatic (grayscale) + r = lightness; + g = lightness; + b = lightness; + } else { + if (lightness < 0.5) { + q = lightness * (1 + saturation); + } else { + q = lightness + saturation - (lightness * saturation); + } + p = (2 * lightness) - q; + r = _hue(p, q, hue + (1.0 / 3.0)); + g = _hue(p, q, hue); + b = _hue(p, q, hue - (1.0 / 3.0)); + } + return "#" + _pad_hex(r) + _pad_hex(g) + _pad_hex(b); + } + if (typeof index !== "number" || index % 1 !== 0 || index < 0) return "#000000"; + // check for override + if (_block_colour_lookup[index] == null) { + var start = 0; //red + var sat = 100; + var light = 50; + var divisions = 1 << Math.ceil(Math.log(index + 1) / Math.LN2); + hue = start + (360 / divisions) * ((index - (divisions >> 1)) * 2 + 1); + // colour input fields only support values in the form #RRGGBB + _block_colour_lookup[index] = hsl2rgb(hue / 360, sat / 100, light / 100); + } + return _block_colour_lookup[index]; +} + +function set_block_colour(index, new_colour) { + _block_colour_lookup[index] = new_colour; + var blocks = document.querySelectorAll("div.block_motif[data-colour-index=\"" + index + "\"]"); + var i; + for (i = 0; i < blocks.length; i++) { + blocks[i].style.backgroundColor = new_colour; + } + var swatches = document.querySelectorAll("div.legend_swatch[data-colour-index=\"" + index + "\"]"); + var picker; + for (i = 0; i < swatches.length; i++) { + swatches[i].style.backgroundColor = new_colour; + picker = swatches[i].querySelector("input[type=\"color\"]"); + if (picker != null) picker.value = new_colour; + } +} + +function make_block_legend_entry(motif_name, motif_colour_index) { + if (typeof make_block_legend_entry.has_colour_picker !== "boolean") { + // test if colour picker is supported, based off Modernizer + // see http://stackoverflow.com/a/7787648/66387 + make_block_legend_entry.has_colour_picker = (function() { + var doc_ele = document.documentElement; + // We first check to see if the type we give it sticks.. + var input_ele = document.createElement('input'); + input_ele.setAttribute('type', 'color'); + var value_ok = input_ele.type !== 'text'; + if (value_ok) { + // If the type does, we feed it a textual value, which shouldn't be valid. + // If the value doesn't stick, we know there's input sanitization which infers a custom UI + var smile = ':)'; + input_ele.value = smile; + input_ele.style.cssText = 'position:absolute;visibility:hidden;'; + // chuck into DOM and force reflow for Opera bug in 11.00 + // github.com/Modernizr/Modernizr/issues#issue/159 + doc_ele.appendChild(input_ele); + doc_ele.offsetWidth; + value_ok = input_ele.value != smile; + doc_ele.removeChild(input_ele); + } + return value_ok; + })(); + } + var entry = document.createElement("div"); + entry.className = "legend_entry"; + var swatch; + swatch = document.createElement("div"); + swatch.className = "legend_swatch"; + swatch.setAttribute("data-colour-index", motif_colour_index); + swatch.style.backgroundColor = block_colour(motif_colour_index); + if (make_block_legend_entry.has_colour_picker) { + var picker = document.createElement("input"); + picker.type = "color"; + picker.value = block_colour(motif_colour_index); + picker.addEventListener("change", function(e) { + set_block_colour(motif_colour_index, picker.value); + }, false); + swatch.addEventListener("click", function(e) { + picker.click(); + }, false); + swatch.appendChild(picker); + } + entry.appendChild(swatch); + var name = document.createElement("div"); + name.className = "legend_text"; + name.appendChild(document.createTextNode(motif_name)); + entry.appendChild(name); + return entry; +} + +function make_block_ruler(max_len) { + var container = document.createElement("div"); + container.className = "block_container"; + var step; + if (max_len < 50) { + step = 1; + } else if (max_len < 100) { + step = 2; + } else if (max_len < 200) { + step = 4; + } else if (max_len < 500) { + step = 10; + } else if (max_len < 1000) { + step = 20; + } else if (max_len < 2000) { + step = 40; + } else if (max_len < 5000) { + step = 100; + } else if (max_len < 10000) { + step = 200; + } else if (max_len < 20000) { + step = 400; + } else { + step = Math.floor(max_len / 20000) * 400; + } + var peroid; + if (max_len < 10) { + peroid = 1; + } else if (max_len < 20) { + peroid = 2; + } else { + peroid = 5; + } + var i, cycle, offset, tic, label; + for (i = 0, cycle = 0; i < max_len; i += step, cycle = (cycle + 1) % peroid) { + offset = "" + ((i / max_len) * 100) + "%"; + tic = document.createElement("div"); + tic.style.left = offset; + tic.className = (cycle == 0 ? "tic_major" : "tic_minor"); + container.appendChild(tic); + if (cycle == 0) { + label = document.createElement("div"); + label.className = "tic_label"; + label.style.left = offset; + label.appendChild(document.createTextNode(i)); + container.appendChild(label); + } + } + return container; +} + +function _calculate_block_needle_drag_pos(e, data) { + var mouse; + e = e || window.event; + if (e.pageX || ev.pageY) { + mouse = {"x": e.pageX, "y": e.pageY}; + } else { + mouse = { + x:e.clientX + document.body.scrollLeft - document.body.clientLeft, + y:e.clientY + document.body.scrollTop - document.body.clientTop + }; + } + var cont = data.container; + var dragable_length = cont.clientWidth - + (cont.style.paddingLeft ? cont.style.paddingLeft : 0) - + (cont.style.paddingRight ? cont.style.paddingRight : 0); + //I believe that the offset parent is the body + //otherwise I would need to make this recursive + //maybe clientLeft would work, but the explanation of + //it is hard to understand and it apparently doesn't work + //in firefox 2. + var diff = mouse.x - cont.offsetLeft; + if (diff < 0) diff = 0; + if (diff > dragable_length) diff = dragable_length; + var pos = Math.round(diff / dragable_length * data.max); + if (pos > data.len) pos = data.len; + return pos; +} + +function _update_block_needle_drag(e, data, done) { + "use strict"; + var pos = _calculate_block_needle_drag_pos(e, data); + // read the needle positions + var left = parseInt(data.llabel.textContent, 10) - data.off - 1; + var right = parseInt(data.rlabel.textContent, 10) - data.off; + // validate needle positions + if (left >= data.len) left = data.len - 1; + if (left < 0) left = 0; + if (right > data.len) right = data.len; + if (right <= left) right = left + 1; + // calculate the new needle positions + if (data.moveboth) { + var size = right - left; + if (data.isleft) { + if ((pos + size) > data.len) pos = data.len - size; + left = pos; + right = pos + size; + } else { + if ((pos - size) < 0) pos = size; + left = pos - size; + right = pos; + } + } else { + if (data.isleft) { + if (pos >= right) pos = right - 1; + left = pos; + } else { + if (pos <= left) pos = left + 1; + right = pos; + } + } + // update the needle positions + data.lneedle.style.left = "" + (left / data.max * 100) + "%"; + data.llabel.textContent = "" + (left + data.off + 1); + data.rneedle.style.left = "" + (right / data.max * 100) + "%"; + data.rlabel.textContent = "" + (right + data.off); + data.handler(left, right, done); +} + +function _make_block_needle_drag_start_handler(isleft, data) { + return function (e) { + data.isleft = isleft; + data.moveboth = !(e.shiftKey); + document.addEventListener("mousemove", data.drag_during, false); + document.addEventListener("mouseup", data.drag_end, false); + }; +} + +function _make_block_needle_drag_end_handler(data) { + return function (e) { + document.removeEventListener("mousemove", data.drag_during, false); + document.removeEventListener("mouseup", data.drag_end, false); + _update_block_needle_drag(e, data, true); + }; +} + +function _make_block_needle_drag_during_handler(data) { + return function (e) { + _update_block_needle_drag(e, data, false); + }; +} + +// private function used by make_block_container +function _make_block_needle(isleft, value, data) { + var vbar = document.createElement('div'); + vbar.className = "block_needle " + (isleft ? "left" : "right"); + vbar.style.left = "" + (value / data.max * 100)+ "%"; + var label = document.createElement('div'); + label.className = "block_handle " + (isleft ? "left" : "right"); + // The needles sit between the sequence positions, so the left one sits at the + // start and the right at the end. This is why 1 is added to the displayed + // value for a left handle as the user doesn't need to know about this detail + label.textContent = "" + (isleft ? value + data.off + 1 : value + data.off); + label.unselectable = "on"; // so IE and Opera don't select the text, others are done in css + label.title = "Drag to move the displayed range. Hold shift and drag to change " + (isleft ? "lower" : "upper") + " bound of the range."; + vbar.appendChild(label); + if (isleft) { + data.lneedle = vbar; + data.llabel = label; + } else { + data.rneedle = vbar; + data.rlabel = label; + } + label.addEventListener("mousedown", _make_block_needle_drag_start_handler(isleft, data), false); + return vbar; +} + +function make_block_container(is_stranded, has_both_strands, max_len, show_len, offset, range_handler) { + offset = (offset != null ? offset : 0); + // make the container for the block diagram + var container = document.createElement("div"); + container.className = "block_container"; + container.setAttribute("data-max", max_len); + container.setAttribute("data-off", offset); + if (is_stranded) { + var plus = document.createElement("div"); + plus.appendChild(document.createTextNode("+")); + plus.className = "block_plus_sym"; + container.appendChild(plus); + if (has_both_strands) { + var minus = document.createElement("div"); + minus.appendChild(document.createTextNode("-")); + minus.className = "block_minus_sym"; + container.appendChild(minus); + } + } + var rule = document.createElement("div"); + rule.className = "block_rule"; + rule.style.width = ((show_len / max_len) * 100) + "%"; + container.appendChild(rule); + if (range_handler != null) { + var range_data = { + "max": max_len, + "len": show_len, + "off": offset, + "handler": range_handler, + "container": container, + "lneedle": null, "llabel": null, + "rneedle": null, "rlabel": null, + "isleft": false, "moveboth" : false + }; + range_data.drag_during = _make_block_needle_drag_during_handler(range_data); + range_data.drag_end = _make_block_needle_drag_end_handler(range_data); + container.appendChild(_make_block_needle(false, 1, range_data)); // add right first so z-index works + container.appendChild(_make_block_needle(true, 0, range_data)); + } + return container; +} + +function make_block_label(container, max_len, pos, length, message) { + "use strict"; + var label = document.createElement("div"); + label.className = "block_label"; + label.style.left = (((pos + (length / 2)) / max_len) * 100) + "%"; + label.appendChild(document.createTextNode(message)); + container.appendChild(label); +} + +function make_block(container, max_len, + site_pos, site_len, site_pvalue, site_rc, site_colour_index, site_secondary) { + "use strict"; + var block_height, block, block_region1, block_region2; + var max_block_height = 12; + var max_pvalue = 1e-10; + // calculate the height of the block + block_height = (site_pvalue < max_pvalue ? max_block_height : + (Math.log(site_pvalue) / Math.log(max_pvalue)) * max_block_height); + if (block_height < 1) block_height = 1; + // create a block to represent the motif + block = document.createElement("div"); + block.className = "block_motif" + (site_secondary ? " scanned_site" : "") + (site_rc ? " bottom" : " top"); + block.style.left = ((site_pos / max_len) * 100) + "%"; + block.style.top = (!site_rc ? max_block_height - block_height : + max_block_height + 1) + "px"; + block.style.width = ((site_len / max_len) * 100) + "%"; + block.style.height = block_height + "px"; + block.style.backgroundColor = block_colour(site_colour_index); + block.setAttribute("data-colour-index", site_colour_index); + // add to container + container.appendChild(block); + var activator = function (e) { + toggle_class(block, "active", true); + var new_e = new e.constructor(e.type, e); + block.dispatchEvent(new_e); + }; + var deactivator = function (e) { + toggle_class(block, "active", false); + var new_e = new e.constructor(e.type, e); + block.dispatchEvent(new_e); + } + // create a larger region to detect mouseover for the block + block_region1 = document.createElement("div"); + block_region1.className = "block_region top" + + (site_secondary ? " scanned_site" : "") + (site_rc ? "" : " main"); + block_region1.style.left = block.style.left; + block_region1.style.width = block.style.width; + block_region1.addEventListener('mouseover', activator, false); + block_region1.addEventListener('mouseout', deactivator, false); + container.appendChild(block_region1); + block_region2 = document.createElement("div"); + block_region2.className = "block_region bottom" + + (site_secondary ? " scanned_site" : "") + (site_rc ? " main" : ""); + block_region2.style.left = block.style.left; + block_region2.style.width = block.style.width; + block_region2.addEventListener('mouseover', activator, false); + block_region2.addEventListener('mouseout', deactivator, false); + container.appendChild(block_region2); + return block; +} + +function set_block_needle_positions(containingNode, start, end) { + var container, lneedle, llabel, rneedle, rlabel, max, off, left, right; + container = (/\bblock_container\b/.test(containingNode.className) ? containingNode : containingNode.querySelector(".block_container")); + max = parseInt(container.getAttribute("data-max"), 10); + off = parseInt(container.getAttribute("data-off"), 10); + left = start - off; + right = end - off; + lneedle = containingNode.querySelector(".block_needle.left"); + llabel = lneedle.querySelector(".block_handle.left"); + rneedle = containingNode.querySelector(".block_needle.right"); + rlabel = rneedle.querySelector(".block_handle.right"); + // update the needle positions + lneedle.style.left = "" + (left / max * 100) + "%"; + llabel.textContent = "" + (left + off + 1); + rneedle.style.left = "" + (right / max * 100) + "%"; + rlabel.textContent = "" + (right + off); +} + +function get_block_needle_positions(containingNode) { + var container, llabel, rlabel, max, off, left, right; + container = (/\bblock_container\b/.test(containingNode.className) ? containingNode : containingNode.querySelector(".block_container")); + max = parseInt(container.getAttribute("data-max"), 10); + off = parseInt(container.getAttribute("data-off"), 10); + llabel = containingNode.querySelector(".block_needle.left > .block_handle.left"); + rlabel = containingNode.querySelector(".block_needle.right > .block_handle.right"); + left = parseInt(llabel.textContent, 10) - off - 1; + right = parseInt(rlabel.textContent, 10) - off; + return {"start": left + off, "end": right + off}; +} +</script> + <script> +function make_alpha_bg_table(alph, freqs) { + function colour_symbol(index) { + var span = document.createElement("span"); + span.appendChild(document.createTextNode(alph.get_symbol(index))); + span.style.color = alph.get_colour(index); + span.className = "alpha_symbol"; + return span; + } + var table, thead, tbody, row, th, span, i; + // create table + table = document.createElement("table"); + table.className = "alpha_bg_table"; + // create header + thead = document.createElement("thead"); + table.appendChild(thead); + row = thead.insertRow(thead.rows.length); + if (alph.has_complement()) { + add_text_header_cell(row, "Name", "pop_alph_name"); + if (freqs != null) add_text_header_cell(row, "Freq.", "pop_alph_freq"); + if (alph.has_bg()) add_text_header_cell(row, "Bg.", "pop_alph_bg"); + add_text_header_cell(row, ""); + add_text_header_cell(row, ""); + add_text_header_cell(row, ""); + if (alph.has_bg()) add_text_header_cell(row, "Bg.", "pop_alph_bg"); + if (freqs != null) add_text_header_cell(row, "Freq.", "pop_alph_freq"); + add_text_header_cell(row, "Name", "pop_alph_name"); + } else { + add_text_header_cell(row, ""); + add_text_header_cell(row, "Name", "pop_alph_name"); + if (freqs != null) add_text_header_cell(row, "Freq.", "pop_alph_freq"); + if (alph.has_bg()) add_text_header_cell(row, "Bg.", "pop_alph_bg"); + } + // add alphabet entries + tbody = document.createElement("tbody"); + table.appendChild(tbody); + if (alph.has_complement()) { + for (i = 0; i < alph.get_size_core(); i++) { + var c = alph.get_complement(i); + if (i > c) continue; + row = tbody.insertRow(tbody.rows.length); + add_text_cell(row, alph.get_name(i)); + if (freqs != null) add_text_cell(row, "" + freqs[i].toFixed(3)); + if (alph.has_bg()) add_text_cell(row, "" + alph.get_bg_freq(i).toFixed(3)); + add_cell(row, colour_symbol(i)); + add_text_cell(row, "~"); + add_cell(row, colour_symbol(c)); + if (alph.has_bg()) add_text_cell(row, "" + alph.get_bg_freq(c).toFixed(3)); + if (freqs != null) add_text_cell(row, "" + freqs[c].toFixed(3)); + add_text_cell(row, alph.get_name(c)); + } + } else { + for (i = 0; i < alph.get_size_core(); i++) { + row = tbody.insertRow(tbody.rows.length); + add_cell(row, colour_symbol(i)); + add_text_cell(row, alph.get_name(i)); + if (freqs != null) add_text_cell(row, "" + freqs[i].toFixed(3)); + if (alph.has_bg()) add_text_cell(row, "" + alph.get_bg_freq(i).toFixed(3)); + } + } + return table; +} + +</script> + <script> +var current_motif = 0; +var meme_alphabet = new Alphabet(data.alphabet, data.background.freqs); + +var DelayLogoTask = function(logo, canvas) { + this.logo = logo; + this.canvas = canvas; +}; + +DelayLogoTask.prototype.run = function () { + draw_logo_on_canvas(this.logo, this.canvas, false); +}; + +function motif_pspm(index) { + var motif, pwm, psm, name, ltrim, rtrim, nsites, evalue; + // get motif + motif = data["motifs"][index]; + // get motif paramters + pwm = motif["pwm"]; + psm = motif["psm"]; + name = "" + (index + 1); ltrim = 0; rtrim = 0; + nsites = motif["nsites"]; evalue = motif["evalue"]; + // make pspm + return new Pspm(pwm, name, ltrim, rtrim, nsites, evalue, psm); +} + +function motif_count_matrix(index) { + return motif_pspm(index).as_count_matrix(); +} + +function motif_prob_matrix(index) { + return motif_pspm(index).as_probability_matrix(); +} + +function motif_minimal_meme(index) { + return motif_pspm(index).as_meme({ + "with_header": true, + "with_pspm": true, + "with_pssm": true, + "version": data["version"], + "alphabet": meme_alphabet, + "strands": (meme_alphabet.has_complement() && data.options.revcomp ? 2 : 1) + }); +} + +function motif_fasta(index) { + "use strict"; + var motif, sites, site, seq, sequences, sequence, i, num, counter, out; + counter = {}; + sequences = data["sequence_db"]["sequences"]; + motif = data["motifs"][index]; + sites = motif["sites"]; + out = ""; + for (i = 0; i < sites.length; i++) { + site = sites[i]; + seq = site["seq"]; + sequence = sequences[seq]; + counter[seq] = (num = counter[seq]) ? (++num) : (num = 1); // inc counter + if (i !== 0) {out += "\n";} + out += ">" + sequence["name"] + "_site_" + num + " offset= " + site["pos"] + + (site["rc"] ? " RC\n" : "\n"); + out += site["match"]; + } + return out; +} + +function motif_raw(index) { + "use strict"; + var sites, i, out; + sites = data["motifs"][index]["sites"]; + out = ""; + for (i = 0; i < sites.length; i++) { + if (i !== 0) {out += "\n";} + out += sites[i]["match"]; + } + return out; +} + +function clone_template(template) { + "use strict"; + var node, help_btns, i, button; + node = $(template).cloneNode(true); + toggle_class(node, "template", false); + node.id = ""; + help_btns = node.querySelectorAll(".help"); + for (i = 0; i < help_btns.length; i++) { + button = help_btns[i]; + if (button.hasAttribute("data-topic")) { + button.tabIndex = "0"; + button.addEventListener("click", __toggle_help, false); + button.addEventListener("keydown", __toggle_help, false); + } + } + return node; +} + +function set_tvar(template, tvar, value) { + var node; + node = find_child(template, tvar); + if (node === null) { + throw new Error("Template does not contain variable " + tvar); + } + node.innerHTML = ""; + if (typeof value !== "object") { + node.appendChild(document.createTextNode(value)); + } else { + node.appendChild(value); + } +} + +function make_logo(alphabet, pspm, rc, offset, className) { + if (rc) pspm = pspm.copy().reverse_complement(alphabet); + var logo = new Logo(alphabet, ""); + logo.add_pspm(pspm, offset); + var canvas = document.createElement('canvas'); + canvas.height = 50; + canvas.width = 0; + canvas.className = className; + size_logo_on_canvas(logo, canvas, false); + add_draw_task(canvas, new DelayLogoTask(logo, canvas)); + return canvas; +} + +function make_small_logo(alphabet, pspm, options) { + if (typeof options === "undefined") options = {}; + if (options.rc) pspm = pspm.copy().reverse_complement(alphabet); + var logo = new Logo(alphabet, {x_axis: false, y_axis: false}); + logo.add_pspm(pspm, (typeof options.offset === "number" ? options.offset : 0)); + var canvas = document.createElement('canvas'); + if (typeof options.className === "string") canvas.className = options.className; + if (typeof options.width === "number" && options.width > 0) { + canvas.height = 0; + canvas.width = options.width; + draw_logo_on_canvas(logo, canvas, false); + } else { + draw_logo_on_canvas(logo, canvas, false, 1/3); + } + return canvas; +} + +function make_large_logo(alphabet, pspm, rc, offset, className) { + if (rc) pspm = pspm.copy().reverse_complement(alphabet); + var logo = new Logo(alphabet, ""); + logo.add_pspm(pspm, offset); + var canvas = document.createElement('canvas'); + canvas.height = 200; + canvas.width = 0; + canvas.className = className; + size_logo_on_canvas(logo, canvas, false); + add_draw_task(canvas, new DelayLogoTask(logo, canvas)); + return canvas; +} + +function make_sym_btn(symbol, title, action) { + var box; + box = document.createElement("div"); + box.tabIndex = 0; + box.className = "sym_btn"; + box.appendChild(document.createTextNode(symbol)); + box.title = title; + box.addEventListener('click', action, false); + box.addEventListener('keydown', action, false); + return box; +} + +function make_seq(alphabet, seq) { + var i, j, letter, lbox, sbox; + sbox = document.createElement("span"); + for (i = 0; i < seq.length; i = j) { + letter = seq.charAt(i); + for (j = i+1; j < seq.length; j++) { + if (seq.charAt(j) !== letter) { + break; + } + } + lbox = document.createElement("span"); + lbox.style.color = alphabet.get_colour(alphabet.get_index(letter)); + lbox.appendChild(document.createTextNode(seq.substring(i, j))); + sbox.appendChild(lbox); + } + return sbox; +} + +// +// make_pv_text +// +// Returns the string p-value, with the p italicised. +/// +function make_pv_text() { + var pv_text = document.createElement("span"); + var pv_italic_text = document.createElement("span"); + pv_italic_text.appendChild(document.createTextNode("p")); + pv_italic_text.style.fontStyle = "italic"; + pv_text.appendChild(pv_italic_text); + pv_text.appendChild(document.createTextNode("-value")); + return pv_text; +} + +function append_site_entries(tbody, motif, site_index, count) { + "use strict"; + var i, end; + var sites, site, sequences, sequence; + var rbody; + if (typeof count !== "number") { + count = 20; + } + sequences = data["sequence_db"]["sequences"]; + sites = motif["sites"]; + end = Math.min(site_index + count, sites.length); + for (i = site_index; i < end; i++) { + site = sites[i]; + sequence = sequences[site["seq"]]; + + rbody = tbody.insertRow(tbody.rows.length); + add_text_cell(rbody, "" + (site["seq"] + 1) + ".", "site_num"); + add_text_cell(rbody, sequence["name"], "site_name"); + add_text_cell(rbody, site["rc"] ? "-" : "+", "site_strand"); + add_text_cell(rbody, site["pos"] + 1, "site_start"); + add_text_cell(rbody, site["pvalue"].toExponential(2), "site_pvalue"); + add_text_cell(rbody, site["lflank"], "site lflank"); + add_cell(rbody, make_seq(meme_alphabet, site["match"]), "site match"); + add_text_cell(rbody, site["rflank"], "site rflank"); + } + return i; +} + +function make_site_entries() { + "use strict"; + var region; + region = this; + if (region.data_site_index >= region.data_motif["sites"].length) { + // all sites created + region.removeEventListener('scroll', make_site_entries, false); + return; + } + // if there's still 100 pixels to scroll than don't do anything yet + if (region.scrollHeight - (region.scrollTop + region.offsetHeight) > 100) { + return; + } + + region.data_site_index = append_site_entries( + find_child(region, "sites_tbl").tBodies[0], + region.data_motif, region.data_site_index, 20 + ); +} + +function make_sites(motif) { + "use strict"; + function add_site_header(row, title, nopad, help_topic, tag_class) { + var div, divcp, th; + th = document.createElement("th"); + div = document.createElement("div"); + div.className = "sites_th_inner"; + if (typeof title !== "object") { + title = document.createTextNode("" + title); + } + div.appendChild(title); + if (help_topic) { + div.appendChild(document.createTextNode("\xA0")); + div.appendChild(help_button(help_topic)); + } + divcp = div.cloneNode(true); + divcp.className = "sites_th_hidden"; + th.appendChild(div); + th.appendChild(divcp); + if (nopad) { + th.className = "nopad"; + } + if (tag_class) { + th.className += " " + tag_class; + } + row.appendChild(th); + } + var outer_tbl, inner_tbl, tbl, thead, tbody, rhead; + + outer_tbl = document.createElement("div"); + outer_tbl.className = "sites_outer"; + + inner_tbl = document.createElement("div"); + inner_tbl.className = "sites_inner"; + outer_tbl.appendChild(inner_tbl); + + tbl = document.createElement("table"); + tbl.className = "sites_tbl"; + inner_tbl.appendChild(tbl); + + thead = document.createElement("thead"); + tbl.appendChild(thead); + tbody = document.createElement("tbody"); + tbl.appendChild(tbody); + + rhead = thead.insertRow(thead.rows.length); + add_site_header(rhead, "", true); + add_site_header(rhead, "Name", false, "pop_seq_name"); + add_site_header(rhead, "Strand", false, "pop_site_strand", "site_strand_title"); + add_site_header(rhead, "Start", false, "pop_site_start"); + add_site_header(rhead, make_pv_text(), false, "pop_site_pvalue"); + add_site_header(rhead, "", false); + add_site_header(rhead, "Sites", true, "pop_site_match"); + add_site_header(rhead, "", false); + + inner_tbl.data_motif = motif; + inner_tbl.data_site_index = append_site_entries(tbody, motif, 0, 20); + if (inner_tbl.data_site_index < motif["sites"].length) { + inner_tbl.addEventListener('scroll', make_site_entries, false); + } + return outer_tbl; +} + +function make_motif_table_entry(row, alphabet, ordinal, motif, colw) { + "use strict"; + function ev_sig(evalue_str) { + "use strict"; + var ev_re, match, sig, exp, num; + ev_re = /^(.*)e(.*)$/; + if (match = ev_re.exec(evalue_str)) { + sig = parseFloat(match[1]); + exp = parseInt(match[2]); + if (exp >= 0) { + return false; + } else if (exp <= -3) { + return true; + } else { + return sig * Math.pow(10, exp) <= 0.05; + } + } + return true; + } + function make_preview(alphabet, motif) { + "use strict"; + var pspm, preview, preview_rc; + var box, btn_box, logo_box, btn_plus, btn_minus; + if (motif["preview_logo"]) { + preview = motif["preview_logo"]; + preview_rc = motif["preview_logo_rc"]; + } else { + pspm = new Pspm(motif["pwm"]); + preview = make_logo(alphabet, pspm); + motif["preview_logo"] = preview; + if (alphabet.has_complement()) { + preview_rc = make_logo(alphabet, pspm, true, 0, "logo_rc"); + motif["preview_logo_rc"] = preview_rc; + } + } + if (preview_rc) { + btn_plus = document.createElement("div"); + btn_plus.appendChild(document.createTextNode("+")); + btn_plus.className = "preview_btn plus"; + btn_plus.tabIndex = "0"; + btn_plus.addEventListener("click", action_btn_rc, false); + btn_plus.addEventListener("keydown", action_btn_rc, false); + btn_minus = document.createElement("div"); + btn_minus.appendChild(document.createTextNode("-")); + btn_minus.className = "preview_btn minus"; + btn_minus.tabIndex = "0"; + btn_minus.addEventListener("click", action_btn_rc, false); + btn_minus.addEventListener("keydown", action_btn_rc, false); + btn_box = document.createElement("div"); + btn_box.className = "preview_btn_box"; + btn_box.appendChild(btn_plus); + btn_box.appendChild(btn_minus); + } + logo_box = document.createElement("div"); + logo_box.className = "preview_logo_box"; + logo_box.appendChild(preview); + if (preview_rc) logo_box.appendChild(preview_rc); + box = document.createElement("div"); + box.className = "preview_box"; + if (preview_rc) box.appendChild(btn_box); + box.appendChild(logo_box); + if (preview_rc) { + if (motif["rc"]) { + btn_minus.className += " active"; + logo_box.className += " show_rc_logo"; + } else { + btn_plus.className += " active"; + } + } + return box; + } + var pspm, preview, preview_rc, c; + row.data_motif = motif; + row.data_ordinal = ordinal; + if (!ev_sig(motif["evalue"])) { + row.style.opacity = 0.4; + } + add_text_cell(row, "" + ordinal + ".", "motif_ordinal"); + add_cell(row, make_preview(alphabet, motif), "motif_logo"); + add_text_cell(row, motif["evalue"], "motif_evalue"); + add_text_cell(row, motif["nsites"], "motif_nsites"); + add_text_cell(row, motif["len"], "motif_width"); + add_cell(row, make_sym_btn("\u21A7", "Show more information.", + action_show_more), "motif_more"); + add_cell(row, + make_sym_btn("\u21E2", + "Submit the motif to another MEME Suite program or download it.", + action_show_outpop), + "motif_submit"); + if (colw) { + for (c = 0; c < row.cells.length; c++) { + row.cells[c].style.minWidth = colw[c] + "px"; + } + } +} + +function make_motifs_table(alphabet, start_ordinal, motifs, colw, stop_reason) { + var i, j; + var tbl, thead, tbody, tfoot, row, preview; + var motif, pspm; + + tbl = document.createElement("table"); + + thead = document.createElement("thead"); + tbl.appendChild(thead); + tbody = document.createElement("tbody"); + tbl.appendChild(tbody); + tfoot = document.createElement("tfoot"); + tbl.appendChild(tfoot); + + row = thead.insertRow(thead.rows.length); + add_text_header_cell(row, "", "", "motif_ordinal"); + add_text_header_cell(row, "Logo", "", "motif_logo"); + add_text_header_cell(row, "E-value", "pop_ev", "motif_evalue"); + add_text_header_cell(row, "Sites", "pop_sites", "motif_nsites"); + add_text_header_cell(row, "Width", "pop_width", "motif_width"); + add_text_header_cell(row, "More", "pop_more", "motif_more"); + add_text_header_cell(row, "Submit/Download", "pop_submit_dl", "motif_submit"); + + for (i = 0; i < motifs.length; i++) { + row = tbody.insertRow(tbody.rows.length); + make_motif_table_entry(row, alphabet, start_ordinal + i, motifs[i], colw); + } + + row = tfoot.insertRow(tfoot.rows.length); + add_text_header_cell(row, stop_reason, "", "stop_reason", "", 6); + + return tbl; +} + +function make_expanded_motif(alphabet, ordinal, motif, less_x, submit_x) { + "use strict"; + var box, pspm, logo_box, large_logo, large_logo_rc, tab_logo, tab_logo_rc; + var btn, offset, norc; + + box = clone_template("tmpl_motif_expanded"); + box.data_motif = motif; + box.data_ordinal = ordinal; + + pspm = new Pspm(motif["pwm"]); + if (typeof motif["rc"] !== "boolean") { + motif["rc"] = false; + } + if (motif["large_logo"]) { + large_logo = motif["large_logo"]; + large_logo_rc = motif["large_logo_rc"]; + } else { + large_logo = make_large_logo(alphabet, pspm, false, 0); + motif["large_logo"] = large_logo; + if (alphabet.has_complement()) { + large_logo_rc = make_large_logo(alphabet, pspm, true, 0, "logo_rc"); + motif["large_logo_rc"] = large_logo_rc; + } + } + norc = (large_logo_rc == null); + toggle_class(box, "norc", norc); + + logo_box = find_child(box, "tvar_logo"); + logo_box.appendChild(large_logo); + if (large_logo_rc) logo_box.appendChild(large_logo_rc); + toggle_class(logo_box, "show_rc_logo", motif["rc"]); + + tab_logo = find_child(box, "tvar_tab"); + tab_logo_rc = find_child(box, "tvar_tab_rc"); + + toggle_class(tab_logo, "activeTab", !motif["rc"]); + toggle_class(tab_logo_rc, "activeTab", motif["rc"]); + + tab_logo.addEventListener('click', action_rc_tab, false); + tab_logo.addEventListener('keydown', action_rc_tab, false); + tab_logo_rc.addEventListener('click', action_rc_tab, false); + tab_logo_rc.addEventListener('keydown', action_rc_tab, false); + + set_tvar(box, "tvar_ordinal", ordinal); + set_tvar(box, "tvar_evalue", motif["evalue"]); + set_tvar(box, "tvar_width", motif["len"]); + set_tvar(box, "tvar_site_count", motif["nsites"]); + set_tvar(box, "tvar_llr", motif["llr"]); + set_tvar(box, "tvar_ic", motif["ic"]); + set_tvar(box, "tvar_re", motif["re"]); + set_tvar(box, "tvar_bt", motif["bt"]); + set_tvar(box, "tvar_sites", make_sites(motif)); + + offset = 32; // 1* 5px padding + 2 * 10px padding + 2 * 2px border + 3px ?? + + btn = find_child(box, "tvar_less"); + btn.style.left = (less_x - offset) + "px"; + btn.addEventListener('click', action_show_less, false); + btn.addEventListener('keydown', action_show_less, false); + btn = find_child(box, "tvar_submit"); + btn.style.left = (submit_x - offset) + "px"; + btn.addEventListener('click', action_show_outpop, false); + btn.addEventListener('keydown', action_show_outpop, false); + return box; +} + + +// +// +/// +function make_motifs() { + "use strict"; + function pixel_value(str_in) { + "use strict"; + var px_re, match; + px_re = /^(\d+)px$/; + if (match = px_re.exec(str_in)) { + return parseInt(match[1], 10); + } + return 0; + } + var container, tbl; + var colw, r, row, c, cell, cell_style, pad_left, pad_right; + + // make the motifs table + container = $("motifs"); + container.innerHTML = ""; // clear content + + tbl = make_motifs_table(meme_alphabet, 1, data["motifs"], colw, data["stop_reason"]); + container.appendChild(tbl); + + // measure table column widths + colw = []; + row = tbl.tBodies[0].rows[0]; + for (c = 0; c < row.cells.length; c++) { + var padLeft, padRight; + cell = row.cells[c]; + cell_style = window.getComputedStyle(cell, null); + pad_left = pixel_value(cell_style.getPropertyValue("padding-left")); + pad_right = pixel_value(cell_style.getPropertyValue("padding-right")); + colw[c] = cell.clientWidth - pad_left - pad_right; + if (typeof colw[c] !== "number" || colw[c] < 0) { + colw[c] = 1; + } + } + + // set minimum table column widths on each row so later when we remove rows it still aligns + for (r = 0; r < tbl.tBodies[0].rows.length; r++) { + row = tbl.tBodies[0].rows[r]; + for (c = 0; c < row.cells.length; c++) { + row.cells[c].style.minWidth = colw[c] + "px"; + } + } + + // store the table column widths so we can create rows latter with the same minimums + container.data_colw = colw; + + // calculate the x offset for the buttons + row = tbl.tBodies[0].rows[0]; + container.data_more_x = coords(find_child(find_child(row, "motif_more"), "sym_btn"))[0]; + container.data_submit_x = coords(find_child(find_child(row, "motif_submit"), "sym_btn"))[0]; + + draw_on_screen(); +} + +function make_meme_block(container, max_seq_len, is_scan, site) { + "use strict"; + var motif = data.motifs[site.motif]; + var block = make_block(container, max_seq_len, site.pos, motif.len, + site.pvalue, site.rc, site.motif, is_scan); + var handler = (is_scan ? + make_scan_popup(site, motif, block) : + make_block_popup(site, motif, block)); + block.addEventListener("mouseover", handler, false); + block.addEventListener("mouseout", handler, false); +} + +function append_blocks_entries(tbody, seq_index, count) { + "use strict"; + var i, end, j; + var max_pvalue, max_block_height, max_seq_len, sequences; + var sequence, sites, scans, scan; + var container, plus, minus, rule, row; + // define some constants + max_seq_len = data.sequence_db.max_length; + // determine how many to load + end = Math.min(seq_index + count, data.sequence_db.sequences.length); + for (i = seq_index; i < end; i++) { + // get the sequence + sequence = data.sequence_db.sequences[i]; + // make the containers for the block diagram + container = make_block_container(meme_alphabet.has_complement(), + data.options.revcomp, max_seq_len, sequence.length); + // create blocks for the motif sites + sites = sequence["sites"]; + for (j = 0; j < sites.length; j++) + make_meme_block(container, max_seq_len, false, sites[j]); + // create blocks for the scanned sites + scan = data.scan[i]; + for (j = 0; j < scan.sites.length; j++) + make_meme_block(container, max_seq_len, true, scan.sites[j]); + // create a row for the sequence + row = tbody.insertRow(tbody.rows.length); + toggle_class(row, "empty_seq", sites.length == 0 && scan.sites.length == 0); + toggle_class(row, "only_scan", sites.length == 0 && scan.sites.length > 0); + add_text_cell(row, (i + 1) + ".", "blockdiag_num"); + add_text_cell(row, sequence["name"], "blockdiag_name"); + add_text_cell(row, scan["pvalue"].toExponential(2), "blockdiag_pvalue"); + add_cell(row, container, "block_td"); + } + return end; +} + +function make_blocks_entries() { + "use strict"; + var region; + region = this; + if (region.data_blocks_index >= data["sequence_db"]["sequences"].length) { + // all sites created + region.removeEventListener('scroll', make_blocks_entries, false); + return; + } + // if there's still 100 pixels to scroll than don't do anything yet + if (region.scrollHeight - (region.scrollTop + region.offsetHeight) > 100) { + return; + } + + region.data_blocks_index = append_blocks_entries( + find_child(region, "blocks_tbl").tBodies[0], + region.data_blocks_index, 20 + ); +} + +function make_blocks() { + "use strict"; + function add_seqs_filter(container, id, checked, label_text, help_topic) { + "use strict"; + var label, radio; + radio = document.createElement("input"); + radio.type = "radio"; + radio.name = "seqs_display"; + radio.id = id; + radio.checked = checked; + radio.addEventListener('click', action_seqs_filter, false); + label = document.createElement("label"); + label.appendChild(document.createTextNode(label_text)); + label.htmlFor = id; + container.appendChild(radio); + container.appendChild(label); + if (help_topic) { + container.appendChild(document.createTextNode("\xA0")); + container.appendChild(help_button(help_topic)); + } + } + function add_blocks_header(row, title, nopad, help_topic) { + "use strict"; + var div, divcp, th; + th = document.createElement("th"); + div = document.createElement("div"); + div.className = "blocks_th_inner"; + if (typeof title !== "object") { + title = document.createTextNode("" + title); + } + div.appendChild(title); + if (help_topic) { + div.appendChild(document.createTextNode("\xA0")); + div.appendChild(help_button(help_topic)); + } + divcp = div.cloneNode(true); + divcp.className = "blocks_th_hidden"; + th.appendChild(div); + th.appendChild(divcp); + if (nopad) { + th.className = "nopad"; + } + row.appendChild(th); + } + var container; + var page, view_height, outer_tbl, inner_tbl, tbl, thead, tbody, rhead; + var in_view, i, seq_count; + + page = (document.compatMode === "CSS1Compat") ? document.documentElement : document.body; + view_height = Math.max(page.clientHeight - 300, 300); + + container = $("blocks"); + toggle_class(container, "hide_empty_seqs", true); + toggle_class(container, "hide_only_scan", true); + container.innerHTML = ""; + add_seqs_filter(container, "rdo_sites_only", true, "Only Motif Sites", "pop_motif_sites"); + add_seqs_filter(container, "rdo_sites_and_scan", false, "Motif Sites+Scanned Sites", "pop_scanned_sites"); + add_seqs_filter(container, "rdo_all_seqs", false, "All Sequences", "pop_all_sequences"); + + outer_tbl = document.createElement("div"); + outer_tbl.className = "blocks_outer"; + + inner_tbl = document.createElement("div"); + inner_tbl.id = "blocks_scroll"; + inner_tbl.className = "blocks_inner"; + inner_tbl.style.maxHeight = view_height + "px"; + outer_tbl.appendChild(inner_tbl); + + tbl = document.createElement("table"); + tbl.className = "blocks_tbl"; + inner_tbl.appendChild(tbl); + + thead = document.createElement("thead"); + tbl.appendChild(thead); + tbody = document.createElement("tbody"); + tbl.appendChild(tbody); + + rhead = thead.insertRow(thead.rows.length); + add_blocks_header(rhead, "", true); + add_blocks_header(rhead, "Name", false, "pop_seq_name"); + add_blocks_header(rhead, make_pv_text(), false, "pop_seq_pvalue"); + add_blocks_header(rhead, "Motif Location", false, "pop_motif_location"); + + container.appendChild(outer_tbl); + + + seq_count = data["sequence_db"]["sequences"].length; + in_view = Math.max(Math.ceil(view_height / 25), 1); + i = append_blocks_entries(tbody, 0, in_view); + + while (i < seq_count && inner_tbl.scrollHeight - (inner_tbl.scrollTop + inner_tbl.offsetHeight) < 400) { + i = append_blocks_entries(tbody, i, 20); + } + inner_tbl.data_blocks_index = i; + if (i < seq_count) { + inner_tbl.addEventListener('scroll', make_blocks_entries, false); + } +} + +function make_scan_popup(site, motif) { + return function (e) { + "use strict"; + var pop, xy, padding, edge_padding, pop_left, pop_top, page_width; + var lflank, match, rflank, pspm; + if (!e) var e = window.event; + pop = make_scan_popup.pop; + if (e.type === "mouseover") { + if (pop) return; + pop = clone_template("tmpl_scan_info"); + pspm = new Pspm(motif.pwm); + if (site.rc) pspm.reverse_complement(meme_alphabet); + set_tvar(pop, "tvar_logo", make_small_logo(meme_alphabet, pspm, {"className": "scan_logo"})); + set_tvar(pop, "tvar_motif", motif.id); + set_tvar(pop, "tvar_pvalue", site.pvalue.toExponential(2)); + set_tvar(pop, "tvar_start", site.pos + 1); + set_tvar(pop, "tvar_end", site.pos + motif.len); + + document.body.appendChild(pop); + position_popup(this, pop); + make_scan_popup.pop = pop; + } else if (e.type === "mouseout") { + if (pop) { + pop.parentNode.removeChild(pop); + make_scan_popup.pop = null; + } + } + }; +} + +function make_block_popup(site, motif, block) { + return function (e) { + "use strict"; + var pop; + var lflank, match, rflank, pspm, ruler, match_seq, match_width; + if (!e) var e = window.event; + pop = make_block_popup.pop; + if (e.type === "mouseover") { + if (pop) return; + pop = clone_template("tmpl_block_info"); + pspm = new Pspm(motif.pwm); + if (site.rc) { // must be dna + pspm.reverse_complement(meme_alphabet); + lflank = meme_alphabet.invcomp_seq(site.rflank); + match = meme_alphabet.invcomp_seq(site.match); + rflank = meme_alphabet.invcomp_seq(site.lflank); + } else { + lflank = site.lflank; + match = site.match; + rflank = site.rflank; + } + ruler = document.getElementById("measure_match"); + match_seq = make_seq(meme_alphabet, match); + ruler.innerHTML = ""; + ruler.appendChild(match_seq); + match_width = ruler.clientWidth; + ruler.removeChild(match_seq); + set_tvar(pop, "tvar_lflank", lflank); + set_tvar(pop, "tvar_match", match_seq); + set_tvar(pop, "tvar_rflank", rflank); + set_tvar(pop, "tvar_logo_pad", lflank); + set_tvar(pop, "tvar_logo", make_small_logo(meme_alphabet, pspm, {"width": match_width})); + set_tvar(pop, "tvar_motif", motif.id); + set_tvar(pop, "tvar_pvalue", site.pvalue.toExponential(2)); + set_tvar(pop, "tvar_start", site.pos + 1); + set_tvar(pop, "tvar_end", site.pos + motif.len); + + document.body.appendChild(pop); + position_popup(block, pop); + make_block_popup.pop = pop; + } else if (e.type === "mouseout") { + if (pop) { + pop.parentNode.removeChild(pop); + make_block_popup.pop = null; + } + } + }; +} + +function update_outpop_format(index) { + switch(parseInt($("text_format").value)) { + case 0: // count matrix + $("outpop_text").value = motif_count_matrix(index); + $("text_name").value = "motif_" + (index + 1) + "_counts.txt"; + break; + case 1: // prob matrix + $("outpop_text").value = motif_prob_matrix(index); + $("text_name").value = "motif_" + (index + 1) + "_freqs.txt"; + break; + case 2: // minimal meme + $("outpop_text").value = motif_minimal_meme(index); + $("text_name").value = "motif_" + (index + 1) + ".txt"; + break; + case 3: // fasta + $("outpop_text").value = motif_fasta(index); + $("text_name").value = "motif_" + (index + 1) + "_fasta.txt"; + break; + case 4: // raw + $("outpop_text").value = motif_raw(index); + $("text_name").value = "motif_" + (index + 1) + "_raw.txt"; + break; + default: + throw new Error("Unknown motif format"); + } +} + +function update_outpop_motif(index) { + "use strict"; + var motifs, motif, pspm, logo, canvas, num; + motifs = data["motifs"]; + if (index < 0 || index >= motifs.length) {return;} + current_motif = index; + motif = motifs[index]; + pspm = new Pspm(motif["pwm"]); + logo = new Logo(meme_alphabet, ""); + logo.add_pspm(pspm, 0); + canvas = $("outpop_logo"); + canvas.width = canvas.width; // clear canvas + draw_logo_on_canvas(logo, canvas, false); + if (meme_alphabet.has_complement()) { + pspm.reverse_complement(meme_alphabet); + logo = new Logo(meme_alphabet, ""); + canvas = $("outpop_logo_rc"); + canvas.width = canvas.width; // clear canvas + draw_logo_on_canvas(logo, canvas, false); + } + num = $("outpop_num"); + num.innerHTML = ""; + num.appendChild(document.createTextNode("" + (index + 1))); + update_outpop_format(index); +} + +// +// action_show_more +// +// Show more information on the motif. +/// +function action_show_more(e) { + var node, tr, tbody, table, container, motif, ordinal; + var expanded_motif; + if (!e) e = window.event; + if (e.type === "keydown") { + if (e.keyCode !== 13 && e.keyCode !== 32) { + return; + } + // stop a submit or something like that + e.preventDefault(); + } + // find the row that contains the cell + node = this; + do { + if (node.tagName === "TR") break; + } while (node = node.parentNode); + if (!node) throw new Error("Expected to find row!?"); + tr = node; + // get info + motif = tr.data_motif; + ordinal = tr.data_ordinal; + // find tbody + do { + if (node.tagName === "TBODY") break; + } while (node = node.parentNode); + if (!node) throw new Error("Expected to find tbody!?"); + tbody = node; + // find table + do { + if (node.tagName === "TABLE") break; + } while (node = node.parentNode); + if (!node) throw new Error("Expected to find table!?"); + table = node; + // find container + container = node.parentNode; + // make a expanded motif + motif["expanded"] = true; + expanded_motif = make_expanded_motif(meme_alphabet, ordinal, motif, + container.data_more_x, container.data_submit_x); + // now determine how to place it + if (tbody.rows.length === 1) { + // only us in the table so the table can be replaced + container.replaceChild(expanded_motif, table); + } else if (tbody.rows[0] === tr) { + // first row, so remove and insert an expanded motif before + table.deleteRow(tr.rowIndex); + container.insertBefore(expanded_motif, table); + } else if (tbody.rows[tbody.rows.length -1] === tr) { + // last row, so remove and insert an expanded motif after + table.deleteRow(tr.rowIndex); + container.insertBefore(expanded_motif, table.nextSibling); + } else { + var table2, tbody2; + table2 = table.cloneNode(false); + table2.appendChild(table.tHead.cloneNode(true)); + tbody2 = table.tBodies[0].cloneNode(false); + table2.appendChild(tbody2); + container.insertBefore(table2, table.nextSibling); + for (i = tbody.rows.length - 1; i >= 0; i--) { + row = tbody.rows[i]; + row.parentNode.removeChild(row); + if (row === tr) { + break; + } + tbody2.insertBefore(row, tbody2.rows[0]); + } + container.insertBefore(expanded_motif, table2); + } + find_child(expanded_motif, "tvar_less").focus(); +} + +// +// action_show_less +// +// Show less information on the motif. +/// +function action_show_less(e) { + var btn; + var expanded_motif, container, motif, ordinal, colw, focus_target; + var table, tbody, tbody2, row, table_before, table_after; + if (!e) e = window.event; + if (e.type === "keydown") { + if (e.keyCode !== 13 && e.keyCode !== 32) { + return; + } + // stop a submit or something like that + e.preventDefault(); + } + btn = this; + // find expanded motif + expanded_motif = find_parent(btn, "expanded_motif"); + if (!expanded_motif) throw new Error("Expected expanded motif."); + // find the container + container = expanded_motif.parentNode; + // get data + motif = expanded_motif.data_motif; + ordinal = expanded_motif.data_ordinal; + colw = container.data_colw; + // get the table before + table_before = expanded_motif.previousSibling; + if (table_before && table_before.tagName !== "TABLE") { + table_before = null; + } + // get the table after + table_after = expanded_motif.nextSibling; + if (table_after && table_after.tagName !== "TABLE") { + table_after = null; + } + // see if there is a table below or above that we can put this in. + // if there is a table both below and above then add this motif and + // all ones below to the above table + motif["expanded"] = false; + if (table_before && table_after) { + tbody = table_before.tBodies[0]; + row = tbody.insertRow(tbody.rows.length); + make_motif_table_entry(row, meme_alphabet, ordinal, motif, colw); + focus_target = find_child(row.cells[5], "sym_btn"); + container.removeChild(expanded_motif); + tbody2 = table_after.tBodies[0]; + while (tbody2.rows.length > 0) { + row = tbody2.rows[0]; + row.parentNode.removeChild(row); + tbody.appendChild(row); + } + container.removeChild(table_after); + } else if (table_before) { + tbody = table_before.tBodies[0]; + row = tbody.insertRow(tbody.rows.length); + make_motif_table_entry(row, meme_alphabet, ordinal, motif, colw); + focus_target = find_child(row.cells[5], "sym_btn"); + container.removeChild(expanded_motif); + } else if (table_after) { + tbody = table_after.tBodies[0]; + row = tbody.insertRow(0); + make_motif_table_entry(row, meme_alphabet, ordinal, motif, colw); + focus_target = find_child(row.cells[5], "sym_btn"); + container.removeChild(expanded_motif); + } else { + //no table above or below! + // make a new table + table = make_motifs_table(meme_alphabet, ordinal, [motif], colw, data["stop_reason"]); + focus_target = find_child(table.tBodies[0].rows[0].cells[5], "sym_btn"); + container.replaceChild(table, expanded_motif); + } + focus_target.focus(); +} + +function action_show_outpop(e) { + "use strict"; + function init() { + "use strict"; + var close_btn, next_btn, prev_btn, cancel_btn, do_btn; + var tab1, tab2, tab3; + var pnl1, pnl2, pnl3; + var format_list; + var tbl_submit, inputs, i, default_prog; + close_btn = $("outpop_close"); + close_btn.addEventListener("click", action_hide_outpop, false); + close_btn.addEventListener("keydown", action_hide_outpop, false); + next_btn = $("outpop_next"); + next_btn.addEventListener("click", action_outpop_next, false); + next_btn.addEventListener("keydown", action_outpop_next, false); + prev_btn = $("outpop_prev"); + prev_btn.addEventListener("click", action_outpop_prev, false); + prev_btn.addEventListener("keydown", action_outpop_prev, false); + cancel_btn = $("outpop_cancel"); + cancel_btn.addEventListener("click", action_hide_outpop, false); + do_btn = $("outpop_do"); + do_btn.addEventListener("click", action_outpop_submit, false); + tab1 = $("outpop_tab_1"); + tab1.tabIndex = 0; + tab1.addEventListener("click", action_outpop_tab, false); + tab1.addEventListener("keydown", action_outpop_tab, false); + tab2 = $("outpop_tab_2"); + tab2.tabIndex = 0; + tab2.addEventListener("click", action_outpop_tab, false); + tab2.addEventListener("keydown", action_outpop_tab, false); + tab3 = $("outpop_tab_3"); + tab3.tabIndex = 0; + tab3.addEventListener("click", action_outpop_tab, false); + tab3.addEventListener("keydown", action_outpop_tab, false); + pnl1 = $("outpop_pnl_1"); + pnl2 = $("outpop_pnl_2"); + pnl3 = $("outpop_pnl_3"); + toggle_class(tab1, "activeTab", true); + toggle_class(tab2, "activeTab", false); + toggle_class(tab3, "activeTab", false); + pnl1.style.display = "block"; + pnl2.style.display = "none"; + pnl3.style.display = "none"; + format_list = $("text_format"); + format_list.addEventListener("change", action_outpop_format, false); + // setup program selection + tbl_submit = $("programs"); + // when not dna, hide the inputs for programs that require dna motifs + toggle_class(tbl_submit, "alphabet_dna", meme_alphabet.has_complement());//TODO FIXME alphabet_dna is a bad name for a field when allowing custom alphabets + // add a click listener for the radio buttons + inputs = tbl_submit.querySelectorAll("input[type='radio']"); + for (i = 0; i < inputs.length; i++) { + inputs[i].addEventListener("click", action_outpop_program, false); + } + // ensure that a default program option is selected for DNA and Protein + default_prog = document.getElementById(meme_alphabet.has_complement() ? "submit_tomtom" : "submit_fimo"); //TODO FIXME Tomtom might require a more strict definition of DNA + default_prog.checked = true; + action_outpop_program.call(default_prog); + // disable reverse-complement when not DNA + $("logo_rc_option").disabled = !meme_alphabet.has_complement(); + // set errorbars on when ssc is on + $("logo_ssc").addEventListener("change", action_outpop_ssc, false); + } + var node; + // store the focused element + action_hide_outpop.last_active = document.activeElement; + if (!e) e = window.event; + if (e.type === "keydown") { + if (e.keyCode !== 13 && e.keyCode !== 32) { + return; + } + // stop a submit or something like that + e.preventDefault(); + } + // hide the help popup + help_popup(); + // on first load initilize the popup + if (!action_show_outpop.ready) { + init(); + action_show_outpop.ready = true; + } + // load the motif logo + node = this; + do { + if (/\bexpanded_motif\b/.test(node.className) || node.tagName === "TR") break; + } while (node = node.parentNode); + if (node === null) throw new Error("Expected node!"); + update_outpop_motif(node.data_ordinal - 1); + // display the download popup + $("grey_out_page").style.display = "block"; + $("download").style.display = "block"; + $("outpop_close").focus(); +} + +function action_hide_outpop(e) { + if (!e) e = window.event; + if (e.type === "keydown") { + if (e.keyCode !== 13 && e.keyCode !== 32) { + return; + } + // stop a submit or something like that + e.preventDefault(); + } + $("download").style.display = "none"; + $("grey_out_page").style.display = "none"; + if (typeof action_hide_outpop.last_active !== "undefined") { + action_hide_outpop.last_active.focus(); + } +} + +function action_outpop_next(e) { + if (!e) e = window.event; + if (e.type === "keydown") { + if (e.keyCode !== 13 && e.keyCode !== 32) { + return; + } + // stop a submit or something like that + e.preventDefault(); + } + update_outpop_motif(current_motif + 1); +} + +function action_outpop_prev(e) { + if (!e) e = window.event; + if (e.type === "keydown") { + if (e.keyCode !== 13 && e.keyCode !== 32) { + return; + } + // stop a submit or something like that + e.preventDefault(); + } + update_outpop_motif(current_motif - 1); +} + +function action_outpop_program() { + "use strict"; + var table, tr, rows, i; + tr = find_parent_tag(this, "TR"); + table = find_parent_tag(tr, "TABLE"); + rows = table.querySelectorAll("tr"); + for (i = 0; i < rows.length; i++) { + toggle_class(rows[i], "selected", rows[i] === tr); + } +} + +function action_outpop_ssc() { + "use strict"; + $("logo_err").value = $("logo_ssc").value; +} + +function action_outpop_submit(e) { + "use strict"; + var form, input, program, motifs; + // find out which program is selected + var radios, i; + radios = document.getElementsByName("program"); + program = "fimo"; // default to fimo, since it works with all alphabet types + for (i = 0; i < radios.length; i++) { + if (radios[i].checked) program = radios[i].value; + } + + motifs = motif_minimal_meme(current_motif); + form = document.createElement("form"); + form.setAttribute("method", "post"); + form.setAttribute("action", site_url + "/tools/" + program); + + input = document.createElement("input"); + input.setAttribute("type", "hidden"); + input.setAttribute("name", "motifs_embed"); + input.setAttribute("value", motifs); + form.appendChild(input); + + document.body.appendChild(form); + form.submit(); + document.body.removeChild(form); +} + +function action_outpop_download_motif(e) { + $("text_form").submit(); +} + +function action_outpop_download_logo(e) { + "use strict"; + $("logo_motifs").value = motif_minimal_meme(current_motif); + $("logo_form").submit(); +} + +function action_btn_rc(e) { + "use strict"; + var node, tr, motif, box, logo_box, tab_st, tab_rc, rc; + if (!e) e = window.event; + if (e.type === "keydown") { + if (e.keyCode !== 13 && e.keyCode !== 32) { + return; + } + // stop a submit or something like that + e.preventDefault(); + } + node = this; + do { + if (node.tagName === "TR") break; + } while (node = node.parentNode); + if (!node) throw new Error("Expected to find row!?"); + tr = node; + // get info + motif = tr.data_motif; + box = find_parent(this, "preview_box"); + logo_box = find_child(box, "preview_logo_box"); + tab_st = find_child(box, "plus"); + tab_rc = find_child(box, "minus"); + rc = (this === tab_rc); + motif["rc"] = rc; + toggle_class(logo_box, "show_rc_logo", rc); + toggle_class(tab_st, "active", !rc); + toggle_class(tab_rc, "active", rc); +} + +function action_rc_tab(e) { + "use strict"; + var box, logo_box, tab_st, tab_rc, rc; + if (!e) e = window.event; + if (e.type === "keydown") { + if (e.keyCode !== 13 && e.keyCode !== 32) { + return; + } + // stop a submit or something like that + e.preventDefault(); + } + box = find_parent(this, "expanded_motif"); + logo_box = find_child(box, "tvar_logo"); + tab_st = find_child(box, "tvar_tab"); + tab_rc = find_child(box, "tvar_tab_rc"); + rc = (this === tab_rc); + box.data_motif["rc"] = rc; + toggle_class(logo_box, "show_rc_logo", rc); + toggle_class(tab_st, "activeTab", !rc); + toggle_class(tab_rc, "activeTab", rc); +} + +function action_outpop_tab(e) { + "use strict"; + var tab1, tab2, tab3, pnl1, pnl2, pnl3, do_btn; + if (!e) e = window.event; + if (e.type === "keydown") { + if (e.keyCode !== 13 && e.keyCode !== 32) { + return; + } + // stop a submit or something like that + e.preventDefault(); + } + tab1 = $("outpop_tab_1"); + tab2 = $("outpop_tab_2"); + tab3 = $("outpop_tab_3"); + pnl1 = $("outpop_pnl_1"); + pnl2 = $("outpop_pnl_2"); + pnl3 = $("outpop_pnl_3"); + do_btn = $("outpop_do"); + + toggle_class(tab1, "activeTab", (this === tab1)); + toggle_class(tab2, "activeTab", (this === tab2)); + toggle_class(tab3, "activeTab", (this === tab3)); + pnl1.style.display = ((this === tab1) ? "block" : "none"); + pnl2.style.display = ((this === tab2) ? "block" : "none"); + pnl3.style.display = ((this === tab3) ? "block" : "none"); + do_btn.value = ((this === tab1) ? "Submit" : "Download"); + do_btn.removeEventListener("click", action_outpop_submit, false); + do_btn.removeEventListener("click", action_outpop_download_logo, false); + do_btn.removeEventListener("click", action_outpop_download_motif, false); + if (this === tab1) { + do_btn.addEventListener("click", action_outpop_submit, false); + } else if (this === tab2) { + do_btn.addEventListener("click", action_outpop_download_motif, false); + } else { + do_btn.addEventListener("click", action_outpop_download_logo, false); + } +} + +function action_seqs_filter() { + "use strict"; + var block_container; + block_container = $("blocks"); + if ($("rdo_all_seqs").checked) { + toggle_class(block_container, "hide_empty_seqs", false); + toggle_class(block_container, "hide_only_scan", false); + } else if ($("rdo_sites_and_scan").checked) { + toggle_class(block_container, "hide_empty_seqs", true); + toggle_class(block_container, "hide_only_scan", false); + } else if ($("rdo_sites_only").checked) { + toggle_class(block_container, "hide_empty_seqs", true); + toggle_class(block_container, "hide_only_scan", true); + } +} + +function action_outpop_format() { + update_outpop_format(current_motif); +} + +// +// page_loaded +// +// Called when the page has loaded for the first time. +/// +function page_loaded() { + post_load_setup(); +} + +// +// page_loaded +// +// Called when a cached page is reshown. +/// +function page_shown(e) { + if (e.persisted) post_load_setup(); +} + +// +// page_loaded +// +// Called when the page is resized +/// +function page_resized() { + var page, blocks_scroll; + update_scroll_pad(); + page = (document.compatMode === "CSS1Compat") ? document.documentElement : document.body; + blocks_scroll = $("blocks_scroll"); + if (blocks_scroll) { + blocks_scroll.style.maxHeight = Math.max(page.clientHeight - 300, 300) + "px"; + } +} + +// +// pre_load_setup +// +// Run before the page is displayed +/// +function pre_load_setup() { + var start, hue, sat, light, divisions; + var i, j, motifs, motif, sites, site, sequences, sequence; + var max_seq_len; + motifs = data["motifs"]; + sequences = data["sequence_db"]["sequences"]; + max_seq_len = 1; + for (i = 0; i < sequences.length; i++) { + sequence = sequences[i]; + sequence["sites"] = []; + if (sequence["length"] > max_seq_len) { + max_seq_len = sequence["length"]; + } + } + data["sequence_db"]["max_length"] = max_seq_len; + // use hsl colours + start = 0; //red + sat = 100; + light = 50; + for (i = 0; i < motifs.length; i++) { + motif = motifs[i]; + // give the motif a colour + divisions = 1 << Math.ceil(Math.log(i + 1) / Math.LN2); + hue = start + (360 / divisions) * ((i - (divisions >> 1)) * 2 + 1); + motif["colour"] = "hsl(" + hue + ", " + sat + "%, " + light + "%)"; + // associate sites with sequences as well + // to make generating the block diagram easier + sites = motif["sites"]; + for (j = 0; j < sites.length; j++) { + site = sites[j]; + sequence = sequences[site["seq"]]; + // record the motif index + site["motif"] = i; + // add the site to the sequence + sequence["sites"].push(site); + } + } +} + +// +// post_load_setup +// +// Run when the page has loaded, or been reloaded. +// +function post_load_setup() { + update_scroll_pad(); + if (data["motifs"].length > 0) { + make_motifs(); + make_blocks(); + } else { + $("motifs").innerHTML = "<p>No significant motifs found!</p>"; // clear content + $("motifs").innerHTML += "<p><b>" + data["stop_reason"] + "</b></p>"; + $("blocks").innerHTML = "<p>No significant motifs found!</p>"; + } +} + +pre_load_setup(); +</script> + <style> +/* The following is the content of meme.css */ +body { background-color:white; font-size: 12px; font-family: Verdana, Arial, Helvetica, sans-serif;} + +div.help { + display: inline-block; + margin: 0px; + padding: 0px; + width: 12px; + height: 13px; + cursor: pointer; + background-image: url(data:image/gif;base64,R0lGODlhDAANAIABANR0AP///yH5BAEAAAEALAAAAAAMAA0AAAIdhI8Xy22MIFgv1DttrrJ7mlGNNo4c+aFg6SQuUAAAOw==); +} + +div.help:hover { + background-image: url(data:image/gif;base64,R0lGODlhDAANAKEAANR0AP///9R0ANR0ACH+EUNyZWF0ZWQgd2l0aCBHSU1QACH5BAEAAAIALAAAAAAMAA0AAAIdDGynCe3PgoxONntvwqz2/z2K2ImjR0KhmSIZUgAAOw==); +} + +p.spaced { line-height: 1.8em;} + +span.citation { font-family: "Book Antiqua", "Palatino Linotype", serif; color: #004a4d;} + +p.pad { padding-left: 30px; padding-top: 5px; padding-bottom: 10px;} + +td.jump { font-size: 13px; color: #ffffff; background-color: #00666a; + font-family: Georgia, "Times New Roman", Times, serif;} + +a.jump { margin: 15px 0 0; font-style: normal; font-variant: small-caps; + font-weight: bolder; font-family: Georgia, "Times New Roman", Times, serif;} + +h2.mainh {font-size: 1.5em; font-style: normal; margin: 15px 0 0; + font-variant: small-caps; font-family: Georgia, "Times New Roman", Times, serif;} + +h2.line {border-bottom: 1px solid #CCCCCC; font-size: 1.5em; font-style: normal; + margin: 15px 0 0; padding-bottom: 3px; font-variant: small-caps; + font-family: Georgia, "Times New Roman", Times, serif;} + +h4 {border-bottom: 1px solid #CCCCCC; font-size: 1.2em; font-style: normal; + margin: 10px 0 0; padding-bottom: 3px; font-family: Georgia, "Times New Roman", Times, serif;} + +h5 {margin: 0px} + +a.help { font-size: 9px; font-style: normal; text-transform: uppercase; + font-family: Georgia, "Times New Roman", Times, serif;} + +div.pad { padding-left: 30px; padding-top: 5px; padding-bottom: 10px;} + +div.pad1 { margin: 10px 5px;} + +div.pad2 { margin: 25px 5px 5px;} +h2.pad2 { padding: 25px 5px 5px;} + +div.pad3 { padding: 5px 0px 10px 30px;} + +div.box { border: 2px solid #CCCCCC; padding:10px; overflow: hidden;} + +div.bar { border-left: 7px solid #00666a; padding:5px; margin-top:25px; } + +div.subsection {margin:25px 0px;} + +img {border:0px none;} + +th.majorth {text-align:left;} +th.minorth {font-weight:normal; text-align:left; width:8em; padding: 3px 0px;} +th.actionth {font-weight:normal; text-align:left;} + +.explain h5 {font-size:1em; margin-left: 1em;} + +div.doc {margin-left: 2em; margin-bottom: 3em;} + +th.trainingset { + border-bottom: thin dashed black; + font-weight:normal; + padding:0px 10px; +} +div.pop_content { + position:absolute; + z-index:50; + width:300px; + padding: 5px; + background: #E4ECEC; + font-size: 12px; + font-family: Arial; + border-style: double; + border-width: 3px; + border-color: #AA2244; + display:none; +} + +div.pop_content > *:first-child { + margin-top: 0px; +} + +div.pop_content h1, div.pop_content h2, div.pop_content h3, div.pop_content h4, +div.pop_content h5, div.pop_content h6, div.pop_content p { + margin: 0px; +} + +div.pop_content p + h1, div.pop_content p + h2, div.pop_content p + h3, +div.pop_content p + h4, div.pop_content p + h5, div.pop_content p + h6 { + margin-top: 5px; +} + +div.pop_content p + p { + margin-top: 5px; +} + +div.pop_content > *:last-child { + margin-bottom: 0px; +} + +div.pop_content div.pop_close { + /* old definition */ + float:right; + bottom: 0; +} + +div.pop_content span.pop_close, div.pop_content span.pop_back { + display: inline-block; + border: 2px outset #661429; + background-color: #CCC; + padding-left: 1px; + padding-right: 1px; + padding-top: 0px; + padding-bottom: 0px; + cursor: pointer; + color: #AA2244; /*#661429;*/ + font-weight: bold; +} + +div.pop_content span.pop_close:active, div.pop_content span.pop_back:active { + border-style: inset; +} + +div.pop_content span.pop_close { + float:right; + /*border: 2px outset #AA002B;*/ + /*color: #AA2244;*/ +} + +div.pop_content:not(.nested) .nested_only { + display: none; +} + +div.pop_back_sec { + margin-bottom: 5px; +} + +div.pop_close_sec { + margin-top: 5px; +} + +table.hide_advanced tr.advanced { + display: none; +} +span.show_more { + display: none; +} +table.hide_advanced span.show_more { + display: inline; +} +table.hide_advanced span.show_less { + display: none; +} + + +/***************************************************************************** + * Program logo styling + ****************************************************************************/ +div.prog_logo { + border-bottom: 0.25em solid #0f5f60; + height: 4.5em; + width: 24em; + display:inline-block; +} +div.prog_logo img { + float:left; + width: 4em; + border-style: none; + margin-right: 0.2em; +} +div.prog_logo h1, div.prog_logo h1:hover, div.prog_logo h1:active, div.prog_logo h1:visited { + margin:0; + padding:0; + font-family: Arial, Helvetica, sans-serif; + font-size: 3.2em; + line-height: 1em; + vertical-align: top; + display: block; + color: #026666; + letter-spacing: -0.06em; + text-shadow: 0.04em 0.06em 0.05em #666; +} +div.prog_logo h2, div.prog_logo h2:hover, div.prog_logo h2:active, div.prog_logo h2:visited { + display: block; + margin:0; + padding:0; + font-family: Helvetica, sans-serif; + font-size: 0.9em; + line-height: 1em; + letter-spacing: -0.06em; + color: black; +} + +div.big.prog_logo { + font-size: 18px; +} + +</style> + <style> +.block_td { + height:25px; +} +.block_container { + position:relative; + box-sizing: border-box; + height: 25px; + padding: 0px; + margin: 0px; + margin-left: 1em; +} +.block_label { + position: absolute; + display: inline-block; + padding: 3px; + z-index: 4; + top: 6px; + height: 12px; + line-height: 12px; + font-size: 12px; + background-color: white; + border: 1px solid black; + -moz-border-radius: 12px; + -webkit-border-radius: 12px; + border-radius: 12px; + transform: translateX(-50%); +} +.block_motif { + position: absolute; + z-index: 3; + top: 0px; + box-sizing: border-box; + border: 1px solid black; + height: 12px; + background-color: cyan; +} +.block_motif.top { + border-bottom-width: 0; +} +.block_motif.bottom { + border-top-width: 0; +} +.block_motif.scanned_site { + opacity: 0.3; +} +.block_motif.scanned_site.active { + opacity: 0.9; +} +.block_region { + position:absolute; + z-index:6; + height:25px; + top:0px; +} +.block_region.main { + z-index:8; +} +.block_region.scanned_site { + z-index:5; +} +.block_region.scanned_site.main { + z-index:7; +} +.block_region.top { + height:13px; +} +.block_region.bottom { + height:13px; + top:12px; +} +.block_rule { + position:absolute; + z-index:2; + width:100%; + height:1px; + top:12px; + left:0px; + background-color:gray; +} +.block_plus_sym { + position:absolute; + z-index:4; + line-height:12px; + top:0px; + left:-1em; +} +.block_minus_sym { + position:absolute; + z-index:4; + line-height:12px; + top:13px; + left:-1em; +} + +.tic_major { + position:absolute; + top:0em; + height:0.5em; + width: 2px; + margin-left: -1px; + background-color: blue; +} +.tic_minor { + position:absolute; + top:0em; + height:0.2em; + width: 1px; + margin-left: -0.5px; + background-color: blue; +} +.tic_label { + position:absolute; + display: inline-block; + top:0.5em; + height: 1em; + color: blue; + transform: translateX(-50%); +} + +.block_needle { + position:absolute; + z-index:4; + height:30px; + width:1px; + top:-2px; + background-color:gray; +} +.block_needle.right { + height: 60px; +} +.block_handle { + position: absolute; + display: inline-block; + z-index: 5; + top: 27px; + min-width: 3ex; + text-align: center; + font-size: 12px; + line-height: 12px; + transform: translateX(-50%); + background-color: LightGrey; + border:3px outset grey; + cursor: pointer; + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ + /* Rules below not implemented in browsers yet */ + -o-user-select: none; + user-select: none; +} +.block_handle.right { + top: 47px; +} + +.legend_container { + text-align: right; +} +.legend_entry { + display: inline-block; + padding: 5px; +} +div.legend_swatch { + box-sizing: border-box; + width: 15px; + height: 15px; + border: 1px solid black; + background-color: cyan; + float: left; +} +div.legend_swatch input { + display: none; +} +.legend_text { + line-height: 15px; + margin-left: 20px; +} +</style> + <style> +/* meme output specific css */ + +div.pop_block { + position:absolute; + z-index:5; + padding: 5px; + border: 1px solid black; + display: inline-block; + background-color: white; +} + +#measure_match { + position: absolute; + visibility: hidden; + height: auto; + width: auto; + white-space: nowrap; +} + +div.template { + position: absolute; + z-index: 1; + left: 0; + top: 0; + visibility: hidden; +} + +table.block_information { + margin-left: auto; + margin-right: auto; +} + +table.block_information * th { + text-align: right; +} + +*.hide_empty_seqs * tr.empty_seq { + display: none; +} + +*.hide_only_scan * tr.only_scan { + display: none; +} + +*.hide_only_scan * div.scanned_site { + display: none; +} + +td.symaction { + text-align: center; + text-decoration: underline; + font-size: 20px; + cursor: pointer; +} +div.sym_btn { + display:inline-block; + text-decoration: underline; + cursor: pointer; + font-size: 20px; + line-height:20px; + text-align: center; + width: 20px; + height: 20px; + color: blue; +} +div.sym_btn:hover { + color: white; + background-color: blue; +} + +div.sym_btn.positioned { + position: absolute; + top: 0px; +} + +div.actionbutton { + display:inline-block; + cursor: pointer; + font-size: 18px; + line-height:20px; + padding: 5px; + margin: 10px 0; + border: 1px solid black; +} + +div.actionbutton:hover { + color:#FFF; + background-color:#000; +} + +div.param_box { + display: inline-block; + margin-right: 20px; +} + +span.param { + font-weight: bold; +} + +div.box + div.box { + margin-top: 5px; +} + +div.sites_outer { + position: relative; + padding-top: 20px; /* height of header */ + display: inline-block; +} + +div.sites_inner { + overflow-x: hidden; + overflow-y: auto; + max-height: 200px; +} +table.sites_tbl { + border-collapse: collapse; +} + +div.sites_th_inner { + position: absolute; + top: 0; + line-height: 20px; /* height of header */ + text-align: left; + padding-left: 5px; +} +th.nopad div.sites_th_inner { + padding-left: 0; +} +div.sites_th_hidden { + visibility: hidden; + height: 0; + padding: 0 10px; +} +th.nopad div.sites_th_hidden { + padding: 0; +} +div.sites_inner * th { + height: 0; +} + +table.sites_tbl { + overflow-x: hidden; + overflow-y: auto; +} + +.site_num { + text-align: right; +} +.site_name { + padding:0px 5px; + text-align:left; +} +.site_strand { + padding:0px 5px; + text-align:center; +} +.norc .site_strand, .norc .site_strand_title { + display: none; +} +.site_start { + padding:0px 15px; + text-align: right; +} +.site_pvalue { + text-align:center; + padding:0px 15px; + text-align:right; + white-space: nowrap; +} +.lflank, .rflank, .match, .alpha_symbol { + font-weight:bold; + font-size:15px; + font-family: 'Courier New', Courier, monospace; + color:gray; +} + +.site.lflank { + text-align:right; + padding-right:5px; + color:gray; +} +.site.match { + text-align:center; +} +.site.rflank { + text-align:left; + padding-left:5px; + padding-right: 20px; +} + +th.stop_reason { + text-align: left; + padding-right: 10px; +} + +th.motif_ordinal { + +} +td.motif_ordinal { + text-align: right; + padding-right: 10px; +} +th.motif_logo { + padding-right: 10px; +} +td.motif_logo { + padding-right: 10px; +} +th.motif_evalue { + text-align:right; + padding-right: 10px; +} +td.motif_evalue { + text-align: right; + white-space: nowrap; + padding-right: 20px; +} +th.motif_nsites { + text-align: right; + padding-right: 10px; +} +td.motif_nsites { + text-align: right; + padding-right: 20px; +} +th.motif_width { + text-align: right; + padding-right: 5px; +} +td.motif_width { + text-align: right; + padding-right: 15px; +} +th.motif_more { + padding: 0 5px; +} +td.motif_more { + text-align: center; + padding: 0 5px; +} +th.motif_submit { + padding: 0 5px; +} +td.motif_submit { + text-align: center; + padding: 0 5px; +} +th.motif_download { + padding-left: 5px; +} +td.motif_download { + text-align: center; + padding-left: 5px; +} + + +div.tabArea { + font-size: 80%; + font-weight: bold; +} + +.norc div.tabArea { + display: none; +} + +span.tab, span.tab:visited { + cursor: pointer; + color: #888; + background-color: #ddd; + border: 2px solid #ccc; + padding: 2px 1em; + text-decoration: none; +} +span.tab.middle { + border-left-width: 0px; +} +div.tabArea.base span.tab { + border-top-width: 0px; +} +div.tabArea.top span.tab { + border-bottom-width: 0px; +} + +span.tab:hover { + background-color: #bbb; + border-color: #bbb; + color: #666; +} +span.tab.activeTab, span.tab.activeTab:hover, span.tab.activeTab:visited { + background-color: white; + color: black; + cursor: default; +} +div.tabMain { + border: 2px solid #ccc; + background-color: white; + padding: 10px; +} +div.tabMain.base { + margin-top: 5px; + display: inline-block; + max-width: 98%; +} + +div.tabMain.top { + margin-bottom: 5px; +} + +div.tabCenter { + max-width: 100%; + overflow-x: auto; + height: 200px; + overflow-y: hidden; +} + +canvas.logo_rc { + display:none; +} +.show_rc_logo > canvas { + display: none; +} +.show_rc_logo > canvas.logo_rc { + display: block; +} + +canvas.scan_logo { + margin-left: 10px; +} + +div.blocks_outer { + position: relative; + padding-top: 20px; /* height of header */ +} + +div.blocks_inner { + overflow-x: hidden; + overflow-y: auto; + max-height: 200px; +} +table.blocks_tbl { + border-collapse: collapse; + width: 100%; +} + +div.blocks_th_inner { + position: absolute; + top: 0; + line-height: 20px; /* height of header */ + text-align: left; + padding-left: 5px; +} +th.nopad div.blocks_th_inner { + padding-left: 0; +} +div.blocks_th_hidden { + visibility: hidden; + height: 0; + padding: 0 10px; +} +th.nopad div.blocks_th_hidden { + padding: 0; +} +div.blocks_inner * th { + height: 0; +} + +table.blocks_tbl { + overflow-x: hidden; + overflow-y: auto; +} +td.block_td { + width: 99%; +} + +*.blockdiag_num { + text-align: right; +} + +td.blockdiag_name { + text-align: left; + padding:0px 10px; +} + +td.blockdiag_pvalue { + padding:0px 10px; + text-align:right; + white-space: nowrap; +} + +div.preview_btn { + border: 2px solid white; + height: 16px; + width: 16px; + font-size: 12px; + line-height: 16px; + text-align: center; + cursor: pointer; +} +div.preview_btn + div.preview_btn { + margin-top: 3px; +} + +div.preview_btn.active { + border: 2px solid black; + cursor: default; +} + +div.preview_btn:hover { + background-color: black; + color: white; + border-color: black; +} + +div.preview_btn.active:hover { + background-color: white; + color: black; + border-color: black; +} + + +div.preview_btn_box { + position: absolute; + left: 0px; + top: 0px; + padding: 3px; +} + +div.preview_logo_box { + height: 50px; + overflow-y: hidden; +} + +div.preview_btn_box + div.preview_logo_box { + margin-left: 25px; +} + +div.preview_box { + position: relative; +} + +div.grey_background { + position:fixed; + z-index: 8; + background-color: #000; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + opacity: 0.5; + left: 0; + top: 0; + width: 100%; + height: 100%; +} + +div.popup_wrapper { + position:fixed; + z-index:9; + width:100%; + height:0; + top:50%; + left:0; +} + +div.popup { + width: 600px; + z-index:9; + margin-left: auto; + margin-right: auto; + padding: 5px; + background-color: #FFF; + border-style: double; + border-width: 5px; + border-color: #00666a; + position:relative; +} +div.close { + cursor: pointer; + border: 1px solid black; + width:15px; + height:15px; + line-height:15px; /* this causes vertical centering */ + text-align:center; + background-color:#FFF; + color:#000; + font-size:15px; + font-family:monospace; +} + +div.close:hover { + color:#FFF; + background-color:#000; +} + +div.navnum { + width:100%; + height:20px; + line-height:20px; + text-align:center; + font-size:medium; +} + +div.navarrow { + font-size: 30px; + text-decoration:none; + cursor: pointer; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; +} + +div.navarrow > span.inactive { + display: inline; +} +div.navarrow > span.active { + display: none; +} + +div.navarrow:hover > span.active { + display: inline; +} +div.navarrow:hover > span.inactive { + display: none; +} + +table.programs { + width: 100%; +} + +table.programs tr { + background-color: #EFE; +} + +table.programs tr.selected { + background-color: #262; + color: #FFF; +} + +table.programs tr.dna_only { + display: none; +} + +table.programs.alphabet_dna tr.dna_only { + display: table-row; +} + +div.programs_scroll { + width: 100%; + height: 90px; + overflow-y: auto; + overflow-x: hidden; + margin: 0 auto; +} +table.inputs, table.alpha_bg_table { + margin-top: 20px; + border-collapse:collapse; +} +table.inputs * td, table.inputs * th, table.alpha_bg_table * td, table.alpha_bg_table * th { + padding-left: 15px; + padding-right: 15px; + padding-top: 1px; + padding-bottom: 1px; +} + +table.hide_psp td.col_psp, table.hide_psp th.col_psp { + display: none; +} + +/* program settings */ +span.mod_oops, span.mod_zoops, span.mod_anr { + display: none; +} +td.oops span.mod_oops,td.zoops span.mod_zoops, td.anr span.mod_anr { + display: inline; +} +span.strand_none, span.strand_given, span.strand_both { + display: none; +} +td.none span.strand_none, td.given span.strand_given, td.both span.strand_both { + display: inline; +} +span.spmap_uni, span.spmap_pam { + display: none; +} +td.uni span.spmap_uni, td.pam span.spmap_pam { + display: inline; +} +span.prior_dirichlet, span.prior_dmix, span.prior_mega, span.prior_megap, span.prior_addone { + display: none; +} +td.dirichlet span.prior_dirichlet, td.dmix span.prior_dmix, td.mega span.prior_mega, +td.megap span.prior_megap, td.addone span.prior_addone { + display: inline; +} +span.noendgaps_on, span.noendgaps_off { + display: none; +} +td.on span.noendgaps_on, td.off span.noendgaps_off { + display: inline; +} +span.substring_on, span.substring_off { + display: none; +} +td.on span.substring_on, td.off span.substring_off { + display: inline; +} +</style> + </head> + <body onload="page_loaded()" onpageshow="page_shown(event)" onresize="page_resized()"> + <!-- --> + <div id="grey_out_page" class="grey_background" style="display:none;"> + </div> + <!-- Help popups --> + <div class="pop_content" id="pop_"> + <p>Help poup.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_ev"> + <p>The statistical significance of the motif. MEME usually finds the most + statistically significant (low E-value) motifs first. It is unusual to + consider a motif with an E-value larger than 0.05 significant so, as an + additional indicator, MEME displays these partially transparent.</p> + <p>The E-value of a motif is based on its log likelihood ratio, width, + sites, the background letter frequencies (given in the command line + summary), and the size of the training set.</p> + <p>The E-value is an estimate of the expected number of motifs with the + given log likelihood ratio (or higher), and with the same width and site + count, that one would find in a similarly sized set of random + sequences (sequences where each position is independent and letters are + chosen according to the background letter frequencies).</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_sites"> + <p>The number of sites contributing to the construction of the motif.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_width"> + <p>The width of the motif. Each motif describes a pattern of a fixed + width, as no gaps are allowed in MEME motifs.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_more"> + <p>Click on the blue symbol below to reveal more information about this motif.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_submit_dl"> + <p>Click on the blue symbol below to reveal options allowing you + to submit this motif to another MEME Suite motif analysis program, to download this + motif in various text formats, or to download a sequence "logo" of + this motif PNG or EPS format.</p> + <h5>Supported Programs</h5> + <dl> + <dt>Tomtom</dt> + <dd>Tomtom is a tool for searching for similar known motifs. + [<a href="http://meme-suite.org/doc/tomtom.html?man_type=web">manual</a>]</dd> + <dt>MAST</dt> + <dd>MAST is a tool for searching biological sequence databases for + sequences that contain one or more of a group of known motifs. + [<a href="http://meme-suite.org/doc/mast.html?man_type=web">manual</a>]</dd> + <dt>FIMO</dt> + <dd>FIMO is a tool for searching biological sequence databases for + sequences that contain one or more known motifs. + [<a href="http://meme-suite.org/doc/fimo.html?man_type=web">manual</a>]</dd> + <dt>GOMO</dt> + <dd>GOMO is a tool for identifying possible roles (Gene Ontology + terms) for DNA binding motifs. + [<a href="http://meme-suite.org/doc/gomo.html?man_type=web">manual</a>]</dd> + <dt>SpaMo</dt> + <dd>SpaMo is a tool for inferring possible transcription factor + complexes by finding motifs with enriched spacings. + [<a href="http://meme-suite.org/doc/spamo.html?man_type=web">manual</a>]</dd> + </dl> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_llr"> + <p>The log likelihood ratio of the motif.The log likelihood ratio is the + logarithm of the ratio of the probability of the occurrences of the motif + given the motif model (likelihood given the motif) versus their + probability given the background model (likelihood given the null model). + (Normally the background model is a 0-order Markov model using the + background letter frequencies, but higher order Markov models may be + specified via the -bfile option to MEME.).</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_ic"> + <p>The information content of the motif in bits. It is equal to the sum + of the uncorrected information content, R(), in the columns of the pwm. + This is equal relative entropy of the motif relative to a uniform + background frequency model.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_re"> + <p>The relative entropy of the motif.</p> + + <p style="font-family: monospace;">re = llr / (sites * ln(2))</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_bt"> + <p>The Bayes Threshold.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_site_strand"> + <p>The strand used for the motif site.</p> + <dl> + <dt>+</dt> + <dd>The motif site was found in the sequence as it was supplied.</dd> + <dt>-</dt> + <dd>The motif site was found in the reverse complement of the supplied sequence.</dd> + </dl> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_site_start"> + <p>The position in the sequence where the motif site starts. If a motif + started right at the begining of a sequence it would be described as + starting at position 1.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_site_pvalue"> + <p>The probability that an equal or better site would be found in a + random sequence of the same length conforming to the background letter + frequencies.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_site_match"> + <p>A motif site with the 10 flanking letters on either side.</p> + <p>When the site is not on the given strand then the site + and both flanks are reverse complemented so they align.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + + <div class="pop_content" id="pop_seq_name"> + <p>The name of the sequences as given in the FASTA file.</p> + <p>The number to the left of the sequence name is the ordinal + of the sequence.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + + <div class="pop_content" id="pop_motif_sites"> + <p>These are the motif sites predicted by MEME and used to build the motif.</p> + <p>These sites are shown in solid color and hovering the cursor + over a site will reveal details about the site. Only sequences + that contain a motif site are shown.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + + <div class="pop_content" id="pop_scanned_sites"> + <p>These are the motif sites predicted by MEME plus + any additional sites detected using a motif scanning + algorithm.</p> + <p>These MEME sites are shown in solid color and + additional scanned sites are shown in transparent color. + Hovering the cursor over a site will reveal details about the site. + Only sequences containing a predicted or scanned motif site are shown.</p> + <p>The scanned sites are predicted using a + log-odds scoring matrix constructed from the MEME sites. + Only scanned sites with position <i>p</i>-values less + than 0.0001 are shown.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + + <div class="pop_content" id="pop_all_sequences"> + <p>These are the same sites as shown by selecting the + "Motif Sites + Scanned Sites" button except that all + sequences, including those with no sites, are included + in the diagram.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + + <div class="pop_content" id="pop_seq_pvalue"> + <p>This is the combined match <i>p</i>-value.</p> + <p>The combined match <i>p</i>-value is defined as the probability that a + random sequence (with the same length and conforming to the background) + would have position <i>p</i>-values such that the product is smaller + or equal to the value calulated for the sequence under test.</p> + <p>The position <i>p</i>-value is defined as the probability that a + random sequence (with the same length and conforming to the background) + would have a match to the motif under test with a score greater or equal + to the largest found in the sequence under test.</p> + <p>Hovering your mouse over a motif site in the motif location + block diagram will show its position <i>p</i>-value and other information + about the site.</p> + + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_motif_location"> + <p>This diagram shows the location of motif sites.</p> + <p>Each block shows the position and strength of a motif + site. The height of a block gives an indication of the + significance of the site as taller blocks are more significant. + The height is calculated to be proportional to the negative + logarithm of the <i>p</i>-value of the site, truncated at + the height for a <i>p</i>-value of 1e-10.</p> + <p>For complementable alphabets (like DNA), sites on the + positive strand are shown above the line, + sites on the negative strand are shown below.</p> + <p>Placing the cursor + over a motif site will reveal more information about the site + including its position <i>p</i>-value. (See the help + for the <i>p</i>-value column for an explanation of position + <i>p</i>-values.)</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + + <div class="pop_content" id="pop_seq_source"> + <p>The name of the file of sequences input to MEME.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_psp_source"> + <p>The position specific priors file used by MEME to find the motifs.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_seq_alph"> + <p>The alphabet used by the sequences.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_seq_count"> + <p>The number of sequences provided as input to MEME.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + + <div class="pop_content" id="pop_alph_name"> + <p>The name of the alphabet symbol.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_alph_freq"> + <p>The frequency of the alphabet symbol in the dataset with a pseudocount + so it is never zero.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + <div class="pop_content" id="pop_alph_bg"> + <p>The frequency of the alphabet symbol as defined by the background model.</p> + <div style="float:right; bottom:0px;">[ + <a href="javascript:help_popup()">close</a> ]</div> + </div> + + <!-- templates --> + <div id="measure_match" class="match"></div> + <div class="template pop_block" id="tmpl_block_info"> + <div> + <span class="tvar_logo_pad lflank" style="visibility:hidden;"></span> + <span class="tvar_logo"></span> + </div> + <div class="block_sequence_fragment"> + <span class="tvar_lflank lflank"></span> + <span class="tvar_match match"></span> + <span class="tvar_rflank rflank"></span> + </div> + <table class="block_information"> + <tr><th>Motif</th><td class="tvar_motif">1</td></tr> + <tr><th><i>p</i>-value</th><td class="tvar_pvalue">8.23e-7</td></tr> + <tr><th>Start</th><td class="tvar_start">23</td></tr> + <tr><th>End</th><td class="tvar_end">33</td></tr> + </table> + </div> + + <div class="template pop_block" id="tmpl_scan_info"> + <h5>Scanned Site</h5> + <div class="tvar_logo"></div> + <table class="block_information"> + <tr><th>Motif</th><td class="tvar_motif">1</td></tr> + <tr><th><i>p</i>-value</th><td class="tvar_pvalue">8.23e-7</td></tr> + <tr><th>Start</th><td class="tvar_start">23</td></tr> + <tr><th>End</th><td class="tvar_end">33</td></tr> + </table> + </div> + + <div class="template box expanded_motif" id="tmpl_motif_expanded"> + <div style="position: relative; min-height: 20px"> + <div class="param_box"> + <span class="param"><span class="tvar_ordinal"></span>.</span> + </div> + <div class="sym_btn positioned tvar_less" tabindex="0" + title="Show less information.">↥</div> + <div class="sym_btn positioned tvar_submit" tabindex="0" + title="Submit the motif to another MEME Suite program or download it.">⇢</div> + </div> + <div> + <div class="param_box"> + <span class="param"><i>E</i>-value:</span> + <span class="tvar_evalue"></span> + <div class="help" data-topic="pop_ev"></div> + </div> + <div class="param_box"> + <span class="param">Site Count:</span> + <span class="tvar_site_count"></span> + <div class="help" data-topic="pop_sites"></div> + </div> + <div class="param_box"> + <span class="param">Width:</span> + <span class="tvar_width"></span> + <div class="help" data-topic="pop_width"></div> + </div> + </div> + <div class="tabMain base"> + <div class="tabCenter tvar_logo"></div> + </div> + <div class="tabArea base"> + <span class="tvar_tab tab" tabindex="0">Standard</span><span + class="tvar_tab_rc tab middle" tabindex="0">Reverse + Complement</span> + </div> + <div style="padding: 10px 0"> + <div class="param_box"> + <span class="param">Log Likelihood Ratio:</span> + <span class="tvar_llr"></span> + <div class="help" data-topic="pop_llr"></div> + </div> + <div class="param_box"> + <span class="param">Information Content:</span> + <span class="tvar_ic"></span> + <div class="help" data-topic="pop_ic"></div> + </div> + <div class="param_box"> + <span class="param">Relative Entropy:</span> + <span class="tvar_re"></span> + <div class="help" data-topic="pop_re"></div> + </div> + <div class="param_box"> + <span class="param">Bayes Threshold:</span> + <span class="tvar_bt"></span> + <div class="help" data-topic="pop_bt"></div> + </div> + </div> + <div class="tvar_sites"></div> + </div> + + + <div class="popup_wrapper"> + <div class="popup" style="display:none; top: -150px;" id="download"> + <div> + <div style="float:right; "> + <div id="outpop_close" class="close" tabindex="0">x</div> + </div> + <h2 class="mainh" style="margin:0; padding:0;">Submit or Download</h2> + <div style="clear:both"></div> + </div> + <div style="height:100px"> + <div style="float:right; width: 30px;"> + <div id="outpop_prev" class="navarrow" tabindex="0"> + <span class="inactive">⇧</span><span class="active">⬆</span> + </div> + <div id="outpop_num" class="navnum"></div> + <div id="outpop_next" class="navarrow" tabindex="0"> + <span class="inactive">⇩</span><span class="active">⬇</span> + </div> + </div> + <div id="logo_box" style="height: 100px; margin-right: 40px;"> + <canvas id="outpop_logo" height="100" width="580"></canvas> + <canvas id="outpop_logo_rc" class="logo_rc" height="100" width="580"></canvas> + </div> + </div> + <div> + <!-- tabs start --> + <div class="tabArea top"> + <span id="outpop_tab_1" class="tab">Submit Motif</span><span + id="outpop_tab_2" class="tab middle">Download Motif</span><span + id="outpop_tab_3" class="tab middle">Download Logo</span> + </div> + <div class="tabMain top"> + <!-- Submit to another program --> + <div id="outpop_pnl_1"> + <h4 class="compact">Submit to program</h4> + <table id="programs" class="programs"> + <tr class="dna_only"> + <td><input type="radio" name="program" value="tomtom" id="submit_tomtom"></td> + <td><label for="submit_tomtom">Tomtom</label></td> + <td><label for="submit_tomtom">Find similar motifs in + published libraries or a library you supply.</label></td> + </tr> + <tr> + <td><input type="radio" name="program" value="fimo" id="submit_fimo"></td> + <td><label for="submit_fimo">FIMO</label></td> + <td><label for="submit_fimo">Find motif occurrences in + sequence data.</label></td> + </tr> + <tr> + <td><input type="radio" name="program" value="mast" id="submit_mast"></td> + <td><label for="submit_mast">MAST</label></td> + <td><label for="submit_mast">Rank sequences by affinity to + groups of motifs.</label></td> + </tr> + <tr class="dna_only"> + <td><input type="radio" name="program" value="gomo" id="submit_gomo"></td> + <td><label for="submit_gomo">GOMo</label></td> + <td><label for="submit_gomo">Identify possible roles (Gene + Ontology terms) for motifs.</label></td> + </tr> + <tr class="dna_only"> + <td><input type="radio" name="program" value="spamo" id="submit_spamo"></td> + <td><label for="submit_spamo">SpaMo</label></td> + <td><label for="submit_spamo">Find other motifs that are + enriched at specific close spacings which might imply the existance of a complex.</label></td> + </tr> + </table> + </div> + <!-- download text format --> + <div id="outpop_pnl_2"> + <div> + <label for="text_format">Format:</label> + <select id="text_format"> + <option value="0">Count Matrix</option> + <option value="1">Probability Matrix</option> + <option value="2">Minimal MEME</option> + <option value="3">FASTA</option> + <option value="4">Raw</option> + </select> + </div> + <form id="text_form" method="post" action=""> + <script>$("text_form").action = site_url + "/utilities/save_generated_file";</script> + <input type="hidden" id="text_name" name="name" value="motif.txt"> + <input type="hidden" name="mime_type" value="text/plain"> + <textarea id="outpop_text" name="content" + style="width:99%; white-space: pre; word-wrap: normal; overflow-x: scroll;" + rows="8" readonly="readonly" wrap="off"></textarea> + </form> + </div> + <!-- download logo format --> + <div id="outpop_pnl_3"> + <form id="logo_form" method="post" action=""> + <script>$("logo_form").action = site_url + "/utilities/generate_logo";</script> + <input type="hidden" name="program" value="MEME"/> + <input type="hidden" id="logo_motifs" name="motifs" value=""/> + <table> + <tr> + <td><label for="logo_format">Format:</label></td> + <td> + <select id="logo_format" name="png"> + <option value="1">PNG (for web)</option> + <option value="0">EPS (for publication)</option> + </select> + </td> + </tr> + <tr> + <td><label for="logo_rc">Orientation:</label></td> + <td> + <select id="logo_rc" name="rc1"> + <option value="0">Normal</option> + <option value="1" id="logo_rc_option">Reverse Complement</option> + </select> + </td> + </tr> + <tr> + <td><label for="logo_ssc">Small Sample Correction:</label></td> + <td> + <input type="hidden" id="logo_err" name="errbars" value="0"/> + <select id="logo_ssc" name="ssc"> + <option value="0">Off</option> + <option value="1">On</option> + </select> + </td> + </tr> + <tr> + <td><label for="logo_width">Width:</label></td> + <td> + <input type="text" id="logo_width" size="4" placeholder="default" name="width"/> cm + </td> + </tr> + <tr> + <td><label for="logo_height">Height:</label></td> + <td> + <input type="text" id="logo_height" size="4" placeholder="default" name="height"/> cm + </td> + </tr> + </table> + </form> + </div> + <!-- Buttons --> + <div> + <div style="float:left;"> + <input type="button" id="outpop_do" value="Submit" /> + </div> + <div style="float:right;"> + <input id="outpop_cancel" type="button" value="Cancel" /> + </div> + <div style="clear:both;"></div> + </div> + </div> + </div> + </div> + </div> + + + + <!-- Page starts here --> + <div id="top" class="pad1"> + <div class="prog_logo big"> + <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAD4AAABGCAYAAACUsCfoAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU1FB9wLHAInL7an9JAAAA8eSURBVHja7ZpZbxv3ucZ/s3AZ7qQkypZELZS3WHKiRJbTFnHqOjZcGzCQBf0A7cUB8glOb89dz30vChRp7xK0aZo4TYq6dtKqSew6iuJWpmPJlrVFFCmKI+7LLJw5F81MFZyec5rTILJaP8AAnAty+Pzf933ebeAhHuIhHuIhHmJPo6TpaeGLfimTydhLS0sUCgWazSbVahXDMOh0Ong8HiKRCAMDAxw+fJhHH31UeFDJ/91/bHp62r558ya6rmOaJuvr6+TzeYrFIoZhAOD1epFlmWAwSDqdZnR0lCNHjjA+Ps7+/fuFPUU8k8nYV69epVKpEA6HuXPnDrOzs7RaLbxeL93d3fj9foLBIB6Ph0ajQaVSAUBRFNLpNI888ggHDhzg3Llzwp4g/vbbb9szMzPE43FyuRwffPAB2WyWnp4ehoaGiMVi2LZNvV6n3W7j8/mIRqN4vV4ajQa1Wo2trS0OHTqEaZo89dRTfO973xMeaOKvvfaaffv2bcLhMCsrK/z+979HVVWOHz/O0NAQxWIRVVVRVRW/348oihiGgSiKxGIxurq6CAQCBINB3n//fcbGxiiXyxw7dowXX3yx1Nvbm3igiBcKhY9u3rw5OTMzQzgc5vbt23zwwQfIsszExAS2bZPP55EkiVAoRCQSIRwOI8sy5XKZ7e1tWq0WnU6HTqfD4OAggUAAVVXpdDo0m01GRkb44Q9/KDxQxH/729/as7Oz+Hw+Pv30U37zm9/g9Xrp6emht7eXYDCI3+/H6/UiCALtdhvLsuh0OkiSRCAQQJZl6vU65XKZ1dVV+vv7SSQS5PN5vF4vhUKBgwcP8qMf/WjXyIs7b+7cuWMvLi4iCAL1ep133nkHXdcZHh4mlUoRDofp7+8nHo9jGAaCIBCPx+nr6yOdTtPX14fH40HTNGRZpqenh76+PrLZLMVikYGBARRFwTRN5ubm+PGPf2zvFnF5583c3BzlchlZlrl16xa1Wo2xsTGi0SiDg4OutUzTJBKJIIoiXq+XQCBAIpEgFAphmiaqqlIoFKjVaoyOjhKJRFhfXycajRKNRunp6WFhYYG33nqLQqHwUTKZPP5VE5ecD5cvX7bv37+Poijkcjl++ctfMjo6ytDQEMlkEo/HQ7lcpt1u4/F4kGUZQRDw+Xz09fVx4MABRkZGSKVSdHV10el0KJVK1Ot14vE4kiRRKpVQFIV4PI5t23z66ad0Op2+K1eu/MeuWVxVVUzTRNd17t27RzKZJJFIEI1GEUWRdruNaZqIoogkSYiiiCiK+P1+AoEA0WiUQ4cOCQCbm5vb5XI5Xi6XWVtbw7ZtZFnG7/e7D1YUhWAwSLVaJZvN2v39/cJXHuOLi4t2sVhEEAS2t7eZn59n//79JBIJwuEwlmXRbDbRdR1BEBAEAcuysCwL2/5LmIriX+Wit7c3EY/HSSQSeDweDMPA4/EQCoWwbRvbtgmFQoTDYUqlErlcbnfE7f79+64gbWxs0G63icViRCIRBEHANE0Mw0CSJLxer0vSUfVKpUKxWGRtbc12UmKr1cI0TQD3t4PBoHtwgUAAv99Ps9kkn8/vjrjlcjlkWabdbrO8vEx3dzfhcJhoNEq9XkfTNERRxOfz4fV6sW0bSZJcBS+VSqytrdFqtbh+/bq9sLBALpdje3sbXddd4jutLwh/8WzLslBVdXeI12o1RFFkc3PTLTFjsRixWAxVVbEsC1mWkSTJdVXnMgyDarWKrusUi0X8fj+WZVGtVimXyxiGgW3bblh4PB78fj/tdhvbthFF0a3tv3Liuq4jiiKFQgFZlolEInR3d6MoConEXytLp1Bx0Ol0sG0bXdfRdZ1arYYgCNi2jaZptFot1zOcQ3LSnxMGzsHvCnHH/RqNBtFoFEmSCIfDAAwNDWFZFu12m0ajgaZpWJbl/oDH4/ncoTii5xBz1N+2bTqdDrIs4/P53MxgWRaapu2exQOBgHsAnU6HdrvN5uYmgUCASCRCJBIhkUhgmibNZpNarUaj0XAt71jfET1RFN1YliTJfUa73SaZTLK1tUWtVkPTNKampnaHuFNGyrKM1+t141bTNGq1GrVazS1EIpEI8XjcLWJqtdrnYthNF58pv23beL1eJEly1VzXder1Oq1Wi2AwiK7ru0PcSSs73bBYLBIMBpEkCdM0qVQq6LpOq9UiHA673Vmn08E0TfdyRM85CNM08Xq9bkoMhULugRqGgd/v3z1Xl2X5c24aDodRVZV4PO7W406/raoqtVqNYDCIz+dDURQ3vp3LuXeEz4nlTqdDOBxG13U3TBRF2b0mJRAI0Gg0EAQBTdPw+/2Uy2VXoJzRkkPEifNWq0UgEHCLEsedLcty1X1nzIdCIRRFoVQqUSqVsCyLYDBIPB7fncotlUq5JaWu6xiGgWmabG1tuanINE0EQXAPwSlk6vU6zWaTdruNpmnud3eWsk6fnkwmMU2Tzc1NVFVFURSi0SjpdHp3iB89ehRRFOnt7XWHCNFolFwu58ar08AYhuEWNH6/H4/H8zlL71R4J5XJskwgECAWi5HP51lZWaHVajE8PEw8Hufw4cO7Q3zfvn0C4E5MNU2jq6uLarVKPp//nPA5hYgzcYlEIoRCIfcQHLd3SDvEPR4PHo+HfD5PPp9HEARGRkYIhUIMDQ0Ju0Ic4NixY3g8Hnp7e8lms8RiMcLhMNlsFk3TXHW3bZtgMOjmfScEvF6vW8s7qczxgGazSSAQ4M9//jOqqlKpVHj88cfx+XyMjY3t7ujp1KlTQrlcdicupVKJkZER1tbWuHfvHqqqEolEiMVitNtt6vW6q+iNRoNms4kkSfh8PtfC0WgURVHo7+9nc3OTjY0N3n33XQYGBkilUiSTSU6ePCnsKnGA559/nkqlwtGjR8nn8/j9fh5//HEsy+LWrVvMz8+j6zqhUAifz4dhGG7z0mq1UFUVXdeJRCIEg0F32loqlbh37x53796lq6sLRVGIRCJMTEzs2pT1c8Qfe+wxYWpqyv1j2WyWVCpFIpGgUqkwNzfHnTt33JTnDCUlSaK7u5v+/n66u7vxeDxun16r1SgUCly/fp3bt29z+vRpBgcHqdVqRKPRB2uh8LOf/cyemZlhYWGBYDBIJBIBoFgs0mw2CYfDxONxfD4fg4ODros7vXWhUKDT6bg5/v3332dlZYWhoSHS6TSnTp1i3759VKtVzpw5w1c9dvpfNymvvPKKff36dbLZLIqiuBVWs9mk0WhgWZbbn4fDYURRRNM0AoEAvb29+Hw+Go0Gly9fZmNjg4mJCcbGxti/f787mJyfn6darTI5OcmJEyeEB4J4sVj8wfT09L/Pzs6SzWbdpWEikXBJGoZBs9kkGo0iyzKmabrLhtXVVTKZDJubm5w9e5YjR44wMDDAd7/7XWF2dtZeXFzkyJEj7pZm//79pFIpenp6vhIP+D8f8NZbb9nr6+ssLy+ztbXl1t5er9fdhxeLRSRJoquri0qlQiaTYXt7m0gkwpkzZ5BlmbGxMV544QX3eR9//LE9Pz/PsWPHuHHjBouLi0iSxMDAAMePH2dqakrYVeIAKysr9u3bt1leXnZn65qmoeu6W9AYhkGj0aBYLGKaJocOHeLRRx8lkUgwOTnpjp4d5HI5++OPP6ZcLjM+Ps61a9dYWFig2Wzi9Xp5/vnnOX36tLCrxHfi1q1b9tLSkuv+9XrdbTEVRSEWi5FMJhkdHWV4eJiDBw/+j8/Y2tr6+WuvvfYdwzBIpVJIkoSqqszPz1Ov17lw4QJf+9rXziYSiau7TvxvoVQqpUul0n2n2/oibz+899579k9/+lPC4TCnTp3i61//Orlcjp/85CdomsbTTz/NiRMn/pvH/CMotrQfyF/GD8Xj8aX/7yEePnx4dnx8fPJ3v/sdiqIwODjI5OSkcOPGDfvNN9/kypUr5PN5MpmMPT4+/qWQ71Z835fZZSSTyeMrKyt2vV7n7t27vPrqq1y7ds1+8sknhT/+8Y/2pUuXuHnzJs1mk6WlJTudTn8p5EUeAAwPDwvPPfccBw4cYHV1lc+KJ3t0dPTVixcvcvDgQebn53n55ZeZmZn5h1fLalv/twfqTaRMJmP/4he/YH19nSNHjnDhwgVisRj37t3jnXfeYWFhgQMHDnD+/HmeeuopYc9b3MH4+LjwrW99C0EQuHXrFtPT09RqNfr7+zlx4gTpdJqNjQ3efPNN3njjDbtYLP5gV1X9y8bly5ft119/nUqlwsmTJzl9+jQej4ePPvqITz75hLW1NYLBIJOTk5w7d46+vr4vzEN+EImfO3dOuHr1qv3666/z3nvvoWkaZ8+e5YknnnBXU5qmcfPmTQzDYG1tzR4cHBT2vMUdTE9P25cuXaJQKDA5OcmFCxfQdZ3Z2VkWFhbY2NhAURRSqRTPPvssY2Njwp62uINvfvObwp/+9Cf7V7/6FTdu3KDT6XD+/HmmpqbcoaaqqszOzmIYxhfK9Q80cYCJiQlhbm7OFgSBubk5vF4vzzzzDBMTE+7CMRgMsrCwwEsvvcS1a9fsb3zjG8KedvWd+OSTT+y3336bubk5JicnOXnyJJZl8eGHH7K2tkahUKDRaLBv3z4uXrzI2bNnhT1tcQdHjx4VMpmM3el0WFxcJBQKMTU1xbFjx6hWqwC0221WVlb49a9/zY0bN+wnn3xS2BN5/O/J88899xzDw8NkMhnm5uaIx+M8/fTT9PT0YFkWg4ODrK6u8sorrzA/P2/veVffidXVVfvdd99lenqa8+fPMzo6iqZp/OEPf2BhYYFWq4Usy4yMjHDx4kX+luXlvUh8aGhImJmZsS3L4vr165imSSqVYt++fbTbbWq1GtVqlWq1yt27d7l//749Ojoq7HniAFNTU8LS0pJdLpe5e/cu6+vrRCIRhoeHqVarrK6uous66+vrZLNZSqVS+rP2eW8TB0in00I2m3XVHqCvr49YLEYikXBfRiqXy+Ryufs7Q1tkj6O/v1/49re/zTPPPIMgCMzPz7sraJ/Ph9/vd/d3pVIp/U9hcQdOnX7p0iU7k8kgiqK76lIUxX19dKerC/wTYXt7+8zm5uaV5eVlNjY2iMfj+P1+hoeH6enpmd35evg/FXEHm1uF7ZXltXgg6EcSPSR7u/+zO9H1ff6VsFWq/pyHeIiHeIh/FfwXjVDdIW9O2PAAAAAASUVORK5CYII=" alt="MEME Logo"> + <h1>MEME</h1> + <h2>Multiple Em for Motif Elicitation</h2> + </div> + <p> + For further information on how to interpret these results or to get a + copy of the MEME software please access + <a href="http://meme-suite.org/">http://meme-suite.org</a>. + </p> + <p>If you use MEME in your research, please cite the following paper:<br /> + <span class="citation"> + Timothy L. Bailey and Charles Elkan, + "Fitting a mixture model by expectation maximization to discover motifs in biopolymers", + <em>Proceedings of the Second International Conference on Intelligent Systems + for Molecular Biology</em>, pp. 28-36, AAAI Press, Menlo Park, California, 1994. + <a href="http://meme-suite.org/doc/ismb94.pdf">[pdf]</a> + </span> + </p> + </div> + <!-- navigation --> + <div class="pad2"> + <a class="jump" href="#motifs_sec">Discovered Motifs</a> + | + <a class="jump" href="#sites_sec">Motif Locations</a> + | + <a class="jump" href="#inputs_sec">Inputs & Settings</a> + | + <a class="jump" href="#info_sec">Program information</a> + </div> + <!-- alert the user when their browser is not up to the task --> + <noscript><h1 style="color:red">Javascript is required to view these results!</h1></noscript> + <h1 id="html5_warning" style="color:red; display:none;">Your browser does not support canvas!</h1> + <script> + if (!window.HTMLCanvasElement) $("html5_warning").style.display = "block"; + </script> + <h2 class="mainh pad2" id="motifs_sec">Discovered Motifs</h2> + <div id="motifs" class="box"> + <p>Please wait... Loading...</p> + <p>If the page has fully loaded and this message does not disappear then an error may have occurred.</p> + </div> + <h2 class="mainh pad2" id="sites_sec">Motif Locations</h2> + <div id="blocks" class="box"> + <p>Please wait... Loading...</p> + <p>If the page has fully loaded and this message does not disappear then an error may have occurred.</p> + </div> + <h2 class="mainh pad2" id="inputs_sec">Inputs & Settings</h2> + <div class="box"> + <h4>Sequences</h4> + <table id="seq_info" class="inputs"> + <tr><th>Source <div class="help" data-topic="pop_seq_source"></div></th> + <th class="col_psp">PSP Source <div class="help" data-topic="pop_psp_source"></div></th> + <th>Alphabet <div class="help" data-topic="pop_seq_alph"></div></th> + <th>Sequence Count <div class="help" data-topic="pop_seq_count"></div></th> + </tr> + <tr> + <td id="ins_seq_source"></td> + <td id="ins_seq_psp" class="col_psp"></td> + <td id="ins_seq_alphabet"></td> + <td id="ins_seq_count"></td> + </tr> + </table> + <script> + { + var db = data.sequence_db; + $("ins_seq_source").innerHTML = db.source; + $("ins_seq_alphabet").innerHTML = meme_alphabet.get_alphabet_name(); + $("ins_seq_count").innerHTML = db.sequences.length; + if (db.psp) { + $("ins_seq_psp").innerHTML = db.psp; + } + toggle_class($("seq_info"), "hide_psp", !(db.psp)); + } + </script> + <h4>Background</h4> + <span id="alpha_bg"></span> + <script> + { + $("alpha_bg").appendChild(make_alpha_bg_table(meme_alphabet, data.sequence_db.freqs)); + } + </script> + <h4>Other Settings</h4> + <table id="tbl_settings" class="inputs hide_advanced"> + <tr> + <th>Motif Site Distribution</th> + <td id="opt_mod"> + <span class="mod_zoops">ZOOPS: Zero or one site per sequence</span> + <span class="mod_oops">OOPS: Exactly one site per sequence</span> + <span class="mod_anr">ANR: Any number of sites per sequence</span> + </td> + </tr> + <tr> + <th>Site Strand Handling</th> + <td id="opt_strand"> + <span class="strand_none">This alphabet only has one strand</span> + <span class="strand_given">Sites must be on the given strand</span> + <span class="strand_both">Sites may be on either strand</span> + </td> + </tr> + <tr> + <th>Maximum Number of Motifs</th> + <td id="opt_nmotifs"></td> + </tr> + <tr> + <th>Motif E-value Threshold</th> + <td id="opt_evt"></td> + </tr> + <tr> + <th>Minimum Motif Width</th> + <td id="opt_minw"></td> + </tr> + <tr> + <th>Maximum Motif Width</th> + <td id="opt_maxw"></td> + </tr> + <tr> + <th>Minimum Sites per Motif</th> + <td id="opt_minsites"></td> + </tr> + <tr> + <th>Maximum Sites per Motif</th> + <td id="opt_maxsites"></td> + </tr> + <tr class="advanced"> + <th>Bias on Number of Sites</th> + <td id="opt_wnsites"></td> + </tr> + <tr class="advanced"> + <th>Sequence Prior</th> + <td id="opt_prior"> + <span class="prior_dirichlet">Simple Dirichlet</span> + <span class="prior_dmix">Dirichlets Mix</span> + <span class="prior_mega">Mega-weight Dirichlets Mix</span> + <span class="prior_megap">Mega-weight Dirichlets Mix Plus</span> + <span class="prior_addone">Add One</span> + </td> + </tr> + <tr class="advanced"> + <th>Sequence Prior Strength</th> + <td id="opt_b"></td> + </tr> + <tr class="advanced"> + <th>EM Starting Point Source</th> + <td id="opt_substring"> + <span class="substring_on">From substrings in input sequences</span> + <span class="substring_off">From strings on command line (-cons)</span> + </td> + </tr> + <tr class="advanced"> + <th>EM Starting Point Map Type</th> + <td id="opt_spmap"> + <span class="spmap_uni">Uniform</span> + <span class="spmap_pam">Point Accepted Mutation</span> + </td> + </tr> + <tr class="advanced"> + <th>EM Starting Point Fuzz</th> + <td id="opt_spfuzz"></td> + </tr> + <tr class="advanced"> + <th>EM Maximum Iterations</th> + <td id="opt_maxiter"></td> + </tr> + <tr class="advanced"> + <th>EM Improvement Threshold</th> + <td id="opt_distance"></td> + </tr> + <tr class="advanced"> + <th>Trim Gap Open Cost</th> + <td id="opt_wg"></td> + </tr> + <tr class="advanced"> + <th>Trim Gap Extend Cost</th> + <td id="opt_ws"></td> + </tr> + <tr class="advanced"> + <th>End Gap Treatment</th> + <td id="opt_noendgaps"> + <span class="noendgaps_on">No cost</span> + <span class="noendgaps_off">Same cost as other gaps</span> + </td> + </tr> + <tr> + <td colspan="2" style="text-align: center"> + <a href="javascript:toggle_class(document.getElementById('tbl_settings'), 'hide_advanced')"> + <span class="show_more">Show Advanced Settings</span> + <span class="show_less">Hide Advanced Settings</span> + </a> + </td> + </tr> + </table> + <script> + { + $("opt_mod").className = data.options.mod; + $("opt_strand").className = (meme_alphabet.has_complement() ? (data.options.revcomp ? "both" : "given") : "none"); + $("opt_nmotifs").textContent = data.options.nmotifs; + $("opt_evt").textContent = (typeof data.options.evt === "number" ? data.options.evt : "no limit"); + $("opt_minw").textContent = data.options.minw; + $("opt_maxw").textContent = data.options.maxw; + $("opt_minsites").textContent = data.options.minsites; + $("opt_maxsites").textContent = data.options.maxsites; + $("opt_wnsites").textContent = data.options.wnsites; + $("opt_spmap").className = data.options.spmap; + $("opt_spfuzz").textContent = data.options.spfuzz; + $("opt_prior").className = data.options.prior; + $("opt_b").textContent = data.options.b; + $("opt_maxiter").textContent = data.options.maxiter; + $("opt_distance").textContent = data.options.distance; + $("opt_wg").textContent = data.options.wg; + $("opt_ws").textContent = data.options.ws; + $("opt_noendgaps").className = (data.options.noendgaps ? "on" : "off"); + $("opt_substring").className = (data.options.substring ? "on" : "off"); + } + </script> + </div> + <!-- list information on this program --> + <div id="info_sec" class="bar"> + <div class="subsection"> + <h5 id="version">MEME version</h5> + <span id="ins_version"></span> + (Release date: <span id="ins_release"></span>)<br> + </div> + <script> + $("ins_version").innerHTML = data["version"]; + $("ins_release").innerHTML = data["release"]; + </script> + <div class="subsection"> + <h5 id="reference">Reference</h5> + <span class="citation"> + Timothy L. Bailey and Charles Elkan, + "Fitting a mixture model by expectation maximization to discover motifs in biopolymers", + <em>Proceedings of the Second International Conference on Intelligent Systems + for Molecular Biology</em>, pp. 28-36, AAAI Press, Menlo Park, California, 1994. + </span> + </div> + <div class="subsection"> + <h5 id="command">Command line</h5> + <textarea id="cmd" rows="5" style="width:100%;" readonly="readonly"> + </textarea> + <script>$("cmd").value = data["cmd"].join(" ");</script> + </div> + </div> + + </body> +</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/meme_output_test2.txt Thu May 17 14:11:00 2018 -0400 @@ -0,0 +1,319 @@ +******************************************************************************** +MEME - Motif discovery tool +******************************************************************************** +MEME version 4.12.0 (Release date: Tue Jun 27 16:22:50 2017 -0700) + +For further information on how to interpret these results or to get +a copy of the MEME software please access http://meme-suite.org . + +This file may be used as input to the MAST algorithm for searching +sequence databases for matches to groups of motifs. MAST is available +for interactive use and downloading at http://meme-suite.org . +******************************************************************************** + + +******************************************************************************** +REFERENCE +******************************************************************************** +If you use this program in your research, please cite: + +Timothy L. Bailey and Charles Elkan, +"Fitting a mixture model by expectation maximization to discover +motifs in biopolymers", Proceedings of the Second International +Conference on Intelligent Systems for Molecular Biology, pp. 28-36, +AAAI Press, Menlo Park, California, 1994. +******************************************************************************** + + +******************************************************************************** +TRAINING SET +******************************************************************************** +DATAFILE= Galaxy_FASTA_Input +ALPHABET= ACGT +Sequence name Weight Length Sequence name Weight Length +------------- ------ ------ ------------- ------ ------ +chr21_19617074_19617124_ 1.0000 50 chr21_26934381_26934431_ 1.0000 50 +chr21_28217753_28217803_ 1.0000 50 chr21_31710037_31710087_ 1.0000 50 +chr21_31744582_31744632_ 1.0000 50 chr21_31768316_31768366_ 1.0000 50 +chr21_31914206_31914256_ 1.0000 50 chr21_31933633_31933683_ 1.0000 50 +chr21_31962741_31962791_ 1.0000 50 chr21_31964683_31964733_ 1.0000 50 +chr21_31973364_31973414_ 1.0000 50 chr21_31992870_31992920_ 1.0000 50 +chr21_32185595_32185645_ 1.0000 50 chr21_32202076_32202126_ 1.0000 50 +chr21_32253899_32253949_ 1.0000 50 chr21_32410820_32410870_ 1.0000 50 +chr21_36411748_36411798_ 1.0000 50 chr21_37838750_37838800_ 1.0000 50 +chr21_45705687_45705737_ 1.0000 50 chr21_45971413_45971463_ 1.0000 50 +chr21_45978668_45978718_ 1.0000 50 chr21_45993530_45993580_ 1.0000 50 +chr21_46020421_46020471_ 1.0000 50 chr21_46031920_46031970_ 1.0000 50 +chr21_46046964_46047014_ 1.0000 50 chr21_46057197_46057247_ 1.0000 50 +chr21_46086869_46086919_ 1.0000 50 chr21_46102103_46102153_ 1.0000 50 +chr21_47517957_47518007_ 1.0000 50 chr21_47575506_47575556_ 1.0000 50 +******************************************************************************** + +******************************************************************************** +COMMAND LINE SUMMARY +******************************************************************************** +This information can also be useful in the event you wish to report a +problem with the MEME software. + +command: meme meme_input_1.fasta -o meme_test2_out -nostatus -maxsize 1000000 -sf Galaxy_FASTA_Input -dna -mod zoops -nmotifs 1 -wnsites 0.8 -minw 8 -maxw 50 -wg 11 -ws 1 -maxiter 50 -distance 0.001 -prior dirichlet -b 0.01 -plib prior30.plib -spmap uni -spfuzz 0.5 + +model: mod= zoops nmotifs= 1 evt= inf +object function= E-value of product of p-values +width: minw= 8 maxw= 50 +width: wg= 11 ws= 1 endgaps= yes +nsites: minsites= 2 maxsites= 30 wnsites= 0.8 +theta: spmap= uni spfuzz= 0.5 +global: substring= yes branching= no wbranch= no +em: prior= dirichlet b= 0.01 maxiter= 50 + distance= 0.001 +data: n= 1500 N= 30 shuffle= -1 +strands: + +sample: seed= 0 ctfrac= -1 maxwords= -1 +Dirichlet mixture priors file: prior30.plib +Letter frequencies in dataset: +A 0.294 C 0.231 G 0.257 T 0.217 +Background letter frequencies (from dataset with add-one prior applied): +A 0.294 C 0.231 G 0.257 T 0.217 +******************************************************************************** + + +******************************************************************************** +MOTIF GGSRTATAAAA MEME-1 width = 11 sites = 30 llr = 254 E-value = 5.1e-040 +******************************************************************************** +-------------------------------------------------------------------------------- + Motif GGSRTATAAAA MEME-1 Description +-------------------------------------------------------------------------------- +Simplified A 3313:9:a798 +pos.-specific C 1:3::1:::1: +probability G 6756::::::2 +matrix T 1:11a1a:3:: + + bits 2.2 * + 2.0 * * + 1.8 * * + 1.5 * ** * +Relative 1.3 * ** * +Entropy 1.1 ****** +(12.2 bits) 0.9 * ******* + 0.7 * ******* + 0.4 ** ******** + 0.2 *********** + 0.0 ----------- + +Multilevel GGGGTATAAAA +consensus AACA T +sequence + +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- + Motif GGSRTATAAAA MEME-1 sites sorted by position p-value +-------------------------------------------------------------------------------- +Sequence name Start P-value Site +------------- ----- --------- ----------- +chr21_46046964_46047014_ 13 4.51e-07 AAGGCCAGGA GGGGTATAAAA GCCTGAGAGC +chr21_46031920_46031970_ 16 2.22e-06 ATACCCAGGG AGGGTATAAAA CCTCAGCAGC +chr21_32202076_32202126_ 14 2.74e-06 CCACCAGCTT GAGGTATAAAA AGCCCTGTAC +chr21_46057197_46057247_ 37 4.86e-06 ACAGGCCCTG GGCATATAAAA GCC +chr21_45993530_45993580_ 8 4.86e-06 CCAAGGA GGAGTATAAAA GCCCCACAAA +chr21_45971413_45971463_ 10 4.86e-06 CAGGCCCTG GGCATATAAAA GCCCCAGCAG +chr21_31964683_31964733_ 14 4.86e-06 GATTCACTGA GGCATATAAAA GGCCCTCTGC +chr21_47517957_47518007_ 33 6.48e-06 CCGGCGGGGC GGGGTATAAAG GGGGCGG +chr21_45978668_45978718_ 5 6.48e-06 CAGA GGGGTATAAAG GTTCCGACCA +chr21_32185595_32185645_ 19 6.48e-06 CACCAGAGCT GGGATATATAA AGAAGGTTCT +chr21_32410820_32410870_ 22 1.38e-05 AATCACTGAG GATGTATAAAA GTCCCAGGGA +chr21_31992870_31992920_ 17 1.38e-05 CACTATTGAA GATGTATAAAA TTTCATTTGC +chr21_19617074_19617124_ 40 1.41e-05 CCTCGGGACG TGGGTATATAA +chr21_31914206_31914256_ 16 1.61e-05 CCCACTACTT AGAGTATAAAA TCATTCTGAG +chr21_46020421_46020471_ 3 1.95e-05 GA GACATATAAAA GCCAACATCC +chr21_32253899_32253949_ 18 1.95e-05 CCCACCAGCA AGGATATATAA AAGCTCAGGA +chr21_45705687_45705737_ 38 2.16e-05 CGTGGTCGCG GGGGTATAACA GC +chr21_47575506_47575556_ 31 3.04e-05 GCTGCCGGTG AGCGTATAAAG GCCCTGGCG +chr21_31744582_31744632_ 13 3.04e-05 CAGGTCTAAG AGCATATATAA CTTGGAGTCC +chr21_31768316_31768366_ 1 3.67e-05 . AACGTATATAA ATGGTCCTGT +chr21_26934381_26934431_ 28 3.93e-05 AGTCACAAGT GAGTTATAAAA GGGTCGCACG +chr21_31933633_31933683_ 5 5.65e-05 TCAG AGTATATATAA ATGTTCCTGT +chr21_31710037_31710087_ 15 6.24e-05 CCCAGGTTTC TGAGTATATAA TCGCCGCACC +chr21_36411748_36411798_ 23 7.15e-05 AGTTTCAGTT GGCATCtaaaa attatataac +chr21_46102103_46102153_ 37 1.39e-04 TGCCTGGGTC CAGGTATAAAG GCT +chr21_46086869_46086919_ 38 1.39e-04 TGCCTGGGCC CAGGTATAAAG GC +chr21_37838750_37838800_ 3 4.81e-04 ga tggttttataa ggggcctcac +chr21_31962741_31962791_ 14 8.57e-04 TATAACTCAG GTTGGATAAAA TAATTTGTAC +chr21_31973364_31973414_ 8 1.47e-03 aaactta aaactctataa acttaaaact +chr21_28217753_28217803_ 27 2.64e-03 GGTGGGGGTG GGGGTTTCACT GGTCCACTAT +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- + Motif GGSRTATAAAA MEME-1 block diagrams +-------------------------------------------------------------------------------- +SEQUENCE NAME POSITION P-VALUE MOTIF DIAGRAM +------------- ---------------- ------------- +chr21_46046964_46047014_ 4.5e-07 12_[+1]_27 +chr21_46031920_46031970_ 2.2e-06 15_[+1]_24 +chr21_32202076_32202126_ 2.7e-06 13_[+1]_26 +chr21_46057197_46057247_ 4.9e-06 36_[+1]_3 +chr21_45993530_45993580_ 4.9e-06 7_[+1]_32 +chr21_45971413_45971463_ 4.9e-06 9_[+1]_30 +chr21_31964683_31964733_ 4.9e-06 13_[+1]_26 +chr21_47517957_47518007_ 6.5e-06 32_[+1]_7 +chr21_45978668_45978718_ 6.5e-06 4_[+1]_35 +chr21_32185595_32185645_ 6.5e-06 18_[+1]_21 +chr21_32410820_32410870_ 1.4e-05 21_[+1]_18 +chr21_31992870_31992920_ 1.4e-05 16_[+1]_23 +chr21_19617074_19617124_ 1.4e-05 39_[+1] +chr21_31914206_31914256_ 1.6e-05 15_[+1]_24 +chr21_46020421_46020471_ 1.9e-05 2_[+1]_37 +chr21_32253899_32253949_ 1.9e-05 17_[+1]_22 +chr21_45705687_45705737_ 2.2e-05 37_[+1]_2 +chr21_47575506_47575556_ 3e-05 30_[+1]_9 +chr21_31744582_31744632_ 3e-05 12_[+1]_27 +chr21_31768316_31768366_ 3.7e-05 [+1]_39 +chr21_26934381_26934431_ 3.9e-05 27_[+1]_12 +chr21_31933633_31933683_ 5.6e-05 4_[+1]_35 +chr21_31710037_31710087_ 6.2e-05 14_[+1]_25 +chr21_36411748_36411798_ 7.1e-05 22_[+1]_17 +chr21_46102103_46102153_ 0.00014 36_[+1]_3 +chr21_46086869_46086919_ 0.00014 37_[+1]_2 +chr21_37838750_37838800_ 0.00048 2_[+1]_37 +chr21_31962741_31962791_ 0.00086 13_[+1]_26 +chr21_31973364_31973414_ 0.0015 7_[+1]_32 +chr21_28217753_28217803_ 0.0026 26_[+1]_13 +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- + Motif GGSRTATAAAA MEME-1 in BLOCKS format +-------------------------------------------------------------------------------- +BL MOTIF GGSRTATAAAA width=11 seqs=30 +chr21_46046964_46047014_ ( 13) GGGGTATAAAA 1 +chr21_46031920_46031970_ ( 16) AGGGTATAAAA 1 +chr21_32202076_32202126_ ( 14) GAGGTATAAAA 1 +chr21_46057197_46057247_ ( 37) GGCATATAAAA 1 +chr21_45993530_45993580_ ( 8) GGAGTATAAAA 1 +chr21_45971413_45971463_ ( 10) GGCATATAAAA 1 +chr21_31964683_31964733_ ( 14) GGCATATAAAA 1 +chr21_47517957_47518007_ ( 33) GGGGTATAAAG 1 +chr21_45978668_45978718_ ( 5) GGGGTATAAAG 1 +chr21_32185595_32185645_ ( 19) GGGATATATAA 1 +chr21_32410820_32410870_ ( 22) GATGTATAAAA 1 +chr21_31992870_31992920_ ( 17) GATGTATAAAA 1 +chr21_19617074_19617124_ ( 40) TGGGTATATAA 1 +chr21_31914206_31914256_ ( 16) AGAGTATAAAA 1 +chr21_46020421_46020471_ ( 3) GACATATAAAA 1 +chr21_32253899_32253949_ ( 18) AGGATATATAA 1 +chr21_45705687_45705737_ ( 38) GGGGTATAACA 1 +chr21_47575506_47575556_ ( 31) AGCGTATAAAG 1 +chr21_31744582_31744632_ ( 13) AGCATATATAA 1 +chr21_31768316_31768366_ ( 1) AACGTATATAA 1 +chr21_26934381_26934431_ ( 28) GAGTTATAAAA 1 +chr21_31933633_31933683_ ( 5) AGTATATATAA 1 +chr21_31710037_31710087_ ( 15) TGAGTATATAA 1 +chr21_36411748_36411798_ ( 23) GGCATCTAAAA 1 +chr21_46102103_46102153_ ( 37) CAGGTATAAAG 1 +chr21_46086869_46086919_ ( 38) CAGGTATAAAG 1 +chr21_37838750_37838800_ ( 3) TGGTTTTATAA 1 +chr21_31962741_31962791_ ( 14) GTTGGATAAAA 1 +chr21_31973364_31973414_ ( 8) AAACTCTATAA 1 +chr21_28217753_28217803_ ( 27) GGGGTTTCACT 1 +// + +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- + Motif GGSRTATAAAA MEME-1 position-specific scoring matrix +-------------------------------------------------------------------------------- +log-odds matrix: alength= 4 w= 11 n= 1200 bayes= 5.2854 E= 5.1e-040 + -14 -179 114 -112 + 3 -1155 137 -270 + -114 20 86 -71 + 3 -279 122 -170 + -1155 -1155 -295 215 + 156 -179 -1155 -170 + -1155 -1155 -1155 220 + 172 -279 -1155 -1155 + 125 -1155 -1155 46 + 167 -179 -1155 -1155 + 144 -1155 -63 -270 +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- + Motif GGSRTATAAAA MEME-1 position-specific probability matrix +-------------------------------------------------------------------------------- +letter-probability matrix: alength= 4 w= 11 nsites= 30 E= 5.1e-040 + 0.266667 0.066667 0.566667 0.100000 + 0.300000 0.000000 0.666667 0.033333 + 0.133333 0.266667 0.466667 0.133333 + 0.300000 0.033333 0.600000 0.066667 + 0.000000 0.000000 0.033333 0.966667 + 0.866667 0.066667 0.000000 0.066667 + 0.000000 0.000000 0.000000 1.000000 + 0.966667 0.033333 0.000000 0.000000 + 0.700000 0.000000 0.000000 0.300000 + 0.933333 0.066667 0.000000 0.000000 + 0.800000 0.000000 0.166667 0.033333 +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- + Motif GGSRTATAAAA MEME-1 regular expression +-------------------------------------------------------------------------------- +[GA][GA][GC][GA]TATA[AT]AA +-------------------------------------------------------------------------------- + + + + +Time 0.38 secs. + +******************************************************************************** + + +******************************************************************************** +SUMMARY OF MOTIFS +******************************************************************************** + +-------------------------------------------------------------------------------- + Combined block diagrams: non-overlapping sites with p-value < 0.0001 +-------------------------------------------------------------------------------- +SEQUENCE NAME COMBINED P-VALUE MOTIF DIAGRAM +------------- ---------------- ------------- +chr21_19617074_19617124_ 5.63e-04 39_[+1(1.41e-05)] +chr21_26934381_26934431_ 1.57e-03 27_[+1(3.93e-05)]_12 +chr21_28217753_28217803_ 1.00e-01 50 +chr21_31710037_31710087_ 2.49e-03 14_[+1(6.24e-05)]_25 +chr21_31744582_31744632_ 1.22e-03 12_[+1(3.04e-05)]_27 +chr21_31768316_31768366_ 1.47e-03 [+1(3.67e-05)]_39 +chr21_31914206_31914256_ 6.45e-04 15_[+1(1.61e-05)]_24 +chr21_31933633_31933683_ 2.26e-03 4_[+1(5.65e-05)]_35 +chr21_31962741_31962791_ 3.37e-02 50 +chr21_31964683_31964733_ 1.95e-04 13_[+1(4.86e-06)]_26 +chr21_31973364_31973414_ 5.73e-02 50 +chr21_31992870_31992920_ 5.52e-04 16_[+1(1.38e-05)]_23 +chr21_32185595_32185645_ 2.59e-04 18_[+1(6.48e-06)]_21 +chr21_32202076_32202126_ 1.10e-04 13_[+1(2.74e-06)]_26 +chr21_32253899_32253949_ 7.78e-04 17_[+1(1.95e-05)]_22 +chr21_32410820_32410870_ 5.52e-04 21_[+1(1.38e-05)]_18 +chr21_36411748_36411798_ 2.85e-03 22_[+1(7.15e-05)]_17 +chr21_37838750_37838800_ 1.90e-02 50 +chr21_45705687_45705737_ 8.63e-04 37_[+1(2.16e-05)]_2 +chr21_45971413_45971463_ 1.95e-04 9_[+1(4.86e-06)]_30 +chr21_45978668_45978718_ 2.59e-04 4_[+1(6.48e-06)]_35 +chr21_45993530_45993580_ 1.95e-04 7_[+1(4.86e-06)]_32 +chr21_46020421_46020471_ 7.78e-04 2_[+1(1.95e-05)]_37 +chr21_46031920_46031970_ 8.89e-05 15_[+1(2.22e-06)]_24 +chr21_46046964_46047014_ 1.80e-05 12_[+1(4.51e-07)]_27 +chr21_46057197_46057247_ 1.95e-04 36_[+1(4.86e-06)]_3 +chr21_46086869_46086919_ 5.54e-03 50 +chr21_46102103_46102153_ 5.54e-03 50 +chr21_47517957_47518007_ 2.59e-04 32_[+1(6.48e-06)]_7 +chr21_47575506_47575556_ 1.22e-03 30_[+1(3.04e-05)]_9 +-------------------------------------------------------------------------------- + +******************************************************************************** + + +******************************************************************************** +Stopped because requested number of motifs (1) found. +******************************************************************************** + +CPU: ThinkPad-T450s + +********************************************************************************
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/meme_output_test2.xml Thu May 17 14:11:00 2018 -0400 @@ -0,0 +1,984 @@ +<?xml version='1.0' encoding='UTF-8' standalone='yes'?> +<!-- Document definition --> +<!DOCTYPE MEME[ +<!ELEMENT MEME ( + training_set, + model, + motifs, + scanned_sites_summary? +)> +<!ATTLIST MEME + version CDATA #REQUIRED + release CDATA #REQUIRED +> +<!-- Training-set elements --> +<!ELEMENT training_set (alphabet, ambigs, sequence*, letter_frequencies)> +<!ATTLIST training_set datafile CDATA #REQUIRED length CDATA #REQUIRED> +<!ELEMENT alphabet (letter*)> +<!ATTLIST alphabet name CDATA #REQUIRED> +<!ELEMENT ambigs (letter*)> +<!ELEMENT letter EMPTY> +<!ATTLIST letter id ID #REQUIRED> +<!ATTLIST letter symbol CDATA #REQUIRED> +<!ATTLIST letter equals CDATA #IMPLIED> +<!ATTLIST letter aliases CDATA #IMPLIED> +<!ATTLIST letter complement CDATA #IMPLIED> +<!ATTLIST letter name CDATA #IMPLIED> +<!ATTLIST letter colour CDATA #IMPLIED> +<!ELEMENT sequence EMPTY> +<!ATTLIST sequence id ID #REQUIRED + name CDATA #REQUIRED + length CDATA #REQUIRED + weight CDATA #REQUIRED +> +<!ELEMENT letter_frequencies (alphabet_array)> + +<!-- Model elements --> +<!ELEMENT model ( + command_line, + host, + type, + nmotifs, + evalue_threshold, + object_function, + spfun, + min_width, + max_width, + wg, + ws, + endgaps, + minsites, + maxsites, + wnsites, + spmap, + spfuzz, + prior, + beta, + maxiter, + distance, + num_sequences, + num_positions, + seed, + hsfrac, + maxwords, + maxsize, + csites, + strands, + priors_file, + reason_for_stopping, + back_order, + background_frequencies +)> +<!ELEMENT command_line (#PCDATA)*> +<!ELEMENT host (#PCDATA)*> +<!ELEMENT type (#PCDATA)*> +<!ELEMENT nmotifs (#PCDATA)*> +<!ELEMENT evalue_threshold (#PCDATA)*> +<!ELEMENT object_function (#PCDATA)*> +<!ELEMENT spfun (#PCDATA)*> +<!ELEMENT min_width (#PCDATA)*> +<!ELEMENT max_width (#PCDATA)*> +<!ELEMENT wg (#PCDATA)*> +<!ELEMENT ws (#PCDATA)*> +<!ELEMENT endgaps (#PCDATA)*> +<!ELEMENT minsites (#PCDATA)*> +<!ELEMENT maxsites (#PCDATA)*> +<!ELEMENT wnsites (#PCDATA)*> +<!ELEMENT spmap (#PCDATA)*> +<!ELEMENT spfuzz (#PCDATA)*> +<!ELEMENT prior (#PCDATA)*> +<!ELEMENT beta (#PCDATA)*> +<!ELEMENT maxiter (#PCDATA)*> +<!ELEMENT distance (#PCDATA)*> +<!ELEMENT num_sequences (#PCDATA)*> +<!ELEMENT num_positions (#PCDATA)*> +<!ELEMENT seed (#PCDATA)*> +<!ELEMENT hsfrac (#PCDATA)*> +<!ELEMENT maxwords (#PCDATA)*> +<!ELEMENT maxsites (#PCDATA)*> +<!ELEMENT csites (#PCDATA)*> +<!ELEMENT strands (#PCDATA)*> +<!ELEMENT priors_file (#PCDATA)*> +<!ELEMENT reason_for_stopping (#PCDATA)*> +<!ELEMENT back_order (#PCDATA)*> +<!ELEMENT background_frequencies (alphabet_array)> +<!ATTLIST background_frequencies source CDATA #REQUIRED> + +<!-- Motif elements --> +<!ELEMENT motifs (motif*)> +<!ELEMENT motif (scores, probabilities, regular_expression?, contributing_sites)> +<!ATTLIST motif id ID #REQUIRED + name CDATA #REQUIRED + alt CDATA "" + width CDATA #REQUIRED + sites CDATA #REQUIRED + llr CDATA #REQUIRED + ic CDATA #REQUIRED + re CDATA #REQUIRED + bayes_threshold CDATA #REQUIRED + e_value CDATA #REQUIRED + elapsed_time CDATA #REQUIRED + url CDATA "" +> +<!ELEMENT scores (alphabet_matrix)> +<!ELEMENT probabilities (alphabet_matrix)> +<!ELEMENT regular_expression (#PCDATA)*> + +<!-- Contributing site elements --> +<!-- Contributing sites are motif occurences found during the motif discovery phase --> +<!ELEMENT contributing_sites (contributing_site*)> +<!ELEMENT contributing_site (left_flank, site, right_flank)> +<!ATTLIST contributing_site sequence_id IDREF #REQUIRED + position CDATA #REQUIRED + strand (plus|minus|none) 'none' + pvalue CDATA #REQUIRED +> +<!-- The left_flank contains the sequence for 10 bases to the left of the motif start --> +<!ELEMENT left_flank (#PCDATA)> +<!-- The site contains the sequence for the motif instance --> +<!ELEMENT site (letter_ref*)> +<!-- The right_flank contains the sequence for 10 bases to the right of the motif end --> +<!ELEMENT right_flank (#PCDATA)> + +<!-- Scanned site elements --> +<!-- Scanned sites are motif occurences found during the sequence scan phase --> +<!ELEMENT scanned_sites_summary (scanned_sites*)> +<!ATTLIST scanned_sites_summary p_thresh CDATA #REQUIRED> +<!ELEMENT scanned_sites (scanned_site*)> +<!ATTLIST scanned_sites sequence_id IDREF #REQUIRED + pvalue CDATA #REQUIRED + num_sites CDATA #REQUIRED> +<!ELEMENT scanned_site EMPTY> +<!ATTLIST scanned_site motif_id IDREF #REQUIRED + strand (plus|minus|none) 'none' + position CDATA #REQUIRED + pvalue CDATA #REQUIRED> + +<!-- Utility elements --> +<!-- A reference to a letter in the alphabet --> +<!ELEMENT letter_ref EMPTY> +<!ATTLIST letter_ref letter_id IDREF #REQUIRED> +<!-- A alphabet-array contains one floating point value for each letter in an alphabet --> +<!ELEMENT alphabet_array (value*)> +<!ELEMENT value (#PCDATA)> +<!ATTLIST value letter_id IDREF #REQUIRED> + +<!-- A alphabet_matrix contains one alphabet_array for each position in a motif --> +<!ELEMENT alphabet_matrix (alphabet_array*)> + +]> +<!-- Begin document body --> +<MEME version="4.12.0" release="Tue Jun 27 16:22:50 2017 -0700"> +<training_set datafile="Galaxy_FASTA_Input" length="30"> +<alphabet name="DNA" like="dna"> +<letter id="A" symbol="A" complement="T" name="Adenine" colour="CC0000"/> +<letter id="C" symbol="C" complement="G" name="Cytosine" colour="0000CC"/> +<letter id="G" symbol="G" complement="C" name="Guanine" colour="FFB300"/> +<letter id="T" symbol="T" aliases="U" complement="A" name="Thymine" colour="008000"/> +<letter id="N" symbol="N" aliases="X." equals="ACGT" name="Any base"/> +<letter id="V" symbol="V" equals="ACG" name="Not T"/> +<letter id="H" symbol="H" equals="ACT" name="Not G"/> +<letter id="D" symbol="D" equals="AGT" name="Not C"/> +<letter id="B" symbol="B" equals="CGT" name="Not A"/> +<letter id="M" symbol="M" equals="AC" name="Amino"/> +<letter id="R" symbol="R" equals="AG" name="Purine"/> +<letter id="W" symbol="W" equals="AT" name="Weak"/> +<letter id="S" symbol="S" equals="CG" name="Strong"/> +<letter id="Y" symbol="Y" equals="CT" name="Pyrimidine"/> +<letter id="K" symbol="K" equals="GT" name="Keto"/> +</alphabet> +<sequence id="sequence_0" name="chr21_19617074_19617124_+" length="50" weight="1.000000" /> +<sequence id="sequence_1" name="chr21_26934381_26934431_+" length="50" weight="1.000000" /> +<sequence id="sequence_2" name="chr21_28217753_28217803_-" length="50" weight="1.000000" /> +<sequence id="sequence_3" name="chr21_31710037_31710087_-" length="50" weight="1.000000" /> +<sequence id="sequence_4" name="chr21_31744582_31744632_-" length="50" weight="1.000000" /> +<sequence id="sequence_5" name="chr21_31768316_31768366_+" length="50" weight="1.000000" /> +<sequence id="sequence_6" name="chr21_31914206_31914256_-" length="50" weight="1.000000" /> +<sequence id="sequence_7" name="chr21_31933633_31933683_-" length="50" weight="1.000000" /> +<sequence id="sequence_8" name="chr21_31962741_31962791_-" length="50" weight="1.000000" /> +<sequence id="sequence_9" name="chr21_31964683_31964733_+" length="50" weight="1.000000" /> +<sequence id="sequence_10" name="chr21_31973364_31973414_+" length="50" weight="1.000000" /> +<sequence id="sequence_11" name="chr21_31992870_31992920_+" length="50" weight="1.000000" /> +<sequence id="sequence_12" name="chr21_32185595_32185645_-" length="50" weight="1.000000" /> +<sequence id="sequence_13" name="chr21_32202076_32202126_-" length="50" weight="1.000000" /> +<sequence id="sequence_14" name="chr21_32253899_32253949_-" length="50" weight="1.000000" /> +<sequence id="sequence_15" name="chr21_32410820_32410870_-" length="50" weight="1.000000" /> +<sequence id="sequence_16" name="chr21_36411748_36411798_-" length="50" weight="1.000000" /> +<sequence id="sequence_17" name="chr21_37838750_37838800_-" length="50" weight="1.000000" /> +<sequence id="sequence_18" name="chr21_45705687_45705737_+" length="50" weight="1.000000" /> +<sequence id="sequence_19" name="chr21_45971413_45971463_-" length="50" weight="1.000000" /> +<sequence id="sequence_20" name="chr21_45978668_45978718_-" length="50" weight="1.000000" /> +<sequence id="sequence_21" name="chr21_45993530_45993580_+" length="50" weight="1.000000" /> +<sequence id="sequence_22" name="chr21_46020421_46020471_+" length="50" weight="1.000000" /> +<sequence id="sequence_23" name="chr21_46031920_46031970_+" length="50" weight="1.000000" /> +<sequence id="sequence_24" name="chr21_46046964_46047014_+" length="50" weight="1.000000" /> +<sequence id="sequence_25" name="chr21_46057197_46057247_+" length="50" weight="1.000000" /> +<sequence id="sequence_26" name="chr21_46086869_46086919_-" length="50" weight="1.000000" /> +<sequence id="sequence_27" name="chr21_46102103_46102153_-" length="50" weight="1.000000" /> +<sequence id="sequence_28" name="chr21_47517957_47518007_+" length="50" weight="1.000000" /> +<sequence id="sequence_29" name="chr21_47575506_47575556_-" length="50" weight="1.000000" /> +<letter_frequencies> +<alphabet_array> +<value letter_id="A">0.294</value> +<value letter_id="C">0.231</value> +<value letter_id="G">0.257</value> +<value letter_id="T">0.217</value> +</alphabet_array> +</letter_frequencies> +</training_set> +<model> +<command_line>meme meme_input_1.fasta -o meme_test2_out -nostatus -maxsize 1000000 -sf Galaxy_FASTA_Input -dna -mod zoops -nmotifs 1 -wnsites 0.8 -minw 8 -maxw 50 -wg 11 -ws 1 -maxiter 50 -distance 0.001 -prior dirichlet -b 0.01 -plib prior30.plib -spmap uni -spfuzz 0.5 </command_line> +<host>ThinkPad-T450s</host> +<type>zoops</type> +<nmotifs>1</nmotifs> +<evalue_threshold>inf</evalue_threshold> +<object_function>E-value of product of p-values</object_function> +<use_llr>0</use_llr> +<min_width>8</min_width> +<max_width>50</max_width> +<wg>11</wg> +<ws>1</ws> +<endgaps>yes</endgaps> +<substring>yes</substring> +<minsites>2</minsites> +<maxsites>30</maxsites> +<wnsites>0.8</wnsites> +<spmap>uni</spmap> +<spfuzz>0.5</spfuzz> +<prior>dirichlet</prior> +<beta>0.01</beta> +<maxiter>50</maxiter> +<distance>0.001</distance> +<num_sequences>30</num_sequences> +<num_positions>1500</num_positions> +<seed>0</seed> +<ctfrac>-1</ctfrac> +<maxwords>-1</maxwords> +<strands>forward</strands> +<priors_file>prior30.plib</priors_file> +<reason_for_stopping>Stopped because requested number of motifs (1) found.</reason_for_stopping> +<background_frequencies source="dataset with add-one prior applied"> +<alphabet_array> +<value letter_id="A">0.294</value> +<value letter_id="C">0.231</value> +<value letter_id="G">0.257</value> +<value letter_id="T">0.217</value> +</alphabet_array> +</background_frequencies> +</model> +<motifs> +<motif id="motif_1" name="GGSRTATAAAA" alt="MEME-1" width="11" sites="30" ic="13.0" re="12.2" llr="254" e_value="5.1e-040" bayes_threshold="5.2854" elapsed_time="0.376000"> +<scores> +<alphabet_matrix> +<alphabet_array> +<value letter_id="A">-14</value> +<value letter_id="C">-179</value> +<value letter_id="G">114</value> +<value letter_id="T">-112</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">3</value> +<value letter_id="C">-1155</value> +<value letter_id="G">137</value> +<value letter_id="T">-270</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">-114</value> +<value letter_id="C">20</value> +<value letter_id="G">86</value> +<value letter_id="T">-71</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">3</value> +<value letter_id="C">-279</value> +<value letter_id="G">122</value> +<value letter_id="T">-170</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">-1155</value> +<value letter_id="C">-1155</value> +<value letter_id="G">-295</value> +<value letter_id="T">215</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">156</value> +<value letter_id="C">-179</value> +<value letter_id="G">-1155</value> +<value letter_id="T">-170</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">-1155</value> +<value letter_id="C">-1155</value> +<value letter_id="G">-1155</value> +<value letter_id="T">220</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">172</value> +<value letter_id="C">-279</value> +<value letter_id="G">-1155</value> +<value letter_id="T">-1155</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">125</value> +<value letter_id="C">-1155</value> +<value letter_id="G">-1155</value> +<value letter_id="T">46</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">167</value> +<value letter_id="C">-179</value> +<value letter_id="G">-1155</value> +<value letter_id="T">-1155</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">144</value> +<value letter_id="C">-1155</value> +<value letter_id="G">-63</value> +<value letter_id="T">-270</value> +</alphabet_array> +</alphabet_matrix> +</scores> +<probabilities> +<alphabet_matrix> +<alphabet_array> +<value letter_id="A">0.266667</value> +<value letter_id="C">0.066667</value> +<value letter_id="G">0.566667</value> +<value letter_id="T">0.100000</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">0.300000</value> +<value letter_id="C">0.000000</value> +<value letter_id="G">0.666667</value> +<value letter_id="T">0.033333</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">0.133333</value> +<value letter_id="C">0.266667</value> +<value letter_id="G">0.466667</value> +<value letter_id="T">0.133333</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">0.300000</value> +<value letter_id="C">0.033333</value> +<value letter_id="G">0.600000</value> +<value letter_id="T">0.066667</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">0.000000</value> +<value letter_id="C">0.000000</value> +<value letter_id="G">0.033333</value> +<value letter_id="T">0.966667</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">0.866667</value> +<value letter_id="C">0.066667</value> +<value letter_id="G">0.000000</value> +<value letter_id="T">0.066667</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">0.000000</value> +<value letter_id="C">0.000000</value> +<value letter_id="G">0.000000</value> +<value letter_id="T">1.000000</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">0.966667</value> +<value letter_id="C">0.033333</value> +<value letter_id="G">0.000000</value> +<value letter_id="T">0.000000</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">0.700000</value> +<value letter_id="C">0.000000</value> +<value letter_id="G">0.000000</value> +<value letter_id="T">0.300000</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">0.933333</value> +<value letter_id="C">0.066667</value> +<value letter_id="G">0.000000</value> +<value letter_id="T">0.000000</value> +</alphabet_array> +<alphabet_array> +<value letter_id="A">0.800000</value> +<value letter_id="C">0.000000</value> +<value letter_id="G">0.166667</value> +<value letter_id="T">0.033333</value> +</alphabet_array> +</alphabet_matrix> +</probabilities> +<regular_expression> +[GA][GA][GC][GA]TATA[AT]AA +</regular_expression> +<contributing_sites> +<contributing_site sequence_id="sequence_24" position="12" strand="plus" pvalue="4.51e-07" > +<left_flank>AAGGCCAGGA</left_flank> +<site> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GCCTGAGAGC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_23" position="15" strand="plus" pvalue="2.22e-06" > +<left_flank>ATACCCAGGG</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CCTCAGCAGC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_13" position="13" strand="plus" pvalue="2.74e-06" > +<left_flank>CCACCAGCTT</left_flank> +<site> +<letter_ref letter_id="G"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>AGCCCTGTAC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_25" position="36" strand="plus" pvalue="4.86e-06" > +<left_flank>ACAGGCCCTG</left_flank> +<site> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GCC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_21" position="7" strand="plus" pvalue="4.86e-06" > +<left_flank>CCAAGGA</left_flank> +<site> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GCCCCACAAA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_19" position="9" strand="plus" pvalue="4.86e-06" > +<left_flank>CAGGCCCTG</left_flank> +<site> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GCCCCAGCAG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_9" position="13" strand="plus" pvalue="4.86e-06" > +<left_flank>GATTCACTGA</left_flank> +<site> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GGCCCTCTGC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_28" position="32" strand="plus" pvalue="6.48e-06" > +<left_flank>CCGGCGGGGC</left_flank> +<site> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="G"/> +</site> +<right_flank>GGGGCGG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_20" position="4" strand="plus" pvalue="6.48e-06" > +<left_flank>CAGA</left_flank> +<site> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="G"/> +</site> +<right_flank>GTTCCGACCA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_12" position="18" strand="plus" pvalue="6.48e-06" > +<left_flank>CACCAGAGCT</left_flank> +<site> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>AGAAGGTTCT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_15" position="21" strand="plus" pvalue="1.38e-05" > +<left_flank>AATCACTGAG</left_flank> +<site> +<letter_ref letter_id="G"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GTCCCAGGGA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_11" position="16" strand="plus" pvalue="1.38e-05" > +<left_flank>CACTATTGAA</left_flank> +<site> +<letter_ref letter_id="G"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TTTCATTTGC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_0" position="39" strand="plus" pvalue="1.41e-05" > +<left_flank>CCTCGGGACG</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank></right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_6" position="15" strand="plus" pvalue="1.61e-05" > +<left_flank>CCCACTACTT</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TCATTCTGAG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_22" position="2" strand="plus" pvalue="1.95e-05" > +<left_flank>GA</left_flank> +<site> +<letter_ref letter_id="G"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GCCAACATCC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_14" position="17" strand="plus" pvalue="1.95e-05" > +<left_flank>CCCACCAGCA</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>AAGCTCAGGA</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_18" position="37" strand="plus" pvalue="2.16e-05" > +<left_flank>CGTGGTCGCG</left_flank> +<site> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_29" position="30" strand="plus" pvalue="3.04e-05" > +<left_flank>GCTGCCGGTG</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="G"/> +</site> +<right_flank>GCCCTGGCG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_4" position="12" strand="plus" pvalue="3.04e-05" > +<left_flank>CAGGTCTAAG</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>CTTGGAGTCC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_5" position="0" strand="plus" pvalue="3.67e-05" > +<left_flank></left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ATGGTCCTGT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_1" position="27" strand="plus" pvalue="3.93e-05" > +<left_flank>AGTCACAAGT</left_flank> +<site> +<letter_ref letter_id="G"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>GGGTCGCACG</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_7" position="4" strand="plus" pvalue="5.65e-05" > +<left_flank>TCAG</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ATGTTCCTGT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_3" position="14" strand="plus" pvalue="6.24e-05" > +<left_flank>CCCAGGTTTC</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TCGCCGCACC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_16" position="22" strand="plus" pvalue="7.15e-05" > +<left_flank>AGTTTCAGTT</left_flank> +<site> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>attatataac</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_27" position="36" strand="plus" pvalue="1.39e-04" > +<left_flank>TGCCTGGGTC</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="G"/> +</site> +<right_flank>GCT</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_26" position="37" strand="plus" pvalue="1.39e-04" > +<left_flank>TGCCTGGGCC</left_flank> +<site> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="G"/> +</site> +<right_flank>GC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_17" position="2" strand="plus" pvalue="4.81e-04" > +<left_flank>ga</left_flank> +<site> +<letter_ref letter_id="T"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>ggggcctcac</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_8" position="13" strand="plus" pvalue="8.57e-04" > +<left_flank>TATAACTCAG</left_flank> +<site> +<letter_ref letter_id="G"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>TAATTTGTAC</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_10" position="7" strand="plus" pvalue="1.47e-03" > +<left_flank>aaactta</left_flank> +<site> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="A"/> +</site> +<right_flank>acttaaaact</right_flank> +</contributing_site> +<contributing_site sequence_id="sequence_2" position="26" strand="plus" pvalue="2.64e-03" > +<left_flank>GGTGGGGGTG</left_flank> +<site> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="G"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="T"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="A"/> +<letter_ref letter_id="C"/> +<letter_ref letter_id="T"/> +</site> +<right_flank>GGTCCACTAT</right_flank> +</contributing_site> +</contributing_sites> +</motif> +</motifs> +<scanned_sites_summary p_thresh="0.0001"> +<scanned_sites sequence_id="sequence_0" pvalue="5.63e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="39" pvalue="1.41e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_1" pvalue="1.57e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="27" pvalue="3.93e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_2" pvalue="1.00e-01" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_3" pvalue="2.49e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="14" pvalue="6.24e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_4" pvalue="1.22e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="12" pvalue="3.04e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_5" pvalue="1.47e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="0" pvalue="3.67e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_6" pvalue="6.45e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="15" pvalue="1.61e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_7" pvalue="2.26e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="4" pvalue="5.65e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_8" pvalue="3.37e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_9" pvalue="1.95e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="13" pvalue="4.86e-06"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_10" pvalue="5.73e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_11" pvalue="5.52e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="16" pvalue="1.38e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_12" pvalue="2.59e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="18" pvalue="6.48e-06"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_13" pvalue="1.10e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="13" pvalue="2.74e-06"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_14" pvalue="7.78e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="17" pvalue="1.95e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_15" pvalue="5.52e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="21" pvalue="1.38e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_16" pvalue="2.85e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="22" pvalue="7.15e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_17" pvalue="1.90e-02" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_18" pvalue="8.63e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="37" pvalue="2.16e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_19" pvalue="1.95e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="9" pvalue="4.86e-06"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_20" pvalue="2.59e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="4" pvalue="6.48e-06"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_21" pvalue="1.95e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="7" pvalue="4.86e-06"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_22" pvalue="7.78e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="2" pvalue="1.95e-05"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_23" pvalue="8.89e-05" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="15" pvalue="2.22e-06"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_24" pvalue="1.80e-05" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="12" pvalue="4.51e-07"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_25" pvalue="1.95e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="36" pvalue="4.86e-06"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_26" pvalue="5.54e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_27" pvalue="5.54e-03" num_sites="0"></scanned_sites> +<scanned_sites sequence_id="sequence_28" pvalue="2.59e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="32" pvalue="6.48e-06"/> +</scanned_sites> +<scanned_sites sequence_id="sequence_29" pvalue="1.22e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="30" pvalue="3.04e-05"/> +</scanned_sites> +</scanned_sites_summary> +</MEME>
--- a/test-data/meme_output_txt_1.txt Wed Apr 25 12:12:47 2018 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,325 +0,0 @@ -******************************************************************************** -MEME - Motif discovery tool -******************************************************************************** -MEME version 4.11.2 (Release date: Thu May 05 14:58:55 2016 -0700) - -For further information on how to interpret these results or to get -a copy of the MEME software please access http://meme-suite.org . - -This file may be used as input to the MAST algorithm for searching -sequence databases for matches to groups of motifs. MAST is available -for interactive use and downloading at http://meme-suite.org . -******************************************************************************** - - -******************************************************************************** -REFERENCE -******************************************************************************** -If you use this program in your research, please cite: - -Timothy L. Bailey and Charles Elkan, -"Fitting a mixture model by expectation maximization to discover -motifs in biopolymers", Proceedings of the Second International -Conference on Intelligent Systems for Molecular Biology, pp. 28-36, -AAAI Press, Menlo Park, California, 1994. -******************************************************************************** - - -******************************************************************************** -TRAINING SET -******************************************************************************** -DATAFILE= /tmp/tmpCNK6l0/files/000/dataset_22.dat -ALPHABET= ACDEFGHIKLMNPQRSTVWY -Sequence name Weight Length Sequence name Weight Length -------------- ------ ------ ------------- ------ ------ -chr21_19617074_19617124_ 1.0000 50 chr21_26934381_26934431_ 1.0000 50 -chr21_28217753_28217803_ 1.0000 50 chr21_31710037_31710087_ 1.0000 50 -chr21_31744582_31744632_ 1.0000 50 chr21_31768316_31768366_ 1.0000 50 -chr21_31914206_31914256_ 1.0000 50 chr21_31933633_31933683_ 1.0000 50 -chr21_31962741_31962791_ 1.0000 50 chr21_31964683_31964733_ 1.0000 50 -chr21_31973364_31973414_ 1.0000 50 chr21_31992870_31992920_ 1.0000 50 -chr21_32185595_32185645_ 1.0000 50 chr21_32202076_32202126_ 1.0000 50 -chr21_32253899_32253949_ 1.0000 50 chr21_32410820_32410870_ 1.0000 50 -chr21_36411748_36411798_ 1.0000 50 chr21_37838750_37838800_ 1.0000 50 -chr21_45705687_45705737_ 1.0000 50 chr21_45971413_45971463_ 1.0000 50 -chr21_45978668_45978718_ 1.0000 50 chr21_45993530_45993580_ 1.0000 50 -chr21_46020421_46020471_ 1.0000 50 chr21_46031920_46031970_ 1.0000 50 -chr21_46046964_46047014_ 1.0000 50 chr21_46057197_46057247_ 1.0000 50 -chr21_46086869_46086919_ 1.0000 50 chr21_46102103_46102153_ 1.0000 50 -chr21_47517957_47518007_ 1.0000 50 chr21_47575506_47575556_ 1.0000 50 -******************************************************************************** - -******************************************************************************** -COMMAND LINE SUMMARY -******************************************************************************** -This information can also be useful in the event you wish to report a -problem with the MEME software. - -command: meme /tmp/tmpCNK6l0/files/000/dataset_22.dat -o /tmp/tmpCNK6l0/job_working_directory/000/11/dataset_23_files -nostatus -maxsize 1000000 - -model: mod= zoops nmotifs= 1 evt= inf -object function= E-value of product of p-values -width: minw= 8 maxw= 50 -width: wg= 11 ws= 1 endgaps= yes -nsites: minsites= 2 maxsites= 30 wnsites= 0.8 -theta: spmap= pam spfuzz= 120 -global: substring= yes branching= no wbranch= no -em: prior= megap b= 7500 maxiter= 50 - distance= 1e-05 -data: n= 1500 N= 30 shuffle= -1 - -sample: seed= 0 ctfrac= -1 maxwords= -1 -Dirichlet mixture priors file: prior30.plib -Letter frequencies in dataset: -A 0.294 C 0.231 D 0.000 E 0.000 F 0.000 G 0.257 H 0.000 I 0.000 K 0.000 -L 0.000 M 0.000 N 0.000 P 0.000 Q 0.000 R 0.000 S 0.000 T 0.217 V 0.000 -W 0.000 Y 0.000 -Background letter frequencies (from dataset with add-one prior applied): -A 0.291 C 0.229 D 0.001 E 0.001 F 0.001 G 0.255 H 0.001 I 0.001 K 0.001 -L 0.001 M 0.001 N 0.001 P 0.001 Q 0.001 R 0.001 S 0.001 T 0.215 V 0.001 -W 0.001 Y 0.001 -******************************************************************************** - - -******************************************************************************** -MOTIF 1 MEME width = 11 sites = 25 llr = 239 E-value = 2.4e-011 -******************************************************************************** --------------------------------------------------------------------------------- - Motif 1 Description --------------------------------------------------------------------------------- -Simplified A 2323:a:a8a8 -pos.-specific C ::3:::::::: -probability D ::::::::::: -matrix E ::::::::::: - F ::::::::::: - G 7746::::::1 - H ::::::::::: - I ::::::::::: - K ::::::::::: - L ::::::::::: - M ::::::::::: - N ::::::::::: - P ::::::::::: - Q ::::::::::: - R ::::::::::: - S ::::::::::: - T 1:2:a:a:2:: - V ::::::::::: - W ::::::::::: - Y ::::::::::: - - bits 10.6 - 9.5 - 8.5 - 7.4 -Relative 6.3 -Entropy 5.3 -(13.8 bits) 4.2 - 3.2 - 2.1 * ** - 1.1 ** ******** - 0.0 ----------- - -Multilevel GGGGTATAAAA -consensus AACA T -sequence - - --------------------------------------------------------------------------------- - --------------------------------------------------------------------------------- - Motif 1 sites sorted by position p-value --------------------------------------------------------------------------------- -Sequence name Start P-value Site -------------- ----- --------- ----------- -chr21_46046964_46047014_ 13 1.06e-06 AAGGCCAGGA GGGGTATAAAA GCCTGAGAGC -chr21_46057197_46057247_ 37 3.41e-06 ACAGGCCCTG GGCATATAAAA GCC -chr21_45971413_45971463_ 10 3.41e-06 CAGGCCCTG GGCATATAAAA GCCCCAGCAG -chr21_31964683_31964733_ 14 3.41e-06 GATTCACTGA GGCATATAAAA GGCCCTCTGC -chr21_45993530_45993580_ 8 4.00e-06 CCAAGGA GGAGTATAAAA GCCCCACAAA -chr21_32202076_32202126_ 14 5.01e-06 CCACCAGCTT GAGGTATAAAA AGCCCTGTAC -chr21_46031920_46031970_ 16 6.06e-06 ATACCCAGGG AGGGTATAAAA CCTCAGCAGC -chr21_32410820_32410870_ 22 8.67e-06 AATCACTGAG GATGTATAAAA GTCCCAGGGA -chr21_32185595_32185645_ 19 8.67e-06 CACCAGAGCT GGGATATATAA AGAAGGTTCT -chr21_31992870_31992920_ 17 8.67e-06 CACTATTGAA GATGTATAAAA TTTCATTTGC -chr21_46020421_46020471_ 3 1.21e-05 GA GACATATAAAA GCCAACATCC -chr21_47517957_47518007_ 33 1.59e-05 CCGGCGGGGC GGGGTATAAAG GGGGCGG -chr21_45978668_45978718_ 5 1.59e-05 CAGA GGGGTATAAAG GTTCCGACCA -chr21_31914206_31914256_ 16 1.68e-05 CCCACTACTT AGAGTATAAAA TCATTCTGAG -chr21_32253899_32253949_ 20 2.03e-05 CACCAGCAAG GATATATAAAA GCTCAGGAGT -chr21_31744582_31744632_ 13 3.06e-05 CAGGTCTAAG AGCATATATAA CTTGGAGTCC -chr21_19617074_19617124_ 40 3.06e-05 CCTCGGGACG TGGGTATATAA -chr21_45705687_45705737_ 38 3.82e-05 CGTGGTCGCG GGGGTATAACA GC -chr21_31768316_31768366_ 1 3.82e-05 . AACGTATATAA ATGGTCCTGT -chr21_47575506_47575556_ 31 4.02e-05 GCTGCCGGTG AGCGTATAAAG GCCCTGGCG -chr21_26934381_26934431_ 28 5.52e-05 AGTCACAAGT GAGTTATAAAA GGGTCGCACG -chr21_31710037_31710087_ 15 5.94e-05 CCCAGGTTTC TGAGTATATAA TCGCCGCACC -chr21_36411748_36411798_ 23 6.78e-05 AGTTTCAGTT GGCATCtaaaa attatataac -chr21_31933633_31933683_ 3 2.08e-04 TC AGAGTATATAT AAATGTTCCT -chr21_31962741_31962791_ 14 4.05e-04 TATAACTCAG GTTGGATAAAA TAATTTGTAC --------------------------------------------------------------------------------- - --------------------------------------------------------------------------------- - Motif 1 block diagrams --------------------------------------------------------------------------------- -SEQUENCE NAME POSITION P-VALUE MOTIF DIAGRAM -------------- ---------------- ------------- -chr21_46046964_46047014_ 1.1e-06 12_[1]_27 -chr21_46057197_46057247_ 3.4e-06 36_[1]_3 -chr21_45971413_45971463_ 3.4e-06 9_[1]_30 -chr21_31964683_31964733_ 3.4e-06 13_[1]_26 -chr21_45993530_45993580_ 4e-06 7_[1]_32 -chr21_32202076_32202126_ 5e-06 13_[1]_26 -chr21_46031920_46031970_ 6.1e-06 15_[1]_24 -chr21_32410820_32410870_ 8.7e-06 21_[1]_18 -chr21_32185595_32185645_ 8.7e-06 18_[1]_21 -chr21_31992870_31992920_ 8.7e-06 16_[1]_23 -chr21_46020421_46020471_ 1.2e-05 2_[1]_37 -chr21_47517957_47518007_ 1.6e-05 32_[1]_7 -chr21_45978668_45978718_ 1.6e-05 4_[1]_35 -chr21_31914206_31914256_ 1.7e-05 15_[1]_24 -chr21_32253899_32253949_ 2e-05 19_[1]_20 -chr21_31744582_31744632_ 3.1e-05 12_[1]_27 -chr21_19617074_19617124_ 3.1e-05 39_[1] -chr21_45705687_45705737_ 3.8e-05 37_[1]_2 -chr21_31768316_31768366_ 3.8e-05 [1]_39 -chr21_47575506_47575556_ 4e-05 30_[1]_9 -chr21_26934381_26934431_ 5.5e-05 27_[1]_12 -chr21_31710037_31710087_ 5.9e-05 14_[1]_25 -chr21_36411748_36411798_ 6.8e-05 22_[1]_17 -chr21_31933633_31933683_ 0.00021 2_[1]_37 -chr21_31962741_31962791_ 0.0004 13_[1]_26 --------------------------------------------------------------------------------- - --------------------------------------------------------------------------------- - Motif 1 in BLOCKS format --------------------------------------------------------------------------------- -BL MOTIF 1 width=11 seqs=25 -chr21_46046964_46047014_ ( 13) GGGGTATAAAA 1 -chr21_46057197_46057247_ ( 37) GGCATATAAAA 1 -chr21_45971413_45971463_ ( 10) GGCATATAAAA 1 -chr21_31964683_31964733_ ( 14) GGCATATAAAA 1 -chr21_45993530_45993580_ ( 8) GGAGTATAAAA 1 -chr21_32202076_32202126_ ( 14) GAGGTATAAAA 1 -chr21_46031920_46031970_ ( 16) AGGGTATAAAA 1 -chr21_32410820_32410870_ ( 22) GATGTATAAAA 1 -chr21_32185595_32185645_ ( 19) GGGATATATAA 1 -chr21_31992870_31992920_ ( 17) GATGTATAAAA 1 -chr21_46020421_46020471_ ( 3) GACATATAAAA 1 -chr21_47517957_47518007_ ( 33) GGGGTATAAAG 1 -chr21_45978668_45978718_ ( 5) GGGGTATAAAG 1 -chr21_31914206_31914256_ ( 16) AGAGTATAAAA 1 -chr21_32253899_32253949_ ( 20) GATATATAAAA 1 -chr21_31744582_31744632_ ( 13) AGCATATATAA 1 -chr21_19617074_19617124_ ( 40) TGGGTATATAA 1 -chr21_45705687_45705737_ ( 38) GGGGTATAACA 1 -chr21_31768316_31768366_ ( 1) AACGTATATAA 1 -chr21_47575506_47575556_ ( 31) AGCGTATAAAG 1 -chr21_26934381_26934431_ ( 28) GAGTTATAAAA 1 -chr21_31710037_31710087_ ( 15) TGAGTATATAA 1 -chr21_36411748_36411798_ ( 23) GGCATCTAAAA 1 -chr21_31933633_31933683_ ( 3) AGAGTATATAT 1 -chr21_31962741_31962791_ ( 14) GTTGGATAAAA 1 -// - --------------------------------------------------------------------------------- - --------------------------------------------------------------------------------- - Motif 1 position-specific scoring matrix --------------------------------------------------------------------------------- -log-odds matrix: alength= 20 w= 11 n= 1200 bayes= 5.33554 E= 2.4e-011 - -32 -680 91 77 7 138 -20 55 64 107 11 150 142 72 87 396 -148 221 -140 -36 - -11 -680 89 76 7 137 -21 55 63 107 10 149 141 71 87 396 -239 220 -140 -36 - -79 41 4 21 -7 44 -62 42 -5 99 0 99 138 52 42 399 -46 223 -173 -68 - 11 -677 48 47 -2 127 -43 46 27 101 3 124 138 60 62 397 -235 220 -160 -55 - -596 -820 12 -21 -53 -267 -74 37 16 44 -37 98 31 9 19 319 212 127 -193 -95 - 165 -261 70 110 77 -521 -4 147 95 201 90 121 124 91 107 425 -527 314 -95 8 - -838 -990 -89 -149 -151 -841 -161 -117 -113 -66 -209 -68 -69 -129 -91 111 221 -55 -255 -173 - 176 -858 -79 -103 -115 -717 -148 -95 -108 -17 -162 -61 -12 -95 -69 193 -737 52 -240 -153 - 134 -686 0 16 -12 -553 -68 44 -8 96 -9 88 124 41 36 384 11 216 -177 -71 - 165 -261 70 110 77 -521 -4 147 95 201 90 121 124 91 107 425 -527 314 -95 8 - 147 -614 89 129 93 -121 12 160 113 217 108 144 144 111 125 447 -241 332 -81 22 --------------------------------------------------------------------------------- - --------------------------------------------------------------------------------- - Motif 1 position-specific probability matrix --------------------------------------------------------------------------------- -letter-probability matrix: alength= 20 w= 11 nsites= 25 E= 2.4e-011 - 0.240000 0.000000 0.000000 0.000000 0.000000 0.680000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.080000 0.000000 0.000000 0.000000 - 0.280000 0.000000 0.000000 0.000000 0.000000 0.680000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.040000 0.000000 0.000000 0.000000 - 0.160000 0.320000 0.000000 0.000000 0.000000 0.360000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.160000 0.000000 0.000000 0.000000 - 0.320000 0.000000 0.000000 0.000000 0.000000 0.640000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.040000 0.000000 0.000000 0.000000 - 0.000000 0.000000 0.000000 0.000000 0.000000 0.040000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.960000 0.000000 0.000000 0.000000 - 0.960000 0.040000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 - 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 - 1.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 - 0.760000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.240000 0.000000 0.000000 0.000000 - 0.960000 0.040000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 - 0.840000 0.000000 0.000000 0.000000 0.000000 0.120000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.040000 0.000000 0.000000 0.000000 --------------------------------------------------------------------------------- - --------------------------------------------------------------------------------- - Motif 1 regular expression --------------------------------------------------------------------------------- -[GA][GA][GC][GA]TATA[AT]AA --------------------------------------------------------------------------------- - - - - -Time 0.72 secs. - -******************************************************************************** - - -******************************************************************************** -SUMMARY OF MOTIFS -******************************************************************************** - --------------------------------------------------------------------------------- - Combined block diagrams: non-overlapping sites with p-value < 0.0001 --------------------------------------------------------------------------------- -SEQUENCE NAME COMBINED P-VALUE MOTIF DIAGRAM -------------- ---------------- ------------- -chr21_19617074_19617124_ 1.22e-03 39_[1(3.06e-05)] -chr21_26934381_26934431_ 2.21e-03 27_[1(5.52e-05)]_12 -chr21_28217753_28217803_ 7.29e-01 50 -chr21_31710037_31710087_ 2.37e-03 14_[1(5.94e-05)]_25 -chr21_31744582_31744632_ 1.22e-03 12_[1(3.06e-05)]_27 -chr21_31768316_31768366_ 1.53e-03 [1(3.82e-05)]_39 -chr21_31914206_31914256_ 6.70e-04 15_[1(1.68e-05)]_24 -chr21_31933633_31933683_ 1.81e-03 4_[1(4.54e-05)]_35 -chr21_31962741_31962791_ 1.61e-02 50 -chr21_31964683_31964733_ 1.36e-04 13_[1(3.41e-06)]_26 -chr21_31973364_31973414_ 1.99e-01 50 -chr21_31992870_31992920_ 3.47e-04 16_[1(8.67e-06)]_23 -chr21_32185595_32185645_ 3.47e-04 18_[1(8.67e-06)]_21 -chr21_32202076_32202126_ 2.01e-04 13_[1(5.01e-06)]_26 -chr21_32253899_32253949_ 8.11e-04 19_[1(2.03e-05)]_20 -chr21_32410820_32410870_ 3.47e-04 21_[1(8.67e-06)]_18 -chr21_36411748_36411798_ 2.71e-03 22_[1(6.78e-05)]_17 -chr21_37838750_37838800_ 8.23e-02 50 -chr21_45705687_45705737_ 1.53e-03 37_[1(3.82e-05)]_2 -chr21_45971413_45971463_ 1.36e-04 9_[1(3.41e-06)]_30 -chr21_45978668_45978718_ 6.37e-04 4_[1(1.59e-05)]_35 -chr21_45993530_45993580_ 1.60e-04 7_[1(4.00e-06)]_32 -chr21_46020421_46020471_ 4.83e-04 2_[1(1.21e-05)]_37 -chr21_46031920_46031970_ 2.43e-04 15_[1(6.06e-06)]_24 -chr21_46046964_46047014_ 4.26e-05 12_[1(1.06e-06)]_27 -chr21_46057197_46057247_ 1.36e-04 36_[1(3.41e-06)]_3 -chr21_46086869_46086919_ 4.30e-02 50 -chr21_46102103_46102153_ 4.30e-02 50 -chr21_47517957_47518007_ 6.37e-04 32_[1(1.59e-05)]_7 -chr21_47575506_47575556_ 1.61e-03 30_[1(4.02e-05)]_9 --------------------------------------------------------------------------------- - -******************************************************************************** - - -******************************************************************************** -Stopped because requested number of motifs (1) found. -******************************************************************************** - -CPU: bigsky - -********************************************************************************
--- a/test-data/meme_output_txt_2.txt Wed Apr 25 12:12:47 2018 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,319 +0,0 @@ -******************************************************************************** -MEME - Motif discovery tool -******************************************************************************** -MEME version 4.11.2 (Release date: Thu May 05 14:58:55 2016 -0700) - -For further information on how to interpret these results or to get -a copy of the MEME software please access http://meme-suite.org . - -This file may be used as input to the MAST algorithm for searching -sequence databases for matches to groups of motifs. MAST is available -for interactive use and downloading at http://meme-suite.org . -******************************************************************************** - - -******************************************************************************** -REFERENCE -******************************************************************************** -If you use this program in your research, please cite: - -Timothy L. Bailey and Charles Elkan, -"Fitting a mixture model by expectation maximization to discover -motifs in biopolymers", Proceedings of the Second International -Conference on Intelligent Systems for Molecular Biology, pp. 28-36, -AAAI Press, Menlo Park, California, 1994. -******************************************************************************** - - -******************************************************************************** -TRAINING SET -******************************************************************************** -DATAFILE= Galaxy_FASTA_Input -ALPHABET= ACGT -Sequence name Weight Length Sequence name Weight Length -------------- ------ ------ ------------- ------ ------ -chr21_19617074_19617124_ 1.0000 50 chr21_26934381_26934431_ 1.0000 50 -chr21_28217753_28217803_ 1.0000 50 chr21_31710037_31710087_ 1.0000 50 -chr21_31744582_31744632_ 1.0000 50 chr21_31768316_31768366_ 1.0000 50 -chr21_31914206_31914256_ 1.0000 50 chr21_31933633_31933683_ 1.0000 50 -chr21_31962741_31962791_ 1.0000 50 chr21_31964683_31964733_ 1.0000 50 -chr21_31973364_31973414_ 1.0000 50 chr21_31992870_31992920_ 1.0000 50 -chr21_32185595_32185645_ 1.0000 50 chr21_32202076_32202126_ 1.0000 50 -chr21_32253899_32253949_ 1.0000 50 chr21_32410820_32410870_ 1.0000 50 -chr21_36411748_36411798_ 1.0000 50 chr21_37838750_37838800_ 1.0000 50 -chr21_45705687_45705737_ 1.0000 50 chr21_45971413_45971463_ 1.0000 50 -chr21_45978668_45978718_ 1.0000 50 chr21_45993530_45993580_ 1.0000 50 -chr21_46020421_46020471_ 1.0000 50 chr21_46031920_46031970_ 1.0000 50 -chr21_46046964_46047014_ 1.0000 50 chr21_46057197_46057247_ 1.0000 50 -chr21_46086869_46086919_ 1.0000 50 chr21_46102103_46102153_ 1.0000 50 -chr21_47517957_47518007_ 1.0000 50 chr21_47575506_47575556_ 1.0000 50 -******************************************************************************** - -******************************************************************************** -COMMAND LINE SUMMARY -******************************************************************************** -This information can also be useful in the event you wish to report a -problem with the MEME software. - -command: meme /tmp/tmpCNK6l0/files/000/dataset_26.dat -o /tmp/tmpCNK6l0/job_working_directory/000/14/dataset_28_files -nostatus -maxsize 1000000 -sf Galaxy_FASTA_Input -dna -mod zoops -nmotifs 1 -wnsites 0.8 -evt inf -minw 8 -maxw 50 -wg 11 -ws 1 -maxiter 50 -distance 0.001 -prior dirichlet -b 0.01 -plib /tmp/tmpCNK6l0/files/000/dataset_27.dat -spmap uni -spfuzz 0.5 - -model: mod= zoops nmotifs= 1 evt= inf -object function= E-value of product of p-values -width: minw= 8 maxw= 50 -width: wg= 11 ws= 1 endgaps= yes -nsites: minsites= 2 maxsites= 30 wnsites= 0.8 -theta: spmap= uni spfuzz= 0.5 -global: substring= yes branching= no wbranch= no -em: prior= dirichlet b= 0.01 maxiter= 50 - distance= 0.001 -data: n= 1500 N= 30 shuffle= -1 -strands: + -sample: seed= 0 ctfrac= -1 maxwords= -1 -Dirichlet mixture priors file: dataset_27.dat -Letter frequencies in dataset: -A 0.294 C 0.231 G 0.257 T 0.217 -Background letter frequencies (from dataset with add-one prior applied): -A 0.294 C 0.231 G 0.257 T 0.217 -******************************************************************************** - - -******************************************************************************** -MOTIF 1 MEME width = 11 sites = 30 llr = 254 E-value = 5.1e-040 -******************************************************************************** --------------------------------------------------------------------------------- - Motif 1 Description --------------------------------------------------------------------------------- -Simplified A 3313:9:a798 -pos.-specific C 1:3::1:::1: -probability G 6756::::::2 -matrix T 1:11a1a:3:: - - bits 2.2 * - 2.0 * * - 1.8 * * - 1.5 * ** * -Relative 1.3 * ** * -Entropy 1.1 ****** -(12.2 bits) 0.9 * ******* - 0.7 * ******* - 0.4 ** ******** - 0.2 *********** - 0.0 ----------- - -Multilevel GGGGTATAAAA -consensus AACA T -sequence - --------------------------------------------------------------------------------- - --------------------------------------------------------------------------------- - Motif 1 sites sorted by position p-value --------------------------------------------------------------------------------- -Sequence name Start P-value Site -------------- ----- --------- ----------- -chr21_46046964_46047014_ 13 4.51e-07 AAGGCCAGGA GGGGTATAAAA GCCTGAGAGC -chr21_46031920_46031970_ 16 2.22e-06 ATACCCAGGG AGGGTATAAAA CCTCAGCAGC -chr21_32202076_32202126_ 14 2.74e-06 CCACCAGCTT GAGGTATAAAA AGCCCTGTAC -chr21_46057197_46057247_ 37 4.86e-06 ACAGGCCCTG GGCATATAAAA GCC -chr21_45993530_45993580_ 8 4.86e-06 CCAAGGA GGAGTATAAAA GCCCCACAAA -chr21_45971413_45971463_ 10 4.86e-06 CAGGCCCTG GGCATATAAAA GCCCCAGCAG -chr21_31964683_31964733_ 14 4.86e-06 GATTCACTGA GGCATATAAAA GGCCCTCTGC -chr21_47517957_47518007_ 33 6.48e-06 CCGGCGGGGC GGGGTATAAAG GGGGCGG -chr21_45978668_45978718_ 5 6.48e-06 CAGA GGGGTATAAAG GTTCCGACCA -chr21_32185595_32185645_ 19 6.48e-06 CACCAGAGCT GGGATATATAA AGAAGGTTCT -chr21_32410820_32410870_ 22 1.38e-05 AATCACTGAG GATGTATAAAA GTCCCAGGGA -chr21_31992870_31992920_ 17 1.38e-05 CACTATTGAA GATGTATAAAA TTTCATTTGC -chr21_19617074_19617124_ 40 1.41e-05 CCTCGGGACG TGGGTATATAA -chr21_31914206_31914256_ 16 1.61e-05 CCCACTACTT AGAGTATAAAA TCATTCTGAG -chr21_46020421_46020471_ 3 1.95e-05 GA GACATATAAAA GCCAACATCC -chr21_32253899_32253949_ 18 1.95e-05 CCCACCAGCA AGGATATATAA AAGCTCAGGA -chr21_45705687_45705737_ 38 2.16e-05 CGTGGTCGCG GGGGTATAACA GC -chr21_47575506_47575556_ 31 3.04e-05 GCTGCCGGTG AGCGTATAAAG GCCCTGGCG -chr21_31744582_31744632_ 13 3.04e-05 CAGGTCTAAG AGCATATATAA CTTGGAGTCC -chr21_31768316_31768366_ 1 3.67e-05 . AACGTATATAA ATGGTCCTGT -chr21_26934381_26934431_ 28 3.93e-05 AGTCACAAGT GAGTTATAAAA GGGTCGCACG -chr21_31933633_31933683_ 5 5.65e-05 TCAG AGTATATATAA ATGTTCCTGT -chr21_31710037_31710087_ 15 6.24e-05 CCCAGGTTTC TGAGTATATAA TCGCCGCACC -chr21_36411748_36411798_ 23 7.15e-05 AGTTTCAGTT GGCATCtaaaa attatataac -chr21_46102103_46102153_ 37 1.39e-04 TGCCTGGGTC CAGGTATAAAG GCT -chr21_46086869_46086919_ 38 1.39e-04 TGCCTGGGCC CAGGTATAAAG GC -chr21_37838750_37838800_ 3 4.81e-04 ga tggttttataa ggggcctcac -chr21_31962741_31962791_ 14 8.57e-04 TATAACTCAG GTTGGATAAAA TAATTTGTAC -chr21_31973364_31973414_ 8 1.47e-03 aaactta aaactctataa acttaaaact -chr21_28217753_28217803_ 27 2.64e-03 GGTGGGGGTG GGGGTTTCACT GGTCCACTAT --------------------------------------------------------------------------------- - --------------------------------------------------------------------------------- - Motif 1 block diagrams --------------------------------------------------------------------------------- -SEQUENCE NAME POSITION P-VALUE MOTIF DIAGRAM -------------- ---------------- ------------- -chr21_46046964_46047014_ 4.5e-07 12_[+1]_27 -chr21_46031920_46031970_ 2.2e-06 15_[+1]_24 -chr21_32202076_32202126_ 2.7e-06 13_[+1]_26 -chr21_46057197_46057247_ 4.9e-06 36_[+1]_3 -chr21_45993530_45993580_ 4.9e-06 7_[+1]_32 -chr21_45971413_45971463_ 4.9e-06 9_[+1]_30 -chr21_31964683_31964733_ 4.9e-06 13_[+1]_26 -chr21_47517957_47518007_ 6.5e-06 32_[+1]_7 -chr21_45978668_45978718_ 6.5e-06 4_[+1]_35 -chr21_32185595_32185645_ 6.5e-06 18_[+1]_21 -chr21_32410820_32410870_ 1.4e-05 21_[+1]_18 -chr21_31992870_31992920_ 1.4e-05 16_[+1]_23 -chr21_19617074_19617124_ 1.4e-05 39_[+1] -chr21_31914206_31914256_ 1.6e-05 15_[+1]_24 -chr21_46020421_46020471_ 1.9e-05 2_[+1]_37 -chr21_32253899_32253949_ 1.9e-05 17_[+1]_22 -chr21_45705687_45705737_ 2.2e-05 37_[+1]_2 -chr21_47575506_47575556_ 3e-05 30_[+1]_9 -chr21_31744582_31744632_ 3e-05 12_[+1]_27 -chr21_31768316_31768366_ 3.7e-05 [+1]_39 -chr21_26934381_26934431_ 3.9e-05 27_[+1]_12 -chr21_31933633_31933683_ 5.6e-05 4_[+1]_35 -chr21_31710037_31710087_ 6.2e-05 14_[+1]_25 -chr21_36411748_36411798_ 7.1e-05 22_[+1]_17 -chr21_46102103_46102153_ 0.00014 36_[+1]_3 -chr21_46086869_46086919_ 0.00014 37_[+1]_2 -chr21_37838750_37838800_ 0.00048 2_[+1]_37 -chr21_31962741_31962791_ 0.00086 13_[+1]_26 -chr21_31973364_31973414_ 0.0015 7_[+1]_32 -chr21_28217753_28217803_ 0.0026 26_[+1]_13 --------------------------------------------------------------------------------- - --------------------------------------------------------------------------------- - Motif 1 in BLOCKS format --------------------------------------------------------------------------------- -BL MOTIF 1 width=11 seqs=30 -chr21_46046964_46047014_ ( 13) GGGGTATAAAA 1 -chr21_46031920_46031970_ ( 16) AGGGTATAAAA 1 -chr21_32202076_32202126_ ( 14) GAGGTATAAAA 1 -chr21_46057197_46057247_ ( 37) GGCATATAAAA 1 -chr21_45993530_45993580_ ( 8) GGAGTATAAAA 1 -chr21_45971413_45971463_ ( 10) GGCATATAAAA 1 -chr21_31964683_31964733_ ( 14) GGCATATAAAA 1 -chr21_47517957_47518007_ ( 33) GGGGTATAAAG 1 -chr21_45978668_45978718_ ( 5) GGGGTATAAAG 1 -chr21_32185595_32185645_ ( 19) GGGATATATAA 1 -chr21_32410820_32410870_ ( 22) GATGTATAAAA 1 -chr21_31992870_31992920_ ( 17) GATGTATAAAA 1 -chr21_19617074_19617124_ ( 40) TGGGTATATAA 1 -chr21_31914206_31914256_ ( 16) AGAGTATAAAA 1 -chr21_46020421_46020471_ ( 3) GACATATAAAA 1 -chr21_32253899_32253949_ ( 18) AGGATATATAA 1 -chr21_45705687_45705737_ ( 38) GGGGTATAACA 1 -chr21_47575506_47575556_ ( 31) AGCGTATAAAG 1 -chr21_31744582_31744632_ ( 13) AGCATATATAA 1 -chr21_31768316_31768366_ ( 1) AACGTATATAA 1 -chr21_26934381_26934431_ ( 28) GAGTTATAAAA 1 -chr21_31933633_31933683_ ( 5) AGTATATATAA 1 -chr21_31710037_31710087_ ( 15) TGAGTATATAA 1 -chr21_36411748_36411798_ ( 23) GGCATCTAAAA 1 -chr21_46102103_46102153_ ( 37) CAGGTATAAAG 1 -chr21_46086869_46086919_ ( 38) CAGGTATAAAG 1 -chr21_37838750_37838800_ ( 3) TGGTTTTATAA 1 -chr21_31962741_31962791_ ( 14) GTTGGATAAAA 1 -chr21_31973364_31973414_ ( 8) AAACTCTATAA 1 -chr21_28217753_28217803_ ( 27) GGGGTTTCACT 1 -// - --------------------------------------------------------------------------------- - --------------------------------------------------------------------------------- - Motif 1 position-specific scoring matrix --------------------------------------------------------------------------------- -log-odds matrix: alength= 4 w= 11 n= 1200 bayes= 5.2854 E= 5.1e-040 - -14 -179 114 -112 - 3 -1155 137 -270 - -114 20 86 -71 - 3 -279 122 -170 - -1155 -1155 -295 215 - 156 -179 -1155 -170 - -1155 -1155 -1155 220 - 172 -279 -1155 -1155 - 125 -1155 -1155 46 - 167 -179 -1155 -1155 - 144 -1155 -63 -270 --------------------------------------------------------------------------------- - --------------------------------------------------------------------------------- - Motif 1 position-specific probability matrix --------------------------------------------------------------------------------- -letter-probability matrix: alength= 4 w= 11 nsites= 30 E= 5.1e-040 - 0.266667 0.066667 0.566667 0.100000 - 0.300000 0.000000 0.666667 0.033333 - 0.133333 0.266667 0.466667 0.133333 - 0.300000 0.033333 0.600000 0.066667 - 0.000000 0.000000 0.033333 0.966667 - 0.866667 0.066667 0.000000 0.066667 - 0.000000 0.000000 0.000000 1.000000 - 0.966667 0.033333 0.000000 0.000000 - 0.700000 0.000000 0.000000 0.300000 - 0.933333 0.066667 0.000000 0.000000 - 0.800000 0.000000 0.166667 0.033333 --------------------------------------------------------------------------------- - --------------------------------------------------------------------------------- - Motif 1 regular expression --------------------------------------------------------------------------------- -[GA][GA][GC][GA]TATA[AT]AA --------------------------------------------------------------------------------- - - - - -Time 0.32 secs. - -******************************************************************************** - - -******************************************************************************** -SUMMARY OF MOTIFS -******************************************************************************** - --------------------------------------------------------------------------------- - Combined block diagrams: non-overlapping sites with p-value < 0.0001 --------------------------------------------------------------------------------- -SEQUENCE NAME COMBINED P-VALUE MOTIF DIAGRAM -------------- ---------------- ------------- -chr21_19617074_19617124_ 5.63e-04 39_[+1(1.41e-05)] -chr21_26934381_26934431_ 1.57e-03 27_[+1(3.93e-05)]_12 -chr21_28217753_28217803_ 1.00e-01 50 -chr21_31710037_31710087_ 2.49e-03 14_[+1(6.24e-05)]_25 -chr21_31744582_31744632_ 1.22e-03 12_[+1(3.04e-05)]_27 -chr21_31768316_31768366_ 1.47e-03 [+1(3.67e-05)]_39 -chr21_31914206_31914256_ 6.45e-04 15_[+1(1.61e-05)]_24 -chr21_31933633_31933683_ 2.26e-03 4_[+1(5.65e-05)]_35 -chr21_31962741_31962791_ 3.37e-02 50 -chr21_31964683_31964733_ 1.95e-04 13_[+1(4.86e-06)]_26 -chr21_31973364_31973414_ 5.73e-02 50 -chr21_31992870_31992920_ 5.52e-04 16_[+1(1.38e-05)]_23 -chr21_32185595_32185645_ 2.59e-04 18_[+1(6.48e-06)]_21 -chr21_32202076_32202126_ 1.10e-04 13_[+1(2.74e-06)]_26 -chr21_32253899_32253949_ 7.78e-04 17_[+1(1.95e-05)]_22 -chr21_32410820_32410870_ 5.52e-04 21_[+1(1.38e-05)]_18 -chr21_36411748_36411798_ 2.85e-03 22_[+1(7.15e-05)]_17 -chr21_37838750_37838800_ 1.90e-02 50 -chr21_45705687_45705737_ 8.63e-04 37_[+1(2.16e-05)]_2 -chr21_45971413_45971463_ 1.95e-04 9_[+1(4.86e-06)]_30 -chr21_45978668_45978718_ 2.59e-04 4_[+1(6.48e-06)]_35 -chr21_45993530_45993580_ 1.95e-04 7_[+1(4.86e-06)]_32 -chr21_46020421_46020471_ 7.78e-04 2_[+1(1.95e-05)]_37 -chr21_46031920_46031970_ 8.89e-05 15_[+1(2.22e-06)]_24 -chr21_46046964_46047014_ 1.80e-05 12_[+1(4.51e-07)]_27 -chr21_46057197_46057247_ 1.95e-04 36_[+1(4.86e-06)]_3 -chr21_46086869_46086919_ 5.54e-03 50 -chr21_46102103_46102153_ 5.54e-03 50 -chr21_47517957_47518007_ 2.59e-04 32_[+1(6.48e-06)]_7 -chr21_47575506_47575556_ 1.22e-03 30_[+1(3.04e-05)]_9 --------------------------------------------------------------------------------- - -******************************************************************************** - - -******************************************************************************** -Stopped because requested number of motifs (1) found. -******************************************************************************** - -CPU: bigsky - -********************************************************************************
--- a/test-data/meme_output_xml_1.xml Wed Apr 25 12:12:47 2018 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1285 +0,0 @@ -<?xml version='1.0' encoding='UTF-8' standalone='yes'?> -<!-- Document definition --> -<!DOCTYPE MEME[ -<!ELEMENT MEME ( - training_set, - model, - motifs, - scanned_sites_summary? -)> -<!ATTLIST MEME - version CDATA #REQUIRED - release CDATA #REQUIRED -> -<!-- Training-set elements --> -<!ELEMENT training_set (alphabet, ambigs, sequence*, letter_frequencies)> -<!ATTLIST training_set datafile CDATA #REQUIRED length CDATA #REQUIRED> -<!ELEMENT alphabet (letter*)> -<!ATTLIST alphabet name CDATA #REQUIRED> -<!ELEMENT ambigs (letter*)> -<!ELEMENT letter EMPTY> -<!ATTLIST letter id ID #REQUIRED> -<!ATTLIST letter symbol CDATA #REQUIRED> -<!ATTLIST letter equals CDATA #IMPLIED> -<!ATTLIST letter aliases CDATA #IMPLIED> -<!ATTLIST letter complement CDATA #IMPLIED> -<!ATTLIST letter name CDATA #IMPLIED> -<!ATTLIST letter colour CDATA #IMPLIED> -<!ELEMENT sequence EMPTY> -<!ATTLIST sequence id ID #REQUIRED - name CDATA #REQUIRED - length CDATA #REQUIRED - weight CDATA #REQUIRED -> -<!ELEMENT letter_frequencies (alphabet_array)> - -<!-- Model elements --> -<!ELEMENT model ( - command_line, - host, - type, - nmotifs, - evalue_threshold, - object_function, - min_width, - max_width, - minic, - wg, - ws, - endgaps, - minsites, - maxsites, - wnsites, - prob, - spmap, - spfuzz, - prior, - beta, - maxiter, - distance, - num_sequences, - num_positions, - seed, - seqfrac, - strands, - priors_file, - reason_for_stopping, - background_frequencies -)> -<!ELEMENT command_line (#PCDATA)*> -<!ELEMENT host (#PCDATA)*> -<!ELEMENT type (#PCDATA)*> -<!ELEMENT nmotifs (#PCDATA)*> -<!ELEMENT evalue_threshold (#PCDATA)*> -<!ELEMENT object_function (#PCDATA)*> -<!ELEMENT min_width (#PCDATA)*> -<!ELEMENT max_width (#PCDATA)*> -<!ELEMENT minic (#PCDATA)*> -<!ELEMENT wg (#PCDATA)*> -<!ELEMENT ws (#PCDATA)*> -<!ELEMENT endgaps (#PCDATA)*> -<!ELEMENT minsites (#PCDATA)*> -<!ELEMENT maxsites (#PCDATA)*> -<!ELEMENT wnsites (#PCDATA)*> -<!ELEMENT prob (#PCDATA)*> -<!ELEMENT spmap (#PCDATA)*> -<!ELEMENT spfuzz (#PCDATA)*> -<!ELEMENT prior (#PCDATA)*> -<!ELEMENT beta (#PCDATA)*> -<!ELEMENT maxiter (#PCDATA)*> -<!ELEMENT distance (#PCDATA)*> -<!ELEMENT num_sequences (#PCDATA)*> -<!ELEMENT num_positions (#PCDATA)*> -<!ELEMENT seed (#PCDATA)*> -<!ELEMENT seqfrac (#PCDATA)*> -<!ELEMENT strands (#PCDATA)*> -<!ELEMENT priors_file (#PCDATA)*> -<!ELEMENT reason_for_stopping (#PCDATA)*> -<!ELEMENT background_frequencies (alphabet_array)> -<!ATTLIST background_frequencies source CDATA #REQUIRED> - -<!-- Motif elements --> -<!ELEMENT motifs (motif*)> -<!ELEMENT motif (scores, probabilities, regular_expression?, contributing_sites)> -<!ATTLIST motif id ID #REQUIRED - name CDATA #REQUIRED - width CDATA #REQUIRED - sites CDATA #REQUIRED - llr CDATA #REQUIRED - ic CDATA #REQUIRED - re CDATA #REQUIRED - bayes_threshold CDATA #REQUIRED - e_value CDATA #REQUIRED - elapsed_time CDATA #REQUIRED - url CDATA "" -> -<!ELEMENT scores (alphabet_matrix)> -<!ELEMENT probabilities (alphabet_matrix)> -<!ELEMENT regular_expression (#PCDATA)*> - -<!-- Contributing site elements --> -<!-- Contributing sites are motif occurences found during the motif discovery phase --> -<!ELEMENT contributing_sites (contributing_site*)> -<!ELEMENT contributing_site (left_flank, site, right_flank)> -<!ATTLIST contributing_site sequence_id IDREF #REQUIRED - position CDATA #REQUIRED - strand (plus|minus|none) 'none' - pvalue CDATA #REQUIRED -> -<!-- The left_flank contains the sequence for 10 bases to the left of the motif start --> -<!ELEMENT left_flank (#PCDATA)> -<!-- The site contains the sequence for the motif instance --> -<!ELEMENT site (letter_ref*)> -<!-- The right_flank contains the sequence for 10 bases to the right of the motif end --> -<!ELEMENT right_flank (#PCDATA)> - -<!-- Scanned site elements --> -<!-- Scanned sites are motif occurences found during the sequence scan phase --> -<!ELEMENT scanned_sites_summary (scanned_sites*)> -<!ATTLIST scanned_sites_summary p_thresh CDATA #REQUIRED> -<!ELEMENT scanned_sites (scanned_site*)> -<!ATTLIST scanned_sites sequence_id IDREF #REQUIRED - pvalue CDATA #REQUIRED - num_sites CDATA #REQUIRED> -<!ELEMENT scanned_site EMPTY> -<!ATTLIST scanned_site motif_id IDREF #REQUIRED - strand (plus|minus|none) 'none' - position CDATA #REQUIRED - pvalue CDATA #REQUIRED> - -<!-- Utility elements --> -<!-- A reference to a letter in the alphabet --> -<!ELEMENT letter_ref EMPTY> -<!ATTLIST letter_ref letter_id IDREF #REQUIRED> -<!-- A alphabet-array contains one floating point value for each letter in an alphabet --> -<!ELEMENT alphabet_array (value*)> -<!ELEMENT value (#PCDATA)> -<!ATTLIST value letter_id IDREF #REQUIRED> - -<!-- A alphabet_matrix contains one alphabet_array for each position in a motif --> -<!ELEMENT alphabet_matrix (alphabet_array*)> - -]> -<!-- Begin document body --> -<MEME version="4.11.2" release="Thu May 05 14:58:55 2016 -0700"> -<training_set datafile="/Users/gvk/work/git_workspace/galaxy/database/files/002/dataset_2490.dat" length="30"> -<alphabet name="Protein" like="protein"> -<letter id="A" symbol="A" name="Alanine" colour="0000CC"/> -<letter id="C" symbol="C" name="Cysteine" colour="0000CC"/> -<letter id="D" symbol="D" name="Aspartic acid" colour="FF00FF"/> -<letter id="E" symbol="E" name="Glutamic acid" colour="FF00FF"/> -<letter id="F" symbol="F" name="Phenylalanine" colour="0000CC"/> -<letter id="G" symbol="G" name="Glycine" colour="FFB300"/> -<letter id="H" symbol="H" name="Histidine" colour="FFCCCC"/> -<letter id="I" symbol="I" name="Isoleucine" colour="0000CC"/> -<letter id="K" symbol="K" name="Lysine" colour="CC0000"/> -<letter id="L" symbol="L" name="Leucine" colour="0000CC"/> -<letter id="M" symbol="M" name="Methionine" colour="0000CC"/> -<letter id="N" symbol="N" name="Asparagine" colour="008000"/> -<letter id="P" symbol="P" name="Proline" colour="FFFF00"/> -<letter id="Q" symbol="Q" name="Glutamine" colour="008000"/> -<letter id="R" symbol="R" name="Arginine" colour="CC0000"/> -<letter id="S" symbol="S" name="Serine" colour="008000"/> -<letter id="T" symbol="T" name="Threonine" colour="008000"/> -<letter id="V" symbol="V" name="Valine" colour="0000CC"/> -<letter id="W" symbol="W" name="Tryptophan" colour="0000CC"/> -<letter id="Y" symbol="Y" name="Tyrosine" colour="33E6CC"/> -<letter id="X" symbol="X" aliases="*." equals="ACDEFGHIKLMNPQRSTVWY" name="Any amino acid"/> -<letter id="B" symbol="B" equals="DN" name="Asparagine or Aspartic acid"/> -<letter id="Z" symbol="Z" equals="EQ" name="Glutamine or Glutamic acid"/> -<letter id="J" symbol="J" equals="IL" name="Leucine or Isoleucine"/> -</alphabet> -<sequence id="sequence_0" name="chr21_19617074_19617124_+" length="50" weight="1.000000" /> -<sequence id="sequence_1" name="chr21_26934381_26934431_+" length="50" weight="1.000000" /> -<sequence id="sequence_2" name="chr21_28217753_28217803_-" length="50" weight="1.000000" /> -<sequence id="sequence_3" name="chr21_31710037_31710087_-" length="50" weight="1.000000" /> -<sequence id="sequence_4" name="chr21_31744582_31744632_-" length="50" weight="1.000000" /> -<sequence id="sequence_5" name="chr21_31768316_31768366_+" length="50" weight="1.000000" /> -<sequence id="sequence_6" name="chr21_31914206_31914256_-" length="50" weight="1.000000" /> -<sequence id="sequence_7" name="chr21_31933633_31933683_-" length="50" weight="1.000000" /> -<sequence id="sequence_8" name="chr21_31962741_31962791_-" length="50" weight="1.000000" /> -<sequence id="sequence_9" name="chr21_31964683_31964733_+" length="50" weight="1.000000" /> -<sequence id="sequence_10" name="chr21_31973364_31973414_+" length="50" weight="1.000000" /> -<sequence id="sequence_11" name="chr21_31992870_31992920_+" length="50" weight="1.000000" /> -<sequence id="sequence_12" name="chr21_32185595_32185645_-" length="50" weight="1.000000" /> -<sequence id="sequence_13" name="chr21_32202076_32202126_-" length="50" weight="1.000000" /> -<sequence id="sequence_14" name="chr21_32253899_32253949_-" length="50" weight="1.000000" /> -<sequence id="sequence_15" name="chr21_32410820_32410870_-" length="50" weight="1.000000" /> -<sequence id="sequence_16" name="chr21_36411748_36411798_-" length="50" weight="1.000000" /> -<sequence id="sequence_17" name="chr21_37838750_37838800_-" length="50" weight="1.000000" /> -<sequence id="sequence_18" name="chr21_45705687_45705737_+" length="50" weight="1.000000" /> -<sequence id="sequence_19" name="chr21_45971413_45971463_-" length="50" weight="1.000000" /> -<sequence id="sequence_20" name="chr21_45978668_45978718_-" length="50" weight="1.000000" /> -<sequence id="sequence_21" name="chr21_45993530_45993580_+" length="50" weight="1.000000" /> -<sequence id="sequence_22" name="chr21_46020421_46020471_+" length="50" weight="1.000000" /> -<sequence id="sequence_23" name="chr21_46031920_46031970_+" length="50" weight="1.000000" /> -<sequence id="sequence_24" name="chr21_46046964_46047014_+" length="50" weight="1.000000" /> -<sequence id="sequence_25" name="chr21_46057197_46057247_+" length="50" weight="1.000000" /> -<sequence id="sequence_26" name="chr21_46086869_46086919_-" length="50" weight="1.000000" /> -<sequence id="sequence_27" name="chr21_46102103_46102153_-" length="50" weight="1.000000" /> -<sequence id="sequence_28" name="chr21_47517957_47518007_+" length="50" weight="1.000000" /> -<sequence id="sequence_29" name="chr21_47575506_47575556_-" length="50" weight="1.000000" /> -<letter_frequencies> -<alphabet_array> -<value letter_id="A">0.294</value> -<value letter_id="C">0.231</value> -<value letter_id="D">0.000</value> -<value letter_id="E">0.000</value> -<value letter_id="F">0.000</value> -<value letter_id="G">0.257</value> -<value letter_id="H">0.000</value> -<value letter_id="I">0.000</value> -<value letter_id="K">0.000</value> -<value letter_id="L">0.000</value> -<value letter_id="M">0.000</value> -<value letter_id="N">0.000</value> -<value letter_id="P">0.000</value> -<value letter_id="Q">0.000</value> -<value letter_id="R">0.000</value> -<value letter_id="S">0.000</value> -<value letter_id="T">0.217</value> -<value letter_id="V">0.000</value> -<value letter_id="W">0.000</value> -<value letter_id="Y">0.000</value> -</alphabet_array> -</letter_frequencies> -</training_set> -<model> -<command_line>meme /Users/gvk/work/git_workspace/galaxy/database/files/002/dataset_2490.dat -o /Users/gvk/work/git_workspace/galaxy/database/job_working_directory/001/1912/dataset_2530_files -nostatus </command_line> -<host>MacBook-Pro-2.local</host> -<type>zoops</type> -<nmotifs>1</nmotifs> -<evalue_threshold>inf</evalue_threshold> -<object_function>E-value of product of p-values</object_function> -<use_llr>0</use_llr> -<min_width>8</min_width> -<max_width>50</max_width> -<wg>11</wg> -<ws>1</ws> -<endgaps>yes</endgaps> -<substring>yes</substring> -<minsites>2</minsites> -<maxsites>30</maxsites> -<wnsites>0.8</wnsites> -<spmap>pam</spmap> -<spfuzz>120</spfuzz> -<prior>megap</prior> -<beta>7500</beta> -<maxiter>50</maxiter> -<distance>1e-05</distance> -<num_sequences>30</num_sequences> -<num_positions>1500</num_positions> -<seed>0</seed> -<ctfrac>-1</ctfrac> -<maxwords>-1</maxwords> -<strands>none</strands> -<priors_file>prior30.plib</priors_file> -<reason_for_stopping>Stopped because requested number of motifs (1) found.</reason_for_stopping> -<background_frequencies source="dataset with add-one prior applied"> -<alphabet_array> -<value letter_id="A">0.291</value> -<value letter_id="C">0.229</value> -<value letter_id="D">0.001</value> -<value letter_id="E">0.001</value> -<value letter_id="F">0.001</value> -<value letter_id="G">0.255</value> -<value letter_id="H">0.001</value> -<value letter_id="I">0.001</value> -<value letter_id="K">0.001</value> -<value letter_id="L">0.001</value> -<value letter_id="M">0.001</value> -<value letter_id="N">0.001</value> -<value letter_id="P">0.001</value> -<value letter_id="Q">0.001</value> -<value letter_id="R">0.001</value> -<value letter_id="S">0.001</value> -<value letter_id="T">0.215</value> -<value letter_id="V">0.001</value> -<value letter_id="W">0.001</value> -<value letter_id="Y">0.001</value> -</alphabet_array> -</background_frequencies> -</model> -<motifs> -<motif id="motif_1" name="1" width="11" sites="25" ic="40.0" re="13.8" llr="239" e_value="2.4e-011" bayes_threshold="5.33554" elapsed_time="0.533107"> -<scores> -<alphabet_matrix> -<alphabet_array> -<value letter_id="A">-32</value> -<value letter_id="C">-680</value> -<value letter_id="D">91</value> -<value letter_id="E">77</value> -<value letter_id="F">7</value> -<value letter_id="G">138</value> -<value letter_id="H">-20</value> -<value letter_id="I">55</value> -<value letter_id="K">64</value> -<value letter_id="L">107</value> -<value letter_id="M">11</value> -<value letter_id="N">150</value> -<value letter_id="P">142</value> -<value letter_id="Q">72</value> -<value letter_id="R">87</value> -<value letter_id="S">396</value> -<value letter_id="T">-148</value> -<value letter_id="V">221</value> -<value letter_id="W">-140</value> -<value letter_id="Y">-36</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">-11</value> -<value letter_id="C">-680</value> -<value letter_id="D">89</value> -<value letter_id="E">76</value> -<value letter_id="F">7</value> -<value letter_id="G">137</value> -<value letter_id="H">-21</value> -<value letter_id="I">55</value> -<value letter_id="K">63</value> -<value letter_id="L">107</value> -<value letter_id="M">10</value> -<value letter_id="N">149</value> -<value letter_id="P">141</value> -<value letter_id="Q">71</value> -<value letter_id="R">87</value> -<value letter_id="S">396</value> -<value letter_id="T">-239</value> -<value letter_id="V">220</value> -<value letter_id="W">-140</value> -<value letter_id="Y">-36</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">-79</value> -<value letter_id="C">41</value> -<value letter_id="D">4</value> -<value letter_id="E">21</value> -<value letter_id="F">-7</value> -<value letter_id="G">44</value> -<value letter_id="H">-62</value> -<value letter_id="I">42</value> -<value letter_id="K">-5</value> -<value letter_id="L">99</value> -<value letter_id="M">0</value> -<value letter_id="N">99</value> -<value letter_id="P">138</value> -<value letter_id="Q">52</value> -<value letter_id="R">42</value> -<value letter_id="S">399</value> -<value letter_id="T">-46</value> -<value letter_id="V">223</value> -<value letter_id="W">-173</value> -<value letter_id="Y">-68</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">11</value> -<value letter_id="C">-677</value> -<value letter_id="D">48</value> -<value letter_id="E">47</value> -<value letter_id="F">-2</value> -<value letter_id="G">127</value> -<value letter_id="H">-43</value> -<value letter_id="I">46</value> -<value letter_id="K">27</value> -<value letter_id="L">101</value> -<value letter_id="M">3</value> -<value letter_id="N">124</value> -<value letter_id="P">138</value> -<value letter_id="Q">60</value> -<value letter_id="R">62</value> -<value letter_id="S">397</value> -<value letter_id="T">-235</value> -<value letter_id="V">220</value> -<value letter_id="W">-160</value> -<value letter_id="Y">-55</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">-596</value> -<value letter_id="C">-820</value> -<value letter_id="D">12</value> -<value letter_id="E">-21</value> -<value letter_id="F">-53</value> -<value letter_id="G">-267</value> -<value letter_id="H">-74</value> -<value letter_id="I">37</value> -<value letter_id="K">16</value> -<value letter_id="L">44</value> -<value letter_id="M">-37</value> -<value letter_id="N">98</value> -<value letter_id="P">31</value> -<value letter_id="Q">9</value> -<value letter_id="R">19</value> -<value letter_id="S">319</value> -<value letter_id="T">212</value> -<value letter_id="V">127</value> -<value letter_id="W">-193</value> -<value letter_id="Y">-95</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">165</value> -<value letter_id="C">-261</value> -<value letter_id="D">70</value> -<value letter_id="E">110</value> -<value letter_id="F">77</value> -<value letter_id="G">-521</value> -<value letter_id="H">-4</value> -<value letter_id="I">147</value> -<value letter_id="K">95</value> -<value letter_id="L">201</value> -<value letter_id="M">90</value> -<value letter_id="N">121</value> -<value letter_id="P">124</value> -<value letter_id="Q">91</value> -<value letter_id="R">107</value> -<value letter_id="S">425</value> -<value letter_id="T">-527</value> -<value letter_id="V">314</value> -<value letter_id="W">-95</value> -<value letter_id="Y">8</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">-838</value> -<value letter_id="C">-990</value> -<value letter_id="D">-89</value> -<value letter_id="E">-149</value> -<value letter_id="F">-151</value> -<value letter_id="G">-841</value> -<value letter_id="H">-161</value> -<value letter_id="I">-117</value> -<value letter_id="K">-113</value> -<value letter_id="L">-66</value> -<value letter_id="M">-209</value> -<value letter_id="N">-68</value> -<value letter_id="P">-69</value> -<value letter_id="Q">-129</value> -<value letter_id="R">-91</value> -<value letter_id="S">111</value> -<value letter_id="T">221</value> -<value letter_id="V">-55</value> -<value letter_id="W">-255</value> -<value letter_id="Y">-173</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">176</value> -<value letter_id="C">-858</value> -<value letter_id="D">-79</value> -<value letter_id="E">-103</value> -<value letter_id="F">-115</value> -<value letter_id="G">-717</value> -<value letter_id="H">-148</value> -<value letter_id="I">-95</value> -<value letter_id="K">-108</value> -<value letter_id="L">-17</value> -<value letter_id="M">-162</value> -<value letter_id="N">-61</value> -<value letter_id="P">-12</value> -<value letter_id="Q">-95</value> -<value letter_id="R">-69</value> -<value letter_id="S">193</value> -<value letter_id="T">-737</value> -<value letter_id="V">52</value> -<value letter_id="W">-240</value> -<value letter_id="Y">-153</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">134</value> -<value letter_id="C">-686</value> -<value letter_id="D">0</value> -<value letter_id="E">16</value> -<value letter_id="F">-12</value> -<value letter_id="G">-553</value> -<value letter_id="H">-68</value> -<value letter_id="I">44</value> -<value letter_id="K">-8</value> -<value letter_id="L">96</value> -<value letter_id="M">-9</value> -<value letter_id="N">88</value> -<value letter_id="P">124</value> -<value letter_id="Q">41</value> -<value letter_id="R">36</value> -<value letter_id="S">384</value> -<value letter_id="T">11</value> -<value letter_id="V">216</value> -<value letter_id="W">-177</value> -<value letter_id="Y">-71</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">165</value> -<value letter_id="C">-261</value> -<value letter_id="D">70</value> -<value letter_id="E">110</value> -<value letter_id="F">77</value> -<value letter_id="G">-521</value> -<value letter_id="H">-4</value> -<value letter_id="I">147</value> -<value letter_id="K">95</value> -<value letter_id="L">201</value> -<value letter_id="M">90</value> -<value letter_id="N">121</value> -<value letter_id="P">124</value> -<value letter_id="Q">91</value> -<value letter_id="R">107</value> -<value letter_id="S">425</value> -<value letter_id="T">-527</value> -<value letter_id="V">314</value> -<value letter_id="W">-95</value> -<value letter_id="Y">8</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">147</value> -<value letter_id="C">-614</value> -<value letter_id="D">89</value> -<value letter_id="E">129</value> -<value letter_id="F">93</value> -<value letter_id="G">-121</value> -<value letter_id="H">12</value> -<value letter_id="I">160</value> -<value letter_id="K">113</value> -<value letter_id="L">217</value> -<value letter_id="M">108</value> -<value letter_id="N">144</value> -<value letter_id="P">144</value> -<value letter_id="Q">111</value> -<value letter_id="R">125</value> -<value letter_id="S">447</value> -<value letter_id="T">-241</value> -<value letter_id="V">332</value> -<value letter_id="W">-81</value> -<value letter_id="Y">22</value> -</alphabet_array> -</alphabet_matrix> -</scores> -<probabilities> -<alphabet_matrix> -<alphabet_array> -<value letter_id="A">0.240000</value> -<value letter_id="C">0.000000</value> -<value letter_id="D">0.000000</value> -<value letter_id="E">0.000000</value> -<value letter_id="F">0.000000</value> -<value letter_id="G">0.680000</value> -<value letter_id="H">0.000000</value> -<value letter_id="I">0.000000</value> -<value letter_id="K">0.000000</value> -<value letter_id="L">0.000000</value> -<value letter_id="M">0.000000</value> -<value letter_id="N">0.000000</value> -<value letter_id="P">0.000000</value> -<value letter_id="Q">0.000000</value> -<value letter_id="R">0.000000</value> -<value letter_id="S">0.000000</value> -<value letter_id="T">0.080000</value> -<value letter_id="V">0.000000</value> -<value letter_id="W">0.000000</value> -<value letter_id="Y">0.000000</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">0.280000</value> -<value letter_id="C">0.000000</value> -<value letter_id="D">0.000000</value> -<value letter_id="E">0.000000</value> -<value letter_id="F">0.000000</value> -<value letter_id="G">0.680000</value> -<value letter_id="H">0.000000</value> -<value letter_id="I">0.000000</value> -<value letter_id="K">0.000000</value> -<value letter_id="L">0.000000</value> -<value letter_id="M">0.000000</value> -<value letter_id="N">0.000000</value> -<value letter_id="P">0.000000</value> -<value letter_id="Q">0.000000</value> -<value letter_id="R">0.000000</value> -<value letter_id="S">0.000000</value> -<value letter_id="T">0.040000</value> -<value letter_id="V">0.000000</value> -<value letter_id="W">0.000000</value> -<value letter_id="Y">0.000000</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">0.160000</value> -<value letter_id="C">0.320000</value> -<value letter_id="D">0.000000</value> -<value letter_id="E">0.000000</value> -<value letter_id="F">0.000000</value> -<value letter_id="G">0.360000</value> -<value letter_id="H">0.000000</value> -<value letter_id="I">0.000000</value> -<value letter_id="K">0.000000</value> -<value letter_id="L">0.000000</value> -<value letter_id="M">0.000000</value> -<value letter_id="N">0.000000</value> -<value letter_id="P">0.000000</value> -<value letter_id="Q">0.000000</value> -<value letter_id="R">0.000000</value> -<value letter_id="S">0.000000</value> -<value letter_id="T">0.160000</value> -<value letter_id="V">0.000000</value> -<value letter_id="W">0.000000</value> -<value letter_id="Y">0.000000</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">0.320000</value> -<value letter_id="C">0.000000</value> -<value letter_id="D">0.000000</value> -<value letter_id="E">0.000000</value> -<value letter_id="F">0.000000</value> -<value letter_id="G">0.640000</value> -<value letter_id="H">0.000000</value> -<value letter_id="I">0.000000</value> -<value letter_id="K">0.000000</value> -<value letter_id="L">0.000000</value> -<value letter_id="M">0.000000</value> -<value letter_id="N">0.000000</value> -<value letter_id="P">0.000000</value> -<value letter_id="Q">0.000000</value> -<value letter_id="R">0.000000</value> -<value letter_id="S">0.000000</value> -<value letter_id="T">0.040000</value> -<value letter_id="V">0.000000</value> -<value letter_id="W">0.000000</value> -<value letter_id="Y">0.000000</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">0.000000</value> -<value letter_id="C">0.000000</value> -<value letter_id="D">0.000000</value> -<value letter_id="E">0.000000</value> -<value letter_id="F">0.000000</value> -<value letter_id="G">0.040000</value> -<value letter_id="H">0.000000</value> -<value letter_id="I">0.000000</value> -<value letter_id="K">0.000000</value> -<value letter_id="L">0.000000</value> -<value letter_id="M">0.000000</value> -<value letter_id="N">0.000000</value> -<value letter_id="P">0.000000</value> -<value letter_id="Q">0.000000</value> -<value letter_id="R">0.000000</value> -<value letter_id="S">0.000000</value> -<value letter_id="T">0.960000</value> -<value letter_id="V">0.000000</value> -<value letter_id="W">0.000000</value> -<value letter_id="Y">0.000000</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">0.960000</value> -<value letter_id="C">0.040000</value> -<value letter_id="D">0.000000</value> -<value letter_id="E">0.000000</value> -<value letter_id="F">0.000000</value> -<value letter_id="G">0.000000</value> -<value letter_id="H">0.000000</value> -<value letter_id="I">0.000000</value> -<value letter_id="K">0.000000</value> -<value letter_id="L">0.000000</value> -<value letter_id="M">0.000000</value> -<value letter_id="N">0.000000</value> -<value letter_id="P">0.000000</value> -<value letter_id="Q">0.000000</value> -<value letter_id="R">0.000000</value> -<value letter_id="S">0.000000</value> -<value letter_id="T">0.000000</value> -<value letter_id="V">0.000000</value> -<value letter_id="W">0.000000</value> -<value letter_id="Y">0.000000</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">0.000000</value> -<value letter_id="C">0.000000</value> -<value letter_id="D">0.000000</value> -<value letter_id="E">0.000000</value> -<value letter_id="F">0.000000</value> -<value letter_id="G">0.000000</value> -<value letter_id="H">0.000000</value> -<value letter_id="I">0.000000</value> -<value letter_id="K">0.000000</value> -<value letter_id="L">0.000000</value> -<value letter_id="M">0.000000</value> -<value letter_id="N">0.000000</value> -<value letter_id="P">0.000000</value> -<value letter_id="Q">0.000000</value> -<value letter_id="R">0.000000</value> -<value letter_id="S">0.000000</value> -<value letter_id="T">1.000000</value> -<value letter_id="V">0.000000</value> -<value letter_id="W">0.000000</value> -<value letter_id="Y">0.000000</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">1.000000</value> -<value letter_id="C">0.000000</value> -<value letter_id="D">0.000000</value> -<value letter_id="E">0.000000</value> -<value letter_id="F">0.000000</value> -<value letter_id="G">0.000000</value> -<value letter_id="H">0.000000</value> -<value letter_id="I">0.000000</value> -<value letter_id="K">0.000000</value> -<value letter_id="L">0.000000</value> -<value letter_id="M">0.000000</value> -<value letter_id="N">0.000000</value> -<value letter_id="P">0.000000</value> -<value letter_id="Q">0.000000</value> -<value letter_id="R">0.000000</value> -<value letter_id="S">0.000000</value> -<value letter_id="T">0.000000</value> -<value letter_id="V">0.000000</value> -<value letter_id="W">0.000000</value> -<value letter_id="Y">0.000000</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">0.760000</value> -<value letter_id="C">0.000000</value> -<value letter_id="D">0.000000</value> -<value letter_id="E">0.000000</value> -<value letter_id="F">0.000000</value> -<value letter_id="G">0.000000</value> -<value letter_id="H">0.000000</value> -<value letter_id="I">0.000000</value> -<value letter_id="K">0.000000</value> -<value letter_id="L">0.000000</value> -<value letter_id="M">0.000000</value> -<value letter_id="N">0.000000</value> -<value letter_id="P">0.000000</value> -<value letter_id="Q">0.000000</value> -<value letter_id="R">0.000000</value> -<value letter_id="S">0.000000</value> -<value letter_id="T">0.240000</value> -<value letter_id="V">0.000000</value> -<value letter_id="W">0.000000</value> -<value letter_id="Y">0.000000</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">0.960000</value> -<value letter_id="C">0.040000</value> -<value letter_id="D">0.000000</value> -<value letter_id="E">0.000000</value> -<value letter_id="F">0.000000</value> -<value letter_id="G">0.000000</value> -<value letter_id="H">0.000000</value> -<value letter_id="I">0.000000</value> -<value letter_id="K">0.000000</value> -<value letter_id="L">0.000000</value> -<value letter_id="M">0.000000</value> -<value letter_id="N">0.000000</value> -<value letter_id="P">0.000000</value> -<value letter_id="Q">0.000000</value> -<value letter_id="R">0.000000</value> -<value letter_id="S">0.000000</value> -<value letter_id="T">0.000000</value> -<value letter_id="V">0.000000</value> -<value letter_id="W">0.000000</value> -<value letter_id="Y">0.000000</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">0.840000</value> -<value letter_id="C">0.000000</value> -<value letter_id="D">0.000000</value> -<value letter_id="E">0.000000</value> -<value letter_id="F">0.000000</value> -<value letter_id="G">0.120000</value> -<value letter_id="H">0.000000</value> -<value letter_id="I">0.000000</value> -<value letter_id="K">0.000000</value> -<value letter_id="L">0.000000</value> -<value letter_id="M">0.000000</value> -<value letter_id="N">0.000000</value> -<value letter_id="P">0.000000</value> -<value letter_id="Q">0.000000</value> -<value letter_id="R">0.000000</value> -<value letter_id="S">0.000000</value> -<value letter_id="T">0.040000</value> -<value letter_id="V">0.000000</value> -<value letter_id="W">0.000000</value> -<value letter_id="Y">0.000000</value> -</alphabet_array> -</alphabet_matrix> -</probabilities> -<regular_expression> -[GA][GA][GC][GA]TATA[AT]AA -</regular_expression> -<contributing_sites> -<contributing_site sequence_id="sequence_24" position="12" strand="none" pvalue="1.06e-06" > -<left_flank>AAGGCCAGGA</left_flank> -<site> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>GCCTGAGAGC</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_25" position="36" strand="none" pvalue="3.41e-06" > -<left_flank>ACAGGCCCTG</left_flank> -<site> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="C"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>GCC</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_19" position="9" strand="none" pvalue="3.41e-06" > -<left_flank>CAGGCCCTG</left_flank> -<site> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="C"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>GCCCCAGCAG</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_9" position="13" strand="none" pvalue="3.41e-06" > -<left_flank>GATTCACTGA</left_flank> -<site> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="C"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>GGCCCTCTGC</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_21" position="7" strand="none" pvalue="4.00e-06" > -<left_flank>CCAAGGA</left_flank> -<site> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>GCCCCACAAA</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_13" position="13" strand="none" pvalue="5.01e-06" > -<left_flank>CCACCAGCTT</left_flank> -<site> -<letter_ref letter_id="G"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>AGCCCTGTAC</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_23" position="15" strand="none" pvalue="6.06e-06" > -<left_flank>ATACCCAGGG</left_flank> -<site> -<letter_ref letter_id="A"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>CCTCAGCAGC</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_15" position="21" strand="none" pvalue="8.67e-06" > -<left_flank>AATCACTGAG</left_flank> -<site> -<letter_ref letter_id="G"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>GTCCCAGGGA</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_12" position="18" strand="none" pvalue="8.67e-06" > -<left_flank>CACCAGAGCT</left_flank> -<site> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>AGAAGGTTCT</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_11" position="16" strand="none" pvalue="8.67e-06" > -<left_flank>CACTATTGAA</left_flank> -<site> -<letter_ref letter_id="G"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>TTTCATTTGC</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_22" position="2" strand="none" pvalue="1.21e-05" > -<left_flank>GA</left_flank> -<site> -<letter_ref letter_id="G"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="C"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>GCCAACATCC</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_28" position="32" strand="none" pvalue="1.59e-05" > -<left_flank>CCGGCGGGGC</left_flank> -<site> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="G"/> -</site> -<right_flank>GGGGCGG</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_20" position="4" strand="none" pvalue="1.59e-05" > -<left_flank>CAGA</left_flank> -<site> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="G"/> -</site> -<right_flank>GTTCCGACCA</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_6" position="15" strand="none" pvalue="1.68e-05" > -<left_flank>CCCACTACTT</left_flank> -<site> -<letter_ref letter_id="A"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>TCATTCTGAG</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_14" position="19" strand="none" pvalue="2.03e-05" > -<left_flank>CACCAGCAAG</left_flank> -<site> -<letter_ref letter_id="G"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>GCTCAGGAGT</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_4" position="12" strand="none" pvalue="3.06e-05" > -<left_flank>CAGGTCTAAG</left_flank> -<site> -<letter_ref letter_id="A"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="C"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>CTTGGAGTCC</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_0" position="39" strand="none" pvalue="3.06e-05" > -<left_flank>CCTCGGGACG</left_flank> -<site> -<letter_ref letter_id="T"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank></right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_18" position="37" strand="none" pvalue="3.82e-05" > -<left_flank>CGTGGTCGCG</left_flank> -<site> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="C"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>GC</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_5" position="0" strand="none" pvalue="3.82e-05" > -<left_flank></left_flank> -<site> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="C"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>ATGGTCCTGT</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_29" position="30" strand="none" pvalue="4.02e-05" > -<left_flank>GCTGCCGGTG</left_flank> -<site> -<letter_ref letter_id="A"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="C"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="G"/> -</site> -<right_flank>GCCCTGGCG</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_1" position="27" strand="none" pvalue="5.52e-05" > -<left_flank>AGTCACAAGT</left_flank> -<site> -<letter_ref letter_id="G"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>GGGTCGCACG</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_3" position="14" strand="none" pvalue="5.94e-05" > -<left_flank>CCCAGGTTTC</left_flank> -<site> -<letter_ref letter_id="T"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>TCGCCGCACC</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_16" position="22" strand="none" pvalue="6.78e-05" > -<left_flank>AGTTTCAGTT</left_flank> -<site> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="C"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="C"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>attatataac</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_7" position="2" strand="none" pvalue="2.08e-04" > -<left_flank>TC</left_flank> -<site> -<letter_ref letter_id="A"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -</site> -<right_flank>AAATGTTCCT</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_8" position="13" strand="none" pvalue="4.05e-04" > -<left_flank>TATAACTCAG</left_flank> -<site> -<letter_ref letter_id="G"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>TAATTTGTAC</right_flank> -</contributing_site> -</contributing_sites> -</motif> -</motifs> -<scanned_sites_summary p_thresh="0.0001"> -<scanned_sites sequence_id="sequence_0" pvalue="1.22e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="39" pvalue="3.06e-05"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_1" pvalue="2.21e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="27" pvalue="5.52e-05"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_2" pvalue="7.29e-01" num_sites="0"></scanned_sites> -<scanned_sites sequence_id="sequence_3" pvalue="2.37e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="14" pvalue="5.94e-05"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_4" pvalue="1.22e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="12" pvalue="3.06e-05"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_5" pvalue="1.53e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="0" pvalue="3.82e-05"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_6" pvalue="6.70e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="15" pvalue="1.68e-05"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_7" pvalue="1.81e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="4" pvalue="4.54e-05"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_8" pvalue="1.61e-02" num_sites="0"></scanned_sites> -<scanned_sites sequence_id="sequence_9" pvalue="1.36e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="13" pvalue="3.41e-06"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_10" pvalue="1.99e-01" num_sites="0"></scanned_sites> -<scanned_sites sequence_id="sequence_11" pvalue="3.47e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="16" pvalue="8.67e-06"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_12" pvalue="3.47e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="18" pvalue="8.67e-06"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_13" pvalue="2.01e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="13" pvalue="5.01e-06"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_14" pvalue="8.11e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="19" pvalue="2.03e-05"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_15" pvalue="3.47e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="21" pvalue="8.67e-06"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_16" pvalue="2.71e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="22" pvalue="6.78e-05"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_17" pvalue="8.23e-02" num_sites="0"></scanned_sites> -<scanned_sites sequence_id="sequence_18" pvalue="1.53e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="37" pvalue="3.82e-05"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_19" pvalue="1.36e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="9" pvalue="3.41e-06"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_20" pvalue="6.37e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="4" pvalue="1.59e-05"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_21" pvalue="1.60e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="7" pvalue="4.00e-06"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_22" pvalue="4.83e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="2" pvalue="1.21e-05"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_23" pvalue="2.43e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="15" pvalue="6.06e-06"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_24" pvalue="4.26e-05" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="12" pvalue="1.06e-06"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_25" pvalue="1.36e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="36" pvalue="3.41e-06"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_26" pvalue="4.30e-02" num_sites="0"></scanned_sites> -<scanned_sites sequence_id="sequence_27" pvalue="4.30e-02" num_sites="0"></scanned_sites> -<scanned_sites sequence_id="sequence_28" pvalue="6.37e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="32" pvalue="1.59e-05"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_29" pvalue="1.61e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="none" position="30" pvalue="4.02e-05"/> -</scanned_sites> -</scanned_sites_summary> -</MEME>
--- a/test-data/meme_output_xml_2.xml Wed Apr 25 12:12:47 2018 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,977 +0,0 @@ -<?xml version='1.0' encoding='UTF-8' standalone='yes'?> -<!-- Document definition --> -<!DOCTYPE MEME[ -<!ELEMENT MEME ( - training_set, - model, - motifs, - scanned_sites_summary? -)> -<!ATTLIST MEME - version CDATA #REQUIRED - release CDATA #REQUIRED -> -<!-- Training-set elements --> -<!ELEMENT training_set (alphabet, ambigs, sequence*, letter_frequencies)> -<!ATTLIST training_set datafile CDATA #REQUIRED length CDATA #REQUIRED> -<!ELEMENT alphabet (letter*)> -<!ATTLIST alphabet name CDATA #REQUIRED> -<!ELEMENT ambigs (letter*)> -<!ELEMENT letter EMPTY> -<!ATTLIST letter id ID #REQUIRED> -<!ATTLIST letter symbol CDATA #REQUIRED> -<!ATTLIST letter equals CDATA #IMPLIED> -<!ATTLIST letter aliases CDATA #IMPLIED> -<!ATTLIST letter complement CDATA #IMPLIED> -<!ATTLIST letter name CDATA #IMPLIED> -<!ATTLIST letter colour CDATA #IMPLIED> -<!ELEMENT sequence EMPTY> -<!ATTLIST sequence id ID #REQUIRED - name CDATA #REQUIRED - length CDATA #REQUIRED - weight CDATA #REQUIRED -> -<!ELEMENT letter_frequencies (alphabet_array)> - -<!-- Model elements --> -<!ELEMENT model ( - command_line, - host, - type, - nmotifs, - evalue_threshold, - object_function, - min_width, - max_width, - minic, - wg, - ws, - endgaps, - minsites, - maxsites, - wnsites, - prob, - spmap, - spfuzz, - prior, - beta, - maxiter, - distance, - num_sequences, - num_positions, - seed, - seqfrac, - strands, - priors_file, - reason_for_stopping, - background_frequencies -)> -<!ELEMENT command_line (#PCDATA)*> -<!ELEMENT host (#PCDATA)*> -<!ELEMENT type (#PCDATA)*> -<!ELEMENT nmotifs (#PCDATA)*> -<!ELEMENT evalue_threshold (#PCDATA)*> -<!ELEMENT object_function (#PCDATA)*> -<!ELEMENT min_width (#PCDATA)*> -<!ELEMENT max_width (#PCDATA)*> -<!ELEMENT minic (#PCDATA)*> -<!ELEMENT wg (#PCDATA)*> -<!ELEMENT ws (#PCDATA)*> -<!ELEMENT endgaps (#PCDATA)*> -<!ELEMENT minsites (#PCDATA)*> -<!ELEMENT maxsites (#PCDATA)*> -<!ELEMENT wnsites (#PCDATA)*> -<!ELEMENT prob (#PCDATA)*> -<!ELEMENT spmap (#PCDATA)*> -<!ELEMENT spfuzz (#PCDATA)*> -<!ELEMENT prior (#PCDATA)*> -<!ELEMENT beta (#PCDATA)*> -<!ELEMENT maxiter (#PCDATA)*> -<!ELEMENT distance (#PCDATA)*> -<!ELEMENT num_sequences (#PCDATA)*> -<!ELEMENT num_positions (#PCDATA)*> -<!ELEMENT seed (#PCDATA)*> -<!ELEMENT seqfrac (#PCDATA)*> -<!ELEMENT strands (#PCDATA)*> -<!ELEMENT priors_file (#PCDATA)*> -<!ELEMENT reason_for_stopping (#PCDATA)*> -<!ELEMENT background_frequencies (alphabet_array)> -<!ATTLIST background_frequencies source CDATA #REQUIRED> - -<!-- Motif elements --> -<!ELEMENT motifs (motif*)> -<!ELEMENT motif (scores, probabilities, regular_expression?, contributing_sites)> -<!ATTLIST motif id ID #REQUIRED - name CDATA #REQUIRED - width CDATA #REQUIRED - sites CDATA #REQUIRED - llr CDATA #REQUIRED - ic CDATA #REQUIRED - re CDATA #REQUIRED - bayes_threshold CDATA #REQUIRED - e_value CDATA #REQUIRED - elapsed_time CDATA #REQUIRED - url CDATA "" -> -<!ELEMENT scores (alphabet_matrix)> -<!ELEMENT probabilities (alphabet_matrix)> -<!ELEMENT regular_expression (#PCDATA)*> - -<!-- Contributing site elements --> -<!-- Contributing sites are motif occurences found during the motif discovery phase --> -<!ELEMENT contributing_sites (contributing_site*)> -<!ELEMENT contributing_site (left_flank, site, right_flank)> -<!ATTLIST contributing_site sequence_id IDREF #REQUIRED - position CDATA #REQUIRED - strand (plus|minus|none) 'none' - pvalue CDATA #REQUIRED -> -<!-- The left_flank contains the sequence for 10 bases to the left of the motif start --> -<!ELEMENT left_flank (#PCDATA)> -<!-- The site contains the sequence for the motif instance --> -<!ELEMENT site (letter_ref*)> -<!-- The right_flank contains the sequence for 10 bases to the right of the motif end --> -<!ELEMENT right_flank (#PCDATA)> - -<!-- Scanned site elements --> -<!-- Scanned sites are motif occurences found during the sequence scan phase --> -<!ELEMENT scanned_sites_summary (scanned_sites*)> -<!ATTLIST scanned_sites_summary p_thresh CDATA #REQUIRED> -<!ELEMENT scanned_sites (scanned_site*)> -<!ATTLIST scanned_sites sequence_id IDREF #REQUIRED - pvalue CDATA #REQUIRED - num_sites CDATA #REQUIRED> -<!ELEMENT scanned_site EMPTY> -<!ATTLIST scanned_site motif_id IDREF #REQUIRED - strand (plus|minus|none) 'none' - position CDATA #REQUIRED - pvalue CDATA #REQUIRED> - -<!-- Utility elements --> -<!-- A reference to a letter in the alphabet --> -<!ELEMENT letter_ref EMPTY> -<!ATTLIST letter_ref letter_id IDREF #REQUIRED> -<!-- A alphabet-array contains one floating point value for each letter in an alphabet --> -<!ELEMENT alphabet_array (value*)> -<!ELEMENT value (#PCDATA)> -<!ATTLIST value letter_id IDREF #REQUIRED> - -<!-- A alphabet_matrix contains one alphabet_array for each position in a motif --> -<!ELEMENT alphabet_matrix (alphabet_array*)> - -]> -<!-- Begin document body --> -<MEME version="4.11.2" release="Thu May 05 14:58:55 2016 -0700"> -<training_set datafile="Galaxy_FASTA_Input" length="30"> -<alphabet name="DNA" like="dna"> -<letter id="A" symbol="A" complement="T" name="Adenine" colour="CC0000"/> -<letter id="C" symbol="C" complement="G" name="Cytosine" colour="0000CC"/> -<letter id="G" symbol="G" complement="C" name="Guanine" colour="FFB300"/> -<letter id="T" symbol="T" aliases="U" complement="A" name="Thymine" colour="008000"/> -<letter id="N" symbol="N" aliases="X." equals="ACGT" name="Any base"/> -<letter id="V" symbol="V" equals="ACG" name="Not T"/> -<letter id="H" symbol="H" equals="ACT" name="Not G"/> -<letter id="D" symbol="D" equals="AGT" name="Not C"/> -<letter id="B" symbol="B" equals="CGT" name="Not A"/> -<letter id="M" symbol="M" equals="AC" name="Amino"/> -<letter id="R" symbol="R" equals="AG" name="Purine"/> -<letter id="W" symbol="W" equals="AT" name="Weak"/> -<letter id="S" symbol="S" equals="CG" name="Strong"/> -<letter id="Y" symbol="Y" equals="CT" name="Pyrimidine"/> -<letter id="K" symbol="K" equals="GT" name="Keto"/> -</alphabet> -<sequence id="sequence_0" name="chr21_19617074_19617124_+" length="50" weight="1.000000" /> -<sequence id="sequence_1" name="chr21_26934381_26934431_+" length="50" weight="1.000000" /> -<sequence id="sequence_2" name="chr21_28217753_28217803_-" length="50" weight="1.000000" /> -<sequence id="sequence_3" name="chr21_31710037_31710087_-" length="50" weight="1.000000" /> -<sequence id="sequence_4" name="chr21_31744582_31744632_-" length="50" weight="1.000000" /> -<sequence id="sequence_5" name="chr21_31768316_31768366_+" length="50" weight="1.000000" /> -<sequence id="sequence_6" name="chr21_31914206_31914256_-" length="50" weight="1.000000" /> -<sequence id="sequence_7" name="chr21_31933633_31933683_-" length="50" weight="1.000000" /> -<sequence id="sequence_8" name="chr21_31962741_31962791_-" length="50" weight="1.000000" /> -<sequence id="sequence_9" name="chr21_31964683_31964733_+" length="50" weight="1.000000" /> -<sequence id="sequence_10" name="chr21_31973364_31973414_+" length="50" weight="1.000000" /> -<sequence id="sequence_11" name="chr21_31992870_31992920_+" length="50" weight="1.000000" /> -<sequence id="sequence_12" name="chr21_32185595_32185645_-" length="50" weight="1.000000" /> -<sequence id="sequence_13" name="chr21_32202076_32202126_-" length="50" weight="1.000000" /> -<sequence id="sequence_14" name="chr21_32253899_32253949_-" length="50" weight="1.000000" /> -<sequence id="sequence_15" name="chr21_32410820_32410870_-" length="50" weight="1.000000" /> -<sequence id="sequence_16" name="chr21_36411748_36411798_-" length="50" weight="1.000000" /> -<sequence id="sequence_17" name="chr21_37838750_37838800_-" length="50" weight="1.000000" /> -<sequence id="sequence_18" name="chr21_45705687_45705737_+" length="50" weight="1.000000" /> -<sequence id="sequence_19" name="chr21_45971413_45971463_-" length="50" weight="1.000000" /> -<sequence id="sequence_20" name="chr21_45978668_45978718_-" length="50" weight="1.000000" /> -<sequence id="sequence_21" name="chr21_45993530_45993580_+" length="50" weight="1.000000" /> -<sequence id="sequence_22" name="chr21_46020421_46020471_+" length="50" weight="1.000000" /> -<sequence id="sequence_23" name="chr21_46031920_46031970_+" length="50" weight="1.000000" /> -<sequence id="sequence_24" name="chr21_46046964_46047014_+" length="50" weight="1.000000" /> -<sequence id="sequence_25" name="chr21_46057197_46057247_+" length="50" weight="1.000000" /> -<sequence id="sequence_26" name="chr21_46086869_46086919_-" length="50" weight="1.000000" /> -<sequence id="sequence_27" name="chr21_46102103_46102153_-" length="50" weight="1.000000" /> -<sequence id="sequence_28" name="chr21_47517957_47518007_+" length="50" weight="1.000000" /> -<sequence id="sequence_29" name="chr21_47575506_47575556_-" length="50" weight="1.000000" /> -<letter_frequencies> -<alphabet_array> -<value letter_id="A">0.294</value> -<value letter_id="C">0.231</value> -<value letter_id="G">0.257</value> -<value letter_id="T">0.217</value> -</alphabet_array> -</letter_frequencies> -</training_set> -<model> -<command_line>meme /Users/gvk/work/git_workspace/galaxy/database/files/002/dataset_2490.dat -o /Users/gvk/work/git_workspace/galaxy/database/job_working_directory/001/1929/dataset_2578_files -nostatus -sf Galaxy_FASTA_Input -dna -mod zoops -nmotifs 1 -wnsites 0.8 -minw 8 -maxw 50 -wg 11 -ws 1 -maxiter 50 -distance 0.001 -prior dirichlet -b 0.01 -plib /Users/gvk/work/git_workspace/galaxy/database/files/002/dataset_2577.dat -spmap uni -spfuzz 0.5 </command_line> -<host>MacBook-Pro-2.local</host> -<type>zoops</type> -<nmotifs>1</nmotifs> -<evalue_threshold>inf</evalue_threshold> -<object_function>E-value of product of p-values</object_function> -<use_llr>0</use_llr> -<min_width>8</min_width> -<max_width>50</max_width> -<wg>11</wg> -<ws>1</ws> -<endgaps>yes</endgaps> -<substring>yes</substring> -<minsites>2</minsites> -<maxsites>30</maxsites> -<wnsites>0.8</wnsites> -<spmap>uni</spmap> -<spfuzz>0.5</spfuzz> -<prior>dirichlet</prior> -<beta>0.01</beta> -<maxiter>50</maxiter> -<distance>0.001</distance> -<num_sequences>30</num_sequences> -<num_positions>1500</num_positions> -<seed>0</seed> -<ctfrac>-1</ctfrac> -<maxwords>-1</maxwords> -<strands>forward</strands> -<priors_file>dataset_2577.dat</priors_file> -<reason_for_stopping>Stopped because requested number of motifs (1) found.</reason_for_stopping> -<background_frequencies source="dataset with add-one prior applied"> -<alphabet_array> -<value letter_id="A">0.294</value> -<value letter_id="C">0.231</value> -<value letter_id="G">0.257</value> -<value letter_id="T">0.217</value> -</alphabet_array> -</background_frequencies> -</model> -<motifs> -<motif id="motif_1" name="1" width="11" sites="30" ic="13.0" re="12.2" llr="254" e_value="5.1e-040" bayes_threshold="5.2854" elapsed_time="0.168106"> -<scores> -<alphabet_matrix> -<alphabet_array> -<value letter_id="A">-14</value> -<value letter_id="C">-179</value> -<value letter_id="G">114</value> -<value letter_id="T">-112</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">3</value> -<value letter_id="C">-1155</value> -<value letter_id="G">137</value> -<value letter_id="T">-270</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">-114</value> -<value letter_id="C">20</value> -<value letter_id="G">86</value> -<value letter_id="T">-71</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">3</value> -<value letter_id="C">-279</value> -<value letter_id="G">122</value> -<value letter_id="T">-170</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">-1155</value> -<value letter_id="C">-1155</value> -<value letter_id="G">-295</value> -<value letter_id="T">215</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">156</value> -<value letter_id="C">-179</value> -<value letter_id="G">-1155</value> -<value letter_id="T">-170</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">-1155</value> -<value letter_id="C">-1155</value> -<value letter_id="G">-1155</value> -<value letter_id="T">220</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">172</value> -<value letter_id="C">-279</value> -<value letter_id="G">-1155</value> -<value letter_id="T">-1155</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">125</value> -<value letter_id="C">-1155</value> -<value letter_id="G">-1155</value> -<value letter_id="T">46</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">167</value> -<value letter_id="C">-179</value> -<value letter_id="G">-1155</value> -<value letter_id="T">-1155</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">144</value> -<value letter_id="C">-1155</value> -<value letter_id="G">-63</value> -<value letter_id="T">-270</value> -</alphabet_array> -</alphabet_matrix> -</scores> -<probabilities> -<alphabet_matrix> -<alphabet_array> -<value letter_id="A">0.266667</value> -<value letter_id="C">0.066667</value> -<value letter_id="G">0.566667</value> -<value letter_id="T">0.100000</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">0.300000</value> -<value letter_id="C">0.000000</value> -<value letter_id="G">0.666667</value> -<value letter_id="T">0.033333</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">0.133333</value> -<value letter_id="C">0.266667</value> -<value letter_id="G">0.466667</value> -<value letter_id="T">0.133333</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">0.300000</value> -<value letter_id="C">0.033333</value> -<value letter_id="G">0.600000</value> -<value letter_id="T">0.066667</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">0.000000</value> -<value letter_id="C">0.000000</value> -<value letter_id="G">0.033333</value> -<value letter_id="T">0.966667</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">0.866667</value> -<value letter_id="C">0.066667</value> -<value letter_id="G">0.000000</value> -<value letter_id="T">0.066667</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">0.000000</value> -<value letter_id="C">0.000000</value> -<value letter_id="G">0.000000</value> -<value letter_id="T">1.000000</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">0.966667</value> -<value letter_id="C">0.033333</value> -<value letter_id="G">0.000000</value> -<value letter_id="T">0.000000</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">0.700000</value> -<value letter_id="C">0.000000</value> -<value letter_id="G">0.000000</value> -<value letter_id="T">0.300000</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">0.933333</value> -<value letter_id="C">0.066667</value> -<value letter_id="G">0.000000</value> -<value letter_id="T">0.000000</value> -</alphabet_array> -<alphabet_array> -<value letter_id="A">0.800000</value> -<value letter_id="C">0.000000</value> -<value letter_id="G">0.166667</value> -<value letter_id="T">0.033333</value> -</alphabet_array> -</alphabet_matrix> -</probabilities> -<regular_expression> -[GA][GA][GC][GA]TATA[AT]AA -</regular_expression> -<contributing_sites> -<contributing_site sequence_id="sequence_24" position="12" strand="plus" pvalue="4.51e-07" > -<left_flank>AAGGCCAGGA</left_flank> -<site> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>GCCTGAGAGC</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_23" position="15" strand="plus" pvalue="2.22e-06" > -<left_flank>ATACCCAGGG</left_flank> -<site> -<letter_ref letter_id="A"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>CCTCAGCAGC</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_13" position="13" strand="plus" pvalue="2.74e-06" > -<left_flank>CCACCAGCTT</left_flank> -<site> -<letter_ref letter_id="G"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>AGCCCTGTAC</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_25" position="36" strand="plus" pvalue="4.86e-06" > -<left_flank>ACAGGCCCTG</left_flank> -<site> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="C"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>GCC</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_21" position="7" strand="plus" pvalue="4.86e-06" > -<left_flank>CCAAGGA</left_flank> -<site> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>GCCCCACAAA</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_19" position="9" strand="plus" pvalue="4.86e-06" > -<left_flank>CAGGCCCTG</left_flank> -<site> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="C"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>GCCCCAGCAG</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_9" position="13" strand="plus" pvalue="4.86e-06" > -<left_flank>GATTCACTGA</left_flank> -<site> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="C"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>GGCCCTCTGC</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_28" position="32" strand="plus" pvalue="6.48e-06" > -<left_flank>CCGGCGGGGC</left_flank> -<site> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="G"/> -</site> -<right_flank>GGGGCGG</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_20" position="4" strand="plus" pvalue="6.48e-06" > -<left_flank>CAGA</left_flank> -<site> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="G"/> -</site> -<right_flank>GTTCCGACCA</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_12" position="18" strand="plus" pvalue="6.48e-06" > -<left_flank>CACCAGAGCT</left_flank> -<site> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>AGAAGGTTCT</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_15" position="21" strand="plus" pvalue="1.38e-05" > -<left_flank>AATCACTGAG</left_flank> -<site> -<letter_ref letter_id="G"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>GTCCCAGGGA</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_11" position="16" strand="plus" pvalue="1.38e-05" > -<left_flank>CACTATTGAA</left_flank> -<site> -<letter_ref letter_id="G"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>TTTCATTTGC</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_0" position="39" strand="plus" pvalue="1.41e-05" > -<left_flank>CCTCGGGACG</left_flank> -<site> -<letter_ref letter_id="T"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank></right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_6" position="15" strand="plus" pvalue="1.61e-05" > -<left_flank>CCCACTACTT</left_flank> -<site> -<letter_ref letter_id="A"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>TCATTCTGAG</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_22" position="2" strand="plus" pvalue="1.95e-05" > -<left_flank>GA</left_flank> -<site> -<letter_ref letter_id="G"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="C"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>GCCAACATCC</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_14" position="17" strand="plus" pvalue="1.95e-05" > -<left_flank>CCCACCAGCA</left_flank> -<site> -<letter_ref letter_id="A"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>AAGCTCAGGA</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_18" position="37" strand="plus" pvalue="2.16e-05" > -<left_flank>CGTGGTCGCG</left_flank> -<site> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="C"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>GC</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_29" position="30" strand="plus" pvalue="3.04e-05" > -<left_flank>GCTGCCGGTG</left_flank> -<site> -<letter_ref letter_id="A"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="C"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="G"/> -</site> -<right_flank>GCCCTGGCG</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_4" position="12" strand="plus" pvalue="3.04e-05" > -<left_flank>CAGGTCTAAG</left_flank> -<site> -<letter_ref letter_id="A"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="C"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>CTTGGAGTCC</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_5" position="0" strand="plus" pvalue="3.67e-05" > -<left_flank></left_flank> -<site> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="C"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>ATGGTCCTGT</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_1" position="27" strand="plus" pvalue="3.93e-05" > -<left_flank>AGTCACAAGT</left_flank> -<site> -<letter_ref letter_id="G"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>GGGTCGCACG</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_7" position="4" strand="plus" pvalue="5.65e-05" > -<left_flank>TCAG</left_flank> -<site> -<letter_ref letter_id="A"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>ATGTTCCTGT</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_3" position="14" strand="plus" pvalue="6.24e-05" > -<left_flank>CCCAGGTTTC</left_flank> -<site> -<letter_ref letter_id="T"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>TCGCCGCACC</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_16" position="22" strand="plus" pvalue="7.15e-05" > -<left_flank>AGTTTCAGTT</left_flank> -<site> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="C"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="C"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>attatataac</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_27" position="36" strand="plus" pvalue="1.39e-04" > -<left_flank>TGCCTGGGTC</left_flank> -<site> -<letter_ref letter_id="C"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="G"/> -</site> -<right_flank>GCT</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_26" position="37" strand="plus" pvalue="1.39e-04" > -<left_flank>TGCCTGGGCC</left_flank> -<site> -<letter_ref letter_id="C"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="G"/> -</site> -<right_flank>GC</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_17" position="2" strand="plus" pvalue="4.81e-04" > -<left_flank>ga</left_flank> -<site> -<letter_ref letter_id="T"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>ggggcctcac</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_8" position="13" strand="plus" pvalue="8.57e-04" > -<left_flank>TATAACTCAG</left_flank> -<site> -<letter_ref letter_id="G"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>TAATTTGTAC</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_10" position="7" strand="plus" pvalue="1.47e-03" > -<left_flank>aaactta</left_flank> -<site> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="C"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="C"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="A"/> -</site> -<right_flank>acttaaaact</right_flank> -</contributing_site> -<contributing_site sequence_id="sequence_2" position="26" strand="plus" pvalue="2.64e-03" > -<left_flank>GGTGGGGGTG</left_flank> -<site> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="G"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="T"/> -<letter_ref letter_id="C"/> -<letter_ref letter_id="A"/> -<letter_ref letter_id="C"/> -<letter_ref letter_id="T"/> -</site> -<right_flank>GGTCCACTAT</right_flank> -</contributing_site> -</contributing_sites> -</motif> -</motifs> -<scanned_sites_summary p_thresh="0.0001"> -<scanned_sites sequence_id="sequence_0" pvalue="5.63e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="39" pvalue="1.41e-05"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_1" pvalue="1.57e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="27" pvalue="3.93e-05"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_2" pvalue="1.00e-01" num_sites="0"></scanned_sites> -<scanned_sites sequence_id="sequence_3" pvalue="2.49e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="14" pvalue="6.24e-05"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_4" pvalue="1.22e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="12" pvalue="3.04e-05"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_5" pvalue="1.47e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="0" pvalue="3.67e-05"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_6" pvalue="6.45e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="15" pvalue="1.61e-05"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_7" pvalue="2.26e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="4" pvalue="5.65e-05"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_8" pvalue="3.37e-02" num_sites="0"></scanned_sites> -<scanned_sites sequence_id="sequence_9" pvalue="1.95e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="13" pvalue="4.86e-06"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_10" pvalue="5.73e-02" num_sites="0"></scanned_sites> -<scanned_sites sequence_id="sequence_11" pvalue="5.52e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="16" pvalue="1.38e-05"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_12" pvalue="2.59e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="18" pvalue="6.48e-06"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_13" pvalue="1.10e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="13" pvalue="2.74e-06"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_14" pvalue="7.78e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="17" pvalue="1.95e-05"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_15" pvalue="5.52e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="21" pvalue="1.38e-05"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_16" pvalue="2.85e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="22" pvalue="7.15e-05"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_17" pvalue="1.90e-02" num_sites="0"></scanned_sites> -<scanned_sites sequence_id="sequence_18" pvalue="8.63e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="37" pvalue="2.16e-05"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_19" pvalue="1.95e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="9" pvalue="4.86e-06"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_20" pvalue="2.59e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="4" pvalue="6.48e-06"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_21" pvalue="1.95e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="7" pvalue="4.86e-06"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_22" pvalue="7.78e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="2" pvalue="1.95e-05"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_23" pvalue="8.89e-05" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="15" pvalue="2.22e-06"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_24" pvalue="1.80e-05" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="12" pvalue="4.51e-07"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_25" pvalue="1.95e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="36" pvalue="4.86e-06"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_26" pvalue="5.54e-03" num_sites="0"></scanned_sites> -<scanned_sites sequence_id="sequence_27" pvalue="5.54e-03" num_sites="0"></scanned_sites> -<scanned_sites sequence_id="sequence_28" pvalue="2.59e-04" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="32" pvalue="6.48e-06"/> -</scanned_sites> -<scanned_sites sequence_id="sequence_29" pvalue="1.22e-03" num_sites="1"><scanned_site motif_id="motif_1" strand="plus" position="30" pvalue="3.04e-05"/> -</scanned_sites> -</scanned_sites_summary> -</MEME>
--- a/test-data/meme_psp_gen_reports_output.tabular Wed Apr 25 12:12:47 2018 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,19 +0,0 @@ -540 bases or amino acids -0.5 0.5 4 4 -0.5 0.5 6 6 -0.5 0.5 7 7 -0.5 0.5 8 8 -0.5 0.5 9 9 -0.5 0.5 10 10 -0.5 0.5 11 11 -0.5 0.5 12 12 -0.5 0.5 13 13 -0.5 0.5 14 14 -0.5 0.5 15 15 -0.5 0.5 16 16 -0.5 0.5 17 17 -0.5 0.5 18 18 -0.5 0.5 19 19 -0.5 0.5 20 20 - -score 0.9 occurred 483 times
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/meme_psp_output_test1.memepsp Thu May 17 14:11:00 2018 -0400 @@ -0,0 +1,6 @@ +>BBP_PIEBR 20 scaledmin = 0.1 scaledmax = 0.9 +0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +>ICYA_MANSE 20 scaledmin = 0.1 scaledmax = 0.9 +0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +>LACB_BOVIN 20 scaledmin = 0.1 scaledmax = 0.9 +0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/meme_psp_output_test1.tabular Thu May 17 14:11:00 2018 -0400 @@ -0,0 +1,21 @@ +meme_psp_input_pos.fa: 540 bases or amino acids +meme_psp_input_neg.fa: 540 bases or amino acids +meme_psp_input_pos.fa meme_psp_input_neg.fa 0.5 0.5 4 4 +meme_psp_input_pos.fa meme_psp_input_neg.fa 0.5 0.5 5 5 +meme_psp_input_pos.fa meme_psp_input_neg.fa 0.5 0.5 6 6 +meme_psp_input_pos.fa meme_psp_input_neg.fa 0.5 0.5 7 7 +meme_psp_input_pos.fa meme_psp_input_neg.fa 0.5 0.5 8 8 +meme_psp_input_pos.fa meme_psp_input_neg.fa 0.5 0.5 9 9 +meme_psp_input_pos.fa meme_psp_input_neg.fa 0.5 0.5 10 10 +meme_psp_input_pos.fa meme_psp_input_neg.fa 0.5 0.5 11 11 +meme_psp_input_pos.fa meme_psp_input_neg.fa 0.5 0.5 12 12 +meme_psp_input_pos.fa meme_psp_input_neg.fa 0.5 0.5 13 13 +meme_psp_input_pos.fa meme_psp_input_neg.fa 0.5 0.5 14 14 +meme_psp_input_pos.fa meme_psp_input_neg.fa 0.5 0.5 15 15 +meme_psp_input_pos.fa meme_psp_input_neg.fa 0.5 0.5 16 16 +meme_psp_input_pos.fa meme_psp_input_neg.fa 0.5 0.5 17 17 +meme_psp_input_pos.fa meme_psp_input_neg.fa 0.5 0.5 18 18 +meme_psp_input_pos.fa meme_psp_input_neg.fa 0.5 0.5 19 19 +meme_psp_input_pos.fa meme_psp_input_neg.fa 0.5 0.5 20 20 + +score 0.9 occurred 483 times
--- a/test-data/meme_psp_protein_input.fasta Wed Apr 25 12:12:47 2018 -0400 +++ b/test-data/meme_psp_protein_input.fasta Thu May 17 14:11:00 2018 -0400 @@ -3,13 +3,11 @@ DGKKASVYNSFVSNGVKEYMEGDLEIAPDAKYTKQGKYVMTFKFGQRVVN LVPWVLATDYKNYAINYNCDYHPDKKAHSIHAWILSKSKVLEGNTKEVVD NVLKTFSHLIDASKFISNDFSEAACQYSTTYSLTGPDRH - >LACB_BOVIN MKCLLLALALTCGAQALIVTQTMKGLDIQKVAGTWYSLAMAASDISLLDA QSAPLRVYVEELKPTPEGDLEILLQKWENGECAQKKIIAEKTKIPAVFKI DALNENKVLVLDTDYKKYLLFCMENSAEPEQSLACQCLVRTPEVDDEALE KFDKALKALPMHIRLSFNPTQLEEQCHI - >BBP_PIEBR NVYHDGACPEVKPVDNFDWSNYHGKWWEVAKYPNSVEKYGKCGWAEYTPE GKSVKVSNYHVIHGKEYFIEGTAYPVGDSKIGKIYHKLTYGGVTKENVFN
--- a/test-data/motif1.gff Wed Apr 25 12:12:47 2018 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,100 +0,0 @@ -##gff-version 3 -phiX174 fimo polypeptide_motif 1 11 78.3 + . Name=1;ID=1-57-phiX174;pvalue=1.46e-08;sequence=GAGTTTTATCG; -phiX174 fimo polypeptide_motif 3 13 57.5 + . Name=1;ID=1-471-phiX174;pvalue=1.79e-06;sequence=GTTTTATCGCT; -phiX174 fimo polypeptide_motif 7 17 45 + . Name=1;ID=1-1378-phiX174;pvalue=3.18e-05;sequence=TATCGCTTCCA; -phiX174 fimo polypeptide_motif 10 20 53.9 + . Name=1;ID=1-605-phiX174;pvalue=4.1e-06;sequence=CGCTTCCATGA; -phiX174 fimo polypeptide_motif 17 27 40.2 + . Name=1;ID=1-1887-phiX174;pvalue=9.55e-05;sequence=ATGACGCAGAA; -phiX174 fimo polypeptide_motif 18 28 45.3 + . Name=1;ID=1-1349-phiX174;pvalue=2.98e-05;sequence=TGACGCAGAAG; -phiX174 fimo polypeptide_motif 19 29 55.8 + . Name=1;ID=1-527-phiX174;pvalue=2.6e-06;sequence=GACGCAGAAGT; -phiX174 fimo polypeptide_motif 21 31 41.5 + . Name=1;ID=1-1705-phiX174;pvalue=7.07e-05;sequence=CGCAGAAGTTA; -phiX174 fimo polypeptide_motif 22 32 44.6 + . Name=1;ID=1-1404-phiX174;pvalue=3.44e-05;sequence=GCAGAAGTTAA; -phiX174 fimo polypeptide_motif 24 34 79.1 + . Name=1;ID=1-53-phiX174;pvalue=1.23e-08;sequence=AGAAGTTAACA; -phiX174 fimo polypeptide_motif 25 35 45.3 + . Name=1;ID=1-1347-phiX174;pvalue=2.97e-05;sequence=GAAGTTAACAC; -phiX174 fimo polypeptide_motif 26 36 59.2 + . Name=1;ID=1-417-phiX174;pvalue=1.19e-06;sequence=AAGTTAACACT; -phiX174 fimo polypeptide_motif 30 40 44.7 + . Name=1;ID=1-1399-phiX174;pvalue=3.4e-05;sequence=TAACACTTTCG; -phiX174 fimo polypeptide_motif 37 47 72.4 + . Name=1;ID=1-98-phiX174;pvalue=5.79e-08;sequence=TTCGGATATTT; -phiX174 fimo polypeptide_motif 39 49 65.3 + . Name=1;ID=1-213-phiX174;pvalue=2.92e-07;sequence=CGGATATTTCT; -phiX174 fimo polypeptide_motif 41 51 55.3 + . Name=1;ID=1-548-phiX174;pvalue=2.97e-06;sequence=GATATTTCTGA; -phiX174 fimo polypeptide_motif 43 53 58.4 + . Name=1;ID=1-442-phiX174;pvalue=1.43e-06;sequence=TATTTCTGATG; -phiX174 fimo polypeptide_motif 46 56 53.7 + . Name=1;ID=1-617-phiX174;pvalue=4.23e-06;sequence=TTCTGATGAGT; -phiX174 fimo polypeptide_motif 50 60 45.4 + . Name=1;ID=1-1333-phiX174;pvalue=2.86e-05;sequence=GATGAGTCGAA; -phiX174 fimo polypeptide_motif 51 61 48.4 + . Name=1;ID=1-1094-phiX174;pvalue=1.44e-05;sequence=ATGAGTCGAAA; -phiX174 fimo polypeptide_motif 52 62 83.9 + . Name=1;ID=1-22-phiX174;pvalue=4.06e-09;sequence=TGAGTCGAAAA; -phiX174 fimo polypeptide_motif 53 63 53.9 + . Name=1;ID=1-601-phiX174;pvalue=4.03e-06;sequence=GAGTCGAAAAA; -phiX174 fimo polypeptide_motif 54 64 62.9 + . Name=1;ID=1-297-phiX174;pvalue=5.16e-07;sequence=AGTCGAAAAAT; -phiX174 fimo polypeptide_motif 55 65 52.8 + . Name=1;ID=1-675-phiX174;pvalue=5.26e-06;sequence=GTCGAAAAATT; -phiX174 fimo polypeptide_motif 56 66 41.4 + . Name=1;ID=1-1713-phiX174;pvalue=7.2e-05;sequence=TCGAAAAATTA; -phiX174 fimo polypeptide_motif 58 68 43.4 + . Name=1;ID=1-1500-phiX174;pvalue=4.56e-05;sequence=GAAAAATTATC; -phiX174 fimo polypeptide_motif 59 69 59.6 + . Name=1;ID=1-409-phiX174;pvalue=1.1e-06;sequence=AAAAATTATCT; -phiX174 fimo polypeptide_motif 61 71 61.8 + . Name=1;ID=1-329-phiX174;pvalue=6.52e-07;sequence=AAATTATCTTG; -phiX174 fimo polypeptide_motif 63 73 59.2 + . Name=1;ID=1-419-phiX174;pvalue=1.2e-06;sequence=ATTATCTTGAT; -phiX174 fimo polypeptide_motif 65 75 53.3 + . Name=1;ID=1-643-phiX174;pvalue=4.66e-06;sequence=TATCTTGATAA; -phiX174 fimo polypeptide_motif 66 76 51.8 + . Name=1;ID=1-737-phiX174;pvalue=6.54e-06;sequence=ATCTTGATAAA; -phiX174 fimo polypeptide_motif 67 77 73.2 + . Name=1;ID=1-89-phiX174;pvalue=4.78e-08;sequence=TCTTGATAAAG; -phiX174 fimo polypeptide_motif 69 79 63.8 + . Name=1;ID=1-268-phiX174;pvalue=4.15e-07;sequence=TTGATAAAGCA; -phiX174 fimo polypeptide_motif 71 81 40.2 + . Name=1;ID=1-1882-phiX174;pvalue=9.49e-05;sequence=GATAAAGCAGG; -phiX174 fimo polypeptide_motif 73 83 45.4 + . Name=1;ID=1-1334-phiX174;pvalue=2.87e-05;sequence=TAAAGCAGGAA; -phiX174 fimo polypeptide_motif 74 84 50.9 + . Name=1;ID=1-832-phiX174;pvalue=8.05e-06;sequence=AAAGCAGGAAT; -phiX174 fimo polypeptide_motif 76 86 52.2 + . Name=1;ID=1-710-phiX174;pvalue=5.96e-06;sequence=AGCAGGAATTA; -phiX174 fimo polypeptide_motif 78 88 51.8 + . Name=1;ID=1-741-phiX174;pvalue=6.65e-06;sequence=CAGGAATTACT; -phiX174 fimo polypeptide_motif 79 89 45 + . Name=1;ID=1-1369-phiX174;pvalue=3.16e-05;sequence=AGGAATTACTA; -phiX174 fimo polypeptide_motif 80 90 43.3 + . Name=1;ID=1-1511-phiX174;pvalue=4.63e-05;sequence=GGAATTACTAC; -phiX174 fimo polypeptide_motif 81 91 59.8 + . Name=1;ID=1-402-phiX174;pvalue=1.05e-06;sequence=GAATTACTACT; -phiX174 fimo polypeptide_motif 82 92 46.9 + . Name=1;ID=1-1205-phiX174;pvalue=2.03e-05;sequence=AATTACTACTG; -phiX174 fimo polypeptide_motif 88 98 41.2 + . Name=1;ID=1-1744-phiX174;pvalue=7.51e-05;sequence=TACTGCTTGTT; -phiX174 fimo polypeptide_motif 91 101 53.6 + . Name=1;ID=1-621-phiX174;pvalue=4.33e-06;sequence=TGCTTGTTTAC; -phiX174 fimo polypeptide_motif 92 102 44.8 + . Name=1;ID=1-1388-phiX174;pvalue=3.31e-05;sequence=GCTTGTTTACG; -phiX174 fimo polypeptide_motif 93 103 43.2 + . Name=1;ID=1-1525-phiX174;pvalue=4.82e-05;sequence=CTTGTTTACGA; -phiX174 fimo polypeptide_motif 95 105 61.9 + . Name=1;ID=1-327-phiX174;pvalue=6.5e-07;sequence=TGTTTACGAAT; -phiX174 fimo polypeptide_motif 96 106 42.9 + . Name=1;ID=1-1553-phiX174;pvalue=5.08e-05;sequence=GTTTACGAATT; -phiX174 fimo polypeptide_motif 98 108 45.4 + . Name=1;ID=1-1340-phiX174;pvalue=2.9e-05;sequence=TTACGAATTAA; -phiX174 fimo polypeptide_motif 99 109 73.5 + . Name=1;ID=1-88-phiX174;pvalue=4.48e-08;sequence=TACGAATTAAA; -phiX174 fimo polypeptide_motif 100 110 53 + . Name=1;ID=1-661-phiX174;pvalue=4.99e-06;sequence=ACGAATTAAAT; -phiX174 fimo polypeptide_motif 102 112 75.6 + . Name=1;ID=1-72-phiX174;pvalue=2.75e-08;sequence=GAATTAAATCG; -phiX174 fimo polypeptide_motif 104 114 52.2 + . Name=1;ID=1-713-phiX174;pvalue=6.05e-06;sequence=ATTAAATCGAA; -phiX174 fimo polypeptide_motif 106 116 59.6 + . Name=1;ID=1-407-phiX174;pvalue=1.09e-06;sequence=TAAATCGAAGT; -phiX174 fimo polypeptide_motif 112 122 41.6 + . Name=1;ID=1-1683-phiX174;pvalue=6.85e-05;sequence=GAAGTGGACTG; -phiX174 fimo polypeptide_motif 114 124 45.3 + . Name=1;ID=1-1342-phiX174;pvalue=2.92e-05;sequence=AGTGGACTGCT; -phiX174 fimo polypeptide_motif 118 128 56.2 + . Name=1;ID=1-512-phiX174;pvalue=2.38e-06;sequence=GACTGCTGGCG; -phiX174 fimo polypeptide_motif 122 132 51.4 + . Name=1;ID=1-774-phiX174;pvalue=7.15e-06;sequence=GCTGGCGGAAA; -phiX174 fimo polypeptide_motif 123 133 43.1 + . Name=1;ID=1-1533-phiX174;pvalue=4.93e-05;sequence=CTGGCGGAAAA; -phiX174 fimo polypeptide_motif 124 134 48.6 + . Name=1;ID=1-1085-phiX174;pvalue=1.38e-05;sequence=TGGCGGAAAAT; -phiX174 fimo polypeptide_motif 125 135 68.3 + . Name=1;ID=1-146-phiX174;pvalue=1.49e-07;sequence=GGCGGAAAATG; -phiX174 fimo polypeptide_motif 126 136 46.4 + . Name=1;ID=1-1243-phiX174;pvalue=2.27e-05;sequence=GCGGAAAATGA; -phiX174 fimo polypeptide_motif 128 138 58.3 + . Name=1;ID=1-446-phiX174;pvalue=1.48e-06;sequence=GGAAAATGAGA; -phiX174 fimo polypeptide_motif 129 139 43.2 + . Name=1;ID=1-1522-phiX174;pvalue=4.78e-05;sequence=GAAAATGAGAA; -phiX174 fimo polypeptide_motif 130 140 54.1 + . Name=1;ID=1-595-phiX174;pvalue=3.92e-06;sequence=AAAATGAGAAA; -phiX174 fimo polypeptide_motif 131 141 76 + . Name=1;ID=1-68-phiX174;pvalue=2.49e-08;sequence=AAATGAGAAAA; -phiX174 fimo polypeptide_motif 132 142 51.2 + . Name=1;ID=1-800-phiX174;pvalue=7.57e-06;sequence=AATGAGAAAAT; -phiX174 fimo polypeptide_motif 133 143 56.2 + . Name=1;ID=1-513-phiX174;pvalue=2.41e-06;sequence=ATGAGAAAATT; -phiX174 fimo polypeptide_motif 134 144 41.1 + . Name=1;ID=1-1761-phiX174;pvalue=7.83e-05;sequence=TGAGAAAATTC; -phiX174 fimo polypeptide_motif 135 145 50.3 + . Name=1;ID=1-910-phiX174;pvalue=9.39e-06;sequence=GAGAAAATTCG; -phiX174 fimo polypeptide_motif 136 146 43.3 + . Name=1;ID=1-1517-phiX174;pvalue=4.66e-05;sequence=AGAAAATTCGA; -phiX174 fimo polypeptide_motif 139 149 54.2 + . Name=1;ID=1-588-phiX174;pvalue=3.75e-06;sequence=AAATTCGACCT; -phiX174 fimo polypeptide_motif 141 151 42.2 + . Name=1;ID=1-1625-phiX174;pvalue=6.01e-05;sequence=ATTCGACCTAT; -phiX174 fimo polypeptide_motif 143 153 50 + . Name=1;ID=1-938-phiX174;pvalue=9.94e-06;sequence=TCGACCTATCC; -phiX174 fimo polypeptide_motif 145 155 44.6 + . Name=1;ID=1-1403-phiX174;pvalue=3.42e-05;sequence=GACCTATCCTT; -phiX174 fimo polypeptide_motif 155 165 51.3 + . Name=1;ID=1-787-phiX174;pvalue=7.35e-06;sequence=TGCGCAGCTCG; -phiX174 fimo polypeptide_motif 157 167 51.1 + . Name=1;ID=1-807-phiX174;pvalue=7.68e-06;sequence=CGCAGCTCGAG; -phiX174 fimo polypeptide_motif 159 169 44.5 + . Name=1;ID=1-1420-phiX174;pvalue=3.56e-05;sequence=CAGCTCGAGAA; -phiX174 fimo polypeptide_motif 160 170 40 + . Name=1;ID=1-1921-phiX174;pvalue=9.89e-05;sequence=AGCTCGAGAAG; -phiX174 fimo polypeptide_motif 166 176 60.9 + . Name=1;ID=1-365-phiX174;pvalue=8.02e-07;sequence=AGAAGCTCTTA; -phiX174 fimo polypeptide_motif 168 178 62.3 + . Name=1;ID=1-311-phiX174;pvalue=5.87e-07;sequence=AAGCTCTTACT; -phiX174 fimo polypeptide_motif 181 191 49.9 + . Name=1;ID=1-946-phiX174;pvalue=1.01e-05;sequence=GCGACCTTTCG; -phiX174 fimo polypeptide_motif 187 197 52.5 + . Name=1;ID=1-694-phiX174;pvalue=5.64e-06;sequence=TTTCGCCATCA; -phiX174 fimo polypeptide_motif 191 201 46.6 + . Name=1;ID=1-1232-phiX174;pvalue=2.2e-05;sequence=GCCATCAACTA; -phiX174 fimo polypeptide_motif 194 204 76.4 + . Name=1;ID=1-67-phiX174;pvalue=2.29e-08;sequence=ATCAACTAACG; -phiX174 fimo polypeptide_motif 201 211 40.1 + . Name=1;ID=1-1908-phiX174;pvalue=9.77e-05;sequence=AACGATTCTGT; -phiX174 fimo polypeptide_motif 203 213 63 + . Name=1;ID=1-291-phiX174;pvalue=5e-07;sequence=CGATTCTGTCA; -phiX174 fimo polypeptide_motif 205 215 53.8 + . Name=1;ID=1-610-phiX174;pvalue=4.16e-06;sequence=ATTCTGTCAAA; -phiX174 fimo polypeptide_motif 206 216 59.1 + . Name=1;ID=1-421-phiX174;pvalue=1.23e-06;sequence=TTCTGTCAAAA; -phiX174 fimo polypeptide_motif 207 217 68 + . Name=1;ID=1-153-phiX174;pvalue=1.58e-07;sequence=TCTGTCAAAAA; -phiX174 fimo polypeptide_motif 209 219 49.6 + . Name=1;ID=1-988-phiX174;pvalue=1.09e-05;sequence=TGTCAAAAACT; -phiX174 fimo polypeptide_motif 210 220 40.8 + . Name=1;ID=1-1810-phiX174;pvalue=8.33e-05;sequence=GTCAAAAACTG; -phiX174 fimo polypeptide_motif 213 223 59.7 + . Name=1;ID=1-404-phiX174;pvalue=1.06e-06;sequence=AAAAACTGACG; -phiX174 fimo polypeptide_motif 223 233 42 + . Name=1;ID=1-1654-phiX174;pvalue=6.36e-05;sequence=GCGTTGGATGA; -phiX174 fimo polypeptide_motif 225 235 61.4 + . Name=1;ID=1-349-phiX174;pvalue=7.16e-07;sequence=GTTGGATGAGG; -phiX174 fimo polypeptide_motif 227 237 40.3 + . Name=1;ID=1-1874-phiX174;pvalue=9.32e-05;sequence=TGGATGAGGAG; -phiX174 fimo polypeptide_motif 228 238 49.9 + . Name=1;ID=1-947-phiX174;pvalue=1.01e-05;sequence=GGATGAGGAGA; -phiX174 fimo polypeptide_motif 229 239 45 + . Name=1;ID=1-1370-phiX174;pvalue=3.16e-05;sequence=GATGAGGAGAA; -phiX174 fimo polypeptide_motif 230 240 44.8 + . Name=1;ID=1-1395-phiX174;pvalue=3.33e-05;sequence=ATGAGGAGAAG;
--- a/test-data/output.memepsp Wed Apr 25 12:12:47 2018 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,6 +0,0 @@ ->BBP_PIEBR 20 scaledmin = 0.1 scaledmax = 0.9 -0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0.006488825 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ->ICYA_MANSE 20 scaledmin = 0.1 scaledmax = 0.9 -0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0.005878511 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ->LACB_BOVIN 20 scaledmin = 0.1 scaledmax = 0.9 -0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0.006284916 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
--- a/test-data/phiX.fasta Wed Apr 25 12:12:47 2018 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,79 +0,0 @@ ->phiX174 -GAGTTTTATCGCTTCCATGACGCAGAAGTTAACACTTTCGGATATTTCTGATGAGTCGAAAAATTATCTT -GATAAAGCAGGAATTACTACTGCTTGTTTACGAATTAAATCGAAGTGGACTGCTGGCGGAAAATGAGAAA -ATTCGACCTATCCTTGCGCAGCTCGAGAAGCTCTTACTTTGCGACCTTTCGCCATCAACTAACGATTCTG -TCAAAAACTGACGCGTTGGATGAGGAGAAGTGGCTTAATATGCTTGGCACGTTCGTCAAGGACTGGTTTA -GATATGAGTCACATTTTGTTCATGGTAGAGATTCTCTTGTTGACATTTTAAAAGAGCGTGGATTACTATC -TGAGTCCGATGCTGTTCAACCACTAATAGGTAAGAAATCATGAGTCAAGTTACTGAACAATCCGTACGTT -TCCAGACCGCTTTGGCCTCTATTAAGCTCATTCAGGCTTCTGCCGTTTTGGATTTAACCGAAGATGATTT -CGATTTTCTGACGAGTAACAAAGTTTGGATTGCTACTGACCGCTCTCGTGCTCGTCGCTGCGTTGAGGCT -TGCGTTTATGGTACGCTGGACTTTGTGGGATACCCTCGCTTTCCTGCTCCTGTTGAGTTTATTGCTGCCG -TCATTGCTTATTATGTTCATCCCGTCAACATTCAAACGGCCTGTCTCATCATGGAAGGCGCTGAATTTAC -GGAAAACATTATTAATGGCGTCGAGCGTCCGGTTAAAGCCGCTGAATTGTTCGCGTTTACCTTGCGTGTA -CGCGCAGGAAACACTGACGTTCTTACTGACGCAGAAGAAAACGTGCGTCAAAAATTACGTGCAGAAGGAG -TGATGTAATGTCTAAAGGTAAAAAACGTTCTGGCGCTCGCCCTGGTCGTCCGCAGCCGTTGCGAGGTACT -AAAGGCAAGCGTAAAGGCGCTCGTCTTTGGTATGTAGGTGGTCAACAATTTTAATTGCAGGGGCTTCGGC -CCCTTACTTGAGGATAAATTATGTCTAATATTCAAACTGGCGCCGAGCGTATGCCGCATGACCTTTCCCA -TCTTGGCTTCCTTGCTGGTCAGATTGGTCGTCTTATTACCATTTCAACTACTCCGGTTATCGCTGGCGAC -TCCTTCGAGATGGACGCCGTTGGCGCTCTCCGTCTTTCTCCATTGCGTCGTGGCCTTGCTATTGACTCTA -CTGTAGACATTTTTACTTTTTATGTCCCTCATCGTCACGTTTATGGTGAACAGTGGATTAAGTTCATGAA -GGATGGTGTTAATGCCACTCCTCTCCCGACTGTTAACACTACTGGTTATATTGACCATGCCGCTTTTCTT -GGCACGATTAACCCTGATACCAATAAAATCCCTAAGCATTTGTTTCAGGGTTATTTGAATATCTATAACA -ACTATTTTAAAGCGCCGTGGATGCCTGACCGTACCGAGGCTAACCCTAATGAGCTTAATCAAGATGATGC -TCGTTATGGTTTCCGTTGCTGCCATCTCAAAAACATTTGGACTGCTCCGCTTCCTCCTGAGACTGAGCTT -TCTCGCCAAATGACGACTTCTACCACATCTATTGACATTATGGGTCTGCAAGCTGCTTATGCTAATTTGC -ATACTGACCAAGAACGTGATTACTTCATGCAGCGTTACCGTGATGTTATTTCTTCATTTGGAGGTAAAAC -CTCTTATGACGCTGACAACCGTCCTTTACTTGTCATGCGCTCTAATCTCTGGGCATCTGGCTATGATGTT -GATGGAACTGACCAAACGTCGTTAGGCCAGTTTTCTGGTCGTGTTCAACAGACCTATAAACATTCTGTGC -CGCGTTTCTTTGTTCCTGAGCATGGCACTATGTTTACTCTTGCGCTTGTTCGTTTTCCGCCTACTGCGAC -TAAAGAGATTCAGTACCTTAACGCTAAAGGTGCTTTGACTTATACCGATATTGCTGGCGACCCTGTTTTG -TATGGCAACTTGCCGCCGCGTGAAATTTCTATGAAGGATGTTTTCCGTTCTGGTGATTCGTCTAAGAAGT -TTAAGATTGCTGAGGGTCAGTGGTATCGTTATGCGCCTTCGTATGTTTCTCCTGCTTATCACCTTCTTGA -AGGCTTCCCATTCATTCAGGAACCGCCTTCTGGTGATTTGCAAGAACGCGTACTTATTCGCCACCATGAT -TATGACCAGTGTTTCCAGTCCGTTCAGTTGTTGCAGTGGAATAGTCAGGTTAAATTTAATGTGACCGTTT -ATCGCAATCTGCCGACCACTCGCGATTCAATCATGACTTCGTGATAAAAGATTGAGTGTGAGGTTATAAC -GCCGAAGCGGTAAAAATTTTAATTTTTGCCGCTGAGGGGTTGACCAAGCGAAGCGCGGTAGGTTTTCTGC -TTAGGAGTTTAATCATGTTTCAGACTTTTATTTCTCGCCATAATTCAAACTTTTTTTCTGATAAGCTGGT -TCTCACTTCTGTTACTCCAGCTTCTTCGGCACCTGTTTTACAGACACCTAAAGCTACATCGTCAACGTTA -TATTTTGATAGTTTGACGGTTAATGCTGGTAATGGTGGTTTTCTTCATTGCATTCAGATGGATACATCTG -TCAACGCCGCTAATCAGGTTGTTTCTGTTGGTGCTGATATTGCTTTTGATGCCGACCCTAAATTTTTTGC -CTGTTTGGTTCGCTTTGAGTCTTCTTCGGTTCCGACTACCCTCCCGACTGCCTATGATGTTTATCCTTTG -AATGGTCGCCATGATGGTGGTTATTATACCGTCAAGGACTGTGTGACTATTGACGTCCTTCCCCGTACGC -CGGGCAATAATGTTTATGTTGGTTTCATGGTTTGGTCTAACTTTACCGCTACTAAATGCCGCGGATTGGT -TTCGCTGAATCAGGTTATTAAAGAGATTATTTGTCTCCAGCCACTTAAGTGAGGTGATTTATGTTTGGTG -CTATTGCTGGCGGTATTGCTTCTGCTCTTGCTGGTGGCGCCATGTCTAAATTGTTTGGAGGCGGTCAAAA -AGCCGCCTCCGGTGGCATTCAAGGTGATGTGCTTGCTACCGATAACAATACTGTAGGCATGGGTGATGCT -GGTATTAAATCTGCCATTCAAGGCTCTAATGTTCCTAACCCTGATGAGGCCGCCCCTAGTTTTGTTTCTG -GTGCTATGGCTAAAGCTGGTAAAGGACTTCTTGAAGGTACGTTGCAGGCTGGCACTTCTGCCGTTTCTGA -TAAGTTGCTTGATTTGGTTGGACTTGGTGGCAAGTCTGCCGCTGATAAAGGAAAGGATACTCGTGATTAT -CTTGCTGCTGCATTTCCTGAGCTTAATGCTTGGGAGCGTGCTGGTGCTGATGCTTCCTCTGCTGGTATGG -TTGACGCCGGATTTGAGAATCAAAAAGAGCTTACTAAAATGCAACTGGACAATCAGAAAGAGATTGCCGA -GATGCAAAATGAGACTCAAAAAGAGATTGCTGGCATTCAGTCGGCGACTTCACGCCAGAATACGAAAGAC -CAGGTATATGCACAAAATGAGATGCTTGCTTATCAACAGAAGGAGTCTACTGCTCGCGTTGCGTCTATTA -TGGAAAACACCAATCTTTCCAAGCAACAGCAGGTTTCCGAGATTATGCGCCAAATGCTTACTCAAGCTCA -AACGGCTGGTCAGTATTTTACCAATGACCAAATCAAAGAAATGACTCGCAAGGTTAGTGCTGAGGTTGAC -TTAGTTCATCAGCAAACGCAGAATCAGCGGTATGGCTCTTCTCATATTGGCGCTACTGCAAAGGATATTT -CTAATGTCGTCACTGATGCTGCTTCTGGTGTGGTTGATATTTTTCATGGTATTGATAAAGCTGTTGCCGA -TACTTGGAACAATTTCTGGAAAGACGGTAAAGCTGATGGTATTGGCTCTAATTTGTCTAGGAAATAACCG -TCAGGATTGACACCCTCCCAATTGTATGTTTTCATGCCTCCAAATCTTGGAGGCTTTTTTATGGTTCGTT -CTTATTACCCTTCTGAATGTCACGCTGATTATTTTGACTTTGAGCGTATCGAGGCTCTTAAACCTGCTAT -TGAGGCTTGTGGCATTTCTACTCTTTCTCAATCCCCAATGCTTGGCTTCCATAAGCAGATGGATAACCGC -ATCAAGCTCTTGGAAGAGATTCTGTCTTTTCGTATGCAGGGCGTTGAGTTCGATAATGGTGATATGTATG -TTGACGGCCATAAGGCTGCTTCTGACGTTCGTGATGAGTTTGTATCTGTTACTGAGAAGTTAATGGATGA -ATTGGCACAATGCTACAATGTGCTCCCCCAACTTGATATTAATAACACTATAGACCACCGCCCCGAAGGG -GACGAAAAATGGTTTTTAGAGAACGAGAAGACGGTTACGCAGTTTTGCCGCAAGCTGGCTGCTGAACGCC -CTCTTAAGGATATTCGCGATGAGTATAATTACCCCAAAAAGAAAGGTATTAAGGATGAGTGTTCAAGATT -GCTGGAGGCCTCCACTATGAAATCGCGTAGAGGCTTTACTATTCAGCGTTTGATGAATGCAATGCGACAG -GCTCATGCTGATGGTTGGTTTATCGTTTTTGACACTCTCACGTTGGCTGACGACCGATTAGAGGCGTTTT -ATGATAATCCCAATGCTTTGCGTGACTATTTTCGTGATATTGGTCGTATGGTTCTTGCTGCCGAGGGTCG -CAAGGCTAATGATTCACACGCCGACTGCTATCAGTATTTTTGTGTGCCTGAGTATGGTACAGCTAATGGC -CGTCTTCATTTCCATGCGGTGCATTTTATGCGGACACTTCCTACAGGTAGCGTTGACCCTAATTTTGGTC -GTCGGGTACGCAATCGCCGCCAGTTAAATAGCTTGCAAAATACGTGGCCTTATGGTTACAGTATGCCCAT -CGCAGTTCGCTACACGCAGGACGCTTTTTCACGTTCTGGTTGGTTGTGGCCTGTTGATGCTAAAGGTGAG -CCGCTTAAAGCTACCAGTTATATGGCTGTTGGTTTCTATGTGGCTAAATACGTTAACAAAAAGTCAGATA -TGGACCTTGCTGCTAAAGGTCTAGGAGCTAAAGAATGGAACAACTCACTAAAAACCAAGCTGTCGCTACT -TCCCAAGAAGCTGTTCAGAATCAGAATGAGCCGCAACTTCGGGATGAAAATGCTCACAATGACAAATCTG -TCCACGGAGTGCTTAATCCAACTTACCAAGCTGGGTTACGACGCGACGCCGTTCAACCAGATATTGAAGC -AGAACGCAAAAAGAGAGATGAGATTGAGGCTGGGAAAAGTTACTGTAGCCGACGTTTTGGCGGCGCAACC -TGTGACGACAAATCTGCTCAAATTTATGCGCGCTTCGATAAAAATGATTGGCGTATCCAACCTGCA -