Mercurial > repos > iuc > meme_dreme
changeset 0:b386032d758d draft
planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/meme commit 42fa6e319cf1a97330818dc8c869871a32f0e7aa
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/all_fasta.loc.sample Wed Apr 25 12:13:22 2018 -0400 @@ -0,0 +1,18 @@ +#This file lists the locations and dbkeys of all the fasta files +#under the "genome" directory (a directory that contains a directory +#for each build). The script extract_fasta.py will generate the file +#all_fasta.loc. This file has the format (white space characters are +#TAB characters): +# +#<unique_build_id> <dbkey> <display_name> <file_path> +# +#So, all_fasta.loc could look something like this: +# +#apiMel3 apiMel3 Honeybee (Apis mellifera): apiMel3 /path/to/genome/apiMel3/apiMel3.fa +#hg19canon hg19 Human (Homo sapiens): hg19 Canonical /path/to/genome/hg19/hg19canon.fa +#hg19full hg19 Human (Homo sapiens): hg19 Full /path/to/genome/hg19/hg19full.fa +# +#Your all_fasta.loc file should contain an entry for each individual +#fasta file. So there will be multiple fasta files for each build, +#such as with hg19 above. +#
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dreme.xml Wed Apr 25 12:13:22 2018 -0400 @@ -0,0 +1,136 @@ +<tool id="meme_dreme" name="DREME" version="@WRAPPER_VERSION@.0"> + <description>- Discriminative Regular Expression Motif Elicitation</description> + <macros> + <import>macros.xml</import> + </macros> + <expand macro="requirements" /> + <command detect_errors="exit_code"><![CDATA[ +dreme + -o ./dreme_out + -p '$pos_fasta_file' + $norc + $alphabet_type + #if str( $neg_set_type.neg_set_type_selector ) == 'shuffle_negs': + -s '${$neg_set_type.pos_shuffle_seed}' + #elif str( $neg_set_type.neg_set_type_selector ) == 'supply_negs': + -n '${$neg_set_type.neg_fasta_file}' + #end if + #if str( $options_type.options_type_selector ) == 'advanced': + -e $options_type.e_value_thr + #if $options_type.stop_m_motifs + -m $options_type.stop_m_motifs + #end if + #if $options_type.stop_t_seconds + -t $options_type.stop_t_seconds + #end if + -g $options_type.nr_res_generalize + -mink $options_type.motif_min_k + -maxk $options_type.motif_max_k + #end if + ]]></command> + <inputs> + <param name="pos_fasta_file" type="data" format="fasta" label="Positive FASTA sequence file" argument="-p" + help="positive (primary) sequence file"/> + <param name="alphabet_type" type="select" label="Type of sequence alphabet"> + <option value="-dna" selected="true">DNA (default)</option> + <option value="-rna">RNA</option> + <option value="-protein">Protein</option> + </param> + <param argument="-norc" label="Check reverse complement" type="boolean" + truevalue="" falsevalue="-norc" checked="False" + help="Search for motifs also on reverse complement strand"/> + <conditional name="neg_set_type"> + <param name="neg_set_type_selector" type="select" label="Negative set definition"> + <option value="shuffle_negs" selected="true">Shuffle positive sequences</option> + <option value="supply_negs">Supply negative sequences</option> + </param> + <when value="shuffle_negs"> + <param name="pos_shuffle_seed" type="integer" value="1" + label="Seed for shuffling positive sequences" argument="-s" + help="(default: 1)"/> + </when> + <when value="supply_negs"> + <param name="neg_fasta_file" type="data" format="fasta" + label="Negative FASTA sequence file" argument="-n" + help="negative (control) sequence file (default: positive sequences are shuffled to create the negative set)"/> + </when> + </conditional> + <conditional name="options_type"> + <param name="options_type_selector" type="select" label="Options Configuration"> + <option value="basic" selected="true">Basic</option> + <option value="advanced">Advanced</option> + </param> + <when value="basic" /> + <when value="advanced"> + <param name="e_value_thr" type="float" value="0.05" + label="stop if motif E-value > e" argument="-e" + help="stop if motif E-value > given threshold (default: 0.05)"> + <validator type="expression" message="Set e-value must be > 0.">value is not None and value > 0</validator> + </param> + <param name="motif_min_k" type="integer" value="3" min="1" + label="Minimum width of core motif" argument="-mink" + help="minimum width of core motif (default: 3)"/> + <param name="motif_max_k" type="integer" value="8" min="1" + label="Maximum width of core motif" argument="-maxk" + help="maximum width of core motif (default: 8)"/> + <param name="stop_m_motifs" type="integer" optional="True" min="1" + label="Stop if m motifs have been output" argument="-m" + help="stop if m motifs have been output (default: only stop at E-value threshold)"/> + <param name="stop_t_seconds" type="integer" optional="True" min="1" + label="Stop if the specified time has elapsed" argument="-t" + help="stop if the specified time has elapsed (default: only stop at E-value threshold)"/> + <param name="nr_res_generalize" type="integer" value="100" min="1" + label="Number of REs to generalize" argument="-g" + help="number of REs to generalize (default: 100) (Hint: Increasing n will make the motif search more thoroughly at some cost in speed)"/> + </when> + </conditional> + <param name="non_commercial_use" label="I certify that I am not using this tool for commercial purposes." type="boolean" truevalue="NON_COMMERCIAL_USE" falsevalue="COMMERCIAL_USE" checked="False"> + <validator type="expression" message="This tool is only available for non-commercial use.">value == True</validator> + </param> + </inputs> + <outputs> + <data format="html" name="html_outfile" label="${tool.name} on ${on_string} (html)" from_work_dir="dreme_out/dreme.html"/> + <data format="txt" name="txt_outfile" label="${tool.name} on ${on_string} (text)" from_work_dir="dreme_out/dreme.txt"/> + <data format="memexml" name="xml_outfile" label="${tool.name} on ${on_string} (xml)" from_work_dir="dreme_out/dreme.xml"/> + </outputs> + <tests> + <test> + <param name="pos_fasta_file" value="dreme_test_sites.fa" ftype="fasta"/> + <param name="alphabet_type" value="-rna"/> + <param name="norc" value="false"/> + <param name="non_commercial_use" value="True"/> + <output name="html_outfile" file="dreme1.html" lines_diff="16"/> + <output name="txt_outfile" file="dreme1.txt" lines_diff="22"/> + </test> + <test> + <param name="pos_fasta_file" value="dreme_test_sites.fa" ftype="fasta"/> + <param name="alphabet_type" value="-rna"/> + <param name="norc" value="false"/> + <param name="options_type_selector" value="advanced"/> + <param name="e_value_thr" value="0.00001"/> + <param name="motif_min_k" value="4"/> + <param name="motif_max_k" value="10"/> + <param name="non_commercial_use" value="True"/> + <output name="html_outfile" file="dreme2.html" lines_diff="29"/> + <output name="txt_outfile" file="dreme2.txt" lines_diff="29"/> + </test> + </tests> + <help><![CDATA[ + DREME (Discriminative Regular Expression Motif Elicitation) discovers short, ungapped motifs (recurring, fixed-length patterns) that are relatively enriched in your sequences compared with shuffled sequences or given control sequences. + + DREME finds relatively short motifs (up to 8 positions) fast. The input to DREME is one or two sets of sequences. The control (-n parameter) sequences should be approximately the same length as the primary (-p parameter) sequences. If you do not provide a control set, the program shuffles the primary set to provide a control set. The program uses Fisher's Exact Test to determine significance of each motif found in the postive set as compared with its representation in the control set, using a significance threshold that may be set (-e parameter). + + DREME achieves its high speed by restricting its search to regular expressions based on the IUPAC alphabet representing bases and ambiguous characters, and by using a heuristic estimate of generalised motifs' statistical significance. + +.. class:: infomark + +For detailed information on DREME, click here_, or view the license_. + +.. _here: http://meme-suite.org/doc/dreme.html +.. _license: http://meme-suite.org/doc/copyright.html + + ]]></help> + <citations> + <citation type="doi">10.1093/bioinformatics/btr261</citation> + </citations> +</tool>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fimo_wrapper.py Wed Apr 25 12:13:22 2018 -0400 @@ -0,0 +1,194 @@ +#!/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()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/macros.xml Wed Apr 25 12:13:22 2018 -0400 @@ -0,0 +1,11 @@ +<?xml version='1.0' encoding='UTF-8'?> +<macros> + <token name="@WRAPPER_VERSION@">4.11.2</token> + <xml name="requirements"> + <requirements> + <requirement type="package" version="1.3.23">graphicsmagick</requirement> + <requirement type="package" version="4.11.2">meme</requirement> + </requirements> + </xml> +</macros> +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/dreme1.html Wed Apr 25 12:13:22 2018 -0400 @@ -0,0 +1,6199 @@ +<!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,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" 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/dreme1.txt Wed Apr 25 12:13:22 2018 -0400 @@ -0,0 +1,102 @@ +# 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/dreme1.xml Wed Apr 25 12:13:22 2018 -0400 @@ -0,0 +1,32 @@ +<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>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/dreme2.html Wed Apr 25 12:13:22 2018 -0400 @@ -0,0 +1,6118 @@ +<!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,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" 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/dreme2.txt Wed Apr 25 12:13:22 2018 -0400 @@ -0,0 +1,68 @@ +# 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_test_sites.fa Wed Apr 25 12:13:22 2018 -0400 @@ -0,0 +1,2000 @@ +>U2AF2_K562_rep02_1 +UCUACACAUAGGGUGUUCCUGAAAAGCCCCAUAGUGAUUGAGUCUUCAAAACCACCGAUUC +>U2AF2_K562_rep02_2 +UUGGAUAGCGGAAGCCCUGACCAGGCAUGGAGUAUCUCACAAAGUAGACGAUUCCUCUGGG +>U2AF2_K562_rep02_3 +GGUUUCGGUCUAAGUACCACCCAGAUGAGGUGGGGAAGCGUCGGCAGGAGGCCCGGGGGGC +>U2AF2_K562_rep02_4 +AAACAGGGUUUGUGGAUGCACUUAGAUGUUUGCAAUGAGCACUGUGGCUGGCAUGCCCCAG +>U2AF2_K562_rep02_5 +UCCCAUUGUUUCUGCAGAGGCAGUUGGUGUCACCAGCCAGCGACCAGUGUUUUGUCCUUUU +>U2AF2_K562_rep02_6 +UUCUACCCUCUCUAACUCCUCCCAGCAGCAAAAGGGAGACACUUCAGCUGGAACAAAAUAG +>U2AF2_K562_rep02_7 +UUCUACCCUCUCUAACUCCUCCCAGCAGCAAAAGGGAGACACUUCAGCUGGAACAAAAUAG +>U2AF2_K562_rep02_8 +UUUUCUCCCUUCCACCCACACCCUGCAGCGUCGAGGUCCUCAGCGAUCAGUUGAUGUAAUA +>U2AF2_K562_rep02_9 +GGCAGGGGAAGUGGGGAUGGCAGGACAUGGAUGGCCCUUGAGGCAUUGGCUCUGGGUGUCA +>U2AF2_K562_rep02_10 +GCAGGGGAAGUGGGGAUGGCAGGACAUGGAUGGCCCUUGAGGCAUUGGCUCUGGGUGUCAU +>U2AF2_K562_rep02_11 +UUAGUCUUUCCAUCUACAGCCCACUGGCACUCCAGGCACCUACCUACUUCAAACAAGCUCA +>U2AF2_K562_rep02_12 +UUUCUCUUUUCCUUCCACAGGGGACCGUGAUUAGGGUAUUUUCCAUUCCAGAAGGACAAAA +>U2AF2_K562_rep02_13 +AUAACUGUUUUGUCUUUCCCUCCCCCGCUUCGUUCCCAGGUUUCGGUCUAAGUACCACCCA +>U2AF2_K562_rep02_14 +UUUCAGAGAACGUUUGUCUGCCUGAUGAGAGCCACUUGGGUUAAGAAACUACCUGUGAAUA +>U2AF2_K562_rep02_15 +AUGCUUUGCAAUUGCAGCUCCUUUAUGUCUCCAAAUGAUACAAGAAGACCCGAGAAAGUGG +>U2AF2_K562_rep02_16 +UUUGCAAUUUUGCCUAGGGCCCUGGUGGUGGCAACCGCCUGUGUGCCACUGAAAAUCGUGC +>U2AF2_K562_rep02_17 +UUGCAAUUUUGCCUAGGGCCCUGGUGGUGGCAACCGCCUGUGUGCCACUGAAAAUCGUGCC +>U2AF2_K562_rep02_18 +CUAAUUUUUAAAAAGCAGCCUCUGGAGCCAGCCAUGUUUGGCACUGAAUCUUCAUGUAAGU +>U2AF2_K562_rep02_19 +UCUAAUUUUUAAAAAGCAGCCUCUGGAGCCAGCCAUGUUUGGCACUGAAUCUUCAUGUAAG +>U2AF2_K562_rep02_20 +UUUCUGUCUUCUCCUCUCUUCCUUUACACAAACUUAAACAGAAUGGAAAUGAAAACCAAGG +>U2AF2_K562_rep02_21 +AAACAGUUUCAGCUCCUGGCAUCAGCUCUAUUCAAAUCUGGUUCAGAUUUUACAGCUCUGG +>U2AF2_K562_rep02_22 +UUCUCUCUCUUCCCCUGGCUCCCUCAAGGUGAACAGCCAUAUACCAGGAAUAGGAUACCAG +>U2AF2_K562_rep02_23 +UAUAUCCUUAGUGCAGGCUGUGGAAGAACAGGUGCCAUUUGUGCCAUAGAUUAUACGUGGA +>U2AF2_K562_rep02_24 +UCCCUAAUUCUUCACCUCCCCCUCCUCUGCUGCCUCCUUGCUCUCCUCGCAGGUCAAGUUU +>U2AF2_K562_rep02_25 +AUUGUUACUCCCAGGUGCCUUCGAAACAUCUGCAAGUUUUUAGUCUUGCUCAUCCCACUCU +>U2AF2_K562_rep02_26 +CACAUUUUUUAAAAGGGCAAGUACAGGAGCAACUGCUGCUACCCAGAAAAAUGUGUGUAUU +>U2AF2_K562_rep02_27 +CACAUUUUUUAAAAGGGCAAGUACAGGAGCAACUGCUGCUACCCAGAAAAAUGUGUGUAUU +>U2AF2_K562_rep02_28 +AUUCCGUAGGUUCUAAUCUGUUCUCCCUCCUCCUCAACGUAAGUACACAGUGGAUACCCUC +>U2AF2_K562_rep02_29 +UAUUCCGUAGGUUCUAAUCUGUUCUCCCUCCUCCUCAACGUAAGUACACAGUGGAUACCCU +>U2AF2_K562_rep02_30 +ACUAAAGUUUUUUUUCCUAGUGGUUAUCAUGAGACUUAUAUAAAACAUGUUGUAUCUUAAC +>U2AF2_K562_rep02_31 +CCUCCUCUUUCUCCCUCCCUCCUUCAUUCCCUCCAUCCCUCUCUUAACAGCUUGAAGAUAA +>U2AF2_K562_rep02_32 +CCUCCUCUUUCUCCCUCCCUCCUUCAUUCCCUCCAUCCCUCUCUUAACAGCUUGAAGAUAA +>U2AF2_K562_rep02_35 +AUUUAUCCUCUUGCUUUUGCAUCUCAAAAUUUUAUCGCCUUGAAGACACGUUUCUAUGAAU +>U2AF2_K562_rep02_36 +GUCAGAAGGUAGCAGGGGCUGGGGGUUGCAGGGGGAUGUUGAGAAGAAGUGGUCCUUUGGU +>U2AF2_K562_rep02_37 +AGUCAGAAGGUAGCAGGGGCUGGGGGUUGCAGGGGGAUGUUGAGAAGAAGUGGUCCUUUGG +>U2AF2_K562_rep02_38 +UUGCUUCUCCUUUCUUCCUUCCUUCCUGCCCAGGGCCUCAUCUUUGUGGUGGACAGUAAUG +>U2AF2_K562_rep02_39 +UAGAGACUGUUUAUUUGUUUGGUGGCUGGGAUGGAACACAAGAUCUUGCUGACUUCUGGGC +>U2AF2_K562_rep02_40 +CUUAGGUAUGCCGAGCAGACAGCUGGAGGAUCCCGGGGCAGGGACACCUAGCCCGGUGCGU +>U2AF2_K562_rep02_41 +AUUCUCCUGGGUUUUUGGCAGAUGGUUGCAGUGGCAGGACCAAGGCCUAGUGAGCUAUAGC +>U2AF2_K562_rep02_42 +GCAGAUGGUUGCAGUGGCAGGACCAAGGCCUAGUGAGCUAUAGCUAAAUCUACAGUGGGAU +>U2AF2_K562_rep02_43 +CCCCGUGCCUUGCCUCCCCAGGCGUGUGACCCCCUGCCGCACGAGGAGGAGCCCUCUGAAG +>U2AF2_K562_rep02_44 +UUUACCCCACUACUAGGUAAGGGGCCUGGAUACCAAGAAGUGACUGCUCAUCUAAUCCAUA +>U2AF2_K562_rep02_45 +GAUGGUCAUUGUCCUCCAGAGCAGUGAUGGAGGAAAUACCAGCCCAGGAAGCAGCAGGGUC +>U2AF2_K562_rep02_46 +AUGGUCAUUGUCCUCCAGAGCAGUGAUGGAGGAAAUACCAGCCCAGGAAGCAGCAGGGUCA +>U2AF2_K562_rep02_47 +UAGGCCUGUGAGGCUGCCACACCCUGUGCCCCCGUGCCUUGCCUCCCCAGGCGUGUGACCC +>U2AF2_K562_rep02_48 +CAGGUCUCUCCUUACGGGGCCAGGGCAAUUUCUUUUCGUUCUUGCCCGUGUUGAACUGGGC +>U2AF2_K562_rep02_49 +UACUUCUCUUUCCCUGUCCCCAAAGCAGAUCGCCAAACUGAGGCAGCAACUACAACGCAGU +>U2AF2_K562_rep02_50 +GGCGUGUGACCCCCUGCCGCACGAGGAGGAGCCCUCUGAAGUGCCACAGCUGCGCCAGCCC +>U2AF2_K562_rep02_51 +GUGGGCAGUGGGCGAGCCAGGCUGGGGGUUGUGGGGGAGGCCUGGGUUGCAGGUUUAAGCG +>U2AF2_K562_rep02_52 +AAGUUCCACUCUUGUCCUGGGGACCCAGCUUUAACUUUAGCAUCUGGUAUGUUGAACUUAG +>U2AF2_K562_rep02_53 +UCACUCCUUCUCUUUCCUAAGACUGACUUUAUGGCCUUUCACCAAGAACAUGAAGUGCGUA +>U2AF2_K562_rep02_54 +GAGCGCAGCAAGACAGAUUAGGGGAAGGGGAGAGGAGAGACUUGGCUAGCAAAGGUCUUGU +>U2AF2_K562_rep02_55 +GGAGCGCAGCAAGACAGAUUAGGGGAAGGGGAGAGGAGAGACUUGGCUAGCAAAGGUCUUG +>U2AF2_K562_rep02_56 +CUUUCUCUUUCUCUCUUUCUCUCUCUUUCUGUCUGUCUGUCUGUCUUUCUGUCUUUCUUUC +>U2AF2_K562_rep02_57 +UGUUCUGCUUUCCUCCUUAGGCCAGGUGCUGUGUGUGCUGCCGUCUGUCUGUAUUUUCUUC +>U2AF2_K562_rep02_58 +GUGACCAGUUCUUUUGCAGGAAAUUGUUUCUGAGAAGACUGGAAGACAAGAAAUAUCCCAC +>U2AF2_K562_rep02_59 +UCUAUAUUACAGGAGAUACAACUCGUCAACGAAUCAAAUUCAGUGAUGACAGAGUAUGCAA +>U2AF2_K562_rep02_60 +UCUAUAUUACAGGAGAUACAACUCGUCAACGAAUCAAAUUCAGUGAUGACAGAGUAUGCAA +>U2AF2_K562_rep02_62 +GUAACAGAGUAAGCAGGAAAUUCACAGGAGGUCUGCUCGGCUCAGAAACACUAAAUACAAA +>U2AF2_K562_rep02_63 +GUCCUUUUCUCUGAGGAUGUGCUGCCUAGUGUCGUGGAAUCUGCCUGACCAUUGCAAGCAU +>U2AF2_K562_rep02_64 +UUCCCCAUUCCAGAUCCUGGGUGUUUGGCUGACCUACAGAUACAGGAACCAGAAAGACCCC +>U2AF2_K562_rep02_65 +AUUAACAUAAUGAACCAUAUUCAUUUCUUGGUCAGUUGUGAGCCAUUCUUUUAUUCCACUU +>U2AF2_K562_rep02_66 +AUUAACAUAAUGAACCAUAUUCAUUUCUUGGUCAGUUGUGAGCCAUUCUUUUAUUCCACUU +>U2AF2_K562_rep02_67 +CUUUUUCUUUCCUGUAUCCUUUUUAGGUUUCUAGCCAUCCAUGAGAAGGAAGUUAAUGAAA +>U2AF2_K562_rep02_68 +UUCUUUACAGGGAACACUGAAAGGUUUUGACCAGACCAUUAAUUUGAUUUUGGAUGAAAGC +>U2AF2_K562_rep02_69 +CCUCUUUUACCUAAUAGGUGGCCAGCAUCGAAAUGUUCAGCCUUUUAGUGAUGAAGAUGCA +>U2AF2_K562_rep02_70 +UUGCUUUUCACAGGCGUGGGAUCCAGGAUGGUGUCCUCUGUGAGGACUUGAACUCUGGGGC +>U2AF2_K562_rep02_71 +UUAUUCUCUCUUUCUGCAGAUGGGCUUUCUCCACAUGAUGGAGAAGAUGGCUGCCAGGUAC +>U2AF2_K562_rep02_73 +CAUUCCAUCAUCAAAGGUAUUGAUAACAGAACAUGGCGACUUGGGAAAUGGAAAGUUUUUG +>U2AF2_K562_rep02_74 +UCUCUAAAUUUUUCCCCCUACUUUCUUGCUUCUGUUUCACAUUUUUUAAAAGGGCAAGUAC +>U2AF2_K562_rep02_75 +UCUCUAAAUUUUUCCCCCUACUUUCUUGCUUCUGUUUCACAUUUUUUAAAAGGGCAAGUAC +>U2AF2_K562_rep02_76 +UUUUCAGAUUACUGAGAGUCUUCAGUUACUAGGUAAGUCGCCCCAUCCUUAUUACUCCAGG +>U2AF2_K562_rep02_77 +UUUCAGAUUACUGAGAGUCUUCAGUUACUAGGUAAGUCGCCCCAUCCUUAUUACUCCAGGU +>U2AF2_K562_rep02_80 +GCACGUGCUUUGCCCUGGGUACAGCCAGAGCCCUUCAACCCCACCUUGGACUUGAGGACCU +>U2AF2_K562_rep02_81 +AGAGGACGAAAACGAAGCUUCGUUCCUGAGGAAGAAAAACAUGAGGUUGGAAUAAGUUAAG +>U2AF2_K562_rep02_82 +UUUUUUUCCAGAGAACCAGAGGACGAAAACGAAGCUUCGUUCCUGAGGAAGAAAAACAUGA +>U2AF2_K562_rep02_86 +GGUCUAUGGUACCGUUGCUUCAGGUGAUAUCCAGGGGUUCUCCUAUGUCUUUUGAAGAUUC +>U2AF2_K562_rep02_87 +UUCUUCUCCCCUUUUUGCCCAGUUAAUCCAUAUUCAUCUGCAGAUAUGUUACCCAUGUUAC +>U2AF2_K562_rep02_88 +UUUUUGUUUUUUCCACAGAUUCCUAGAUAGGGUUGUUCAUCUGUCAUCUUAAAAGGGUUUU +>U2AF2_K562_rep02_89 +UUCUCUCUCUCUCUACAGAAUGGUCCUAGUGCCAGAUCGUGUCAUAAAAUGUGCAUUGAUA +>U2AF2_K562_rep02_90 +UUUUUGUUUUUUUUUUUGUUUUUUUCCAGAGAACCAGAGGACGAAAACGAAGCUUCGUUCC +>U2AF2_K562_rep02_92 +UUUUUUUUCUUCUGUCCUUUUGUGUGUGUCCUUCCCUCUCAUCGUUGGCCACUCAUAGAUA +>U2AF2_K562_rep02_93 +UCUUGUGUAGGUUUUUCCGUCGUGGCUGGGUGACCUUCGACCGCAGUGUUAACAUUAAAGA +>U2AF2_K562_rep02_94 +CAGUUUCUACAGACUGCCAUUGCUAUGCACGGCUGAGAUGGACAGAGUUUGCUUGUGAAUC +>U2AF2_K562_rep02_95 +AAUUUAUUUCAAAGGAUGCGAAGUACAAAACUGCUUCGGCUCAUUGACUUAGAUUUUUCAU +>U2AF2_K562_rep02_100 +UUUUCAUUUCCUUCAGAGGGCAGAGGUGGCUCAGAGAGAGGCGGAGACCUUAAGGGAACAG +>U2AF2_K562_rep02_103 +CUACAGUGUUCUCAUUCCUCAGAGCAGCCAGGAUGUGUUAUUUCAGGAGUUUGUGACAUUC +>U2AF2_K562_rep02_104 +CUACAGUGUUCUCAUUCCUCAGAGCAGCCAGGAUGUGUUAUUUCAGGAGUUUGUGACAUUC +>U2AF2_K562_rep02_105 +UAGCGAUAGGGUCUCACCAUGUUGCCCAGGCUGGUCUUGAACUCCUGGACUCAUCCUAAAG +>U2AF2_K562_rep02_106 +AGCGAUAGGGUCUCACCAUGUUGCCCAGGCUGGUCUUGAACUCCUGGACUCAUCCUAAAGU +>U2AF2_K562_rep02_109 +CUUGUUUCUUCCUAAGUAUAAGGUCUCUGAGAAGGUCUGUAGAGUGUGGCUUAGAUUCCAG +>U2AF2_K562_rep02_110 +UUGUUUCUUCCUAAGUAUAAGGUCUCUGAGAAGGUCUGUAGAGUGUGGCUUAGAUUCCAGG +>U2AF2_K562_rep02_111 +AAGUGGUCCUUUGGUCAGGGUGGGAAGCCAACAGGAUUUCCUGGUGCAUUGGAGGUGAAAG +>U2AF2_K562_rep02_112 +GAAGUGGUCCUUUGGUCAGGGUGGGAAGCCAACAGGAUUUCCUGGUGCAUUGGAGGUGAAA +>U2AF2_K562_rep02_116 +GACAGCCAGGUACCAGGUGAGCUGAGGAACCCUCUGCUUUUCCUCAGGGACUAUUGCUACU +>U2AF2_K562_rep02_117 +ACAGCCAGGUACCAGGUGAGCUGAGGAACCCUCUGCUUUUCCUCAGGGACUAUUGCUACUG +>U2AF2_K562_rep02_118 +UCAUUCCCUGCUCUAUCCCCAGGCCCAGGGCACUGCCUGAUGCAUGGUAGCACUUAUAAAU +>U2AF2_K562_rep02_119 +CUUUUUAGCUCCUUGUUUAGUCAUUCACUAAUUUCCAUACAUGAUAACGAAUUCUUCGGUG +>U2AF2_K562_rep02_121 +UUUUCUCUAUUCCAGUGGCCCUUUCUCUGCAGCUGGGCCCCACACCUACAUCCAUCCGUUU +>U2AF2_K562_rep02_122 +GCUAUGACUUCACACCUAUGGAUUCUUCUGCAGUUUAUGUGUUAAGUAGUAUGGCUCGCCA +>U2AF2_K562_rep02_123 +UUUUUGUUUUGGUGGCAGGGGAUAGGGUCUCCCUCUGUCUCCCAGGCUGGAGUGCAAUGGU +>U2AF2_K562_rep02_126 +AGGGGCAGGACAGAGCCCUUUCCUAGGGAAGCCCGGCACCCCCUGCUGUCCAGGGAAGGGG +>U2AF2_K562_rep02_127 +GAAGACCGAGGCGGUUUCAGGGGAUUGUCCCCUCCAGGGUCUGCUACACUGUCUGAAGGAG +>U2AF2_K562_rep02_128 +GGAUACCCUCUCUAUGAUCUUCAUUCUCUGGCCAUGGUGCUACAGUGUUCUCAUUCCUCAG +>U2AF2_K562_rep02_129 +GGAUACCCUCUCUAUGAUCUUCAUUCUCUGGCCAUGGUGCUACAGUGUUCUCAUUCCUCAG +>U2AF2_K562_rep02_130 +AGUGGGAGUGCGGAGGGGCUCCCGAGGGGGCUCCUGGGCCUGGUUUGAGAGAGGCCAAGAA +>U2AF2_K562_rep02_131 +AGUGGGAGUGCGGAGGGGCUCCCGAGGGGGCUCCUGGGCCUGGUUUGAGAGAGGCCAAGAA +>U2AF2_K562_rep02_132 +UUGUGUUAUUGCUUCCAGGUCAGGGGUCACCACAUUGCAAAACUUGAUCCUCUCGGAAUUA +>U2AF2_K562_rep02_133 +GUUUUCUGGUAUUUUCUAGCAUCCUUCUCACCACAGCCAUAACCCUUUUUUACUUCCAUUA +>U2AF2_K562_rep02_134 +UCUCUUUUUGCUCACCUGGGGAGUUCCUUCCCCUUUCCAUAAACUGUGGUCCCUGCAUGGC +>U2AF2_K562_rep02_138 +CACCAAUCACACUUUCGCAGUGGAGAAAGUGCUGUGACUUUCCUCGCCAGGCGCCUCCCUC +>U2AF2_K562_rep02_139 +GUUUAUCAGCCAUAGGUUGGAGGCAACAGCUGGAAAUGGCUCUUCCCCUUCAAGGUUGUAG +>U2AF2_K562_rep02_140 +UCCACUUGCAUUCAUUCUCCACUGGCCCUCCGUAUCCACAGAUUCCCGCAACCAACUGUAU +>U2AF2_K562_rep02_147 +UGUCAUUUUUUCCUUUUCCAGGCAUCCUUGUUCAUCUAGCAAUAUCUGAACUGCAGUGCAU +>U2AF2_K562_rep02_149 +CUGUUAUAGUGUGACUGUUGCUUUUUUGUCUCCUUUUCUUUUAAACAGGGUUUGUGGAUGC +>U2AF2_K562_rep02_150 +UUUUUUCUAGAGAUGGUUUCUACCCCGACUGUUUCCCAGGCUGGUCUGAACUCCUGGUCUC +>U2AF2_K562_rep02_151 +UUUUUCUAGAGAUGGUUUCUACCCCGACUGUUUCCCAGGCUGGUCUGAACUCCUGGUCUCA +>U2AF2_K562_rep02_158 +UUGAUUUUGGUUCAUCUCUUUUUAGGUCUGAUGCCUGGAGGGAGGGUCAAGCUGGUACAUA +>U2AF2_K562_rep02_159 +UUCUUUUUGUCUACCCAUCUCCCUUCAGUCUUAAUAAAAGGUCUUAAACAGUUACAUGAGA +>U2AF2_K562_rep02_165 +ACCAUUUUUUUCAGGUGAUUGAAGCAGAGCAUAUAUGAUCUCCACAUAUCAAGACUAACGG +>U2AF2_K562_rep02_166 +CAAUUUCUGUGACUGUCAACCCUCUUGUGUCCUCCUAACCUCCUUCCUCAGCUUGCAUGGA +>U2AF2_K562_rep02_169 +CCAUCACCUCUCAACCUUUGCUUCGACAGGUCUUCACUCACGAUUUAUUCCUCCAGGUCUU +>U2AF2_K562_rep02_170 +AGGCUGGGAGGCAGGGCUGAGAGGUGGCCGAGAGAGAGGAGUCGCAGAGCCGCCAGAGUGA +>U2AF2_K562_rep02_171 +ACCUUUUUUUCUUCCCAGCCUCAGGUAUGAAUCAGCAGCAUGAAAAUGGAUUUGAAUACAG +>U2AF2_K562_rep02_179 +CAUGUUCCAGCCUUGCCUUUAGGAAGGGAGGACGUUCCGACCAGCCCGUUGUUCAGGGUGG +>U2AF2_K562_rep02_180 +UGCUCAUCCCACUCUUCCUUUUACUAGGUAAGUCAAAUCUGGCUGAGUUGCCUCCGAUGGC +>U2AF2_K562_rep02_181 +CUGUUGGCCAGUUUGCUGGGGGAAGCGGGCCAGGAACCAGCCCUGGCAGAAGUGUUCCACC +>U2AF2_K562_rep02_182 +CUGUUGGCCAGUUUGCUGGGGGAAGCGGGCCAGGAACCAGCCCUGGCAGAAGUGUUCCACC +>U2AF2_K562_rep02_183 +CUUUUUCUUUUAUAUGGGGGGCCGCAAAGGCGUCGACAUUCCAGAUGGCUAUCCUGCUUCA +>U2AF2_K562_rep02_184 +UCCCUCUUUCCCGACAGCAGCUGCGGCAAGAGAGCCCUGCCCUCUCCGAGGCCUGCUCAGC +>U2AF2_K562_rep02_185 +CUUCCUGUUUCUCUCCCAUAGGAGAGGGCUGAACCCCCCUCAUCGUGUCAAGUCAAUCUCC +>U2AF2_K562_rep02_186 +GACUAUUGCUACUGAUGGAGUGUGGCCUCUCUCUCAUCCCAUCUGUAGACCUUGCCUGGAA +>U2AF2_K562_rep02_187 +GACUAUUGCUACUGAUGGAGUGUGGCCUCUCUCUCAUCCCAUCUGUAGACCUUGCCUGGAA +>U2AF2_K562_rep02_190 +CUUUUUCCCCCAUCCAACAGGCUGUGUGGUUCCGGUGCUGGUGCCGUGGAAGUGGCAAUGG +>U2AF2_K562_rep02_191 +AUCUUCUUCACCAGGCUUUUCUGAUGUGGAUCACACCUAUGCUCAAAGAACUCAGCUCUUU +>U2AF2_K562_rep02_193 +GUUCACUUGGUUUCUAGGUCUAUUCUGGAUAAGCAGGUUUUGUGAAGACAUUUAUUCUUUC +>U2AF2_K562_rep02_194 +GAUAAUAUUAUAUUUCUGAGUGACCAGACGAAAGAGAAGGAGUAGAAAGGAUGAUUCUUCU +>U2AF2_K562_rep02_196 +AUUAUUUCAUUAUCGUUUCUCUGCAACCUUUCUUCAAUGGUACUAAGCAAGACACAUCUGG +>U2AF2_K562_rep02_197 +AAGGCAUGACCUUCCUUUCUCCUUGGCAUAGGCCUUACAACACUGAGGAAAGGCCAUGGUU +>U2AF2_K562_rep02_198 +ACUUCACCAUUCCUUUCAGAAAAAAGGAGAAGAAAAGAACCUACUGAAAACAUUUCUGGUU +>U2AF2_K562_rep02_199 +UUCUCCAGCUGGUUCUUUUCAUUUUACUGCAGAGAUAUUGCCGGAUCAUGACAUAAAAGAU +>U2AF2_K562_rep02_200 +UUUUUUUUUUUUUCCCCUCGUAGGCUAUUAUUCGUGAAUUGGGUGGUAUUCCAAUUGUUGC +>U2AF2_K562_rep02_202 +CCCCCUACAGGCUUUUGUCUUAUUAAGUGAUCUACUUCUCAUCUUUAGCCCUCAGAUGAUU +>U2AF2_K562_rep02_203 +CUUUCCUUCCUUCUUUCCUCUUUUUUUCUUUCCUCCCUCCCUCCCUUUCUUUCUUCCUUCC +>U2AF2_K562_rep02_204 +CUUCUUCCUAGCUGAUAUUCAGCAAUGAGUAUACCCAGGCAGAAAACCAGAAUUGGCACCU +>U2AF2_K562_rep02_205 +CCUUCUUGUCUUCCACAGGUCUAUAGUGAGCGAGAGCUGCUACUUUUUACUUGGGCAUUCA +>U2AF2_K562_rep02_206 +UCUUUCAGCUCUGUGUUCUCGUUUUGCCCAAGACCUUUGGCUAGAGCAGAACAUAAAAGAU +>U2AF2_K562_rep02_207 +UCUCUUGUAACUCCUCAGGCAUUUCUCACAAGAGUGGCAAAGAUACAGCAGGGUGCAUUAG +>U2AF2_K562_rep02_208 +UUCUUUCAUGACCUUUUUUCUUAUUUAGAGAUCCUCCAUAGAUAAUGAAAACCUGGUUUCA +>U2AF2_K562_rep02_210 +UGUGCACACCUCACGGCAAGGGCCAGCCUGUUUCCUCCCGGUCACCUCCAAAUCUUGCUGC +>U2AF2_K562_rep02_211 +UGUGCACACCUCACGGCAAGGGCCAGCCUGUUUCCUCCCGGUCACCUCCAAAUCUUGCUGC +>U2AF2_K562_rep02_212 +UUUUUUUAAGCGUUUGGCAACAUAUUGACUGCAUGGGGAUUGAUAGGCAGCAUAUUCCUGA +>U2AF2_K562_rep02_213 +UUCCUAGGACUAGUAGAUGCUGCAGUCGAUGCAGCACCAGGAGCAGGUGUGUGUAUACCAU +>U2AF2_K562_rep02_214 +UUAUGUAUUGUUUCCCUCUUUGUUUAGCUUGAACAUGCGAAAGUGACACAGACAGAGUUGA +>U2AF2_K562_rep02_220 +UUUAUUUAUUUUCAGAGGGCGCCUCACUCUGUUGCCCAGGCUGGAGUGCAGUGGUGCAAUC +>U2AF2_K562_rep02_221 +AACCUUUGCUUCCACAGACUUUUUCAUCCCUAAGAUACUAGAAGAAGAGCAUACAUAAACG +>U2AF2_K562_rep02_222 +CUUCUUUUCUAGCUACUCUCGGAACCGCACGUUUGACACGUACAUUGGGCAGGGCUACGUG +>U2AF2_K562_rep02_223 +CUUGGGCUUCUUCUUCACAGGGUCUCAUAAGCCAUGGCACAAGACAAGAUUUGAGAGUGGC +>U2AF2_K562_rep02_231 +CUGCUACUCUUAAUCUUCUCUAAAUUUUUCCCCCUACUUUCUUGCUUCUGUUUCACAUUUU +>U2AF2_K562_rep02_232 +GCUGCUACUCUUAAUCUUCUCUAAAUUUUUCCCCCUACUUUCUUGCUUCUGUUUCACAUUU +>U2AF2_K562_rep02_233 +UAUUAUUUCUUAGGACCAGAAGUCCUUGAUGAGGAAGGAACUCAAGAAGACCUAGAGUACA +>U2AF2_K562_rep02_234 +UCCUGCUGACACCCCUUGGGCUGGAGAGGCCUCCUCUGAAAGGGAGCCCUGGGAAAGGGCU +>U2AF2_K562_rep02_235 +GUCCUGCUGACACCCCUUGGGCUGGAGAGGCCUCCUCUGAAAGGGAGCCCUGGGAAAGGGC +>U2AF2_K562_rep02_240 +UUUACUUCCAUUAGGCCGUAUAACUGGAGAGACCUGCUGCUCGUUAUAUAAUUAUCUGAUA +>U2AF2_K562_rep02_241 +UCCUCCCAAGCAGAAAAUAUCCUAGGGGCAAGCCUGUGUAUGAUGUGCCUGUUUCUGUUAU +>U2AF2_K562_rep02_246 +AACUUUUUUGUUUCUUCCUUCUCUAUCCCUUUACUUUAGCUUUUAAGUGAAUUUUGAUUUU +>U2AF2_K562_rep02_247 +UGCUUUAUUUUGGUAGUUGGCGCAGAUCAAGACUCCAUCUGAAAAAAACAAGUGUAUAUAU +>U2AF2_K562_rep02_251 +CUUUUCCCCCAUCCAACAGGCUGUGUGGUUCCAGGUGCUGGUGCCGUGGAAGUGGCAAUGG +>U2AF2_K562_rep02_256 +UAAGUUUCCCUGCCGCAGAGUGAAGCAGAUACGUGUGUGUUGGGGCAUUCGGGGCAUGGAG +>U2AF2_K562_rep02_257 +GAAUUUGGCUUUUUUGCAGGUCCCUAGCUGUUGGUAGUAAGUCCGGUUAUAAAUUUUUCUC +>U2AF2_K562_rep02_258 +CUUUUUCGUUCCAGAGCGCCGCCCUGUGCUGGGCUGCCGGGAGCUCGUCUUCAGGAACCUC +>U2AF2_K562_rep02_269 +AACCCUACAGCCUACCCGUUCCAUCCCGGGCUAUCCCAGUUCCCCACUGCCAGGGAACCCC +>U2AF2_K562_rep02_270 +CUUCCAGAUGAGAUAUCACAGAGGCUUGGGCCUAGAUUGUCAUCAGCAUACUGCUAUACUA +>U2AF2_K562_rep02_271 +UUCACUCCUUGUCACAGUGAGCACAGUAGUGCCACAGGGUCCUGGCGAGGACCUAUGAAGC +>U2AF2_K562_rep02_272 +CUAUUAUUUUACCUAUCCCUUUGUUCCUUUCCUAUUCUCUGUACUUGUAGUCUGACGUGUG +>U2AF2_K562_rep02_282 +UUGUCCCCUUCUCCACCACGUAGGAUCUGAAGAAGCUGAAGAAAAACAGGACAGUGAGAAA +>U2AF2_K562_rep02_285 +CCGUUUAUCUGUAGGAUAUUGGGAGUGUGUGGCAUGCAUCCUCAUCAUCAGGAAACUCUAA +>U2AF2_K562_rep02_286 +ACCCUUUGUCCCCACUUGCUGCCGGGAUGAGAGGUAAGCACGGACCCGCCCACCCUCUGAC +>U2AF2_K562_rep02_293 +GUUUCUCUUCCCUUCCCCCCUUCCCCUGCGGUUGUAGAGCCCGUUCUGUCCGGUCGUGGUU +>U2AF2_K562_rep02_294 +CCUGUUUUUUCUAUUCCUCUUCCUUUUCAAUGGCUUAGGUAUUGCAGUUUCUUAUUUCACA +>U2AF2_K562_rep02_295 +UUAUAAAUUUUUCUCCCUUUCUUCUGUGGAUAAGCUGGAACAGAUCUAUGAAUGCAGUAAG +>U2AF2_K562_rep02_296 +UCUUCUUCCAUUUUUAUUUCCUUCCCCAUUCAGCACCACAUGAAUCAGAAUUUUUUUGAAA +>U2AF2_K562_rep02_297 +CUGUUUCCCUAUUAUUUCCUUACUCUGCUGAACAUGUCCGCUGUUUUACCUCACUGCUCCU +>U2AF2_K562_rep02_298 +CUGUUUCCCUAUUAUUUCCUUACUCUGCUGAACAUGUCCGCUGUUUUACCUCACUGCUCCU +>U2AF2_K562_rep02_299 +UCUUCUUAUUCAGGCAACAUAAGCUUUACAACAAGGAGUUGUAUGCUGACUUCAUUGCUGC +>U2AF2_K562_rep02_300 +UCCAGACCGCUCCUGAGUGGGAGGAGGGGUUCCUGUAGCCGUUGCGUCUUCUCAAACACGG +>U2AF2_K562_rep02_301 +UACAGAGCCAUAAGUGUGAUCCUUGGUGACAGGUGGAAGAAAAUGAAGAAUGAAGAGAGAA +>U2AF2_K562_rep02_302 +UUCUUUUUCUCCUCCCCUGGCAGCAACAGCCAGGCCUGUAGCAGUGCCCUUCGGAAACCAG +>U2AF2_K562_rep02_303 +UUUUCUCACUUUUCCAGUGGUCGUAGCAGGAACAGCGUCUUGACCUCACAUCAGUGACGUG +>U2AF2_K562_rep02_304 +UGGGGAUGUCUGGAAAGGUUGUUGCCGAGGGGGCUGGGCGCAGCCACCCUGUCCCGAGCAG +>U2AF2_K562_rep02_319 +UCACUCUUUUCCCUGACCCUUGGGGCCCAGGGCCAUGGAGGGACCCUUAGGAGUUCAAUGA +>U2AF2_K562_rep02_320 +UCACUCUUUUCCCUGACCCUUGGGGCCCAGGGCCAUGGAGGGACCCUUAGGAGUUCA +>U2AF2_K562_rep02_321 +UCACUCUUUUCCCUGACCCUUGGGGCCCAGGGCCAUGGAGGGACCCUUAGGAGUUCAAUGA +>U2AF2_K562_rep02_322 +AAUGCUCAAAUUGGUUUGGGGGAGCUAUAGGAAACAGUCUCUGAAGAUGCAUAAGGGGCAG +>U2AF2_K562_rep02_323 +UCAUUGUUGAACUCCCACUUUAGCAGAUCACAGAAGAGGAGGUCAGAAAUCUGAAGCACAA +>U2AF2_K562_rep02_324 +ACUCUAAGUUUACUUCUGUUCUCCCUACACUUCCCCACGUAUAUUAUUCGAGUUAAUUUUU +>U2AF2_K562_rep02_325 +UCCUUUACUCUCAUUUCAACUUCCUCCAUAGUAUUGCUGUAAUUAAUCAAAGUAGGCAAAG +>U2AF2_K562_rep02_326 +UUUUCAGUCUUUCCCAUAAAGGUAAUGAAUUUUGGGGCACUACACAAACACUGAAUGUUAA +>U2AF2_K562_rep02_327 +CAAUAGCAGACUCCAGUUUGGGAAUUGAUCCUCUUCGGAGACCUGGACUUCACAUAAACCA +>U2AF2_K562_rep02_328 +UCAAUAGCAGACUCCAGUUUGGGAAUUGAUCCUCUUCGGAGACCUGGACUUCACAUAAACC +>U2AF2_K562_rep02_329 +UUCCUUCUAUCUUUCCCCGUCUUUUCUUCCUUCCUGUAUUGACUUGUUUUGACACAUUUGU +>U2AF2_K562_rep02_345 +CUGCUUCCUUCCCUGACAGGCGGCUGUGGUGCUUCAGGCAGCUUUCAGGGGACAUCUCACG +>U2AF2_K562_rep02_346 +AUAUAUUUUCCCUCCCUUUCUUCCUCCCCUCCCCUCCCUCGCUUCCUUCCUUCCUUCCUUU +>U2AF2_K562_rep02_347 +AUAUAUUUUCCCUCCCUUUCUUCCUCCCCUCCCCUCCCUCGCUUCCUUCCUUCCUUCCUUU +>U2AF2_K562_rep02_348 +CCUUUCUCUUUUUAGCCCCUGGAGGAACGCGCAUAGAUGAUGGUGACAAGACCAAGAUGAC +>U2AF2_K562_rep02_349 +UUAAUUUGUAGUUCCAAUGACAGGAUUUACACAGAGAGCAACUAUUGAUCCAGAACUGAAU +>U2AF2_K562_rep02_350 +UCCUUUCCUCCUCCUUUCUCCCCAUCUCCCUCCACCGCCUUUUUUUGAUUGACCAAGGAUC +>U2AF2_K562_rep02_351 +CUGUUUUAGGAUAUUAGAAAUGGCUACUCCCCAGUCAAUUUUCAUCUUUGCAAUCUGCAUU +>U2AF2_K562_rep02_352 +AAUUUGCUUCUUUCUCCCAUCAGCAUUACCUUGUGGUUUUCUUCUGCAUUUGAGACACAGU +>U2AF2_K562_rep02_365 +CUCAGAAGAGGGUUGGUAGGCCUGGGGGAUGGAUGGGGUUGCUGAAGGCCAUGGCUGAAGC +>U2AF2_K562_rep02_366 +UUUUUUUUCCUUGUCACUAGGUUCCACUAGCACAGUCAGUUUACUUUAGGUUUAUGUCUAA +>U2AF2_K562_rep02_367 +GUGUGGCGGGCAGGGCGGCUCCUGGAGGUGGGAUCUGGGUCAGAGUUACUUCAUGCAUGUC +>U2AF2_K562_rep02_368 +UUCCCAAAUGCUGGAAAAUCCUCUUUGCUAAGUUGUGUUUCUCAUGCAAAACCUGCAAUUG +>U2AF2_K562_rep02_369 +UAGUUAAUAUCUUUGUCCAUACAUCUUUCCAUGCAUCUAUGAUUGUUUCUUUAGGAAUAGA +>U2AF2_K562_rep02_370 +GGGUAACUUUUUUGCCUGUCUCCCAUCCUCCUUUACUCUCAUUUCAACUUCCUCCAUAGUA +>U2AF2_K562_rep02_371 +UUUUCUUGAUAGGACCUUGCUAAGCAGUACUCUGACAGACUAGAAUGCUGUGAAAAUGAAG +>U2AF2_K562_rep02_372 +UUUUAGCUGGAAAGUGAAAUUUCAACCACAGCAGAUGACUGCAGUUCAGAGGUAAGACUAA +>U2AF2_K562_rep02_373 +CUUCAUGUUUUGAGUUGGUUUCUAUUUUCCCUUCAUUUCAGUUAAAUCCUUAAAUAUAAUU +>U2AF2_K562_rep02_374 +UUCAUGUUUUGAGUUGGUUUCUAUUUUCCCUUCAUUUCAGUUAAAUCCUUAAAUAUAAUUU +>U2AF2_K562_rep02_375 +CUCUCCCGCUUGCCUCUGGCAGGAGCUGGGCUGGUGAUGAAGGUCAAGCAGGAGAAGCCGG +>U2AF2_K562_rep02_376 +UUUGUCUGACUUCUUUCACUUUCAGCUUACGAGGAAAUAUUUCAGUAAAAGCAGUUAAAAA +>U2AF2_K562_rep02_377 +CAACACUCUUAUAUACCAAAGUGACCUGAAGGACGGAUGCUGUGUCUUGUUUAUCUGCAUA +>U2AF2_K562_rep02_378 +GUGUCCUUUGCCUGCAGAGACCUGUCUGGGCCGCAGAGAGGAGUCUGGAGGUAGGGUCCAA +>U2AF2_K562_rep02_379 +GUGUCCUUUGCCUGCAGAGACCUGUCUGGGCCGCAGAGAGGAGUCUGGAGGUAGGGUCCAA +>U2AF2_K562_rep02_380 +CUCGUUUUCUUUUUUAGGCCUGAUCAACCCCGUAUAACCAAAGAUGUAAUUUGUUUUCAUG +>U2AF2_K562_rep02_399 +CUUCAUUGAUAGCUAACUUCUCCUUUGCCACUUACUGAACGGUCUGAUCUCUGGAGAAUUC +>U2AF2_K562_rep02_400 +UACAGUACGGGGUGGACGUGAGGAGCCGGGACGCCCGGGGCCUGACUCCACUGGCAUAUGC +>U2AF2_K562_rep02_401 +AUUUCUCUGAAUUUCUAGAUAUACACCUGAAGAAAUUGAGAAGCUCAAGGAGUAAGUUUUA +>U2AF2_K562_rep02_402 +UUCUCUCUCCUCUCUCUCGUCCUCUACCCCUGCCCCCUGGGUGUUUUUGCAGUUGGUUAGU +>U2AF2_K562_rep02_403 +UUAUUAUCCCUUGUAUGGCAGGAAAGAGUUCCUAGAGAGAGAAGACAAAGACAGUCUGUGU +>U2AF2_K562_rep02_404 +UUAGGUAAUUUCAUCUGUGCCAAAGCCUCCAGAGGACAAGCCAGAAGAUGUACAUACAAGU +>U2AF2_K562_rep02_429 +AUAUCCUUCAUUCUUUAGGCACUGUGAGCCCUGAGAUGUUCAAGAAGAUGUCCAACUCAGA +>U2AF2_K562_rep02_430 +UGUGCAUGUGUGGGUGUGUGUGGGCACAGGUGUGAGUGUGUGAGCAACAGUACCCCAUUCC +>U2AF2_K562_rep02_431 +UGUGCAUGUGUGGGUGUGUGUGGGCACAGGUGUGAGUGUGUGAGCAACAGUACCCCAUUCC +>U2AF2_K562_rep02_432 +CUUUCCCCAGCCUGACAUUUACCCCGGUAACUGCUGGGCAUUUAAAGGCUCCCAGGGGUAC +>U2AF2_K562_rep02_433 +CGUGGGAAGGGAGGCUGGGAGACAGAGGGGACAGUGGCUUCCUGGGUCUGUGAAGACUGAU +>U2AF2_K562_rep02_434 +UUCUGUCUUCCGUUUUCAGCUAAAUUCUGUCCAACGUUUAAUAAAUCAAUGGAGGAACAGG +>U2AF2_K562_rep02_435 +UUAGCUUUGCUCUACAGGUGUUGGAUGACAAGGGCUCGAGCCUCAGCGCCUGUCCUGAUUC +>U2AF2_K562_rep02_436 +ACCUUCCUUCUACCUUUGGGCUUCUGCAUUAGGCUGCUCUUGAAGUGUUUGCCGGGGCCUU +>U2AF2_K562_rep02_437 +UCUCUCCCGCAGCCCACAGAGCAGUUCAACGGGCAGGGCGCCAGCUUCAACGGGGGCAGCG +>U2AF2_K562_rep02_438 +AUUCCUUUUGCUUGUUUCACAGGGGGUUUGAAGAGGACAAAUAAGUUUUUGUUGGUUAAUU +>U2AF2_K562_rep02_439 +UAUUUUUUCCCAGUGCCGACCUCACUUUCCCCACUUGUCCGACCUGCUGCCCAGGCGUCGA +>U2AF2_K562_rep02_440 +CUUCCUGCCCUGGCUCCAUCCUCAGGGGCUCCCUGCAGACAGGGGGGGCCUUCGCCCUGGA +>U2AF2_K562_rep02_441 +UGCCACCCUUUUUUCCUUAGGGUCAAGAAGACUGACUGACAGACCAGGACCCCACCAGGGG +>U2AF2_K562_rep02_442 +UUUCUUUCUAAUCAUUUUUCACCCUUUCUUUAUUUCUUUAAUUGAGUAAUUCCAAGUAAGA +>U2AF2_K562_rep02_443 +CCCUUUUUAUCUCUAGUAACACUUGUCUCUCGCCUCAAAGUCUUCUUAGCUACACCUGCUU +>U2AF2_K562_rep02_444 +CUCCUUUUCUUUUUUAAAAGCUUGGCUACACUGUAACUAACUAGGGUUAAGAGUACCAGUA +>U2AF2_K562_rep02_445 +CUUUGCCCUGUCCGGUUCUGGCAGGUGUGUGGACCCAGGCACUGGGAAGACUCAGCGAGCC +>U2AF2_K562_rep02_2538 +UUUUUCCUUCUUUUCCCACCCCCUCCCCCUCCAUGUGAAGAUUUGGGUGCUUAACAUAUCA +>U2AF2_K562_rep02_2539 +GAUCUGGUUUUCUUCUGGGGCAUUUAUCCGUGCUGAUCUUGGUGAAUGGGGCAUGAGUCUA +>U2AF2_K562_rep02_2540 +ACUAUUUUAGGAAUCUGGAAAACCAGGGGCUCAUGUAACUGUGAAGAAGCUGUUUGUUGGC +>U2AF2_K562_rep02_2542 +AUUUUUCAUUUCGUAGGAGGGAGCAAAGGAGUUUGCUGCUGCUCUCACCGCUGAGCGGAUA +>U2AF2_K562_rep02_2543 +UUUCCCCCCAGAAAACUUUAGAAACUGUUCCUUUGGAGAGGAAAAAGGUACUCUGCCAGCA +>U2AF2_K562_rep02_2544 +GUAUUUUCCUUUGCAGAGAGAAAAGGAACAGUUCCGUAAGCUCUUUAUUGGUGGCUUAAGC +>U2AF2_K562_rep02_2546 +CCCAACCUUUUCUUCUUUCCCAACUUCCCCUUCCUUUCAUAACGUUUUAAGAAAAGUAUAU +>U2AF2_K562_rep02_2547 +GUCUUAUCCACCUUUAGGAUUGGAGAGGGAGAAAGAAAAACUGCUUUGUGUGCCAAAAGCA +>U2AF2_K562_rep02_2548 +UUGCAGCUUUUCAUGCAACACCCAACACUUAUAAGCGGAAGAACACAGAAACAGCUCUAGA +>U2AF2_K562_rep02_2549 +UACAACUGAACUUUUUUUCUUUUUAGUUACUCCACAGGAUCCGCUGAACAUAGGAUGUUGC +>U2AF2_K562_rep02_2550 +UUUUUUUCCUUUGGCAGGAAGGUGUCUUGCUGCAGGUAACUAAUGAAGAAGUGGUCAACCA +>U2AF2_K562_rep02_2551 +UUUGUGUUUUUGCAGGUUGUGGGCUGCACACUGCAGAAAGAUACAGCUGAAAAAGGGUUAG +>U2AF2_K562_rep02_2552 +GUGUUUUUUUCUGUUUGGAUGACUUUUACCCCACCACUAUUUUAGGAAUCUGGAAAACCAG +>U2AF2_K562_rep02_2553 +AUUAUGCAUUUUCUCCCCAGGUCAGCUGGCUGCCUCAUUGCCACCUCCACCUGCAGGAAGG +>U2AF2_K562_rep02_2554 +UCCUGCAGGCAUCUCUAGGUACAACAAAAUACUGCAGUUACUUCUUAAAGAAUAUGCAGUG +>U2AF2_K562_rep02_2555 +UCCCCCUCAGCUUUGUGUCCCUCCUCUAAGGAAAUGGCCCCCGCCAUCGACUGGUUGUCCU +>U2AF2_K562_rep02_2556 +AACAGUUUAUAGUAAACGUAAUCUUUUUUUGGCCCCUAACAGAUGGAUAUGGCAGUGGACG +>U2AF2_K562_rep02_2557 +UUUCCCCUCUUUGAACCAAGCCACUCCUACCUAGGAACUAAAUGGGUAUAUAUUGCCUGUU +>U2AF2_K562_rep02_2558 +UUUGUCUUUCCUCCCUGGGGACCGCUGCCACCCGUGCGGGCCGAAGCCUCGCGAAGCCGUC +>U2AF2_K562_rep02_2559 +UCCUAAUUGCCUCCUUUAUAGCAAAAGAACAUCUUCAUCCUAAAUCUUCUCUCCCAGCAUG +>U2AF2_K562_rep02_2560 +CUUUUUCCUUUACUCCUGGCAGGCUAAUAUUUUUUUAAAGAUUAUACUUCAUAUCUGUGAG +>U2AF2_K562_rep02_2561 +UUUCCAUAUUUCUAGUUCCACAGGAAAGCGAGUGACCUCGCACCUAUAUCCAUAGCAACCA +>U2AF2_K562_rep02_2562 +UACUCCACAGGAUCCGCUGAACAUAGGAUGUUGCCACAAAAUCUACCUCGUGUAUUUUUCU +>U2AF2_K562_rep02_2563 +UUUUUUUUUUUUUUUUUGUUCUUCUCCUUUAGGUGGUAAAUAAAGAUGUCCUGGACGUUUA +>U2AF2_K562_rep02_2564 +CUUCUUUUCCUUUACCCCUCUUCCUCCUGCAGGCAUCUCUAGGUACAACAAAAUACUGCAG +>U2AF2_K562_rep02_2565 +CUCCCUGCUUCUCUCCAGUCUCUCUUGUGCCCAGAUAGACCAGCCAGAGUUUGAUGUUCCC +>U2AF2_K562_rep02_2566 +UUUUUGAGAUAGGGUCUCCCUCUGUCGAACAGGCUGGAAAGUGUAGUGUGUGAUCAUCUUG +>U2AF2_K562_rep02_2568 +AAUCUAGCAUCAUAGCUCCAGCUCCCGCUGAGGAUGUGGAUACUCCUCCAAGGAAAAAGAA +>U2AF2_K562_rep02_2569 +AAGCUUAUAGCUUCAUUGCACCAUGUGUGGCAUUUGGGCGCUGUUUGGCAGUGAUGAUUGC +>U2AF2_K562_rep02_2570 +UUGGAGAGGAAAAAGGUACUCUGCCAGCAGGUCACCUCAUAUUUAAGAAUUUAAUUUCCUG +>U2AF2_K562_rep02_2571 +AUUCACUCUUGAUUCCGCAGGCUGGACAGGAAGCACGGCAGCAUCUACUCGGCUUCUGAGG +>U2AF2_K562_rep02_2572 +UCUUUGUGCCAUUUUCUUUUUUCGAUCUUUCUCAGGUAGGGAAUAAUGAAAUUUGGAUCAU +>U2AF2_K562_rep02_2573 +CAUGCCCACUCUAGGGUUCUGAUCCCACUGCAUUCUCCGUCCUUACCCAAGCCAUCACUGG +>U2AF2_K562_rep02_2575 +UCUCUCAGUUCUUCCAUUACCUUCCCCAGAGGCAAGAAGUUACCAAUUUCUUGGACUUUCA +>U2AF2_K562_rep02_2576 +CCAGCUCGCAGCUUUGCGUGGGCACCCCUUUCCCUGCAGGUGCACCUGGGAACUGGAGACC +>U2AF2_K562_rep02_2577 +UUUCCCUUCCCCAGGCUUUUUCUCCUCCGUGACAGCCAGAGUAAUCCAAAGGCAUUUGUAC +>U2AF2_K562_rep02_2578 +ACCUAAAUUAAAGCUGCCACUGCAGAGCCCCGCCAUGGAAGACACGCCGUUGGUGAUAUCG +>U2AF2_K562_rep02_2580 +UUCUCUUCUUUUUCUCACACCCAAGGGGAAGCCCUUUCCCCUUCCUUCUCUUUUCCUUUUC +>U2AF2_K562_rep02_2584 +AUUUCUUUUCUAGGUCCUACGGGAAGUGAAGGUGCUGGCAGGUCUUCAGCACCCCAAUAUU +>U2AF2_K562_rep02_2585 +UUUUUUUCCCUGCCGGAAUUUUAGCAUUGAUAUGAACCAUGGACAAGUAUAUUCUGCUGCC +>U2AF2_K562_rep02_2586 +GUUCAUCUGUCCCUUUCCAGGGGGAAGACUGUUGCUCUCAAAGAAGUAGGUUUUUGGCUGG +>U2AF2_K562_rep02_2587 +UUCUAGUUGGAGCUCAGCUGCAUGGAAGGCAGCUGCACGUGUUCGUUCCCAACCAGUGAGC +>U2AF2_K562_rep02_2589 +GUCAUUUACUUAAAUUAUUUUGGUUGUUUUUCCCUUUUUUUCCUUCUUUUCCCACCCCCUC +>U2AF2_K562_rep02_2590 +UUUUCUAGCUACUCUCAGAACCGCACGUUUGACACGUACAUUGGGCAGGGCUACGUGAUUC +>U2AF2_K562_rep02_2591 +UCUUUCCUUCCUUCCUCUUCUUUCCUCCCUUAUUUCCAGGGUCUCACCCUGUUGUCCAGGC +>U2AF2_K562_rep02_2592 +UCCUUUUAAUGCCUUCACAGGGUCAGCGCCAAACUGGAGGGGAAUGAAACACUAAAAGUUG +>U2AF2_K562_rep02_2593 +GAUUUUGUCCUUAGUUAUACUUCGAUUAAAACAUGGCUUCAGAGGCUCCUUCCUGUAAUGC +>U2AF2_K562_rep02_2594 +CUUUGAAUUAUGCUUGUGUUUUUUUCUGUUUGGAUGACUUUUACCCCACCACUAUUUUAGG +>U2AF2_K562_rep02_2595 +AGGGGUGAAUGGUGCUGAGGUGCGAGGAGAGGGAAGGACAGUAAAGAGCAGGUGGGCAGGA +>U2AF2_K562_rep02_2596 +UUAUUUCUAUUUCAGACACCAACCAUCUGCCCAGUUGAAGAUUUGCAAAAUAAUUGUUUUU +>U2AF2_K562_rep02_2597 +UCCCCUUUUAUCCAGGGUAGGUCCAGGUAAAGCCAAAGGCCUUAUCCUUAUCUACACUGCU +>U2AF2_K562_rep02_2598 +UGGCUGCCUCAUUGCCACCUCCACCUGCAGGAAGGCCAGAGGUUCUGGUGGAGUUGAUUGA +>U2AF2_K562_rep02_2599 +AGGUGGUAAAUAAAGAUGUCCUGGACGUUUACAUUGAGCAUCGGCUAAUGAUGGAGCAGCG +>U2AF2_K562_rep02_2600 +CCAAUUACAUUAGCAAACUUUGGGGGCUCAAAUGCAAGGUGGUUUUGGAUGUGGCAACCAG +>U2AF2_K562_rep02_2601 +UCUUUUUUCGCUUUUAGGAUGAUCGCUGCAAGAUCCCUUUAUUCAUGCUAAUGUCCUUUAU +>U2AF2_K562_rep02_2602 +AUUUCUCCUCAGAUAACUUCAAGUGAUGUACGAAAAGGUUUGGAGUUCAUUUUUGUGGAAA +>U2AF2_K562_rep02_2603 +UCCCUUUGCCCCUCCCAUUCCCAUAUCCUUUUUUUCUCUCCUCCAUAGACCACAUAGCCCA +>U2AF2_K562_rep02_2604 +UGUCCCAAAUCUUCUAGGUACCAGGACAUUAUUCACUCUAUUCAUCUAGCACGGAAGCCAA +>U2AF2_K562_rep02_2605 +GUGUGGCUCUGAGCUGAUUCAUUUGCUGCUCAUCGUAUAGGUGCUGCCCAGAGUAUCCUUA +>U2AF2_K562_rep02_2606 +GUAAAUAUCCAUGUGGAAAAAGUAGGGAGUGUGUUGCCCCAAACAUCUGCAAAUGUAAACC +>U2AF2_K562_rep02_2608 +UCUGCUCUUUUCCCACAGCGGGACGACCCUGGGACAGUCUCCACUGGGGCAGAUCCAGCUG +>U2AF2_K562_rep02_2609 +AAACUCAAAAGUGUUCAUUUAUUCCCAUUUCUCCUCAGAUAACUUCAAGUGAUGUACGAAA +>U2AF2_K562_rep02_2610 +UAUUGAAUAUUUUUGAUUUGUCUGCUUUUCUCUCCAUAGAAAGCUUAUAGCUUCAUUGCAC +>U2AF2_K562_rep02_2616 +UUUCUCCACCUUUUAAGGUUUUUGGCUUUCAUCGCUUUUUCUACAUGUUUUUAGCCUCACC +>U2AF2_K562_rep02_2618 +UUUCCUCUCUUUCCAGCUAAUAUGCAAGUGAACCAGUGACCUGCAGUUCUGCCCACACAGG +>U2AF2_K562_rep02_2619 +UUUUUCUCUUCCAUCAAAAUGAGUUUUAGAACUUUGCCCUGAUGUUGACAUUUUUCAUUUC +>U2AF2_K562_rep02_2621 +UCUUUGCCAAUUUUUCCUUCUUCUUUUUUUCCCCAACCUUUUCUUCUUUCCCAACUUCCCC +>U2AF2_K562_rep02_2622 +UAAGGUUGCCUUUUCCACCUUCCAUCCUGUUUCCUUAAAAACAGCAAAUAACAAUCUACAA +>U2AF2_K562_rep02_2623 +AAGGUUGCCUUUUCCACCUUCCAUCCUGUUUCCUUAAAAACAGCAAAUAACAAUCUACAAG +>U2AF2_K562_rep02_2625 +GUUUUCAUUUUGGUUUUCAGGGGAGCCCUGGAAGCUUAUGUUCAAUCAGUGAGAAGUAGAG +>U2AF2_K562_rep02_2626 +UUUGAGACGGAGUCCCGCUCUGUCACGCAGGCUGCCAGGCUGGCGUACAGUGGCGCAAUCU +>U2AF2_K562_rep02_2627 +GACAGGGUCUUGCUCUGUUGUCCAGGCUGGAGUGCGGUAGUGCUAUCACAGCUGACUGCAU +>U2AF2_K562_rep02_2628 +UUUUUUUUGCAUUUAGGCUGGAGGCAAAGCUGGAAAGGACAGUGGGAAGGCCAAGGCUAAG +>U2AF2_K562_rep02_2629 +AUUUUAUGUUUUUCCUGUCUUUUUUUUCCUUUGAGUAACGGUUUUAUCUGGGUCUGCAGUC +>U2AF2_K562_rep02_2630 +AGGUAUGCCGAGCAGACAGCUGGAGGAGCCCGGGGCAGGGACACCUAGCCCGGUGCGUCUG +>U2AF2_K562_rep02_2631 +UGUAUUCUAGAUACAAAUCCCUUCUGUUCAUCAGGGUUGCAGGAUACAAGAUGAAUAUACA +>U2AF2_K562_rep02_2633 +GGUUUAAAUUUGAUGUAAGUUUUUUUUUUCCCCCCAGAAAACUUUAGAAACUGUUCCUUUG +>U2AF2_K562_rep02_2634 +AUUUGUGUUUUCUCUCCCUCUUUUUCUUGAUCAGCAUUAAUAAGGACUUAUAAAUUGUAUU +>U2AF2_K562_rep02_2635 +AUUUGUGUUUUCUCUCCCUCUUUUUCUUGAUCAGCAUUAAUAAGGACUUAUAAAUUGUAUU +>U2AF2_K562_rep02_2636 +CUAUUUCUUUUUUCCAGGAAACCAGGGCUUGCAGAUAUUGGUAAGUUGCCCAAGGUCACAC +>U2AF2_K562_rep02_2637 +UUUUUUUUUUAGGUACUGUCCAAGAAGCUGGAACAUUAUUAUCCAGCAAGAAUGUUCGUGU +>U2AF2_K562_rep02_2638 +AAAAUGUCACUUUUCAUCCCCAGUUUGCCUUUUGUCUGAAAUGCACCAGUGAAGCAAUCAA +>U2AF2_K562_rep02_2639 +CUUUGUUUUCUUCAUCUCCCCUGUAGGGCCAUGUUUAUGAGUGGACUAAGUGAAAGCAAAC +>U2AF2_K562_rep02_2642 +CUUGCCUCCCACCCAGACAUGAGCACCAGCCUCCAGGAAGGCCAGGAGGACGGGCCGGCAG +>U2AF2_K562_rep02_2643 +UUCAUUACUGCACAGGGGUGGCGUACACAUCAGAAUGUUUUCCUUGCAAGCCAGGCACAUU +>U2AF2_K562_rep02_2644 +GUCCCCCUCCCAUGCUCUGUUUUUCAUUACUGCACAGGGGUGGCGUACACAUCAGAAUGUU +>U2AF2_K562_rep02_2645 +GCGGCCUGUCUCCUCCCCGCCAAGACGCCGUGUGCGCCGCCUCGCGCAGCUCCGCCUGGCC +>U2AF2_K562_rep02_2646 +UGUUUUUCUUUCUGUAGCAUGGCAAGGUCACAAGACAUGUUUAAGUAAGGUAGGCUCAUGU +>U2AF2_K562_rep02_2647 +UUUCCAUUAAGGUUAAUGUUCGUGAAGAAAUUGAAGAGUUUUUUCCAAGAAUGUGGAAGAU +>U2AF2_K562_rep02_2648 +UAUAAAUGUGUUACUCACAGCGGUUCAAGUCCACACUGAAGAGCAACAGAAGAGUCAUCCC +>U2AF2_K562_rep02_2649 +UUCUGUAGACCUCGAAGUAGGGGGAAAACUGCAGUGGAAGAUGAGGACAGCAUGGAUGGGC +>U2AF2_K562_rep02_2650 +UUGUUGUUUUCUGAGAUGGAGUCUUGCUGUGUCACCAGGAUGGAGUGCAGUGGCAUGAUCU +>U2AF2_K562_rep02_2651 +AGAUCUUGGGGGCAAAGGAAACCUUGGGGAAGGCAGGCUGGUAAGGGCCUCCCAGGAGGAU +>U2AF2_K562_rep02_2652 +GCCUGGUCAUGAGGCAGGGAGGGGACGGGUGGUGCUGCGUGCAGGGCAAGGGCUGUGGACG +>U2AF2_K562_rep02_2653 +CACUUGAUCUUUUGUUUCCAUGUUUGUCACUAGAUGCCCAUAAAAUUUGUGGAUAAGUGUU +>U2AF2_K562_rep02_2656 +ACCCACAGUUGAAGAUUCCUGUCUCUGGAUCCAAAUCAGAGGGCCUUCUCUACGUCCACUC +>U2AF2_K562_rep02_2658 +UUUUCUUUUUUCUUUUUCAGUUGCAGGAAUUUAGCCAAUUCAGAGGUCUUGUUCUCCAUAA +>U2AF2_K562_rep02_2659 +UUUCACCUCUUGGUUCCUCCCACAGAGCACUCCAGAAGAGAGGCUGCCCGUGGAAGGGAGC +>U2AF2_K562_rep02_2660 +UUCCUGAUAUUGAUAAUUUGUGUUUUCUCUCCCUCUUUUUCUUGAUCAGCAUUAAUAAGGA +>U2AF2_K562_rep02_2661 +AUUCCUGAUAUUGAUAAUUUGUGUUUUCUCUCCCUCUUUUUCUUGAUCAGCAUUAAUAAGG +>U2AF2_K562_rep02_2662 +AUUCUCCUGUUUAGAUAAAGAAAGCCGCCCACCUCGGAAAUUUCCUUCUGAUAAAAUUUUU +>U2AF2_K562_rep02_2663 +UUUCCAUUCCUACAGAACUGAGAGAAGAUGGUUUCCAGCCUCAAACUUACCUAGUACAGGG +>U2AF2_K562_rep02_2664 +GUCCGUUUGCUCUUUUUGUCUCCCAACUAACAGUGGUUUAUCAGAUACUAUCAUUUUGGAU +>U2AF2_K562_rep02_2665 +GUAAACUAUUUGUAUUUUCAGGUCAUAGCCACCUUCCAUUCAUCUUUCAAACAAGUAAUUC +>U2AF2_K562_rep02_2666 +UUGUAGGAAAUACAACUGGAGCACGCAAAGCAAGCCUUUGUGCAACGGGACAAUGCUAGGA +>U2AF2_K562_rep02_2667 +GGCAGAGAAGCGUGGGGUGGGUGGCACAGAGAGGAUGGAGGGAUCAAGAAGGAUGUGUCUU +>U2AF2_K562_rep02_2668 +GUCAGUUCACAUUGAGUCUUCUUUUCCUUUACCCCUCUUCCUCCUGCAGGCAUCUCUAGGU +>U2AF2_K562_rep02_2669 +CUCUGUUCUUUCCUCCUGGCAGGUGACAGAGCUGAAUGAGCCACUGUCGAAUGAGGAACGA +>U2AF2_K562_rep02_2673 +AUGAUGCACUUUAUUCUCAUUCUUUGUGCCAUUUUCUUUUUUCGAUCUUUCUCAGGUAGGG +>U2AF2_K562_rep02_2674 +ACUUUUCUGCUUGACAGGCCGGACAGUGGCUGUGGAUUGGGCCGUGGCAAAGGAUAAAUAU +>U2AF2_K562_rep02_2677 +UUUCUUUUAUGUGUAGGACCUGGAGCCAUGGAAAGAAAACUUGAAGAUCUAUUUUAGCCCU +>U2AF2_K562_rep02_2678 +UAUUUUUCCUUUUUCUCCUUUCAGAUAAACAUCUCUAUUAAAUUAGGAGCUAUCAUUUUUC +>U2AF2_K562_rep02_2679 +UUUUCCCACAGUACUCUUUCCAUUCCUUACCCCAGUUUUUGAAGCAUUAAAUGUCUCUCUG +>U2AF2_K562_rep02_2680 +UCCCUUUCAGUAUUUAGUGUCUCUGAUCCGGGACAAGCUAGGAUGGAUGUGGGUUUUCUAC +>U2AF2_K562_rep02_2682 +CUGUUUUUCUUUCUGUAGCACGGCAAGGUCACAAGACAUGCUUAAGUAAGAUAGGGUCAUG +>U2AF2_K562_rep02_2683 +CUGUUUUUCUUUCUGUAGCACGGCAAGGUCACAAGACAUGCUUAAGUAAGAUAGGGUCAUG +>U2AF2_K562_rep02_2684 +UGUGUGUAUUUUCCUCCUAGGUUCAUUUUCCAGACACUGAAAGAGCAGAAUGGCUAAAUAA +>U2AF2_K562_rep02_2685 +UGGGAUUGGGGAGAUCAUGGAAAUGGAGGAGAGCCUGAGCACCGUAGAUCUUGGGGGCAAA +>U2AF2_K562_rep02_2686 +ACCUCUCUUUUUGUGUCCUUUAAUUAUCUCCCAAGUUUUCUUUAUGUGACUCUUGUACAUU +>U2AF2_K562_rep02_2689 +CUUUCCCUUCCAUUUUUCCUGGGGUGCCUCUCACCCUGCAUCUGCGCGUUCAGCAAGCUGG +>U2AF2_K562_rep02_2691 +CUUCCAUCUUUCAUUACUACAAUUUACCAUGCAGAGCUCACAAUGUCUCUCUGCACCAAGC +>U2AF2_K562_rep02_2692 +CCUGAGCUUUUGGGGCGCGGGUGGGAGCGCGGGGGAACCCUCAAGACGGCUUUCUUUUGGC +>U2AF2_K562_rep02_2693 +UUUUUUUUUCCUUCUCAUUCUAGGUAGAAGAUGUGUUACAACGUUGUCGAGAAUAUUUAAU +>U2AF2_K562_rep02_2695 +ACUAAUUUAGGAUCAACCACAGGUUUGUCUGCUACCCCCCCUGCCUCAUUACCUGGCUCAC +>U2AF2_K562_rep02_2696 +CCUCCUGCUGUUUAUUAGCUUUGUGCGACCCUGUCUGCCUCAAUGGUGGUUCGUGUAAUAA +>U2AF2_K562_rep02_2698 +CAGAACAUCUUCCUCUUUGGCAGGUCUUCAAACUUUGGUGCUGAAGCUUUCGUUAAAAGGA +>U2AF2_K562_rep02_2699 +UCCCCCAGGUUACCCUUAAGUUACAGGAGUCCCAGCUGCCUGGGCCAGACCAGUUACAGCA +>U2AF2_K562_rep02_2700 +AGGAUCUCCUUCUGUCCCCUAGGCCGGAGAGCAGUGGGGCAAUCAUGGCUGACUGUAGCCU +>U2AF2_K562_rep02_2701 +UGACUUUAUUUUCCUAGGGGAAGAAGAUGGCUCUCUGUACCAACAAUAUAACAGACUUUAC +>U2AF2_K562_rep02_2702 +UUUGUUUGUUCUUCACAGGAUGGACAACCGGAAAUUUUCUACACAUUUUGGAAUUCAGUUA +>U2AF2_K562_rep02_2703 +UGUUACAGGCUUCUCCCACCUGCCCAGUGGGCUGUACCCAUCCUACCUCCACCUGAACCAC +>U2AF2_K562_rep02_2707 +UUUAACUUUUCUUCCAUACAGAGGAGUUUGUUCUGGCAGCUCAGAAAUUUGGUCAGGUUAC +>U2AF2_K562_rep02_2708 +UCUUCUUUUCAGGGUGUUCUAAGGAUACAUUUUAUUGAAGCUCAGGAUCUUCAGGGGAAAG +>U2AF2_K562_rep02_2709 +UUUGGGCCUUGCUUCUCCAUGCCCAGAGGCAAGCCCCCCGCCCCAUCCCCUAGGGGACAGA +>U2AF2_K562_rep02_2710 +UUCCCACUUUUUUGUUUCUAGACUGAGUGUACUUGGUCUGGUAUUUGUGGCAUAACUUACG +>U2AF2_K562_rep02_2711 +UCCUUUCUUCCAGGUUGUUUUUGAGCACGUUCACUCUCGCAGUGUCAGCUGGGGCUGUUUU +>U2AF2_K562_rep02_2712 +GAUUAGGGAACGACAGUGGGUAGAUGAUUUUCCUCUCCACCGAAGCGCCUGUGAAGGAGAU +>U2AF2_K562_rep02_2713 +UAUCUUUUAAUUACAGACGCAGGGACAGAGCUCAUCGGGAAAUCAAGGAUAUUUUCUAUAA +>U2AF2_K562_rep02_2714 +UAUCUUUUAAUUACAGACGCAGGGACAGAGCUCAUCGGGAAAUCAAGGAUAUUUUCUAUAA +>U2AF2_K562_rep02_2715 +UUUUGCUUUUUCUCUUUUAGGACGCUAUUGAUAACGGAAUGGUUGCAAUUAAGGACAUUUU +>U2AF2_K562_rep02_2716 +GGGAUUGGGGUGGGUGUUUGUCUUCCAUGUAGUUUAUAUCCUGGAACCUGGAGAUCCUCCU +>U2AF2_K562_rep02_2719 +AUUUCUAGGUAUUAAACUUGCUGCUGCUGUUGGGCUUUUUCCACAUUUUGUCUUCUGUUUU +>U2AF2_K562_rep02_2720 +CCCCCUUUUCCUUCCAGCCUUUCAUUCUACAGACCUGGACUUCUACUCUUUGCUGCUUUUG +>U2AF2_K562_rep02_2721 +AUUAAACAUUUAUGAAGAAUCACCUGUGCACAGCGCUACGCAAGAAGAUACAGAGACAUAA +>U2AF2_K562_rep02_2722 +CCUUUCUUCCUUCCCUUCCUUCCUUUCCCCUUCUCCUUCCUUUCUCCCUCCUUCCUUCCUU +>U2AF2_K562_rep02_2723 +CUUUUUUGUUCUUUUUAGGCUGGAGGCUCCCAGGUGAUUUUCACAAAUCCUUUAGAAAUCG +>U2AF2_K562_rep02_2724 +UCUUUUUAGAUUUUGUGGUGGAUGCAACCCGCAAGGGUAACAAAAUUCGUUUUGCAAAUCA +>U2AF2_K562_rep02_2725 +UACCUGAUUGCCUCCUGCUUAUUUCUUCUGCCUGUCUACUUUCCAUUCUGCUUUUACAAUG +>U2AF2_K562_rep02_2732 +UCUUUUUUCCCAGUGCCCUUCUUCAUUCCAGACAUGGUGCUUUGAACAAUUUGACUUGGAG +>U2AF2_K562_rep02_2733 +UAGCUUACAGUGCUUGAAUGAAACACUCACAUCAUGCACAAAAGAAGUAGGAAAGGCUGCU +>U2AF2_K562_rep02_2734 +UUCCUAAUUUGGCAGCAGAAGGGGGAAAAACCAGGGCCUUUCACAGACAAGGCUUGUUUUA +>U2AF2_K562_rep02_2736 +CCUUUUCCUUUUUUUGGUCCUUAGGUUCUGAGUUACUUUCACCAUCAAAAGAAAGUUCGGC +>U2AF2_K562_rep02_2737 +UUUGAAUCCUUUGCAGCCCACACCCCACCUCCAGUUCCAACUCCUCCACUUCCUUCCAUUU +>U2AF2_K562_rep02_2741 +ACUCUGAUUCUGCCCCGGCUGCAGCAGGAAGGGGAGCGGAUCCGCAGUGUGCUGGACGGCC +>U2AF2_K562_rep02_2742 +CUCAAGUGUUUUUUAAGGUACACCCAAGCCCCUUCAAGAUGUAACUUGACAAAUUUUUUAA +>U2AF2_K562_rep02_2747 +ACACACUUUUUUUUAGGGGCUGGGCCUGUAUGCUGCUCGAGACAUUGAGAAACACACCAUG +>U2AF2_K562_rep02_2749 +UAAGUAUACUUAUCACUGCAGGUGGGUUCACCUAGAGUGUGACAAACCAACAGAUCAUGAA +>U2AF2_K562_rep02_2750 +UCUUUCCCAAAACUAUUCAGGAUUUUUUUCCUCAAGUGGCAAGUUGCCCCAUUUUAUAACA +>U2AF2_K562_rep02_2751 +UGUAGCCAUCAGCCAGCAAAGACCUCGUCAGUGUCUUUAACUGCGACCUUUCGUCCUCAGG +>U2AF2_K562_rep02_2757 +CUCCCAUCUUCACCCCACCAAGGCCGAAUGGGUAAUAGCCGAAGUGCCCUGAAGAUGAUUA +>U2AF2_K562_rep02_2761 +UGGGACUUUAUCUCUACUUUUUCCUUUCCUUUCCCAGCCAUUAAAAUAGGGUGAGAUGGUU +>U2AF2_K562_rep02_2762 +AUUUUCUAGAUCCCAAGCAGGUCUGUUCCAGCCUCUGAUUGUGUAUCGGGGCAAGAUUUGC +>U2AF2_K562_rep02_2763 +UUCCUCUUCUAGCCUUUCAGUGCUACCUUCAUCUCUUUCAGUUUUUCAAAAUCCCACAGAU +>U2AF2_K562_rep02_2765 +UACUUUUCUCAUUUUGUUUGCAAUCUUGGUUGAACAUUACAUUGAUAAGCAUAAGGUCUCA +>U2AF2_K562_rep02_2766 +UCUGCCACAGGAAGCUGGGCCGGGCUGCUGUGCCUGGGAGGAGGGAAGGAGGAAUGAGAAA +>U2AF2_K562_rep02_2767 +UUUUUCUCUCAUCAGUUUAGGUCUUAGGAUCUACCAUCUGUUACUUUUCAGUUUCUCAUCU +>U2AF2_K562_rep02_2775 +CUUUUCUCCCUUUUGCUUCACUUUCCCUAGGUCUGUUUCAUUCACCUUUUUAAAUAAAAAU +>U2AF2_K562_rep02_2776 +UUUGUUUUUUUAUACAGGUAUGGAAAAGUUGAGGCCACUCGCAUAUUGUUAGAGAAAGGAA +>U2AF2_K562_rep02_2777 +CCAGGCUUUUUCUCCCUUUCUCUCACACUCAAGGAAACAGGUGAAUAAAAGUGACAUGAAG +>U2AF2_K562_rep02_2778 +UCUUGUCCACUCCCCCAAGGCGUGCCCCACUUCCGCAGUGCUGAGUCCCAGCGGGGAGCCC +>U2AF2_K562_rep02_2784 +UUCUUUGUUCAGGUGGAGUACAUCCUGCUGCUUCAAGGGUAGAAGACUCCUCACUGCUUUC +>U2AF2_K562_rep02_2791 +UUACCUCCCUCCAUAGGUGAGGAAAAGAGCCAUGAAUCUAAACAUCAGGAAUCAGUUAAAA +>U2AF2_K562_rep02_2792 +AAUAUUCUUCCUUCCUGACAGGGGGAGUCGGUGAAGUACUUCCUGGACAACUUGGACCGGA +>U2AF2_K562_rep02_2797 +UGCCUUAUCUUUUCAUUUGAUCUCACCCUUAAAAGGAAAAAAAUGUUAUGAAAUAAGAGAA +>U2AF2_K562_rep02_2798 +CUGUCCUCUUUUCCCCCACAGACCUGGCGCACUGUCAUGCCUACCUGGUAGAAAUGAGCCA +>U2AF2_K562_rep02_2799 +CGUCCCCUUUUGUACAUUAGCAUAUCCCAGCAGCUCGUGGAAGCAUUUGUGAACGAAGAAA +>U2AF2_K562_rep02_2806 +GUUACCCUUUUUAUAGGUUUGUGGAAUCUUGCUUCCCUUUUUUCCAACCUUUGUUUAUUUG +>U2AF2_K562_rep02_2807 +UUUGUCACUCAGCACUUUUUCUCCAUAUUCUUCAAGACGAUUGUGAGUAUGGUACGUAACA +>U2AF2_K562_rep02_2808 +UGUUGUCUUUCUCCCACCCCGUGCAGAGUACAUCCAGAAAUACGCCACGGAGGAGGCGCUG +>U2AF2_K562_rep02_2809 +UUUUAUUUUUUUUGCAGGAAAUGGGGCAGCCUUGAGGUCAGACUUGGAAUUAUGUCCUAGC +>U2AF2_K562_rep02_2810 +CUUUCUGCCUUCCUCCUCUCCAGGAAGCUCAAAGGCCCUGUGGCCCCCCAAGAAUGGCAGG +>U2AF2_K562_rep02_2813 +ACACUGCGGAUGCUGGGGGGAGGGGGGAUUCCACUCCUGUUUUGUGAGUAGGCGACCCAUG +>U2AF2_K562_rep02_2814 +UUCUCUUUGCUUUUCAGGAUUCCCGAGAAAGCACCAAGAGGGUAGAGAAGGACAUUGUCUU +>U2AF2_K562_rep02_2823 +AUAAUUUUCUUCCUCCCUUCAUUCAGGUUUCCACUAAAAUGUCAACUCAGUUCUGAUCACA +>U2AF2_K562_rep02_2824 +UAUAUUCCUCCUCCUAGAAGUCUCAGGGGAUCCAGAACUGCAGCCAGUCCUUGCUGGGCUG +>U2AF2_K562_rep02_2825 +UAUCUUCUUGUUUUUGGACAGUUCUGCUCAGAAGGAAAGGUGUAUUUGUCCAUGUUGGAAG +>U2AF2_K562_rep02_2826 +GACCCUCCGGCUUUUGCUUGUCCUUUUCCCUUCUAACAGGUUAUCAAGACUCUGAUUCUGC +>U2AF2_K562_rep02_2827 +GCUUUUUUCCUAUCUUCUCCAGGUCUGUGAAACGUAAGUAUAGCUACCCCAGGCUUAAACU +>U2AF2_K562_rep02_2830 +UUUAUGCUUUUUGUCCCUAGCUGCUACUGUUUGAACGGUCUUGGAUGAACAGAUGGAAGUC +>U2AF2_K562_rep02_2831 +AUUUUAUUUUAUUUUCAGAGAACGAUCUCCUCAGCAGAAUAUAGUAUCUUGUGUAAGUGUA +>U2AF2_K562_rep02_2832 +CCUUUUUUUCUCCUACUGGGGUGUUUACAGGGCAUGGUAAAAGGAAUAAAGGUGAAAAGAA +>U2AF2_K562_rep02_2833 +UUUCCUCUCUCCCUCCUCCUCCCACAGGAGGAAAUCCUGAGCAGCCUGUUCAACUAGAAAA +>U2AF2_K562_rep02_2844 +CCUUACUCUUGUAGAUAUUGGUCCUGUCACUGAUGAUCCUUCCUCUUUGCCUCAGCCAAAU +>U2AF2_K562_rep02_2845 +AUUUCCUUAGGCUCACGCAGCCCUAGCAGGAGCCAACACAGGUAGGUGCACUGAAGAUCAA +>U2AF2_K562_rep02_2846 +CUGUCCACUAUUAUCCCAUAAUCUCUUUUCACCUUAGUUUCAUUAAACAUUUAUGAAGAAU +>U2AF2_K562_rep02_2847 +GACUGACUUUUCCACAGGGGAAGAAGAGGUGAAGGUUUCGACCAUGCCACUGUCAACCUCU +>U2AF2_K562_rep02_2848 +UAUUUUCUCAACUGCCAUAUCCUAGGGGGCUUGGAGUACCCAUAAUACAGUGAGCCCACCU +>U2AF2_K562_rep02_2849 +AUUGUUUUUGUUUCCCCUGAUAGCCUCUGAGUUCCUUCCGGAUAACACUGCAUCAACAAUG +>U2AF2_K562_rep02_2850 +CUGAAAAGUGUCUUUCUCCCACCCCAGGGGCCUGGAAUAGGAAAUGCCUCUCUUUCUACGU +>U2AF2_K562_rep02_2851 +AACAUUUUUUCUGCCUUCAGGAAGCCCUCAAUCUAGAAGAGUAGAGGUCCAAAGGUGCCAU +>U2AF2_K562_rep02_2857 +CAGUGCUUCCUCAUUCUCUUUUAAAACCCGCUUCCCGCUGAGUCUGCACCCAGGAGACCAG +>U2AF2_K562_rep02_2858 +CUCCUAUUUUUUUCUCAUUCUCCUGUUUAUUCCUCUGUUUGCUUAGUUUACAGAAAACGAG +>U2AF2_K562_rep02_2859 +AGGUACGUAUUUGGGUUUGCCUGUGGGUGCCUGCCCUCCUACAUAGAGCCUUGAUCUUCCA +>U2AF2_K562_rep02_2860 +GUUUUUGCCCCCUCUCUCUUUCUGACAGCACACACAUGCCCUCUUGGUUCUGUUUCUUUGA +>U2AF2_K562_rep02_2861 +UUUGUUUUUUUGCUGUGCCCUAGACCGUUACAUAACUGAAGACUCCCACCUUCAGGCAGGA +>U2AF2_K562_rep02_2862 +UUUCAUGCUUCCUUCCAUUUUCGUUUUCGUCAUUUAAGGUGUAAAUGUACAUAAUUUAUCC +>U2AF2_K562_rep02_2882 +AUUGGGGAGAGGUGGGGGUGGGGGGUUCCCACUCCACACUGGUCACCCACCCACAGGGCUA +>U2AF2_K562_rep02_2883 +GUUUUCUUUUUAUAGCCCCAUUGACAAACCUUCAGAUUCUCUCAGUAUAGGGAACGGUGAU +>U2AF2_K562_rep02_2884 +CAAAUGUCUUUUCUCUAGCCUUCCAGCAUUGGGUCCAUGGCUCUGACUGAGAGUGCACUAU +>U2AF2_K562_rep02_2885 +AUAUUUAUUUAUUUAUUUUAGGCUGAGCCAUUGAAAGUAAGUGCAAAAGCCCCUCUUUGGU +>U2AF2_K562_rep02_2886 +UUACCAUAUUAAUGUUGAAUAGCAUCUCAGGUUUCAUUUCACAAUGCACGCAUGGAGUUGG +>U2AF2_K562_rep02_2887 +CCUUCAUCCCACGUUACCCUCUUCCCCUCCCCUUAUGUCUCAAUAUGCCUCUGCCUUUUGC +>U2AF2_K562_rep02_2888 +GGAGUGAACUUUGCGCACUUUCUUCCUUAUGGCAGUGGCCAAUUUAAUAGUGGGAAUCGAC +>U2AF2_K562_rep02_2889 +UCAGAGUUAUCAGGUCUCUUUUGCCCCUACAGGUUUUUAUGUGAUAGUCAAAAGGAGCUGG +>U2AF2_K562_rep02_2905 +UUUCCCUUUUCCUUACCUAGGCUAUUAGUCCUUAUUUGCCAAGAGGUGAUCCAGUUCUGAA +>U2AF2_K562_rep02_2906 +GGAUAAAUAUAAAGAUACACAGUCUGUUUCUGCUAUAGGUAAGAUGUGGUAGUGUUGGGUG +>U2AF2_K562_rep02_2907 +AUUUGGUUUUAUUUGCAGGUCCUAAUCUACCCAUGGCUACAGUUGAUAUAAAAAAUCCAGA +>U2AF2_K562_rep02_2908 +UCUUUUUCAUUCUGCAGAUUGCAGGAAUUGACGCUGUAUAAUCCAGAACGCACUAUUACAG +>U2AF2_K562_rep02_2909 +UCCUUUUCUUUUCCUCUUUCUCCUCCUCUUUUUUCCCCUUCUUCGUCCUCUUCAUUGUUGU +>U2AF2_K562_rep02_2910 +CUACUUUUAGGAUUCCUAAGGGAUUUGUGUGAGGUCUUACUAUAUUUAUUGCUACCUCCUG +>U2AF2_K562_rep02_2912 +UUUAGAACAUUAGCAGUGUUGUGGCUGCAUUUUCCGACCUUCUUCACGUCCGAAUCCCUAA +>U2AF2_K562_rep02_2928 +UUCCCCUUAAUCACACAGCAUUGGCAUCAACAAAAGUCAGAAUUCCCGGGAACUUGAACAG +>U2AF2_K562_rep02_2929 +UUUCUUUCUAGGGGUUUAGUGGUUACUCUCCUGUUUGGAAAAACAAACUCAGAGAAGUACC +>U2AF2_K562_rep02_2930 +UCAGCUCAGGUACCUGACAAUGAUGAGCAGUUUGUACCAGACUAUCAGGCUGAAAGUUGUA +>U2AF2_K562_rep02_2931 +UGUUUUUGUCUUUGUUCCCUCAUUCCCAGGUGCUAGUGUAUGAGUUGUUGUUGGGAAAGGG +>U2AF2_K562_rep02_2932 +AGUGGGGUGCCAUUUUCUUCCUGCAGGUGCUGGGUGAAGUUCAGAAGGCUCUGAGAGGCUG +>U2AF2_K562_rep02_2933 +UUGAAUUUUCUCUUGUUCACAGGUGGAGAUACACUACGCCUUGACACACUUAUAGAAUGGU +>U2AF2_K562_rep02_2934 +UUAUUUGUACGUUGUGUUCUGGUAGUAGGGGUUUAGGAAUAUGGUUUUGAGUAAGAGACUC +>U2AF2_K562_rep02_2935 +AUGUUUAAUUUCCUUUUUCCCUGUAGCUUUUACAAAGUUGAUCACAGUAAAUGGACAAGAA +>U2AF2_K562_rep02_2936 +AUUACUUCUAGGUUGGGAGGUGGCUGGAGAUCAUAUCCAGAGUGGGGCUGGAGGUUCUGAC +>U2AF2_K562_rep02_2937 +CUUUUCCCACCCCUGCCCCUUUUCAACUUUCAGAGCACUAGACAAACUGAAUGGAUUUCAG +>U2AF2_K562_rep02_2938 +UUCUUUUCUUUUUUCUCUCAGGAACUAAACAACUUAAGCAUAUUUUAUUAAAAGAUGUGGA +>U2AF2_K562_rep02_2939 +ACCUCUUUUCCCACAGUCGGAGUCUCAGGACCAGGUCUUCCUACGCUGGAGCAGCGGGGAG +>U2AF2_K562_rep02_2940 +UUUGUUGCUUGUGUUUGUUUUUCCCCUACAGACGUAUGACCUUAGCAGACAUUGAACGGAU +>U2AF2_K562_rep02_2941 +AAUGACUUCAUUUUUCCAGGCCCCAAAUUCUCACCAGUCCGUCUCCUUCAAAAUCCAUUCC +>U2AF2_K562_rep02_2957 +UUUGUCCUAGUUUUCCUAAAAUUCCCUUUUCCACUGGUGUGUGGUGCAAGAUGAGGCACAU +>U2AF2_K562_rep02_2958 +UCCUUGUAUUUUGUGCAGGUCUGCAGACUCGUGAAUGAGGUCUACCACAUGUAUAAUCGAC +>U2AF2_K562_rep02_2959 +UUAAUUAAUGUAUUACUUUCUCCCUUAUUUUUUCCUUGGAUUCAUUUUACUAUUAUUCAUG +>U2AF2_K562_rep02_2960 +AAUCUUUAUUUCCUUUAACUCCUCAGCACUUGUUUUAACUUGCUUAUUUUCUUUAGUUUUU +>U2AF2_K562_rep02_2961 +CCUCCCCUGUGCCUUCCACAUUCUACACCCUUUACCACAGGAGAGGUCUCUGUUAGCUUGC +>U2AF2_K562_rep02_2962 +GCUGUCUUAUUUCUCCCUUCCUUUAGAAUCCCUUCUUUUUCAAAACACUAGAAACCUCCCA +>U2AF2_K562_rep02_2963 +UAGGUAGAUAAAGUGGUAAUAAAUCCAUACUUUGGUCUAGGAGCUCCAGACUACUCAAAAA +>U2AF2_K562_rep02_2964 +AACUCUCUUUUUCCACCCCCUAAGUCUCUGGCAACCACUGUUCUGUCUCUGAAUUUGAUAC +>U2AF2_K562_rep02_2965 +GUCUUUCAAUAUCUCUUCCCUGUUUGGACCACAUUACCCUUCAUCAUAUGAAGCCUUGGGU +>U2AF2_K562_rep02_2966 +UUCUCUUCGUUUUUCUCUUCCUCUAGUGAACACUGACUCGGAAACUGCAGUUGUAAAUGUA +>U2AF2_K562_rep02_2967 +UUUUUUUUCUUUACUUACAGGCAGUACUUAAUUUUCCUAAAUAUUGUGAACCCGUGGUUAA +>U2AF2_K562_rep02_2968 +UUUUGAUCCUUUGUUUCAGACUCUGCCACAACUGAAAGCUCACCAACAGCCUGCCAAUAAA +>U2AF2_K562_rep02_2969 +UCUCUCCUUUCUCUGCAGGGCACCCUCCCCCAGGAGACUUCAUUGCUCUGGGCUCAAAGGG +>U2AF2_K562_rep02_2970 +UCUAACAUUUACCAGUUUUGCUUCCCUGCUUUCUUCCUAACACUGAUGAUGAUUUUUAUUU +>U2AF2_K562_rep02_2971 +CUCUCUCCCUUCCUCCCAUAGAGACCAGUCUUGGGGAACCACCUUUGAGGUUUGUGUGGAG +>U2AF2_K562_rep02_2972 +UUAUUUCUACCCUCUUCUCUCCUCACUCCCCAGCCCCCCAACUUUACCAUCUCCUCAAGAA +>U2AF2_K562_rep02_4839 +UUCCUUCCUCUGACGCCUGCUCUUACAAUAGGCGUCCCUGCGAGAAGAGUCACCCAGUGGC +>U2AF2_K562_rep02_4840 +CCUUCCUUUCAAAUAGAUGUCUGUGGACUUUAUCCCCAGGAAUGGUCUCUUGGUUAAAGUG +>U2AF2_K562_rep02_4841 +CACUGCUUAGCUUUGCUGGUCCAUUUGUCCCUGUGUUUUCCAUUUGCAUUCAGGCCUUUGA +>U2AF2_K562_rep02_4842 +AUGGUUCACCAUCUGCCACUUCUGAAAGUGAUGGGUCUAGUACAGGCUCUCUGCCGCCGAC +>U2AF2_K562_rep02_4843 +AUGGUUCACCAUCUGCCACUUCUGAAAGUGAUGGGUCUAGUACAGGCUCUCUGCCGCCGAC +>U2AF2_K562_rep02_4844 +CCCUCCAGGUGCCUCAAUGGUCCGGCCACCAGUUGUGCCUCGGCGCCCCCCGGCCCACAUC +>U2AF2_K562_rep02_4845 +AGAUGCGAGCCACCCCUCUGGCUGCUCCUGCGGGUUCCCUGUCCAGGAAGAAGCGGUUGGA +>U2AF2_K562_rep02_4846 +UUCCUUUUCCCCUCUUCUUACCCAGAGUGAGCACAAAUGGAUCAGAUGACCCUGAAGAUGC +>U2AF2_K562_rep02_4847 +UUCCUUUUCCCCUCUUCUUACCCAGAGUGAGCACAAAUGGAUCAGAUGACCCUGAAGAUGC +>U2AF2_K562_rep02_4848 +UUUCUUCUCCUGUGACAUUAUCUAGCAUGCUUUGCAGUGGGUCCAGAGUUGUCUGGGGAUC +>U2AF2_K562_rep02_4850 +CUUUCUUUUUGCCUAGGAGCCAUAUGGGGGUGCCGUUGGUCUCUGGUCACCGACAUCCUUU +>U2AF2_K562_rep02_4851 +UUUGCAUUUCUUCCCAGGCUGCCAGCGGGACCAGGAUGGCUAUUACUGGAUCACUGGCAGG +>U2AF2_K562_rep02_4852 +UAACAUGGCAGACCAGAGACAGCGCUCACUGUCUACCUCUGGGGAGUCAUUGUACCACGUC +>U2AF2_K562_rep02_4853 +CAACUCAUUGUUUGUCCACAGGUGCUGGCUUAUUCUCAGACUCUGUAUAUUGGGAGAGAAA +>U2AF2_K562_rep02_4854 +UUGGAUUUCUUGCUUAAUCAACUCAUUGUUUGUCCACAGGUGCUGGCUUAUUCUCAGACUC +>U2AF2_K562_rep02_4855 +UUUUUCUUUCCUUCCCCACACCCCAGGGCUACCAAGAAAAGAACAAAUUCAUUGCUGCACA +>U2AF2_K562_rep02_4856 +UUCUCCUUUGCAGCAUCAUGGCCAGCCCAAGAACCAGGAAGGUUCUUAAAGAAGUCAGGGU +>U2AF2_K562_rep02_4857 +CCUGUUUUGUCUUUAGGGUGUACAACUAUGAGCCUUUGACACAGCUCAAGAAUGUCAGAGC +>U2AF2_K562_rep02_4858 +AAGAUUCUUUUCCUAUUUUCCCCAAAUCUUUUAUAGCAUCUGUCAAUGGUUCACCAUCUGC +>U2AF2_K562_rep02_4859 +AAGAUUCUUUUCCUAUUUUCCCCAAAUCUUUUAUAGCAUCUGUCAAUGGUUCACCAUCUGC +>U2AF2_K562_rep02_4860 +GAUGCUUUUUCCUCAGGUCCUGGGGACCUGGCCUCCCUCUGUCAGCAGUUUCUGACCUAAU +>U2AF2_K562_rep02_4861 +GGUCUUUCCUUGUCCAGUUCCAGGUCGCGGAGCAAAGGUCGAUCACGUUCUCGAUCAAAAG +>U2AF2_K562_rep02_4862 +UGUAGCUUGCUGAUGACCGUAUGGCACUGGUGUCAGGCAUCAGCUUAGAUCCAGAAGCAGC +>U2AF2_K562_rep02_4863 +CUGUAGCUUGCUGAUGACCGUAUGGCACUGGUGUCAGGCAUCAGCUUAGAUCCAGAAGCAG +>U2AF2_K562_rep02_4864 +GAAAACUUCCUGUUGCCUGCAGCCGCCCACGCAGAACAUGAACCUGGGCCCUGGAGCCCUG +>U2AF2_K562_rep02_4865 +UUGUCUUUCAGGAUUUUAUGCGACAAGCAGGUGAAGUAACCUAUGCGGAUGCCCACAAGGA +>U2AF2_K562_rep02_4868 +CCAGCAUCUUCGGCCUCUUGUCCGCUUUGUUUUCAGGGCCCAGGGGAAUCGCUACGUGGGG +>U2AF2_K562_rep02_4870 +CCUUUCCUUUUUCUUUUCUCCUCCCCCUUCUGUUUUGAAAAUCAGGUUGCUUUUCUGUUAC +>U2AF2_K562_rep02_4871 +UUCAAAUUCAGGUGUGCACUCUCCCAUGGCAUCUUCUGGCAAUACUGGGAACCACAGCUUU +>U2AF2_K562_rep02_4872 +CUUAAUUUUACAGGUGUGAGCCACUGCACCAGGCCCCUUCAUCUUAAUUUUAAUAUAUCUU +>U2AF2_K562_rep02_4873 +UGUGUCCUUCUGUCCACAGUCCCUGAGACGGCGGGCAACAGCAUCGGCAGGAACGCCAUGG +>U2AF2_K562_rep02_4874 +UCCCUGAUUUUCUUUUCAGACGUCUUUUUACAAGGGAAACGGUUCCACGAAGCCUUGGAAA +>U2AF2_K562_rep02_4879 +UAAGUUUUUGUUCAAGGUGACGUUACUGAGGCAGUGCUCUACUGAGAAUGAAAAUGACAUG +>U2AF2_K562_rep02_4880 +UAAGUUUUUGUUCAAGGUGACGUUACUGAGGCAGUGCUCUACUGAGAAUGAAAAUGACAUG +>U2AF2_K562_rep02_4881 +AAUUUGUGCUUUCUUUUUGCUCCCCCAGGGCCUGGUGAAAUCCCCAUGGGAAUGGGGGCUA +>U2AF2_K562_rep02_4882 +CCAGGACCUACUUGCUCAGAUCUCCAAGCAAGCAUUUCUUUUCUUUUAGGGAUGUCUGAAA +>U2AF2_K562_rep02_4883 +UCUCCUUUCCCCCCUUUCUACGCCUUUUCCCUUAGUCUUACCUGCAGUGGUGAAAAACGGA +>U2AF2_K562_rep02_4884 +UUUCUUUGCCAGAUCCCAUGAGCUGCGUUCCAAGGUGGUUUCCCUGCAGCUGCUCCUCUCU +>U2AF2_K562_rep02_4888 +UCUUGCUUUUCUCCUAGGCUUGGCACUGCUGCACCACCAAAGGCAAACUUCAUUGAAGCUG +>U2AF2_K562_rep02_4891 +UACUUUGGCCCCCUUCCCUGCUGUGGUUCUGGCCACCCCAGAGAGGUGAUCGAGAAGAAAC +>U2AF2_K562_rep02_4894 +UUUCUUUGACAAUUUUAAGCCUUGUCCUAGGUUAAGACUGAUGAACAGGAGCCAAAGAAGA +>U2AF2_K562_rep02_4895 +UGCAGCCAACAUUGGUACUCAGACCACAGGACCCAGUGGGGUAGGAUGCUGUACACCAGGC +>U2AF2_K562_rep02_4896 +CUCUUGCUUUCUUCCAAUCCAGGACUCCAUUAUUACAGUCUUUGAUUGGUCUUUUUGAGUU +>U2AF2_K562_rep02_4897 +UAGAGACUGCCUGCCUUUUCUCUCCUGGUCCCACCUCAGCUGACCCUCUGUCAGCUCGAAU +>U2AF2_K562_rep02_4904 +UUUUUAGAUAAUGAGCUUCAGUCCCCAAGAUCUGCGAAGACGUUUGUGGGUGAUUUUUCCA +>U2AF2_K562_rep02_4905 +UUUUUAGAUAAUGAGCUUCAGUCCCCAAGAUCUGCGAAGACGUUUGUGGGUGAUUUUUCCA +>U2AF2_K562_rep02_4911 +CAUCUUUUCUCUCCUGUAGUCUAAGGUUGUGGGUGACAGAGAGAACGGCAGUGACAACCUC +>U2AF2_K562_rep02_4913 +CCUUUUAGGUCCUUUUGGUGUGAACCAUGGGGUGGAACUUCACUCAGAUGUGAUAGAGUAU +>U2AF2_K562_rep02_4914 +UUUUUCAGAUAUGAGGCCCCAGGAUUCCUGGCGAGGUCCUCCUCCCCUUUUCCAGCAGCAA +>U2AF2_K562_rep02_4916 +UUAUCUCCUUAGGAAUACAAACAGAAGCUUGCACGAGUAACCCAGGUCCGCAAGGAACUGA +>U2AF2_K562_rep02_4922 +AUUUUUUCUUCCUAUAACUUUUCUUCUCUCAGGUAAACUAUCCUUUAAACUUUUGUGGAAC +>U2AF2_K562_rep02_4923 +AGUUUUGUUUCGUUUCUCCUUUUAUUCUCUGUAUUGAGCAAGUCUUAGACAUCAUACGUUU +>U2AF2_K562_rep02_4928 +GUGUGUUUUUCCUCCCCAGAAGAGGCGACAAAGGCCGUGACAGAGAUGAACGGGCGCAUCG +>U2AF2_K562_rep02_4929 +AGCUUAUUCUCUUGGGGGCCAAGAGAAUCUUGGUCUGAUCUCAGCUUCUCCACAAUCAGAU +>U2AF2_K562_rep02_4935 +UUUCAGGGUUAUUUUGGAGCUGUUGGAGCACUCCUUGAGCUGUUGAAGAUCCCGUGAUCAU +>U2AF2_K562_rep02_4936 +CCUUGUGCUUGUCCCCAGCGGCAAGCCUGCACGAGCUGUGUGCUGCCAGAGUGUCAGAGGU +>U2AF2_K562_rep02_4937 +UCUCAUAUUUCUAAUCCUCAGGGGUGGCACACACUCUGCAAGCAUGGUGCUAGGCACACGG +>U2AF2_K562_rep02_4941 +UAAAAUGUUUAAUUCCCUUGCUAGCUUGUGAGAAGAAUGAGUUGAUGACAUGCUCCAUACC +>U2AF2_K562_rep02_4942 +UUUUUAACAUAGGCAUACUGCAACCCAUGGGUUGUGUUCCCCAAGUGAAGAUUCUGUGUCU +>U2AF2_K562_rep02_4951 +UUUAUCUUUUUUGGUCCUCUGCCAGCGAACACUUGCCAAGUAUUUCAAUCCUUGCUAUGCC +>U2AF2_K562_rep02_4952 +UCCAAGGGGCAGUUGAAAGCACUUUUUUCGGAACACGAGGUAAGCUGACUUGUUCGUUGUG +>U2AF2_K562_rep02_4953 +AUUCCCUUUUUUCACAUGGCUGCCAAGAAGCUCAGGUUUACAUUUUUUCUCUGUGACUAAG +>U2AF2_K562_rep02_4954 +UUUUGUCCUCAGAAAAGGAAAUCCUCGCUUCCAUGGCUGCCAAAAGGACAGUGUUUCUGGC +>U2AF2_K562_rep02_4965 +GUCUUCAUUUACUAUAUUAUGUAGGGUUUCUGUCCAACAAGAGUACUUGUAUAUCUUUGCU +>U2AF2_K562_rep02_4966 +GCCCCUUUCUUCUGUCCCCAGGGCCUCGGCUUCACAGGAUGGGGCUGCCAGUGUCCUGGGC +>U2AF2_K562_rep02_4967 +GCCCCUUUCUUCUGUCCCCAGGGCCUCGGCUUCACAGGAUGGGGCUGCCAGUGUCCUGGGC +>U2AF2_K562_rep02_4973 +CCUAAUGUGUUUUUUCUUCCUUCCUUACCAGAUGAAAUUAAAGCAGAAAUAGAAAAGCAGA +>U2AF2_K562_rep02_4974 +GCUUCGCUAUUCUUGCAGGUGGAUGGGCAGGUGGUAGCACUGCUGGUACAGAAUCUGGAGC +>U2AF2_K562_rep02_4975 +UGUGUGACUUCGUCCCUUAGGAGCUCAGCCUGAGGAAGAAAGGCCUGGAGUGCCUCGUGUC +>U2AF2_K562_rep02_4976 +GUCCCCCCUUUCCUGUGGCAGGGCCGGAUCGUGGCACCCAGAGGCUGCCAGGACUUUGGCU +>U2AF2_K562_rep02_6000 +UUCCAUUGUUUUUUUUAGAUUCUCUCGGGCCUAGCCGUCCUUGGAACCCGAUAUUCGGGCU +>U2AF2_K562_rep02_6001 +CUCGGGCCUAGCCGUCCUUGGAACCCGAUAUUCGGGCUGGGCGGUUCCGCGGCCUGGGCCU +>U2AF2_K562_rep02_6002 +CCGCGGCCUGGGCCUAGGGGCUUAACAGUAGCAACAGAAGCGGCGGCGGCGGCAGCAGCAG +>U2AF2_K562_rep02_6003 +CCGUCCUUGGAACCCGAUAUUCGGGCUGGGCGGUUCCGCGGCCUGGGCCUAGGGGCUUAAC +>U2AF2_K562_rep02_6004 +UAUUCCUGUUCCCUUUACCCUUUGACAACUUGAAAUGUUACCACUUCGUCCUCAUGAUGUU +>U2AF2_K562_rep02_6005 +UUCAGCUUUAGCUGCAGCUGCCUCUGUUCAGCCACUUGCAACACAAUGUUUCCAACUCUCU +>U2AF2_K562_rep02_6006 +UAGCACCCCAGAUACUCGCCCAGCUGGUCUGGAAGAGGCUGAUCAGCCACCGUUGCCUGGA +>U2AF2_K562_rep02_6007 +GUUCCUCCCUCUUUUUUCCUAUGAAAGUUGACUAUAUAAUUAUUAAGCCAUUACCAGGAUA +>U2AF2_K562_rep02_6008 +CCCCCUUCUUGAGUGUUCCCCAUCGGUUUGUCCCCAGGGCUGCGCUGGCCUCGGCACACCA +>U2AF2_K562_rep02_6009 +CAUCGGUUUGUCCCCAGGGCUGCGCUGGCCUCGGCACACCAGUGCCACCCGCUGCCCCGGA +>U2AF2_K562_rep02_6010 +CCUUUUCUUGGCAGGCCCCUCGGGAGGCAUUGGCACAGACCGUGCUCGCAGAAGUGCCCAC +>U2AF2_K562_rep02_6011 +UUUUCUUCCCCCACAGUUCAUCCAUGAGCUCGGAUUUCCCACAUUACAACUUCAGGAUGCC +>U2AF2_K562_rep02_6012 +UCUCUUCUUCCCUUCUUUCUGGUUGGUGCUGCUGGGCCAGGUGGGAAUUUCUGAUUAAAUC +>U2AF2_K562_rep02_6013 +UCUAAUGCACUGUUUUAUCCUUAGCUUUGUUUGUUAUUAUGUUUUGGAAUGAAAUUUGGUC +>U2AF2_K562_rep02_6014 +UCUAGAAAGCGAAAUUAUUAUUGACGAUGGACAAUUUGGAAUCCACAGUAAGUGAGACUGA +>U2AF2_K562_rep02_6015 +UUUCUUUUAGGAGCUUACUCCACGGGAACAGCCUCUAGAUAAUCUGAGUUGUUGAAAAUAC +>U2AF2_K562_rep02_6016 +UGCGCUGGCCUCGGCACACCAGUGCCACCCGCUGCCCCGGACGCUGAGCGUCCUGAAGAGC +>U2AF2_K562_rep02_6017 +CCAUCACCCGCCUCUGUUUUCUCCCCAAGCUGAGGCAACUUCUCCUAGAAUCUCAAUCUCA +>U2AF2_K562_rep02_6018 +AGGCUAACUCCUUUCUGACCCGUUCAUCCCACAGGCCCUGGAUUAUUGUCACAGCAUGGGA +>U2AF2_K562_rep02_6019 +UCAUCCCACAGGCCCUGGAUUAUUGUCACAGCAUGGGAAUUAUGCACAGAGAUGUCAAGCC +>U2AF2_K562_rep02_6021 +UUUGUUUGCCUUGUUGUAGGUGGACCCAAGAGCCAUAUCAGUGCUAGCAAAAUGGCAGAAU +>U2AF2_K562_rep02_6022 +UUUGUUUGCCUUGUUGUAGGUGGACCCAAGAGCCAUAUCAGUGCUAGCAAAAUGGCAGAAU +>U2AF2_K562_rep02_6024 +CUCUGUUUUCACUCUCAGGCUCUGGUAAGUAUUCGUAUUCUCUUCAUCCCAGUCUGAUUGC +>U2AF2_K562_rep02_6025 +CAAAUCAUCCUACUCCCAAAUAGGCACCCACUCACUACCUUGGCGUCGUUUUUUGGGUCUG +>U2AF2_K562_rep02_6026 +UUUUUCUUCUCAGGAGGAAAAAAAGCAAGAGCAGAAGUCGUAGUCAUGAACGAAAGAGAAG +>U2AF2_K562_rep02_6027 +CUUCCCUGUUACCCCCAGAGCAGAUGCCCUCAUGUGUUCUGCGUAGAUCCCCAGCUGAGAA +>U2AF2_K562_rep02_6028 +AGCUUUCCUUCCAGGUGGGAGCAGCCUGCAUCCUGGAACUGCCAUCCCAGGGUAGGUCUGC +>U2AF2_K562_rep02_6033 +GUAUUUUAUUUUGCUAGGUGAGGCCCUGGUGACCACGUGAGAAAUGAUACCUGUCUAACCA +>U2AF2_K562_rep02_6035 +UUCUAUUUUUUUUUUCCCCCAAGCAGAGACCUAGAUGAAAUCGAAUUACCAAGCAUUCUUU +>U2AF2_K562_rep02_6037 +ACUAAAUUUUCUAUUUUCCUUAAAUUCUAGAAAGCGAAAUUAUUAUUGACGAUGGACAAUU +>U2AF2_K562_rep02_6039 +UCUCUAGCCCUAACCGGCAGCCAUUUGUUCUCUUUGGUAAUCACUCCACACGAGAAAACCU +>U2AF2_K562_rep02_6040 +ACUUCCUGGGACCUGGAGUGGGCCUCCUGACCUGGGGCUCGCUGGGAAGGGAGGGUUCCCC +>U2AF2_K562_rep02_6046 +AGUCAUCCCACAGGCCUCGCGGACGAAGGGGUGCCUGAAGCUGUGGAGAGGGUGCACAGGG +>U2AF2_K562_rep02_6047 +CUGAUUGCAUAGCCACACUGCCCGGCACGCCACAUCCACCCCUGUCUGCACAUGAGUUGUU +>U2AF2_K562_rep02_6049 +UUGUUUUCUUAAUUCCAGACUUUCUGUUCCAGAUCUCACUCCAAACAUUGGUCUUUUCUGG +>U2AF2_K562_rep02_6052 +ACUUCAGCAUUCCUUGAAGAAAAGAGGAACCCGCUCCCUGGGGAAGGCCGAUAAGAAGACU +>U2AF2_K562_rep02_6053 +UGUUUUUGUUCUUUUCCCCUAGUCACGAACCCCCGCCUUGGUUUUUGAACACGUAAACAAC +>U2AF2_K562_rep02_6054 +CAGGCUUAUCCCGUCCUGGGGCCCCAGUCCUCGGCCCUGUGAGCCUCACUUCCUCUAGGUC +>U2AF2_K562_rep02_6057 +GUCAUUUUGUUCAUAGGUUUCUAGACCAACUGGGGAGAUUCCCGUUAAAAAGUAUGUAUAC +>U2AF2_K562_rep02_6058 +CUCACAGCUGUCAGCUUCCCCUGGGUCAGGCCAGGGCCUCCUCAUGGCUCUGGGGUGGUUG +>U2AF2_K562_rep02_6059 +UCCCUCCUUCCUUCAUCAGUGUCCCCCAGAGCUCUGGACCUAACAGGUACUCAAUAUGUGC +>U2AF2_K562_rep02_6060 +UUUUCUUUUUACAGGAACGGCAGAGUCGAAACAAACAAUGAGGGCGAACCAGUUUCUUACA +>U2AF2_K562_rep02_6063 +UUUAACUCGUUCAGCAAAGCCUGUGCGGAGCGAGCCAGAGCUACCUGUGGAAGGGACCUCA +>U2AF2_K562_rep02_6064 +CCUCUGCCCUUCCUACACUGUCAAACUAGGUUUACCAUCUGAUUUUCAUACUGCUGACUUU +>U2AF2_K562_rep02_6067 +CCUUCUGUGCUGCCUCCCACCAGGUGCACCCCAGACAUGGAUGUCAUCCUCAACAUUCCUG +>U2AF2_K562_rep02_6074 +CUGUCAGUUUUCUCCCAUGAUCAGGGCUGAGCAGUACCAGUUCCGAAGGAAACAUCAUAGG +>U2AF2_K562_rep02_6075 +UAAUACUUUCUUACAGAGAAGAAGAAGUUGGAUGGGAUACCGAGAUUAAGGAUGAUGUGAU +>U2AF2_K562_rep02_6076 +GGAGAACAUGCCUGUAUUAAGGGCCGAGGUGGAAGAGCUCCAAGCCCAGACCCGGGAACCC +>U2AF2_K562_rep02_6080 +CUGCUUUCUCCCCUAUCCCCUGUCUCUACCCCCAGGCACAUGGCCACCCACUCAGCCCAGA +>U2AF2_K562_rep02_6081 +GGGUGUCUUCCAACCUUUUCUUUGUAGAACACAACUUUCCUGAACAGGAAAUCCAAGAGGG +>U2AF2_K562_rep02_6082 +UUUAUUUUGUGACUACGCCACAUGCUGGGUUUUCUUUUUGAAUUUAGGCAUAAAUGAAAUC +>U2AF2_K562_rep02_6085 +UUUUUCUGACAUCCAGGUAGCCCAGUGUGUCUCACCAAAGGGACCUCUUGCUUGUUCGAGA +>U2AF2_K562_rep02_6087 +UUAUACAAGCAAGAGCAACAGCUCUAUAUCUGGAUCACUGCAGUGCCUAGAAGAUACAACA +>U2AF2_K562_rep02_6090 +GACUCUUCUUCUUCCCAGGCUCAGGCCCGAUGUCACCGCAUAGGCCAGAGCAAAGCUGUGA +>U2AF2_K562_rep02_6098 +CUCCUCCCUUCACUUCACCAGGGGCGACCUGACGGAAGAUAACAUGGAGACAGAAAAUGCA +>U2AF2_K562_rep02_6099 +AUUUUGCUUUCUCUUUCACUAGGAUGGAAUGUGGGAUGGUAACUUAUCAACAUAUUUUGAC +>U2AF2_K562_rep02_6105 +UGCAGGUUAUUGAGGUGGUGAUCCGCUCAGAAGAGGGGCUCUCAAGGGACAUGGUGAAACA +>U2AF2_K562_rep02_6106 +UCUUGUUUUUUUUUCCGUUUGACAGAAACUGAUAAAGCUGACUUGAGUGGUAUUUAAAUAU +>U2AF2_K562_rep02_6107 +UUUUUUUUCCUUGCCUUAGCCCCGUCGCAGAAUUUAGUCUCAAAGGAAACUUCAACCACAG +>U2AF2_K562_rep02_6108 +CGCUCAACUGUUGGCCCCACAGGGACAAGGAGACCAGUCGCGACGAGUUCAUCUUCUACUC +>U2AF2_K562_rep02_6109 +AGCCCCAGGAAGCCUUGGUCGGGGGCAGGAGGGAGGGUCAGGCAGGGCUGGGGGCCUGAC +>U2AF2_K562_rep02_6110 +CAGCCCCAGGAAGCCUUGGUCGGGGGCAGGAGGGAGGGUCAGGCAGGGCUGGGGGCCUGAC +>U2AF2_K562_rep02_6117 +CCCUGAUUUUUCUGUACCUUGGCUACCACAGGUUCUGCUGAAUGUCCUGACCUUGAACCGG +>U2AF2_K562_rep02_6118 +AUGUUUUUGCCCUCUGUUGCAGUUGCAGGAUGUGAGUUUGAAUCUAUGGAAUGUCUACAGC +>U2AF2_K562_rep02_6119 +CUUUUAGGACUUGGCAGCAUUAGGCUGGUGCUCAGACGAAGAGGAGAAGAUCUUCAGGAAG +>U2AF2_K562_rep02_6120 +UUUAAACUCUCCUUAUCUUCCCCCCCACUUUCUUCCUCACAAAAAGAAUCUUACAGCUGCU +>U2AF2_K562_rep02_6879 +UCUCCUUCUUUCUUCCAGGGGCCGGGCUAGAGCGACAUCAUGGUAUUCCCCUUACUAAAAA +>U2AF2_K562_rep02_6880 +UCUCCUUCUUUCUUCCAGGGGCCGGGCUAGAGCGACAUCAUGGUAUUCCCCUUACUAAAAA +>U2AF2_K562_rep02_6881 +GGCCCAGGGAGUGGGGCAGGGGGCUGCUUAUUCACUCUGGGGAUUCGCCAUGGACACGUCU +>U2AF2_K562_rep02_6882 +AACUGCUGAGGAGGGACCUGCUUUGGGGAGUAGGGGAAGGCCCAGGGAGUGGGGCAGGGGG +>U2AF2_K562_rep02_6883 +CUUUGCAGGUUUCUGUAGCCGGAAGAUCUCCGUUCCGCUCCCAGCGGCUCCAGUGUAAAUU +>U2AF2_K562_rep02_6886 +GGAAGGGGGGAGAAUCCCAUAACUAACUGCUGAGGAGGGACCUGCUUUGGGGAGUAGGGGA +>U2AF2_K562_rep02_6887 +CAACAGGCCACAACAUCUAUUCCAAUAUAUUAGGUUUCCUCGGUGGUGUUUCCUGGGCUAU +>U2AF2_K562_rep02_6888 +UCUUGGCCUCAGGCUCCUGUUCUGGAUGUCAGAUAUGCAUCUGCCUCCUGAGAAACUGGUG +>U2AF2_K562_rep02_6889 +UUUUCUUUCAGAGCUGUUGCGCAGCCAUUGGUACCUGUAUUGGGGAAACAUAGCAUACAAG +>U2AF2_K562_rep02_6890 +CUGCAUAUUUUCCCCUUUUGUGAACAGGUACUGGUGGAGAAUGGAACAAAAGCUGGGCACA +>U2AF2_K562_rep02_6891 +UUUUUUUUUCCCCUCAGGUGGCGACAUGUCUAAGAAUGUGAGCCAGUCACAGAUGGCAAAA +>U2AF2_K562_rep02_6892 +GUCAAGAAGCAGGUCUCGAUCCCGGACCAGAAGUUCCUCUAGGUCUCGUAGCCGAUCCCGU +>U2AF2_K562_rep02_6893 +UUUUUUCCUCUCUUUUGACCUCCCCAGACCGAGUGACGGUUCUCUACAGGAGCAAAGCCAU +>U2AF2_K562_rep02_6894 +CAGCGGCUCCAGUGUAAAUUCCCCUUCCCCCUGGGGAAAUGCACUACCUUGUUUUGGGGGG +>U2AF2_K562_rep02_6895 +CAGCUACCAUUCAUUUCCUGAUUUCAUUUAUAGGUCUUACCAGGCAAGAAGGCCAAGCAGA +>U2AF2_K562_rep02_6896 +UGAUGUUAAACCUGGGGGGAUUUUUGUGUGUUCUUUCCCUUUUUCUUUCAGAGCUGUUGCG +>U2AF2_K562_rep02_6897 +GCCUUUUUUCCCUUUUAUUUGGAGGGAAUGGGAGGAAGUGGGAACAGGGAGGUGGGAGGUG +>U2AF2_K562_rep02_6898 +CCUUCACAGUAACUGGGGCAGGGGCCUACGGGGAGGGGCUUGUACUGAACUAUCUAGUGAU +>U2AF2_K562_rep02_6899 +CCUUCACAGUAACUGGGGCAGGGGCCUACGGGGAGGGGCUUGUACUGAACUAUCUAGUGAU +>U2AF2_K562_rep02_6900 +UUCUCCCAAGCCAAACUGGCAAGACGCAGUCAAGAACGGGACAAUCUUGGCAUGUUGGUCU +>U2AF2_K562_rep02_6901 +UUUUAAAAAAAAGAUAUACUGUGGAAGGGGGGAGAAUCCCAUAACUAACUGCUGAGGAGGG +>U2AF2_K562_rep02_6902 +AUUUGGAGGGAAUGGGAGGAAGUGGGAACAGGGAGGUGGGAGGUGGAUUUUGUUUAUUUUU +>U2AF2_K562_rep02_6903 +UUCUCUUAGCUGGAUGCUAGUGAUUCCAGUUCUAGCAGCAAUCUUUCACUUGCUAAGGUUA +>U2AF2_K562_rep02_6904 +CUCCUCCUUCAUCCUUAGUUCCAAACUGCUUAUCACUUCCCUGUUCCAUAGGCCACUUAGG +>U2AF2_K562_rep02_6905 +ACAAAAGCUGGGCACAGCCUUCUCAUGGAUGCCAGGGAUCUGGUCCUUAAGGUAAGGCUUC +>U2AF2_K562_rep02_6906 +UUCUUUAAUUAGGCUCACGAGGCCCAGGGAAUCCUCUGGACCAUCAGAUUACCAAUGAAAG +>U2AF2_K562_rep02_6907 +UUCUUUAAUUAGGCUCACGAGGCCCAGGGAAUCCUCUGGACCAUCAGAUUACCAAUGAAAG +>U2AF2_K562_rep02_6908 +ACCUCUUUUCCCCUAUGCAGCAGGAACUCCAGAAGAUAAAAUGAGGUUGUUUCUUAUCUAU +>U2AF2_K562_rep02_6909 +UUUUUUUUUUUAACCAGCAGGAGAGCAAAGGGAGAAAGCUCUAGGCUAAAGGCCAGAAGAC +>U2AF2_K562_rep02_6910 +UCUUCUUAGGUUUAUCGGCGGGGGCUUCAGGCAAUACCUCUUAGUGUUGACCUUUGGAUAC +>U2AF2_K562_rep02_6911 +UCCUUCUCCAUGGACGGUGCGGAGGCCUGGGCCAGGGCUGACUCCCUUCAGGAGUGGAGGC +>U2AF2_K562_rep02_6912 +UUCCACCCCACUUCUUUUGGCAGCUAGGUGCUGAGACAGGUGUGCAAAGUUCUGACCUUCA +>U2AF2_K562_rep02_6913 +CAGACCGAGUGACGGUUCUCUACAGGAGCAAAGCCAUUCGCUAUACCUGGCCUUGUCCAUU +>U2AF2_K562_rep02_6914 +GAGACUGAUGUUGACACACUUUUUUUCCAUUUGGCAGGAAUGGGAGUACAGUGCCAUUAGG +>U2AF2_K562_rep02_6915 +CAUUUGGCAGGAAUGGGAGUACAGUGCCAUUAGGACCAGCAAGUGACACAGGAAUUCUGAA +>U2AF2_K562_rep02_6916 +UCUUUUUUUAGGAAAAUGUCUGAUGAAUUUUCGGUAAGUUGAUCAGUUUAUCUGUGAUAAG +>U2AF2_K562_rep02_6917 +AAACUUCCUUUUGGCAGAUGUGGCCUCAUGGAUGAGCUGGUACACGACUUAGCCUCAGCCU +>U2AF2_K562_rep02_6918 +CCCUUUUCUUCCUUCAGCAGAGGCCAGGCUAUGGAGCAGGGCCACUGAAUUUGCUGUAAUC +>U2AF2_K562_rep02_6920 +AGUUAUGUUUCACUCUAGGGAACAAGUCCUGAAGAACCCUCAAGCCCUAAAGUACCACCUC +>U2AF2_K562_rep02_6921 +GUAAAAAAUUAUUUUUUCCUGAUAGCUGGCCCGGUGAUCAUGUCCAUUGAGGAGAAGAUGG +>U2AF2_K562_rep02_6922 +GUAAAAAAUUAUUUUUUCCUGAUAGCUGGCCCGGUGAUCAUGUCCAUUGAGGAGAAGAUGG +>U2AF2_K562_rep02_6923 +AUUCUCUCUUUCCCCUUAUUUCAGGUCAGAAGAGGCCAAGUGAUGGAAAUAGUGGAUUAAU +>U2AF2_K562_rep02_6924 +UUUGCCUUCUAGGAUUCUUACAGAAGCAGAGAUUGAUGCUCACCUUGUUGCUCUAGCAGAG +>U2AF2_K562_rep02_6925 +UUUGCCUUCUAGGAUUCUUACAGAAGCAGAGAUUGAUGCUCACCUUGUUGCUCUAGCAGAG +>U2AF2_K562_rep02_6926 +UUUUUCUUCCGUGUCCUCUCCUCUCCCGCAGUGAAGUUAUUCGAAGUCAUUGAAACUGAAA +>U2AF2_K562_rep02_6927 +ACGUUUUUUUCAGGAUGGCACUGGAUCUUUAAAACGCAGUGGUUCCUUUAGCAAACUCCGG +>U2AF2_K562_rep02_6929 +ACUCCCCCUUUCUUCCAUCCCUCAUCCAUUCCUUUAGGUAACUACUAUCCUGAAGUUGAGA +>U2AF2_K562_rep02_6930 +UUUUCACCCUUCCUGUGUUCUUGGUGGGGUUUCCCCGACCUAUUCAGAGUUGGCCAGGAGC +>U2AF2_K562_rep02_6933 +CUCUUUGUUGGCAGGUGCGUUAAACCUCUACAGUUUGUCAAGCUUUGCAGUGCAAGCCUCU +>U2AF2_K562_rep02_6934 +UUUUGUCUUGAUGUUUUCCCUCUAGGCUGAAAAUCUAUUGUUAGAUGCCGAUAUGAACAUU +>U2AF2_K562_rep02_6936 +UCCUUCUAUUUCUGCCCUAUUUUUUUCCAGGAAGAAAAAAUGCUGGGCAUCUUGGUGCAGC +>U2AF2_K562_rep02_6939 +CACAGUGUCCCCAUGAACUCCCUUGUCCCCAGUUGACCAACCUGGCCUGUAGCUUCUCACA +>U2AF2_K562_rep02_6940 +CUUAGAAUGGUCCUUCUCUUUUGCCCCUACCUAGUCUUUUAUCACGAGUCAUGAAUACAGG +>U2AF2_K562_rep02_6942 +UGCCCCUACCUAGUCUUUUAUCACGAGUCAUGAAUACAGGAUCACAGUUUGUGAUGGAAGG +>U2AF2_K562_rep02_6945 +GCACUUUGUACUUAGAAUGGUCCUUCUCUUUUGCCCCUACCUAGUCUUUUAUCACGAGUCA +>U2AF2_K562_rep02_6955 +GUCAUGUUCCUUGUCUUGGUCCUCAGGUGCAGUUUGAUGUAGUAGUGUCAGCUUUUUCCUU +>U2AF2_K562_rep02_6960 +UAUUUUCUAUGACAGGCUGGGCGGGGAGCGUCGGACCAGAAGAGAAUCACGCCAGGAAAGC +>U2AF2_K562_rep02_6961 +UUUGCCAUCUUAGGGCUGCUCACAGUAUUUGGGGCCAGAGCCUACGUGAAUAUAUGUGUGU +>U2AF2_K562_rep02_6962 +AUUUAUUUCUAUUUUUAGUGGGAAGAUCCUGGCUGUAAGGAUGAAUAAUGUUAAGUUUAAA +>U2AF2_K562_rep02_6963 +UAUUUUAAUUUUAGGUUCUAUUUUGUGGGUGAUGAAGAUUUGCUUGAAAUCAUUGGAAACA +>U2AF2_K562_rep02_6964 +UUCUUUUUAGGACUCCUUCUCCCUCUAUGAUUGCUCUUACACAGCUACUGACAUUUAUACU +>U2AF2_K562_rep02_6966 +UCUUUUCCCCCUUCCCCAUCCUCUUUGUCUCACAGGAACAACUUGAUACAGAGACAAGUAC +>U2AF2_K562_rep02_6967 +UCUUAAGUUUUAAGCAGGGUCUGAAAACCCUUGGUGUUUUGGAGAAAAUUCAGGCUUAUCC +>U2AF2_K562_rep02_6968 +UACGGCUCUGUGUUUGUCCCUCAGACAAGUUGGAUGGCUUGAGGACUGGUACUAAAAGGAA +>U2AF2_K562_rep02_6969 +UUUUCUUCAGCUCCCAUUGCUAUCACAUGUUUUACCAGAGGCUUGGACAUCAGGAAAGAGA +>U2AF2_K562_rep02_6970 +UUCCAUUUAAACAGGGUUAAUUUGGAAGAAUCUUCAGGAGUGGAAAACUCUCCAGCUGGUG +>U2AF2_K562_rep02_6971 +UCCUGUUAUUCUCUCCCUCUCUUUAGUUUCUGGUUACCAUCAGCUGGGAAAAGAGAACGAA +>U2AF2_K562_rep02_6978 +UCUCUCCUUCCCUCCUGUGAACGUCUGUGUCAGGCAGUGUGUUAGUCACUGAGGUUUUGCU +>U2AF2_K562_rep02_6986 +UUUUAAGGUAUGAUGAGUGGGUGAAGGCUGACAGGAUAAUCUGGCCUUUGGACAAAGGUGG +>U2AF2_K562_rep02_6987 +UAACUGACCUUGUCUACAGAACUAGACAGUACGGAUGGUGCCAAAGUUUUUAGUAAACAAC +>U2AF2_K562_rep02_6988 +UCUUAUUUCCACAGGCAUUCGUUUUGCUCAUCUUUGGAAUUUUGGUUGGGAAUUUUAGUUU +>U2AF2_K562_rep02_6989 +AAUCUCUUUGUACCUGCAGGCCGCAUUGACAGGAAGAUUGAGUUCCCCCUGCCUGAUGAAA +>U2AF2_K562_rep02_7000 +UUCAUAUUUGUCUUCAGUUACAGGUUUAUGAUAAUGGAUCGCUUUGGGAGUGACCUUCAGA +>U2AF2_K562_rep02_7001 +CUGUUUGUCUUUCCAGGCUUGUUUUGCAGAGGGAGAAGCACUUCCAUUAUCUGAAAAGAGG +>U2AF2_K562_rep02_7002 +CUGUUUGUCUUUCCAGGCUUGUUUUGCAGAGGGAGAAGCACUUCCAUUAUCUGAAAAGAGG +>U2AF2_K562_rep02_7003 +UUUCCAGGUGGUUCGCUUUGAGGUGGUCUGAAGCCAAGGCCUCGCGGAGCUUCUUUGUGUG +>U2AF2_K562_rep02_7004 +UGAUUUCUUGCCCGUCCCCUCCCUCCUUCCUGCUGCGACUGUGGGACUGUGGCCCAGGUGU +>U2AF2_K562_rep02_7005 +ACUGUUAUUUUACAGGCUUUCUUGGCUACACAAGUAGUUUAUCAUUUUUCUUUAUGAUGUU +>U2AF2_K562_rep02_7008 +CCACUCCCAUCUUGCAGGUGCAGGAGCUCCAGUCUCUAGGCUUUGGGCCUGAGGAGGGGUC +>U2AF2_K562_rep02_7009 +CACUCCCAUCUUGCAGGUGCAGGAGCUCCAGUCUCUAGGCUUUGGGCCUGAGGAGGGGUCU +>U2AF2_K562_rep02_7010 +UUAGGUCUUGCUAUCACAGAUGAAAUUUUGCUGAGUAAGGCAGAGUGGUCCAAACUUUUUG +>U2AF2_K562_rep02_7011 +CUUUCUCCCCAGGAACGACUGAAGCUGGUGACUGUUUUGGGUGCUGGCCUUCUCUGUGGAA +>U2AF2_K562_rep02_7012 +UUUUUUUUUUUUAGAUUACAGGUCCACCAGGUUGUGGAAAAACUCAGUUUUGUAUAAUGAU +>U2AF2_K562_rep02_7013 +CUUUUCUUUGCAGAAAAAGAAAGAAGAGGGUGUUAUUGAUUCAUCUGACAAAGAAAUCGUU +>U2AF2_K562_rep02_7014 +GUAGCUCUGUUUUCAUAAACAGGAAGAAGAGGAGGAUGAUGACUGGGGAGAAGAUACAACU +>U2AF2_K562_rep02_7015 +UCCAUAACAUUCCCUUUUUAGCCUCAAGAACUUGCUGCUUUUUCUGGAAGAAAUAAUUCAU +>U2AF2_K562_rep02_7016 +UCUUAUGUUUUCCUUCCCAGGAGUGGACCUACCCUAUGAGACGAGAGAUGCAGGUAUGGCA +>U2AF2_K562_rep02_7017 +UACUUUUUCACUGUUAGCUUGUGUUUUCUGUCGAAAACAUGAUGACUGUCCUAAUAAAUAC +>U2AF2_K562_rep02_7018 +GCCAAUUUGCUUUAUCCUUCUCUUCAUAGGUUUCUUCUGAAAUGUUUUGCUAGUAAGUUGC +>U2AF2_K562_rep02_7019 +AUUCUCCCACCCCCCAAACGUUUUCUGCUUUUUUUAGCUCAGCCUCUUUAACCUUGAUGGA +>U2AF2_K562_rep02_7020 +UUUUUGUUUUUUUUUAUGAUGUGGGUUAGGGAUAGAACUUCAUUUUCUUUUAAAUUUAUUU +>U2AF2_K562_rep02_8478 +CCCCUUUUUCUUCUUCAUACAGAGCUCGCUGCCCAAAUCAUUCAAGAGGAAGAUCUCCGUU +>U2AF2_K562_rep02_8479 +CGCUGCCCAAAUCAUUCAAGAGGAAGAUCUCCGUUGUCUGUAAGUCCAGCCCCAAAUCCCU +>U2AF2_K562_rep02_8481 +UUUUUUAGGUACCAGCAUCAAGAUGAUUUAUGGUAAUAAGGUACUCAGUCUUUGCUUAAAA +>U2AF2_K562_rep02_8482 +UUUUUUUAGGUACCAGCAUCAAGAUGAUUUAUGGUAAUAAGGUACUCAGUCUUUGCUUAAA +>U2AF2_K562_rep02_8483 +CCUUUCAUUUUCUACGACCGCGAGGACUACGGGAUCAUGAAAAUGAAGAUCGUGAUGCUCA +>U2AF2_K562_rep02_8484 +UGCUAGAUUUCUAACGACCCAAGUCCAGGAUACAACAUUGAACAGAUGGCAAAGCGGUAAG +>U2AF2_K562_rep02_8486 +UUCAAGAGGAAGAUCUCCGUUGUCUGUAAGUCCAGCCCCAAAUCCCUGAUAAAAGUCAGGA +>U2AF2_K562_rep02_8487 +UGUGGGGUGUCUCUCUUUCUCUUUUUUUUCCCCUUUUUCUUCUUCAUACAGAGCUCGCUGC +>U2AF2_K562_rep02_8488 +UCUAGCAUUUGCUUUCCCUUCUAGGUCUCCUUAACAGCAGCAGCAGUGUUUUAAGGUAGAU +>U2AF2_K562_rep02_8489 +AUCUUUAUUCCCUUCUUUCCUCUUCCAGCUGAGCAGAGUUGGAUAAUUGAAUUAGUCAUUC +>U2AF2_K562_rep02_8490 +GCCUUUUUCUGGUGUGUGUUGCGGGGGUGGGGGCCGGUGAAAGUGAUUUGAUGUGCAGAAU +>U2AF2_K562_rep02_8491 +UAUAAUCCCUUUAGUCCUCUUUUUUUCAGUUUUUAUGAAGAACAGUUUGUCAGCAUCUUCA +>U2AF2_K562_rep02_8492 +UCUUCCCAUUCUCUUUCUAGGAUCUUCUGAGGUCGGAGCUUCCAGAUUCAAUUGAAAGUGC +>U2AF2_K562_rep02_8493 +UUUUUUCCUUCGCACAGGUCCUCUGGUGAUGUUCUUGAGACGUUCAAUUUCUUAGAAAAUG +>U2AF2_K562_rep02_8494 +UCCUUCUUCCCCGUAAAACUUUGUCCAAGUACCUCAUGUACGGUAAUCCGCCCGUAAAAUA +>U2AF2_K562_rep02_8495 +CUUCCAUUCCCUCCUUCCUUAUUUUUUUCUUCUGCUAGAUUUCUAACGACCCAAGUCCAGG +>U2AF2_K562_rep02_8496 +UUCUGCUUUUCUUAUCAGCACUGUUCUGCAGGCAAAGUCAUGGCAAUUUCCUUAAAGUUAU +>U2AF2_K562_rep02_8497 +AGACCAUGGUUGGUCUGCUUCCCUCACUCGGGCUCCUUGACAGUCUUCUAGAAGAGAGAAG +>U2AF2_K562_rep02_8499 +AACCCAACCUCAGGUCCAGAUACUUCGUCUGCUUCGGAUCCUGGGCCGGAACCACGAGGAG +>U2AF2_K562_rep02_8501 +CUAUUGGGGCGGGUGGGCAGGAAUGGACCUAGGGGAAAGAGUAGAGCACUCUAGUGAUCCC +>U2AF2_K562_rep02_8503 +UUUUCCCCCACCAUUAGAUAUUGAAAAAGUACUUGUUUCUCUGCAGAAAGCAGAAGACUAU +>U2AF2_K562_rep02_8504 +UUUUUCCUCUCUUCCUACAAUAGCGGCCCUGUUCUGUCAUUAGCUAUUAGUUCUAAUGGAG +>U2AF2_K562_rep02_8505 +GUUUUCUUCUUUUUCCUCUUCCUCUCCCUCCCUUUUUUCUAAAAAAUUAUAGCUAAAGCCU +>U2AF2_K562_rep02_8507 +UUAUCUUCUAUUCCCUCCUCCUAGGGUCAUCACACUGAAACGGUGUUCAACCGGGUUUUGC +>U2AF2_K562_rep02_8510 +CUUUCUUUUCCUCCAUCCUGCCCCUUUUCUUCAGUAUUUCAUAGCCUUAAUUGAACAAGUU +>U2AF2_K562_rep02_8511 +CUUUCUUUUCCUCCAUCCUGCCCCUUUUCUUCAGUAUUUCAUAGCCUUAAUUGAACAAGUU +>U2AF2_K562_rep02_8512 +CCAUAGUGGACAGAGUUCACAGACCGCACUUUGGCACGUUGUCCUCACUGCAGGAAAGUGU +>U2AF2_K562_rep02_8513 +CUCUCUUAUUCCAGGAAGAGCAACCGAGGUUUCAAUCUGCGGUACGUCUCCUACUCUCCAU +>U2AF2_K562_rep02_8514 +UUUAUUUUUCCUCCCAACUUUUACUUUAGGUUCAGAAGGUAUGUGUGCAGAUUUGUUUCAU +>U2AF2_K562_rep02_8515 +UGUUUUCAGCUGCCCUAUGAUGACUGUGUGUUUGGAGGCCAGCGUCUGACGUUAUGAGCGC +>U2AF2_K562_rep02_8516 +UAUUUGAUUCUUUGACAGGCCAGCCACAUCCUGAAGAUGUACUACUGUUUGCCAUUCCAAU +>U2AF2_K562_rep02_8517 +AAAAAAUUAUAGCUAAAGCCUGGAGAAAAGCCUGUUCCAGGUAUGGUUCAUGUAAUAUUCU +>U2AF2_K562_rep02_8518 +UGGCCUCACACACCUCUGUUCCCCUCCUAGGACCAAGGGACCUGUGGAGGUGAGGAGGUGG +>U2AF2_K562_rep02_8519 +UGCCUUGCUUAAUCCCAGGAACCUGGCCACUGCUCCUUGGUCCUUGGCAUUAUGACGGGAU +>U2AF2_K562_rep02_8520 +AUUUUUCUUUUGAUUUCAGAGAACACUUUUUACAGUUGGCUAGAAGGUAAUUAGAAACUUU +>U2AF2_K562_rep02_8525 +CUUCUUCAUUCAUGUUCAUCUCUGCUAUUCCUUCUCCCUCCAGAAGGGAUGGAAACCCUAU +>U2AF2_K562_rep02_8533 +UUUAGCUUCUCCUCUUAUGGGUGCUCAGAGUUUCCCUAAUUUGACCACACCUGGUACUACA +>U2AF2_K562_rep02_8534 +AUUUUUUCCCUUCCCCUCCUAAAACAUCUCUAAAGCAGAAAAACUCAAUAUUGAUCAGGUG +>U2AF2_K562_rep02_8537 +GUUUGUUUUUUCCCCAGAGCCAAAUGUUCUAGCUGGCACUUUAGUUGGUCAUACAGAUGCA +>U2AF2_K562_rep02_8538 +UUUCUGUUACUUCCCCCCAGGAGCGAAUCCGUUUAGCUCGACAGAUUGAGAAAUCUGAGUA +>U2AF2_K562_rep02_8539 +UCUUUUAUAGCUUCAGCCCACUUGGGGAGAGUUCCUUGAUCAUCAUAAAGAACAGCCAGUA +>U2AF2_K562_rep02_8541 +UUUGUCGUUAAGGGUGAUCUGCCAGAUUGCGAAGCUGACCAACUCCUGCAGAUGAUUAGGG +>U2AF2_K562_rep02_8545 +UGUUCUUUUAUUUUGCACUAGGGAGAGGAAAUUCGAUGUCAGUAUGUUGUGACAUGUGCAG +>U2AF2_K562_rep02_8550 +GUCUUUAUAGGAUCUUUAAUGACUUGCUACUGUGGGAACCAACAGCUCCUUCACCAGUGGA +>U2AF2_K562_rep02_8552 +UUUUUUUUUCUUAGACGUUCCAUCCUCAGAGCAGCCUGAACUGUUCCUAAAGAAACUUCAG +>U2AF2_K562_rep02_8558 +UUUCUUUUUUAUAGAGGACCCACAGGCAUGAAUUAUUUACUCCUCCGGUGAUAGGUUCUCA +>U2AF2_K562_rep02_8559 +AACUGUGACUUUGCCUUCAGUGAAGGCCGCCCUCCGUUUGGGAUUUCAUUCUCGUUGUCUU +>U2AF2_K562_rep02_8560 +UUAUGUUUUAGAUGGUGAUGCCAGGAGACCCUGUAGAAAUGACAGAAUUUCAGGAUAAAGC +>U2AF2_K562_rep02_8561 +AACUACUUUGCCUCCCUUCUCUGGUCUGGUGUCGUCCUCACAUAACAUGAGGGCCUGGAGA +>U2AF2_K562_rep02_8562 +CUGCAUGGAAACCUCUUUCUCCUGCCAGGAGAGCCCUGGAACUAAGCCUGGCUCUGGUAAA +>U2AF2_K562_rep02_8563 +UUUUUUUUUCUUGGCAGGGACUCACUCUGUUGCCCAGACUGGAGUGCAGUGGCACAAAGGA +>U2AF2_K562_rep02_8564 +UUGUUUCUUCCCAGUUUUGGAAUUCAAGAACACCUAAGGAUUCCACUGAUUUGCUGAUCUG +>U2AF2_K562_rep02_8565 +CCUACUUUAUAUAAGGGCAACUUCCUGGGAGCUAAGGCUACUAAAAGGUAGAAGCCACAGU +>U2AF2_K562_rep02_8566 +CCUACUUUAUAUAAGGGCAACUUCCUGGGAGCUAAGGCUACUAAAAGGUAGAAGCCACAGU +>U2AF2_K562_rep02_8572 +UCAGCCUUUGAAGUAAAUUUUAUGGAUGAUGUAGGUCAGACUCUAUUAAACUGGGCCUCUG +>U2AF2_K562_rep02_8573 +AGUCACUGCUUUUUCUUAGGUCUCUGUGUAGAAAAAAGAGCAUUCUACAGACUUAUAUCUG +>U2AF2_K562_rep02_8574 +AAUGUCCUUUUUUCGCUCUUCCUGUGUUAACGGCUGCUUUCCUUUCAUUUUCUACGACCGC +>U2AF2_K562_rep02_8575 +UAUUUCCUAGGUUCGUUCCACCAGUCAUAAACCAGAUGAAAUCUAUGGCAUGAUUGAAAGA +>U2AF2_K562_rep02_8579 +CCCCUUCCUCCCAACUUUUUCCGCAUUUCCCCUCCAGUUUCUAUCCUUUUCCCAAGGAAGA +>U2AF2_K562_rep02_8580 +UUCUCAGCCUUUUUUAGCAAAACUUCAGUCUCCGAUUAAAGAGGAGAAUACAACUGCUGUU +>U2AF2_K562_rep02_8581 +UUCCCCUCCCUUGCAAUGUAACCCACAGGCUGAGGAAUUCCUCUACAGAUUCUUGCCACAG +>U2AF2_K562_rep02_8582 +CUAUUUCAGUUGCUAGUGAUAUCUCGCUAACAGGAGGCUCAGUAGUACAGAGAAUACGGCU +>U2AF2_K562_rep02_10076 +CAUUUCUUCGUUUAUCCCCCCAGCAGCGCUGGAGAGCGAGGUGGCUUCAAUAAGCCUGGUG +>U2AF2_K562_rep02_10077 +CUUUAAGGCAGUAUUUUGAUCCCAUAGUAGGUGGAGCAGCCCUGCACACCCCCUCCUGUAU +>U2AF2_K562_rep02_10078 +UGAAUGGGCAAGAGGGCACAUGAAGUACGGCGUCCUCCACAUUCACGGCCUCUACACGGAC +>U2AF2_K562_rep02_10079 +UUAGGUGGAUUCUUGCUCUGUCACCCAGGCUGGAGCGUAAUGGCACAAUCUUCGCUCACUU +>U2AF2_K562_rep02_10080 +UUUGCAGGUAGAAGAAGAAAGGUGCCACUCCGGCAUGAAGACAGACUCGCUUAGUCGCCAG +>U2AF2_K562_rep02_10081 +UGUGUUUCUUUUUCUUGGCUUGAUGUUUGGUAGGUCCUUGAAUGGGCAAGAGGGCACAUGA +>U2AF2_K562_rep02_10082 +CCUUUCAUUUCGUUCCCCAGGGCACCGAAGCCAAAGCACUGUCCAUGCCGGAGAAGUGGAA +>U2AF2_K562_rep02_10083 +UUAUUUCUCCUCUUAGACCGCAGGAUGGAAACAAGCCCACUGAGACUAGUCAACCUCAAUC +>U2AF2_K562_rep02_10084 +AUGAUCUUUCCUGGUUGGCAGGACCCAUGGAUGAAGGACCAGAUCUUGAUCUAGGUAAUUU +>U2AF2_K562_rep02_10085 +UCCCUUGAUGACAUGGGGCUGGCUCUGGUUUUCCAGGUGUCCCCUCGUCCCAGCCACCUCC +>U2AF2_K562_rep02_10086 +UCUCUCUCUUUCAGCUAUUCCUCUACACAGCCGACUAGUUAUGAUCAGAGCAGUUACUCUC +>U2AF2_K562_rep02_10087 +UUCCUCCUUCUCCCCUCAGACCGAAGCCAGGACAGCACAGCCGUAGCACUCUCAGACUCUA +>U2AF2_K562_rep02_10088 +UGUCUUCCUGUGCAGGUCGUGGCCGCCCACCUACAGAGCCGCUGCCCGACGGGUGGAUCAU +>U2AF2_K562_rep02_10091 +CAUCCUGUUUGUUUUUCAGAUGAUCAUGCACCCUAAGGGCACAUCUAGGCCCCCUGAGAGC +>U2AF2_K562_rep02_10092 +GUUCACAGAGAUGCUGCAAUUUGUCAGUAAUCAAGUGGGAGAGUUCCCUGACUUGUUUUCA +>U2AF2_K562_rep02_10093 +GGGCACAUCUAGGCCCCCUGAGAGCACCUCCUUUCUGUGUCUGUUCUCAGGAAUGCUGUUG +>U2AF2_K562_rep02_10094 +AGGCCCGAGCAGGUACUGACCCCUUGUCCUUCCCCACAGCCGAGCCCAGGAAGUGCGUCCC +>U2AF2_K562_rep02_10095 +CCUAGCAUCUGUCCUGCCCGAGGUGCUGCCGGUUAGCCAGCGCCCUGUUGUGCCACAGAUU +>U2AF2_K562_rep02_10096 +GUUUGGCCCAUGGGUAGGCCCUGCAUCCCUGAUCUAGCGCGUGGGGCAGCAGGUGCUGCUG +>U2AF2_K562_rep02_10097 +CAGAUGUAUUUGGGUUGGUCGUCCUCCCAUUGGAACUGAAACUACGGAUCUUCCGACUUCU +>U2AF2_K562_rep02_10099 +UUUUUAAAGUUUCCUAAUGAAAAGUUUGGCCCAUGGGUAGGCCCUGCAUCCCUGAUCUAGC +>U2AF2_K562_rep02_10103 +GUCCAUGUUUGCCACACAGGGUCGGGUGUGCUGACAGCCGGCUGUUAAGCCCUGCCUGCCC +>U2AF2_K562_rep02_10105 +UUUUUAAACAGAUCUCCCACAAACAAAUUUUCGUCGUUUACCUUUUGACCACUGCAGGUAA +>U2AF2_K562_rep02_10107 +GUGUUUAGGAAUGUUCAACGCUCCAAGCCCCAUAGGCUGAUUCAAGAAGAUAAAGUGAGAC +>U2AF2_K562_rep02_10108 +GUGUUUAGGAAUGUUCAACGCUCCAAGCCCCAUAGGCUGAUUCAAGAAGAUAAAGUGAGAC +>U2AF2_K562_rep02_10110 +CUUCUCCACCUCUUGCCUGGUCCAGCUGGAGCAGAGUGAAGCCAAGUGUGAGGAGGCCUUG +>U2AF2_K562_rep02_10114 +UUUUCCUUUAGGUAGAUGCCCAGACUGCUGGAUUGAAUGCAGAUCUACUUCGAAAAAGUCU +>U2AF2_K562_rep02_10115 +CCACCACUUCUCUCCAUCCUGCAGGCAGCUGCCAGACCCGGCCAUCGAGGACCAGGGUGGG +>U2AF2_K562_rep02_10118 +UUCCUGUUUAACUCGUGCAGGUGCAGUGGUCUGGUGUCUUUCAGUCCGCUGACGUCUUCUG +>U2AF2_K562_rep02_10119 +CUCUAAUUUUUUCCCCAGGCCGUGGAGGAGCUCCUGGAGACCCUGGAUCUGGAAAAGAAGG +>U2AF2_K562_rep02_10120 +CCUGGGGACAGCUGGAGUUCCGGGGUCCCCUGGGCAGCCUUGGGGGCUAAUGACCUGCCCU +>U2AF2_K562_rep02_10121 +UCGUUUUUUUUUGGAGCAGGCAUAUGGGCAACAAAGCUAUGGAACCUAUGGACAGCCCACU +>U2AF2_K562_rep02_10125 +CCUUUGUUGUUCUUUCAGGAGGAGACUCGAAAGAAGCCCAAGAUGUCCAUUGUGGCGUCCG +>U2AF2_K562_rep02_10126 +AUCUUCCUACCCAGAUGCACAAGUCUGGCGUUCUGAGGAAGGCCAUUGAUUACAUCAAAUA +>U2AF2_K562_rep02_10128 +GCGAUUGUUAAAUCUAUUCGUGCCCUGAGAUGUAUGGCUUUAUGCUGAAGAUUGGCUGGAU +>U2AF2_K562_rep02_10129 +CCUUUUUCCCACAGAUCAUCACAGGUGCUAAAGUUUGGCAUUUGGGAACCACAUCCUAAUU +>U2AF2_K562_rep02_10130 +UCUUUCCAGUCUUCCCCUGAAGCAGGUGAAGCAGAAGUUCCAGGCCAUGGACAUCUCCUUG +>U2AF2_K562_rep02_10131 +UAACUGUGCUUCUUCCAGAAGCUGGACGGGAGGUCCCUGAUCAAGCUGAACUUUUCCAAGA +>U2AF2_K562_rep02_10133 +GAAACAUUUCCCCUUGAUCUCCCUAGGGGCAUCUGGUCUCCAAUAAGGCUGCUAUGGAUGA +>U2AF2_K562_rep02_10137 +GCAUUUUGUGACCGACUUAUUCUUAGAUCAUUGGUUUUCCAAAGGCUUUGUGGCCAUGAAG +>U2AF2_K562_rep02_10138 +CCAUCAUUGUGUCCUUUGAUCUUCACACAGCAGGUAUCAUCUGCAUUUUAUGGAUGAGGAA +>U2AF2_K562_rep02_10139 +AUUUUCUCUUUUGAAGAUGCCUUGCCCAGUGGCAUGGAAAGAAGCCCACUUGAUGAUAGGA +>U2AF2_K562_rep02_10142 +UCACAAGGGGCUGGGGUCAGGUUUGGGCUGUUGACGCCUCGGGUCUUCCCUCCAGGUUUGG +>U2AF2_K562_rep02_10143 +GUUUUUAUCUUGCUGUACCUGUAGGGAAUGUUUAAUUCAGCCUUGGAAGUGGCCAAAUUUG +>U2AF2_K562_rep02_10144 +GUUUUUAUCUUGCUGUACCUGUAGGGAAUGUUUAAUUCAGCCUUGGAAGUGGCCAAAUUUG +>U2AF2_K562_rep02_10145 +CUCCACUGCCUUCUCUUCUUCCAGGUGGGCCAUCGUUGGACUAACAGACCAGUGGGUGCAA +>U2AF2_K562_rep02_10152 +UCUCUCCCCCAUAGAGGAGGAGCUCCGGAAGCUGCGAGAAGAAACCAACGCGGAGAUGCUG +>U2AF2_K562_rep02_10160 +UCCAGCUGCACUGGGCACAUUCCUCCCCUCACCCUGACUCACAAGGUGUUAGCAAUAAUGG +>U2AF2_K562_rep02_10161 +UCUUUCCUGUUUUUCUUAGGGUCAUAGUGUGCUGAAUUAUAUUGUUAUGAGAUAACACUAG +>U2AF2_K562_rep02_10163 +UGGGCAUUCUCUUUUUGCCACAGGACCCCACCAAUUUGGACAAGUUCAAUGUCUCUAACUU +>U2AF2_K562_rep02_10164 +CCUUGGUAUUUGUUGUAAAUUCUCCUUUCACAGCGAUUGUUAAAUCUAUUCGUGCCCUGAG +>U2AF2_K562_rep02_10165 +UGGAAAUUGCCUUAUUGGAAAAACAUUUCUUACGUGAGUACCAGAAAGCGCUUGGAGGGGA +>U2AF2_K562_rep02_10173 +ACCACAUCAGCAUCGAGGACUCGCGGGUCUACGAGCUGACCAGCAAGGCUGGGCUGUUGUC +>U2AF2_K562_rep02_10174 +UGGCUGUAGAGGGUGGGCAGCUCCUGGUGUGCUCUUAGGCAGGCCAGGUGCAGAAGGUGCC +>U2AF2_K562_rep02_10182 +CAUUCACGGCCUCUACACGGACCCCUGCGGGGUGGUGCUGGACCCAUCGGGGUAUAAAGAC +>U2AF2_K562_rep02_10183 +GCACUUCCCUUGCAGGGCUCCCUGCGGACUGCCGUGGCCGCUGGGAGAGCUUCGUGGAGGA +>U2AF2_K562_rep02_10194 +UCUCAUGAUCUUCUUACAGAUGGAGGGCCGGCGCGACAGCAUGCUAGAGACAGCCAAGCAC +>U2AF2_K562_rep02_10195 +GGUAGAAAAACUACAUAGUGGUGGCUACUGUGCAUCUCUUCCUAACUCCACAUUUGACAAC +>U2AF2_K562_rep02_10196 +GGGCCUGAGGUCGACCAGGAAAGGCCUGUGCCCCCUCCAAGGGCCCCUCUCUUCUACCCAG +>U2AF2_K562_rep02_10197 +AGGGUGACAGCUGUGUUUGCUCCCAUGACAGGAUGAAGGACAUGCGCGUGCAGACUUUCAG +>U2AF2_K562_rep02_10198 +UUCCUUCUUUUUUCCAUUGGUUUAGAUUUUUGUUCUUGGUCUUCAGUUUUAGUAUUAAAAU +>U2AF2_K562_rep02_10208 +CCUUCUUCCCUCCGGCAGAACCAGAGCUGGGGUCUGGGGCGGGCCCUGCCGGCACAGGCAC +>U2AF2_K562_rep02_10209 +CCUGUCUUUUCCCUUUCCCCCGCUGUCACCCCUGUCUCCGUCCAGCCCUUGUCCCUGUGGC +>U2AF2_K562_rep02_10210 +UUUUUAUUUUGUCUCCUCUGUUUUUGUUGCUUAUCUCCUUGUAUUUUUAUUAUUAGUUUUG +>U2AF2_K562_rep02_10211 +UUUGUUUCUCAUUUCCUCCCUUAAUGACUUCUUUUGAGGUAAACACAUACUGUUCUAAUAU +>U2AF2_K562_rep02_10212 +AGCUACACUAAAAAUCAACAAUGAGAUUAGAAGUGUGAAAAGAUUGCAGCUGCUACCAGAA +>U2AF2_K562_rep02_10213 +UCUCUCUUUUCCCUCCUCCCCACCAGAGAGGAGCUGCGGAGUCUAUUCCAGGCCCGGGCCA +>U2AF2_K562_rep02_10214 +UUCCCCCAUUCUUAAUCUUGCAGCUCCUGGAUCUCCCAGGUAUCAUUGAAGGUGCCAAGGA +>U2AF2_K562_rep02_10215 +GGGAGGGAGGCGUCGCGGAGUUUCUCUCGGCCUUUUGUGCCAUCCGCCGAGGCGCCUUGAG +>U2AF2_K562_rep02_10216 +GGGAGGGAGGCGUCGCGGAGUUUCUCUCGGCCUUUUGUGCCAUCCGCCGAGGCGCCUUGAG +>U2AF2_K562_rep02_10217 +CUUCUUUCCUUCCUUCCUUCCCUGUUUCCUUCCCUCUUUCCUUCCUUCCUCCUGGUCUGUU +>U2AF2_K562_rep02_10218 +CUGAAUACACUCACUUUUAUGGUGGCAAGAAGCCAGGUAAGGCAUGCAGUCUUUCUGUUCC +>U2AF2_K562_rep02_10219 +CUGAAUACACUCACUUUUAUGGUGGCAAGAAGCCAGGUAAGGCAUGCAGUCUUUCUGUUCC +>U2AF2_K562_rep02_11141 +CAGUCUUUUCUCUCUUUCUCCUGCAGGGCUACACCAAGUCCAUUGAUAUUUGGUCUGUAGG +>U2AF2_K562_rep02_11142 +UUUGAUUAUUACUCUCAGACGUGCGUGGCAACAAGUGACUGAGACCUAGAAAUCCAAGCGU +>U2AF2_K562_rep02_11143 +CCAGGCAAGCCGAUUUUUUCAGUUGAUAUUCACCCUGACGGGACCAAGUUCGCAACUGGAG +>U2AF2_K562_rep02_11144 +CCAGGCAAGCCGAUUUUUUCAGUUGAUAUUCACCCUGACGGGACCAAGUUCGCAACUGGAG +>U2AF2_K562_rep02_11145 +UCACCUUCUUUCCUCUUGCUGUCAUCUGCAUUCGUGCUUCCCACCUGUUGUUGGCAUGUCC +>U2AF2_K562_rep02_11147 +GUUUCCCUCUUCCUUCCGUCUUGUUUCCUAACUUCUUACCAAAGUUUAGAGUCUGAGUUUU +>U2AF2_K562_rep02_11148 +CAAACCUAGGAUGAAGCUGGAGGCAGAUUCGUCGCUUUCUCUGGAGAAGGACAGUCAUUGC +>U2AF2_K562_rep02_11150 +CUUUUUUGAGACAGACACUGGGCAGCAUCGUGUUCUUCCAGCGGACGUGUCUAGAACAUCU +>U2AF2_K562_rep02_11151 +CAAGUCCAUUGAUAUUUGGUCUGUAGGCUGCAUUCUGGCAGAAAUGCUUUCUAACAGGCCC +>U2AF2_K562_rep02_11152 +GAUAUCAGCUGCAGAUCACUCAAUACAUGGCCGAGACAAAUCUACAUUGGCCGGAAGCAGC +>U2AF2_K562_rep02_11154 +CGCUGUCUCUGCUCCCUCUAGGAAAGGCCACCUGCCUGAGCUUUGAAAUGGCCCACACCGU +>U2AF2_K562_rep02_11156 +UAAUAGCAUUGCUGAUGACAUUUUCCCUGUUAUCAGUUACUUAUGGGGCCAUUCGCUGCAA +>U2AF2_K562_rep02_11158 +UUUAUGUUUCCUAGGGAAGUGCCCGACAGGGUGGCACCACUACGAAGGCACGGCCAGCUGC +>U2AF2_K562_rep02_11159 +UUCCCCACCCCCUGUCUUACAUCCACCCUGGCCCUGUAAAUUCUUUUUUCCUUUGUUGCGU +>U2AF2_K562_rep02_11160 +CUCCUUUUUUUUUCUCCUGAGACAGGGUCUUGCCCUGUUGCCUAAGCAGGCAUGGAGUGGC +>U2AF2_K562_rep02_11164 +CUUUUUUCUCUAAUUGGACUGCAGCGUCAACUAUUCUGCCUCGCUAGAAAGUUCUUGGUAU +>U2AF2_K562_rep02_11165 +UGGAGCCUGGUGGGGAGCUGCUGGAGGGCUUGGGGCCAGGGAGGGAUGUGGCCUGACUUGG +>U2AF2_K562_rep02_11167 +CACCUUCUUAUCUGUGGUGAGGGCCACCCGCUGCCCCUCCCUCCUUCCUAUCCCUGUAUCU +>U2AF2_K562_rep02_11169 +UUCACUUUUAGCUUGUUCCAGCUGCCAGGCUGAGGGGACACCUUACGUCCCUCCCUCCUGA +>U2AF2_K562_rep02_11172 +GACCACUGCCUCUCUCCCCACAGGGACCACUGAAGAAAGACCGAAUUGCAAAGGAAGAAGG +>U2AF2_K562_rep02_11176 +CCACUUGUGUCCACACAGGCCCUGGGAGGAGCGGGGACACUGAGGACCUCUCUCCAAAUUG +>U2AF2_K562_rep02_11177 +UGUAUUUCUGAAUUGUAGAGUCAAAGGAGAAGUUCAGAGUCCCAUCAGCAAUGCACCUGUC +>U2AF2_K562_rep02_11183 +CUCCCGCUGCAUGCAGGGAUUCGGGUUCGUAACUUUCGAGAAUAGUGCUGAUGCAGACAGG +>U2AF2_K562_rep02_11184 +GCUCCCUGGUCUUGAGCAUCUGGGGCCCGAGCUGCCUGGGCAUUGGUUGGAAGUAGCCCUG +>U2AF2_K562_rep02_11187 +UGUUUUCAGAGACUCCCUACGGGAGAGGAUGCCCCGCAGGAACAUGGUAAGUAGUGAGGCG +>U2AF2_K562_rep02_11192 +UAACGAUGUGCAUGUUUUCCCCCCUUCUCCCGCUGCAUGCAGGGAUUCGGGUUCGUAACUU +>U2AF2_K562_rep02_11195 +CUUUGGUUUUUCAGGGCAGCCGAUGAAGUGCAACCUUCACAUGAAUGGGAAUGUUAUCACC +>U2AF2_K562_rep02_11196 +UUCUUCUCAUACCCCUACAGGACAAGAGGACCCUGCCUUGGUGUGAGAGUGAGGGAAGAGG +>U2AF2_K562_rep02_11199 +UCCAAAGCUGGGAGUCAUGUUGCCUGCAGGGACUCUUUCCUUACUGGGCCCAGGAGUUCGA +>U2AF2_K562_rep02_11201 +UUUGCUAUUUUCCCUCACCUCCCAGGGUAAGAUAAUCAGGAGCAGAAUGUGAAGAACUUUC +>U2AF2_K562_rep02_11205 +ACUCUAGCUAGAAGACAGAAGGCCAGCUCCCAAGCAGAUCAGAGGGUGGAAUUUUCAUUCU +>U2AF2_K562_rep02_11206 +UGAUGUGUCUUUUGCAGGUGAAGGUGGGAGACAAGGUCUCUGCUGACGAUGAGGCAGAGCC +>U2AF2_K562_rep02_11207 +AUCAUUUAUUGGAUUUCAGUUCAACAGACACUCCUAUGAGAAGCCCUUUGAGAUACGCCAG +>U2AF2_K562_rep02_11208 +ACGUGGUUUUUGGAUCCGUAGCACCCCGAGCAGAAGGCAGACCGGUAUUUUGUGUUAUACA +>U2AF2_K562_rep02_11211 +UCUCCACAUCUCCCCACAGCGCUGCGCACAUUGUCAGUGACUCUUUGUUGCAUGGUGAGUG +>U2AF2_K562_rep02_11215 +UGGCCCCUUUGCUGUCCAUCCUUUUUCAGGGCGUGGACUCCCUGGUGCUAGAAAGCGUGAU +>U2AF2_K562_rep02_11216 +UGGCCCCUUUGCUGUCCAUCCUUUUUCAGGGCGUGGACUCCCUGGUGCUAGAAAGCGUGAU +>U2AF2_K562_rep02_11226 +GCUUUUUACUUUCUCACGCAGGUCUGGCCUAAGAAGGAAAUGGAAAAUGAAAAGGCUUGAA +>U2AF2_K562_rep02_11227 +UGGUUUCUCUCCCUCGGCACCUGUUGCCUAGGAGUGGUCCGCAGACCUGAAUCGAACCCUC +>U2AF2_K562_rep02_11228 +ACUAAAUGUUAUUUCCUGAGUCACUUUUUUAAAGAGCUGCAUAAGCAACAAAGCUGCAUCA +>U2AF2_K562_rep02_11229 +CGUCUGCUCCUACUCCACAGCCGCGUCGUGUGACUCCUUCAAGAACCAGCUGGUCACCCGG +>U2AF2_K562_rep02_11234 +UUCUCUCUUUACAGGUGCUGGGCUGUGCUGUGGAGCUCCCUGAUGUCAGCUGCAAGCGGUU +>U2AF2_K562_rep02_11240 +UUUUCUCCUUUCAUUACCUACCUCUCCAUUAUGCCUCAGUUGUAACGGUGAGUAAAACUAU +>U2AF2_K562_rep02_11241 +CACUUCCUGUCACCUCCCAGGGCUCCCCCAUCCUGCUGGCUGCCAGGCGGGUUGGCCGCUC +>U2AF2_K562_rep02_11253 +CUUCCUUAGUUUUUGUCUUUUUUGAUCUGACUGUAGAUGAUCAGUCAGUUUAUCCUAAGGC +>U2AF2_K562_rep02_11254 +UUUAUUUCCUUCGGGACCUGGGGACAGGGUUUGGUCAGCACCUGCAAGGUCUGUAGUUGCC +>U2AF2_K562_rep02_11255 +AUUGCUUUGCAAUUCCAGGAGCGGCAUUGCCCCCGAAUGUCCAGAUUAUCCCUGUUUUUGU +>U2AF2_K562_rep02_12216 +UUCCCUUUUGUUCCCAGUGCCCCUCGCUGCCUUGUGUUCUUUGACAUUGGAAAGAAGGUCU +>U2AF2_K562_rep02_12217 +CUCCUUUCUUCCUUCCCUUCCCUUCCCCUCCCCUCCCCCAGGCUGGAGUGCAGAGGCACGA +>U2AF2_K562_rep02_12218 +CUCCUUUCUUCCUUCCCUUCCCUUCCCCUCCCCUCCCCCAGGCUGGAGUGCAGAGGCACGA +>U2AF2_K562_rep02_12219 +AGAUUUUCCACAGGUGUGGGCCCCAUUAGCUCUGGCCACCUGAGAAAGCCCUCAGGCAAAG +>U2AF2_K562_rep02_12220 +GGAUGUUAAUUCUUCUCUAUUUUAGAUUUUCCACAGGUGUGGGCCCCAUUAGCUCUGGCCA +>U2AF2_K562_rep02_12221 +UUACAGGUAUCACGCUCAUUGCUGUGGAUGAGGCUCACUGUAUUUCUGAGUGGGGGCAUGA +>U2AF2_K562_rep02_12222 +CUUUUCACAGUCCUCUUACUCCCAGUUACUGGCAGCUACAUGCCUUACCAAGCUUGUAUCA +>U2AF2_K562_rep02_12223 +CCUGUUUUUUUUUCCCCCUGGCAGAGUUAGCCACUUCUUCCUAUGUGUAAGCAUAUCAUCA +>U2AF2_K562_rep02_12224 +UUUAUGUUUUUUUUUCAGGGGAGCGGAAUAUUGGUUUCUUUUACUUGUUGUUUUCAGUUUU +>U2AF2_K562_rep02_12225 +CCCUCUUUCUCUCUCAGCUCCCACAGGCCCAUUCUGGUGACUCAUGACUUGUAUACACAGA +>U2AF2_K562_rep02_12226 +UUUUUUUUUUUUUUUUUAAUAGGGUCUCACUCUGUUGCUCGUGCUGGAGUGACAGUGGUGU +>U2AF2_K562_rep02_12227 +CCUUCCUUUCUUUUUCCCGCUUCCUUAAUGUAAUUUAAACCCUGGCAAACAUUCUUUAGAA +>U2AF2_K562_rep02_12228 +UUUUUCCAGGAGCUGGAGGAGGGAAUGAUAUUCAGUGGUGUUUUUCUCAGGUGAAAGGAGC +>U2AF2_K562_rep02_12229 +AUCCUUUCCUCCGUUUAGGAGCUGCAGUGAACACUUUUCAUUGAACAUGUAGCAUGAAGAG +>U2AF2_K562_rep02_12230 +CAUUAUUUGUUUACUCAUUUGGAGUGUUCCUUGACUUUUAUCCCCUCUUACCUAGUGACAU +>U2AF2_K562_rep02_12231 +AGAUAGAUCCAUUUAUCCUGCCUCCUAGGGAGAAGUUUCUGCCUGGAUUGAAACAAAAAAA +>U2AF2_K562_rep02_12232 +AACAGUGUAAAUUUGAUGGCCAGGAGACAAAAGGAUCCAAGUUCAUUACCUCCAGUGCGAG +>U2AF2_K562_rep02_12233 +CCUUUUUCUCCUCUUUACCGCAUCUUUCGUCUUGCAACACAGAGACCUAAAGGGCAAGGAA +>U2AF2_K562_rep02_12234 +UAUUUUCCAGGCCAGAGAUCCUCAGCAGGAGCCUAUGGAAGAGAUAGAAAAUUUGAAGAAA +>U2AF2_K562_rep02_12235 +CUGUUGCUCGUGCUGGAGUGACAGUGGUGUGAUCUUGGUUCGCUGCAACCUCCGCCUCUUG +>U2AF2_K562_rep02_12236 +UCAGAUACAAGUAUUGUUGGUCUUAUUUUCCAGGCCAGAGAUCCUCAGCAGGAGCCUAUGG +>U2AF2_K562_rep02_12237 +UUGUUCCCCUUUCCCAUUCCAGGGAGCUCUGGGCUCUGUUCUACUUAUUCGUAUUGGCAGG +>U2AF2_K562_rep02_12238 +CCUUCCUUUCUUUUUUUUAGAAGGCAUCUCACACUGUCACCCAGGCUGGAGUGCUGGAGUG +>U2AF2_K562_rep02_12239 +CCUUCCUUCCUUCCUUUUCUUCCUUUCUUUUCCUACCUUCCUUUUCCUUCCUUCCUUUCUU +>U2AF2_K562_rep02_12243 +UGUUCUCUUCUUGUUUCUUCUUCCCCACCAGCCAAAAAUCUAUGAUGUUAUAGCAAGGAUC +>U2AF2_K562_rep02_12244 +CUUCUUUUUCUGCACAGGCAGACACCACCCAUCCUUUAACCAAGCACAGAAAAAUAGCCUC +>U2AF2_K562_rep02_12245 +UCAGAGAUCUGCAGCGAAUAACCCUGCCCAGCAUUAACCGCCUCAGGCACUUCACCAAUGA +>U2AF2_K562_rep02_12249 +UUUUAGGCGUAAUUUUCAUUUUUUCAGAUGUUUUUCUACUUAAAUAGCACAUAUGCAGAAG +>U2AF2_K562_rep02_12250 +UUGAUUUUUUUUCCCCCUAGAGGAAGAAAUCCUACUUAGCGACAUGAACAAACAGUUGACU +>U2AF2_K562_rep02_12251 +CAGUGGUGCGAGGCAUAAUUUCUUCCUUAGGUUCCAGCAGAAAUGGAAGGGUUAGGACGAU +>U2AF2_K562_rep02_12252 +UUUUCCAGUAUGACAUGAUGGGAAGAAAUCAGACUGCUGUGAGAGAAGAGAUGAUUCUCCU +>U2AF2_K562_rep02_12253 +AUUCUUCAGUUAGCUUCAUCUUCAGAGCAAGCUGAUGAUGGCUUGUGUGUGCUAGCAGGAU +>U2AF2_K562_rep02_12254 +CCUUUCUUCCUUCCUUUCCUCCUUCCUCUUCUCCUCCUCCCCUUCCUUCCUUCCUUCCUUC +>U2AF2_K562_rep02_12255 +AUUCUUUCUCUUUUAGGUCCAGGUCCUAACAUUUGAUAGUCAUUUAAAGGCAUGAAGAUUC +>U2AF2_K562_rep02_12256 +UUUUUUUUUUCCACCUACAGCAGCUGUUUUUACCCUGUGGUCAGUCAGGUACUAUAUUUAG +>U2AF2_K562_rep02_12257 +CAGCUGUCUCCUUCUCUUACAGGGUGGGGAGAAACAGCGGGUCUUCACUGGUAUUGUUACC +>U2AF2_K562_rep02_12258 +AGGACAGGACCUUGCUGGGAACCUUCAGUAAGUUGUCCUUUUCUUUCUCAAACUUCCCAUG +>U2AF2_K562_rep02_12259 +UUCUUCUUCAUCUAGGGGCUCUUGGCCAGCUGGGAGUGGGGCUUGCUAAUCUUUUGAGGUA +>U2AF2_K562_rep02_12260 +ACCAACUAGGAUUUUUCUCAGGAGCACAUGGAUGAAGUAUGCUCCUCGCAGCUUCUAACUU +>U2AF2_K562_rep02_12261 +UUUUUUAAGGGACAGGGUCUUGAUCUGUCACCCAAGCUGGAGUGCUGAGGUGUGAUUGUAA +>U2AF2_K562_rep02_12262 +GUCUUCUGUUUUCCCCAGGCAGGGUGCCUGAGCUGUAUUCCCCAGCACACCCACUCCCGCA +>U2AF2_K562_rep02_12263 +AUUUCUGCACAUCUAGGAUGACAGUACGAGCCAUAGUGACCACCAAGACCCCAUCUCAUUA +>U2AF2_K562_rep02_12265 +UGGAUUUGUACAUUAUAGGUUCAUUGCCCUCAAGUGGCAGAAGGAAAAGCACAUGGAAUAU +>U2AF2_K562_rep02_12266 +UUUACUUUUUUUCUUUAAGGAUGGAUGUUGUGUUCUCUUUAUUUUUUUCCUACUACUUUAA +>U2AF2_K562_rep02_12267 +CCUUCCUUCCUCCCUUCCUUCCUUUCUGUUAUUCAGCCAGAAGUAUCAGCAUCACUGUUCU +>U2AF2_K562_rep02_12268 +UUUUGUUGGUUCUUUGAGCCUCUCACAGGUUGCAUCAUAGUCUAUGUGGAUAGAUGAAGAA +>U2AF2_K562_rep02_12269 +UUUUUUUUUUUUUUUUUUUUUUUUUUUGGUAGGAAACUCAACAGUGUAAAUUUGAUGGCCA +>U2AF2_K562_rep02_12274 +UGAUUUUGUCCCCUAGAGCAAGGUCCGUGGUCCUGUCAGUGGAAGCCCGGAUAGCAUGAAU +>U2AF2_K562_rep02_12275 +GGUGGGGUGGGGGCGGGGAGGGCUCCCGGGAGGCAAGUGGUCACGGUGAGAGUCACUGGGC +>U2AF2_K562_rep02_12276 +UACCCAUUGCUUUUACUGAUUAGGUAUGAAUUUCAGCCCUUUAUUUCCUUCUAAUUUUGGA +>U2AF2_K562_rep02_12279 +CCUCAUUUCACCCAGGAGGAAGGUGCAGCUCAGAGCUGUUACGACUAGUCAGAGAGAGCGA +>U2AF2_K562_rep02_12281 +AUAAUUCUUACCUGCCUCCUUUCUCUUCCCGGACCUUCCUAAUUUGAAGAGGUGAUUUGGA +>U2AF2_K562_rep02_12286 +UUUCUCUCCCUAAUCUUUUCUCCAAUCAGGCUUCAAUGUUAGCUGCAGAAAAUGACCCUUA +>U2AF2_K562_rep02_12287 +UUUUUGUUUUUCAGCCCUGGUACCUGACAGUGUAAAGAAGGAGCUCCUACAAAGAAUAAGA +>U2AF2_K562_rep02_12292 +UUUACCUGGGUAACAAUUUUACUUUUUACCACAGUCACCAAGGAGCUAGUUAGCUGGAUGA +>U2AF2_K562_rep02_12293 +UAGUUUGCAGGUCGAAGUAAGAAGGAAACCAAAUAUUCUCUUAAGGCUGUCGAAGACAUGU +>U2AF2_K562_rep02_12299 +UUUGUUUUUCUUUUCAGGUAUGGAACCCUUCAGAUCAAAGCUUACCAAUAAAUUCAGUAUG +>U2AF2_K562_rep02_12300 +UUUGUUUUUCUUUUCAGGUAUGGAACCCUUCAGAUCAAAGCUUACCAAUAAAUUCAGUAUG +>U2AF2_K562_rep02_12302 +CUCAUUUUUCUCUUGCCGCCGCCAUGUAAGAGGUAACUUUCACCUCCCGUCAUGAUUCUGA +>U2AF2_K562_rep02_12303 +UUAUUUUUCUUAUUUAGGGAAGGUUACCGCCACCUCUCUGUAGGAAAUCAAGUGUACAUGA +>U2AF2_K562_rep02_12305 +ACUUGCUAUCCUUCCCUUGCAGGAAGACACGUUUCAGCAGUAUGUAAGACCAGAGAUUAAC +>U2AF2_K562_rep02_12306 +CUUGUGCAAUUUCCAGGUGAUGAACAGCCUCCUUCUAAAUCAUUGACCACAUUUCUUAUUC +>U2AF2_K562_rep02_12307 +UUCUCUUUUUGUGCCAGGUCAUACUUUAAGGAGCCCAAGAGCUUUAUAACAUAACAAAAGA +>U2AF2_K562_rep02_12308 +UUCUCUUUUUGUGCCAGGUCAUACUUUAAGGAGCCCAAGAGCUUUAUAACAUAACAAAAGA +>U2AF2_K562_rep02_12311 +UCCCUUAAACUUUAUACCACCAGAAUACCAACAGAAGCUAAAUGUAGCAAAUGUGACUGCC +>U2AF2_K562_rep02_12312 +AAAAUUAAGUUCUUUUAUUAGCUGGCCGUUCUCUCAUUAUCUCAAAUUUAUUUAAGUAUUU +>U2AF2_K562_rep02_12316 +UUUUCUUCUUUGUAGCAUGGAGCAGAUCCAACUAAAAAGAACAGAGAUGGAAAUACACCUU +>U2AF2_K562_rep02_12317 +CUUUUCUCUAGGUUAGUAACACUGAAGAAAUCACUUUUGAAGCAUUGAAGAAAGCAAUUGG +>U2AF2_K562_rep02_12318 +UCAUAGCUCCUUCUCCCCCUGCUUCUUUCCCAAAUGAAUGAGUAUUUCUUUUAGAUAAAUU +>U2AF2_K562_rep02_12321 +AUUAUUUUUUUGUGUUGGCCAGGAAGUGAACCCAGGUCAACUGCUUGGAAGGUGGCUAUGC +>U2AF2_K562_rep02_12322 +ACAGGCCCAGACCUUCUCUUUCCCUUUCCAGCAGCCGGAGAAGUGCGACAACAACCAGUAC +>U2AF2_K562_rep02_12323 +CCCACCGCCUUGACACCCCCACCCCCGCAGGGAAGCAGCUGGUGCACUACACAGCGCAGCC +>U2AF2_K562_rep02_12324 +UUUUUUCAUUACAUUACAGGAAGCAGAAUCUGGUAAUAUAAGUCAAAAGUCUGAUGAAGAA +>U2AF2_K562_rep02_12325 +GUUUUCUUUUUUCCCUUUCCCAGUUUGACUUUUGCCAUCUAGAGUUUGUAAAUUAAGUGGU +>U2AF2_K562_rep02_12326 +CUUUCCCUUCCACAGCCCAGGGUCCGUCUGCAUUUUGUGGAGCUGGGCUCCGGCCCUGCUG +>U2AF2_K562_rep02_12334 +UUUGACUUUGCUUUGCUUUUCCCCUUUUGUGUUUGCAGUUGAAUGGAGAGGUUUUCAUAUU +>U2AF2_K562_rep02_12335 +AUAUUAAACUCUUCAGAAGGAAGUCACUGUGCAUAGCCAUCCCCUAAGAAGAGGGCAUUCC +>U2AF2_K562_rep02_12336 +ACACUUCUGUUCCUUUGUCUGCAGGAGAGCUGGAGGUGUUUCAGAAAGAUGGGGAACGAAA +>U2AF2_K562_rep02_12337 +UAAAACUGUGGUUUGCAAGCAGAAGGCGCUGGAACUGUUGCCCAAGGUGGAAGAGGUGGUG +>U2AF2_K562_rep02_12338 +CUAUCCUUCUACCUCCACGCACGUUUUUUAAGGCAGCGGCAAAAGUAGUAGAAAGCAAAAG +>U2AF2_K562_rep02_12339 +UCAGCUUUUUAAUUAAAUGAAGCCAAGUGGGAUUUGCAUAAAGUGAAUGUUUACCAUGAAG +>U2AF2_K562_rep02_12340 +UUUUCCUCCUCAAUCUUCCUUUGCCCUACCUAUGUGUUACUAGAGAACAUUUCUACAAAUU +>U2AF2_K562_rep02_12341 +UCUUUUUCCUUCCUCCCUCCCUGUCUCCCUCCCUCUCUGCCUCCCUCCCUCCCUCCCUCUU +>U2AF2_K562_rep02_12342 +UGUCUUUUUUUCUUUAGUGCUCCAGACAAUGAAACAUCCAAAUCUGCUAAUCAAGAUACCU +>U2AF2_K562_rep02_12343 +CUUUGUACCAAUAGGUAAUUUGUCGUCCAGAUGCUCUGCUAUAUGUGAAGUAUCAUUUUUC +>U2AF2_K562_rep02_12344 +CUUUGUACCAAUAGGUAAUUUGUCGUCCAGAUGCUCUGCUAUAUGUGAAGUAUCAUUUUUC +>U2AF2_K562_rep02_12352 +UUUUUCCUCUGAAUUUACAUGGAAGGAGCGGUAGAUGAUGAGACAUAUAAGAUCCUCACAU +>U2AF2_K562_rep02_12353 +AGAUGCCACUGCCUCCUUUCCAUUGUCAGCUGGCGGGUGACGCGACUGUUGUUGCACUGGG +>U2AF2_K562_rep02_12354 +AGAUGCCACUGCCUCCUUUCCAUUGUCAGCUGGCGGGUGACGCGACUGUUGUUGCACUGGG +>U2AF2_K562_rep02_12355 +CUAACUUCUCUAGCCAAAUACAGAUAGUCUUUCCCACUGAGUGUCUGUCAACAACUAGAUU +>U2AF2_K562_rep02_12356 +UCCCUGAUUCUUUUUCAAGGGCCGCUUGAAGAUGCCAUUGAAGAUGAGGAAGAAGAAUGUC +>U2AF2_K562_rep02_12357 +AUUUUAAUUCUAGUCUAGGUGAUGGCUGCUCCUUUCCAACUUGCCUUGUUAACCAGGAUCC
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/fimo_output_almost-gff_1.txt Wed Apr 25 12:13:22 2018 -0400 @@ -0,0 +1,100 @@ +##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;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/fimo_output_almost-gff_2.txt Wed Apr 25 12:13:22 2018 -0400 @@ -0,0 +1,100 @@ +##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;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/fimo_output_html_1.html Wed Apr 25 12:13:22 2018 -0400 @@ -0,0 +1,97 @@ +<!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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/fimo_output_html_2.html Wed Apr 25 12:13:22 2018 -0400 @@ -0,0 +1,97 @@ +<!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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/fimo_output_interval_1.txt Wed Apr 25 12:13:22 2018 -0400 @@ -0,0 +1,100 @@ +#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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/fimo_output_interval_2.txt Wed Apr 25 12:13:22 2018 -0400 @@ -0,0 +1,100 @@ +#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_txt_1.txt Wed Apr 25 12:13:22 2018 -0400 @@ -0,0 +1,100 @@ +#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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/fimo_output_txt_2.txt Wed Apr 25 12:13:22 2018 -0400 @@ -0,0 +1,100 @@ +#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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/fimo_output_xml_1.xml Wed Apr 25 12:13:22 2018 -0400 @@ -0,0 +1,66 @@ +<?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>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/fimo_output_xml_2.xml Wed Apr 25 12:13:22 2018 -0400 @@ -0,0 +1,65 @@ +<?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/meme_input_1.fasta Wed Apr 25 12:13:22 2018 -0400 @@ -0,0 +1,66 @@ +>chr21_19617074_19617124_+ +AAAAATTATTACTAGGGAGGGGGCCGGAACCTCGGGACGTGGGTATATAA +>chr21_26934381_26934431_+ +GCGCCTGGTCGGTTATGAGTCACAAGTGAGTTATAAAAGGGTCGCACGTT +>chr21_28217753_28217803_- +CAAAGGGGAGGAGTGGGGTGGGGGTGGGGGTTTCACTGGTCCACTATAAA +>chr21_31710037_31710087_- +AACACCCAGGTTTCTGAGTATATAATCGCCGCACCAAAGAATTTAATTTT +>chr21_31744582_31744632_- +CCCAGGTCTAAGAGCATATATAACTTGGAGTCCAGACTATGACATTCAAA +>chr21_31768316_31768366_+ +AACGTATATAAATGGTCCTGTCCAGATGTGGCATGCAAACTCAGAATCTT +>chr21_31914206_31914256_- +TGACACCCACTACTTAGAGTATAAAATCATTCTGAGAAGTTAGAGACACC +>chr21_31933633_31933683_- +TCAGAGTATATATAAATGTTCCTGTCCAGTCACAGTCACCAAACTGACCT +>chr21_31962741_31962791_- +ACATATAACTCAGGTTGGATAAAATAATTTGTACAAATCAGGAGAGTCAA +>chr21_31964683_31964733_+ +TCTGATTCACTGAGGCATATAAAAGGCCCTCTGCGGAGAAGTGTCCATAC +>chr21_31973364_31973414_+ +aaacttaaaactctataaacttaaaactCTAGAATCTGATCCTGCTATAC +>chr21_31992870_31992920_+ +CTCATACACTATTGAAGATGTATAAAATTTCATTTGCAGATGGTGACATT +>chr21_32185595_32185645_- +TCACCACCCACCAGAGCTGGGATATATAAAGAAGGTTCTGAGACTAGGAA +>chr21_32202076_32202126_- +TGCCCACCAGCTTGAGGTATAAAAAGCCCTGTACGGGAAGAGACCTTCAT +>chr21_32253899_32253949_- +AGCCCCACCCACCAGCAAGGATATATAAAAGCTCAGGAGTCTGGAGTGAC +>chr21_32410820_32410870_- +TCTACCCCACTAATCACTGAGGATGTATAAAAGTCCCAGGGAAGCTGGTG +>chr21_36411748_36411798_- +ATAGTTCTGTATAGTTTCAGTTGGCATCtaaaaattatataactttattt +>chr21_37838750_37838800_- +gatggttttataaggggcctcaccctcggctcagccctcattcttctcct +>chr21_45705687_45705737_+ +CCGGGGCGGAGCGGCCTTTGCTCTTTGCGTGGTCGCGGGGGTATAACAGC +>chr21_45971413_45971463_- +CAGGCCCTGGGCATATAAAAGCCCCAGCAGCCAACAGGctcacacacaca +>chr21_45978668_45978718_- +CAGAGGGGTATAAAGGTTCCGACCACTCAGAGGCCTGGCACGAtcactca +>chr21_45993530_45993580_+ +CCAAGGAGGAGTATAAAAGCCCCACAAACCCGAGCACCTCACTCACTCGC +>chr21_46020421_46020471_+ +GAGACATATAAAAGCCAACATCCCTGAGCACCTAACACACGGactcactc +>chr21_46031920_46031970_+ +GGAAAATACCCAGGGAGGGTATAAAACCTCAGCAGCCAGGGCACACAAAC +>chr21_46046964_46047014_+ +ACAAGGCCAGGAGGGGTATAAAAGCCTGAGAGCCCCAAGAACctcacaca +>chr21_46057197_46057247_+ +ATTGCTGAGTCTCCTGCTGGGAAAACACAGGCCCTGGGCATATAAAAGCC +>chr21_46086869_46086919_- +GACAGGTGTGCTTCTGTGCTGTGGGGATGCCTGGGCCCAGGTATAAAGGC +>chr21_46102103_46102153_- +AGGTGTGTGCTTCTGTGCTGTGGGGATGCCTGGGTCCAGGTATAAAGGCT +>chr21_47517957_47518007_+ +CCTGGCGGCGGGGCGGGTCAGGCCGGCGGGGCGGGGTATAAAGGGGGCGG +>chr21_47517957_47518007_+ +CCTGGCGGCGGGGCGGGTCAGGCCGGCGGGGCGGGGTATAAAGGGGGCGG +>chr21_47517957_47518007_+ +CCTGGCGGCGGGGCGGGTCAGGCCGGCGGGGCGGGGTATAAAGGGGGCGG +>chr21_47575506_47575556_- +TGAGAAGCCGGTGGGGAGGTGCTGCCGGTGAGCGTATAAAGGCCCTGGCG +>chr21_47575506_47575556_- +TGAGAAGCCGGTGGGGAGGTGCTGCCGGTGAGCGTATAAAGGCCCTGGCG
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/meme_output_html_1.html Wed Apr 25 12:13:22 2018 -0400 @@ -0,0 +1,95 @@ +<!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",
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/meme_output_html_2.html Wed Apr 25 12:13:22 2018 -0400 @@ -0,0 +1,89 @@ +<!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_txt_1.txt Wed Apr 25 12:13:22 2018 -0400 @@ -0,0 +1,325 @@ +******************************************************************************** +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 + +********************************************************************************
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/meme_output_txt_2.txt Wed Apr 25 12:13:22 2018 -0400 @@ -0,0 +1,319 @@ +******************************************************************************** +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 + +********************************************************************************
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/meme_output_xml_1.xml Wed Apr 25 12:13:22 2018 -0400 @@ -0,0 +1,1285 @@ +<?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>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/meme_output_xml_2.xml Wed Apr 25 12:13:22 2018 -0400 @@ -0,0 +1,977 @@ +<?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>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/meme_psp_gen_reports_output.tabular Wed Apr 25 12:13:22 2018 -0400 @@ -0,0 +1,19 @@ +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_protein_input.fasta Wed Apr 25 12:13:22 2018 -0400 @@ -0,0 +1,17 @@ +>ICYA_MANSE +GDIFYPGYCPDVKPVNDFDLSAFAGAWHEIAKLPLENENQGKCTIAEYKY +DGKKASVYNSFVSNGVKEYMEGDLEIAPDAKYTKQGKYVMTFKFGQRVVN +LVPWVLATDYKNYAINYNCDYHPDKKAHSIHAWILSKSKVLEGNTKEVVD +NVLKTFSHLIDASKFISNDFSEAACQYSTTYSLTGPDRH + +>LACB_BOVIN +MKCLLLALALTCGAQALIVTQTMKGLDIQKVAGTWYSLAMAASDISLLDA +QSAPLRVYVEELKPTPEGDLEILLQKWENGECAQKKIIAEKTKIPAVFKI +DALNENKVLVLDTDYKKYLLFCMENSAEPEQSLACQCLVRTPEVDDEALE +KFDKALKALPMHIRLSFNPTQLEEQCHI + +>BBP_PIEBR +NVYHDGACPEVKPVDNFDWSNYHGKWWEVAKYPNSVEKYGKCGWAEYTPE +GKSVKVSNYHVIHGKEYFIEGTAYPVGDSKIGKIYHKLTYGGVTKENVFN +VLSTDNKNYIIGYYCKYDEDKKGHQDFVWVLSRSKVLTGEAKTAVENYLI +GSPVVDSQKLVYSDFSEAACKVN
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/motif1.gff Wed Apr 25 12:13:22 2018 -0400 @@ -0,0 +1,100 @@ +##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;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/output.memepsp Wed Apr 25 12:13:22 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/phiX.fasta Wed Apr 25 12:13:22 2018 -0400 @@ -0,0 +1,79 @@ +>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 +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/prior30.plib Wed Apr 25 12:13:22 2018 -0400 @@ -0,0 +1,275 @@ +Alphabet= ACDEFGHIKLMNPQRSTVWY +NumDistr= 30 +Number= 0 +Mixture= 0.055795 +B= 5.623820 +Alpha= 0.0855491 0.0221831 0.0111063 0.0209959 0.0505726 0.025437 0.0155389 0.132951 0.0247865 0.150287 0.0577239 0.0209317 0.0166629 0.0220905 0.0244295 0.0497608 0.070277 0.157532 0.0102219 0.0309633 +FullUpdate= 1 +QUpdate= 1 +StructID= 0 +Comment= HMM9.4 reestimated in henikoff29.2 + +Number= 1 +Mixture= 0.198333 +B= 0.097240 +Alpha= 0.0562629 0.0329597 0.0692513 0.0385232 0.0400041 0.143573 0.0428939 0.0226244 0.0442102 0.0665467 0.0117853 0.0447655 0.0833299 0.0395825 0.0611271 0.0588852 0.0513472 0.0317153 0.0237865 0.0368161 +FullUpdate= 1 +QUpdate= 1 +StructID= 24 +Comment= Outside + +Number= 2 +Mixture= 0.043566 +B= 1.648336 +Alpha= 0.0144564 0.00845337 0.00785519 0.00864933 0.255959 0.0110815 0.0509526 0.0234533 0.0120443 0.0561967 0.015111 0.0190974 0.00857653 0.0167812 0.0164918 0.0197108 0.0151013 0.0252782 0.050139 0.364613 +FullUpdate= 1 +QUpdate= 1 +StructID= 26 +Comment= Inside + +Number= 3 +Mixture= 0.060170 +B= 2.595432 +Alpha= 0.0452144 0.00587917 0.169731 0.0751478 0.00749471 0.0845832 0.0369819 0.00610072 0.0548186 0.011029 0.00382749 0.212785 0.0206532 0.0416705 0.0280716 0.117267 0.0533742 0.00943157 0.00216149 0.0137784 +FullUpdate= 1 +QUpdate= 1 +StructID= 19 +Comment= Outside Alpha + +Number= 4 +Mixture= 0.065466 +B= 3.112271 +Alpha= 0.0361167 0.0049157 0.0134924 0.0461325 0.00557631 0.0209043 0.0302551 0.016425 0.307554 0.0338255 0.0139435 0.0360733 0.0127659 0.0873761 0.222668 0.0369042 0.0354442 0.0228891 0.00434827 0.0123906 +FullUpdate= 1 +QUpdate= 1 +StructID= 21 +Comment= Outside Beta + +Number= 5 +Mixture= 0.067614 +B= 2.053644 +Alpha= 0.0194362 0.00765176 0.00188738 0.00372898 0.0849894 0.00421787 0.00400459 0.152735 0.00407958 0.4568 0.106051 0.00304386 0.00545956 0.00900935 0.00605071 0.00519029 0.016255 0.0861045 0.00787965 0.0154248 +FullUpdate= 1 +QUpdate= 1 +StructID= 22 +Comment= Inside alpha + +Number= 6 +Mixture= 0.080724 +B= 2.138987 +Alpha= 0.0423172 0.0153891 0.00409306 0.00565735 0.0197117 0.00590607 0.00139926 0.307863 0.00544884 0.115721 0.0285808 0.00522771 0.00474851 0.00328193 0.00351054 0.00892385 0.0348922 0.380003 0.00117673 0.00614917 +FullUpdate= 1 +QUpdate= 1 +StructID= 23 +Comment= Inside beta + +Number= 7 +Mixture= 0.051030 +B= 3.878926 +Alpha= 0.0548123 0.000759746 0.144127 0.46019 0.00249502 0.0192754 0.0106535 0.00938765 0.0562429 0.0163148 0.00717389 0.0245612 0.0177482 0.0744802 0.0199233 0.0323535 0.0257651 0.018574 0.00087086 0.00429088 +FullUpdate= 1 +QUpdate= 1 +StructID= 23 +Comment= Alpha helix + +Number= 8 +Mixture= 0.103529 +B= 1.486325 +Alpha= 0.315754 0.0384546 0.0116388 0.0133665 0.0111126 0.107921 0.00752325 0.0154885 0.0111281 0.0231087 0.011626 0.0228375 0.0304785 0.0166632 0.0156345 0.186379 0.0954421 0.0546691 0.00351538 0.00725682 +FullUpdate= 1 +QUpdate= 1 +StructID= 23 +Comment= Beta strand + +Number= 9 +Mixture= 0.062940 +B= 8.221215 +Alpha= 0.0869919 0.00672577 0.0600995 0.10763 0.0153489 0.0378086 0.0325335 0.023388 0.113765 0.041623 0.0196906 0.0625344 0.0262599 0.0788667 0.0707399 0.0886634 0.0666777 0.0361472 0.00484308 0.0196629 +FullUpdate= 1 +QUpdate= 1 +StructID= 23 +Comment= Other + +Number= 10 +Mixture= 0.012518 +B= 38.955631 +Alpha= 0.732922 0.0145131 0.00623235 0.00951423 0.00717778 0.0289521 0.00351664 0.0125081 0.00886593 0.0183651 0.00832812 0.00670968 0.00364556 0.00622169 0.00812899 0.0582399 0.0205067 0.0394327 0.00207485 0.00414489 +FullUpdate= 1 +QUpdate= 1 +StructID= 0 +Comment= A + +Number= 11 +Mixture= 0.004953 +B= 381.562195 +Alpha= 0.00563239 0.959814 0.00144129 0.00213042 0.00158645 0.00168393 0.000989765 0.00325263 0.00148501 0.00343924 0.00168673 0.00159054 0.00121534 0.00129942 0.00195209 0.00296106 0.0039912 0.00266944 0.000327808 0.000851203 +FullUpdate= 1 +QUpdate= 1 +StructID= 0 +Comment= C + +Number= 12 +Mixture= 0.013849 +B= 90.727570 +Alpha= 0.00897115 0.00169015 0.859473 0.0360829 0.00269485 0.00606504 0.00469816 0.00400134 0.0047981 0.00514968 0.00208395 0.029754 0.00241276 0.0045506 0.00433816 0.0088208 0.00511143 0.00527448 0.00104469 0.00298475 +FullUpdate= 1 +QUpdate= 1 +StructID= 0 +Comment= D + +Number= 13 +Mixture= 0.008388 +B= 404.591034 +Alpha= 0.00241514 0.000413991 0.0122981 0.96369 0.000665578 0.00187461 0.00106904 0.00149214 0.00121548 0.00129791 0.000554145 0.00253496 0.000624495 0.00316839 0.00115045 0.00171781 0.001468 0.0014564 0.000278652 0.000614791 +FullUpdate= 1 +QUpdate= 1 +StructID= 0 +Comment= E + +Number= 14 +Mixture= 0.008064 +B= 83.323669 +Alpha= 0.00839779 0.00428348 0.00298116 0.00358128 0.850936 0.00329382 0.00196832 0.0130534 0.00320345 0.0351883 0.00729724 0.00287304 0.00358482 0.00218728 0.00264753 0.00833798 0.00418729 0.0120684 0.00448366 0.025446 +FullUpdate= 1 +QUpdate= 1 +StructID= 0 +Comment= F + +Number= 15 +Mixture= 0.032205 +B= 32.644871 +Alpha= 0.0234448 0.00236512 0.0112957 0.00811395 0.00248143 0.868718 0.00345598 0.00342985 0.00859682 0.0040966 0.00239339 0.012342 0.00423123 0.00440054 0.00795347 0.0165095 0.0065024 0.00550512 0.00140604 0.00275817 +FullUpdate= 1 +QUpdate= 1 +StructID= 0 +Comment= G + +Number= 16 +Mixture= 0.005033 +B= 35.520824 +Alpha= 0.0100058 0.00386024 0.0131498 0.0108984 0.0122851 0.00738691 0.722249 0.00521193 0.00686054 0.0150103 0.00673014 0.0367074 0.00625526 0.0429912 0.0234127 0.0187246 0.0128445 0.00837399 0.00390723 0.0331349 +FullUpdate= 1 +QUpdate= 1 +StructID= 0 +Comment= H + +Number= 17 +Mixture= 0.007454 +B= 101.265472 +Alpha= 0.0106938 0.00267663 0.00404166 0.00466637 0.00838963 0.00372808 0.00182575 0.681615 0.0059102 0.0770333 0.0184335 0.004676 0.0027124 0.00372663 0.00418165 0.00773357 0.0109237 0.140679 0.00140417 0.00494911 +FullUpdate= 1 +QUpdate= 1 +StructID= 0 +Comment= I + +Number= 18 +Mixture= 0.009400 +B= 150.415985 +Alpha= 0.00688657 0.00169711 0.00222738 0.00346887 0.00115861 0.00302866 0.00209171 0.00400905 0.903944 0.0037747 0.00186061 0.00449531 0.00249618 0.00324487 0.041775 0.00392196 0.00461714 0.00296607 0.000893256 0.00144282 +FullUpdate= 1 +QUpdate= 1 +StructID= 0 +Comment= K + +Number= 19 +Mixture= 0.017057 +B= 31.896633 +Alpha= 0.0114646 0.00367926 0.00296188 0.00596126 0.0190009 0.00382486 0.00338381 0.0401936 0.00650072 0.790038 0.031659 0.00392791 0.0050046 0.00753591 0.00771818 0.00748621 0.0101555 0.0312597 0.00242405 0.00581952 +FullUpdate= 1 +QUpdate= 1 +StructID= 0 +Comment= L + +Number= 20 +Mixture= 0.002761 +B= 201.346268 +Alpha= 0.00353933 0.00165628 0.0014931 0.00161065 0.00279831 0.00194259 0.00101868 0.00969101 0.00211316 0.0217036 0.928022 0.00162899 0.0015681 0.0015629 0.00138977 0.00294601 0.00311476 0.00723178 0.00156295 0.00340569 +FullUpdate= 1 +QUpdate= 1 +StructID= 0 +Comment= M + +Number= 21 +Mixture= 0.005734 +B= 108.343185 +Alpha= 0.0067512 0.00239062 0.0140378 0.0043452 0.00365788 0.00689345 0.0148828 0.00715373 0.00789036 0.00614036 0.00289697 0.858995 0.00399721 0.00770961 0.00570515 0.0238176 0.011602 0.00591549 0.00167893 0.00353897 +FullUpdate= 1 +QUpdate= 1 +StructID= 0 +Comment= N + +Number= 22 +Mixture= 0.022818 +B= 15.153304 +Alpha= 0.0417987 0.00360232 0.0113792 0.0152366 0.00564775 0.0123795 0.00606957 0.0091353 0.0165122 0.0167265 0.00490487 0.00915437 0.755604 0.0131375 0.012587 0.0283392 0.0189623 0.0140029 0.0012848 0.00353553 +FullUpdate= 1 +QUpdate= 1 +StructID= 0 +Comment= P + +Number= 23 +Mixture= 0.005931 +B= 79.417511 +Alpha= 0.0142993 0.00266984 0.0053289 0.0321605 0.0028715 0.00426743 0.0257509 0.00565307 0.0106106 0.0161186 0.00955753 0.0104696 0.00638107 0.807311 0.0149106 0.0111968 0.00889459 0.00681482 0.00206658 0.00266624 +FullUpdate= 1 +QUpdate= 1 +StructID= 0 +Comment= Q + +Number= 24 +Mixture= 0.011491 +B= 93.103897 +Alpha= 0.00756896 0.00314197 0.00296652 0.00327634 0.00194604 0.00467894 0.00721049 0.00406061 0.0277257 0.00663852 0.00217868 0.00577047 0.00473306 0.00953551 0.889701 0.00650859 0.00506022 0.00294281 0.00205549 0.00230062 +FullUpdate= 1 +QUpdate= 1 +StructID= 0 +Comment= R + +Number= 25 +Mixture= 0.008219 +B= 47.504795 +Alpha= 0.0284818 0.00697155 0.00749796 0.00604665 0.00515171 0.00954817 0.00380684 0.00637929 0.0104463 0.00908885 0.00471437 0.0194592 0.00711823 0.00611827 0.00979722 0.707416 0.139256 0.00656298 0.0015377 0.00460086 +FullUpdate= 1 +QUpdate= 1 +StructID= 0 +Comment= S + +Number= 26 +Mixture= 0.019050 +B= 14.027470 +Alpha= 0.0247201 0.00718027 0.00845584 0.0076239 0.00600101 0.0073401 0.00492149 0.0173757 0.0129878 0.0125773 0.0100452 0.0230424 0.00659406 0.0110314 0.0112037 0.107763 0.690341 0.0249364 0.00193884 0.00392074 +FullUpdate= 1 +QUpdate= 1 +StructID= 0 +Comment= T + +Number= 27 +Mixture= 0.007047 +B= 76.958153 +Alpha= 0.0447488 0.00734525 0.00576457 0.00805666 0.00714188 0.00593389 0.0041663 0.0688592 0.00714299 0.0255115 0.00800708 0.00501678 0.00632646 0.00492002 0.00812967 0.0100074 0.0240134 0.745035 0.00126243 0.00261056 +FullUpdate= 1 +QUpdate= 1 +StructID= 0 +Comment= V + +Number= 28 +Mixture= 0.003957 +B= 150.973328 +Alpha= 0.00517343 0.00213336 0.00350645 0.00390297 0.018439 0.0041919 0.0023655 0.00404231 0.00420998 0.0171406 0.00379068 0.00363696 0.00245861 0.00387467 0.00502035 0.00465674 0.00417283 0.00620977 0.888513 0.012561 +FullUpdate= 1 +QUpdate= 1 +StructID= 0 +Comment= W + +Number= 29 +Mixture= 0.004904 +B= 30.653225 +Alpha= 0.0342049 0.00809912 0.0126852 0.0174701 0.156033 0.0118268 0.0431342 0.0204751 0.0164439 0.0363664 0.0129811 0.0131986 0.0103037 0.0116235 0.0159032 0.0287792 0.0176143 0.024986 0.0131845 0.494687 +FullUpdate= 1 +QUpdate= 1 +StructID= 0 +Comment= Y + +/* $Header$ */ +/* $Header$ */ +/* $Header$ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tool_data_table_conf.xml.sample Wed Apr 25 12:13:22 2018 -0400 @@ -0,0 +1,7 @@ +<tables> + <!-- Locations of all fasta files under genome directory --> + <table name="all_fasta" comment_char="#" allow_duplicate_entries="False"> + <columns>value, dbkey, name, path</columns> + <file path="tool-data/all_fasta.loc" /> + </table> +</tables>