galaxy-dev
Threads by month
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
February 2010
- 32 participants
- 180 discussions
24 Feb '10
details: http://www.bx.psu.edu/hg/galaxy/rev/b4dd38c06398
changeset: 3432:b4dd38c06398
user: Dan Blankenberg <dan(a)bx.psu.edu>
date: Tue Feb 23 23:17:09 2010 -0500
description:
FASTQ Manupulation tool no longer considers @ when matching or translating sequence identifiers.
diffstat:
tools/fastq/fastq_manipulation.xml | 8 +++++---
1 files changed, 5 insertions(+), 3 deletions(-)
diffs (36 lines):
diff -r 2b0e2519f7ac -r b4dd38c06398 tools/fastq/fastq_manipulation.xml
--- a/tools/fastq/fastq_manipulation.xml Tue Feb 23 19:54:54 2010 -0500
+++ b/tools/fastq/fastq_manipulation.xml Tue Feb 23 23:17:09 2010 -0500
@@ -1,4 +1,4 @@
-<tool id="fastq_manipulation" name="Manipulate FASTQ" version="1.0.0">
+<tool id="fastq_manipulation" name="Manipulate FASTQ" version="1.0.1">
<options sanitize="False" /> <!-- This tool uses a file to rely all parameter information (actually a dynamically generated python module), we can safely not sanitize any parameters -->
<description>reads on various attributes</description>
<command interpreter="python">fastq_manipulation.py $input_file $fastq_manipulation_file $output_file $output_file.files_path '${input_file.extension[len( 'fastq' ):]}'</command>
@@ -168,7 +168,7 @@
def match_read( fastq_read ):
#for $match_block in $match_blocks:
#if $match_block['match_type']['match_type_selector'] == 'identifier':
- search_target = fastq_read.identifier
+ search_target = fastq_read.identifier[1:] ##don't include @
#elif $match_block['match_type']['match_type_selector'] == 'sequence':
search_target = fastq_read.sequence
#elif $match_block['match_type']['match_type_selector'] == 'quality':
@@ -186,7 +186,7 @@
#for $manipulate_block in $manipulate_blocks:
#if $manipulate_block['manipulation_type']['manipulation_type_selector'] == 'identifier':
#if $manipulate_block['manipulation_type']['manipulation']['manipulation_selector'] == 'translate':
- new_read.identifier = new_read.identifier.translate( maketrans( binascii.unhexlify( "${ binascii.hexlify( str( manipulate_block['manipulation_type']['manipulation']['from'] ) ) }" ), binascii.unhexlify( "${ binascii.hexlify( str( manipulate_block['manipulation_type']['manipulation']['to'] ) ) }" ) ) )
+ new_read.identifier = "@%s" % new_read.identifier[1:].translate( maketrans( binascii.unhexlify( "${ binascii.hexlify( str( manipulate_block['manipulation_type']['manipulation']['from'] ) ) }" ), binascii.unhexlify( "${ binascii.hexlify( str( manipulate_block['manipulation_type']['manipulation']['to'] ) ) }" ) ) )
#end if
#elif $manipulate_block['manipulation_type']['manipulation_type_selector'] == 'sequence':
#if $manipulate_block['manipulation_type']['manipulation']['manipulation_selector'] == 'translate':
@@ -236,6 +236,8 @@
#continue
#end if
#end for
+ if new_read.description != "+":
+ new_read.description = "+%s" % new_read.identifier[1:] ##ensure description is still valid
return new_read
def match_and_manipulate_read( fastq_read ):
new_read = fastq_read
1
0
24 Feb '10
details: http://www.bx.psu.edu/hg/galaxy/rev/2b0e2519f7ac
changeset: 3431:2b0e2519f7ac
user: Dan Blankenberg <dan(a)bx.psu.edu>
date: Tue Feb 23 19:54:54 2010 -0500
description:
Add gnuplot requirement tag to boxplot tool.
diffstat:
tool_conf.xml.sample | 18 +++++++++---------
tools/plotting/boxplot.xml | 3 +++
2 files changed, 12 insertions(+), 9 deletions(-)
diffs (41 lines):
diff -r 25de793f99e5 -r 2b0e2519f7ac tool_conf.xml.sample
--- a/tool_conf.xml.sample Tue Feb 23 17:58:44 2010 -0500
+++ b/tool_conf.xml.sample Tue Feb 23 19:54:54 2010 -0500
@@ -176,15 +176,15 @@
</section>
<section name="NGS: QC and manipulation" id="cshl_library_information">
<label text="Generic FASTQ data" id="new_fastq" />
- <tool file="fastq/fastq_combiner.xml" />
- <tool file="fastq/fastq_groomer.xml" />
- <tool file="fastq/fastq_paired_end_joiner.xml" />
- <tool file="fastq/fastq_paired_end_splitter.xml" />
- <tool file="fastq/fastq_stats.xml" />
- <tool file="fastq/fastq_filter.xml" />
- <tool file="fastq/fastq_trimmer.xml" />
- <tool file="fastq/fastq_manipulation.xml" />
- <tool file="fastq/fastq_to_fasta.xml" />
+ <tool file="fastq/fastq_combiner.xml" />
+ <tool file="fastq/fastq_groomer.xml" />
+ <tool file="fastq/fastq_paired_end_joiner.xml" />
+ <tool file="fastq/fastq_paired_end_splitter.xml" />
+ <tool file="fastq/fastq_stats.xml" />
+ <tool file="fastq/fastq_filter.xml" />
+ <tool file="fastq/fastq_trimmer.xml" />
+ <tool file="fastq/fastq_manipulation.xml" />
+ <tool file="fastq/fastq_to_fasta.xml" />
<label text="Deprecated: Generic FASTQ data" id="fastq" />
<tool file="next_gen_conversion/fastq_gen_conv.xml" />
<tool file="fastx_toolkit/fastq_quality_converter.xml" />
diff -r 25de793f99e5 -r 2b0e2519f7ac tools/plotting/boxplot.xml
--- a/tools/plotting/boxplot.xml Tue Feb 23 17:58:44 2010 -0500
+++ b/tools/plotting/boxplot.xml Tue Feb 23 19:54:54 2010 -0500
@@ -1,6 +1,9 @@
<tool id="qual_stats_boxplot" name="Boxplot" version="1.0.0">
<description>of quality statistics</description>
<command>gnuplot < '$gnuplot_commands' > '$output_file'</command>
+ <requirements>
+ <requirement type="binary">gnuplot</requirement>
+ </requirements>
<inputs>
<param name="input_file" type="data" format="tabular" label="Quality Statistics File"/>
<param name="title" type="text" value="Box plot in Galaxy" label="Title for plot" size="50"/>
1
0
details: http://www.bx.psu.edu/hg/galaxy/rev/25de793f99e5
changeset: 3430:25de793f99e5
user: Kanwei Li <kanwei(a)gmail.com>
date: Tue Feb 23 17:58:44 2010 -0500
description:
Refactor grid_base.mako and Fixes #285
diffstat:
templates/grid_base.mako | 1166 +++++++++++++++++++++------------------------
1 files changed, 546 insertions(+), 620 deletions(-)
diffs (1187 lines):
diff -r 9dd990a2fa94 -r 25de793f99e5 templates/grid_base.mako
--- a/templates/grid_base.mako Tue Feb 23 16:48:07 2010 -0500
+++ b/templates/grid_base.mako Tue Feb 23 17:58:44 2010 -0500
@@ -41,637 +41,563 @@
</%def>
<%def name="grid_javascripts()">
- ${h.js("jquery.autocomplete", "autocomplete_tagging" )}
- <script type="text/javascript">
- ## TODO: generalize and move into galaxy.base.js
- $(document).ready(function() {
- init_grid_elements();
- init_grid_controls();
-
- // Initalize filter elements.
- $('input[type=text]').each( function()
- {
- $(this).click( function() { $(this).attr('value', '') } );
- });
- });
- ## Can this be moved into base.mako?
- %if refresh_frames:
- %if 'masthead' in refresh_frames:
- ## Refresh masthead == user changes (backward compatibility)
- if ( parent.user_changed ) {
- %if trans.user:
- parent.user_changed( "${trans.user.email}", ${int( app.config.is_admin_user( trans.user ) )} );
- %else:
- parent.user_changed( null, false );
- %endif
- }
- %endif
- %if 'history' in refresh_frames:
- if ( parent.frames && parent.frames.galaxy_history ) {
- parent.frames.galaxy_history.location.href="${h.url_for( controller='root', action='history')}";
- if ( parent.force_right_panel ) {
- parent.force_right_panel( 'show' );
- }
- }
- %endif
- %if 'tools' in refresh_frames:
- if ( parent.frames && parent.frames.galaxy_tools ) {
- parent.frames.galaxy_tools.location.href="${h.url_for( controller='root', action='tool_menu')}";
- if ( parent.force_left_panel ) {
- parent.force_left_panel( 'show' );
- }
- }
- %endif
- %endif
-
- //
- // Code to handle grid operations: filtering, sorting, paging, and operations.
- //
-
- // Operations that are async (AJAX) compatible.
- var async_ops = new Object();
- %for operation in grid.operations:
- %if operation.async_compatible:
- async_ops['${operation.label.lower()}'] = "True";
- %endif
- %endfor
-
- // Initialize grid controls
- function init_grid_controls()
- {
-
- // Initialize operation buttons.
- $('input[name=operation]:submit').each(function() {
- $(this).click( function() {
- // Get operation name.
- var operation_name = $(this).attr("value");
-
- // For some reason, $('input[name=id]:checked').val() does not return all ids for checked boxes.
- // The code below performs this function.
- var item_ids = new Array()
- $('input[name=id]:checked').each(function() {
- item_ids[item_ids.length] = $(this).val();
- });
- do_operation(operation_name, item_ids);
- });
- });
-
- // Initialize submit image elements.
- $('.submit-image').each( function()
- {
- // On mousedown, add class to simulate click.
- $(this).mousedown( function() {
- $(this).addClass('gray-background');
- });
-
- // On mouseup, add class to simulate click.
- $(this).mouseup( function() {
- $(this).removeClass('gray-background');
- });
-
- });
-
- // Initialize sort links.
- $('.sort-link').each( function()
- {
- var sort_key = $(this).attr('sort_key');
- $(this).click( function() {
- set_sort_condition(sort_key);
- return false;
- });
-
- });
-
- // Initialize page links.
- $('.page-link > a').each( function()
- {
- var page_num = $(this).attr('page_num');
- $(this).click( function() {
- set_page(page_num);
- return false;
- });
-
- });
- $('#show-all-link').click( function() {
- set_page('all');
- return false;
- });
-
- // Initialize categorical filters.
- $('.categorical-filter > a').each( function()
- {
- $(this).click( function() {
- var filter_key = $(this).attr('filter_key');
- var filter_val = $(this).attr('filter_val');
- set_categorical_filter(filter_key, filter_val);
+ ${h.js("jquery.autocomplete", "autocomplete_tagging" )}
+ <script type="text/javascript">
+ ## TODO: generalize and move into galaxy.base.js
+ $(document).ready(function() {
+ init_grid_elements();
+ init_grid_controls();
+
+ // Initialize filter elements.
+ $('input[type=text]').each( function() {
+ $(this).click( function() { $(this).attr('value', ''); } );
+ });
+ });
+ ## Can this be moved into base.mako?
+ %if refresh_frames:
+ %if 'masthead' in refresh_frames:
+ ## Refresh masthead == user changes (backward compatibility)
+ if ( parent.user_changed ) {
+ %if trans.user:
+ parent.user_changed( "${trans.user.email}", ${int( app.config.is_admin_user( trans.user ) )} );
+ %else:
+ parent.user_changed( null, false );
+ %endif
+ }
+ %endif
+ %if 'history' in refresh_frames:
+ if ( parent.frames && parent.frames.galaxy_history ) {
+ parent.frames.galaxy_history.location.href="${h.url_for( controller='root', action='history')}";
+ if ( parent.force_right_panel ) {
+ parent.force_right_panel( 'show' );
+ }
+ }
+ %endif
+ %if 'tools' in refresh_frames:
+ if ( parent.frames && parent.frames.galaxy_tools ) {
+ parent.frames.galaxy_tools.location.href="${h.url_for( controller='root', action='tool_menu')}";
+ if ( parent.force_left_panel ) {
+ parent.force_left_panel( 'show' );
+ }
+ }
+ %endif
+ %endif
+
+ //
+ // Code to handle grid operations: filtering, sorting, paging, and operations.
+ //
+
+ // Operations that are async (AJAX) compatible.
+ var async_ops = {};
+ %for operation in grid.operations:
+ %if operation.async_compatible:
+ async_ops['${operation.label.lower()}'] = "True";
+ %endif
+ %endfor
+
+ // Initialize grid controls
+ function init_grid_controls() {
+ // Initialize operation buttons.
+ $('input[name=operation]:submit').each(function() {
+ $(this).click( function() {
+ // Get operation name.
+ var operation_name = $(this).attr("value");
+
+ // For some reason, $('input[name=id]:checked').val() does not return all ids for checked boxes.
+ // The code below performs this function.
+ var item_ids = [];
+ $('input[name=id]:checked').each(function() {
+ item_ids[item_ids.length] = $(this).val();
+ });
+ do_operation(operation_name, item_ids);
+ });
+ });
+
+ // Initialize submit image elements.
+ $('.submit-image').each( function() {
+ // On mousedown, add class to simulate click.
+ $(this).mousedown( function() {
+ $(this).addClass('gray-background');
+ });
+
+ // On mouseup, add class to simulate click.
+ $(this).mouseup( function() {
+ $(this).removeClass('gray-background');
+ });
+
+ });
+
+ // Initialize sort links.
+ $('.sort-link').each( function() {
+ var sort_key = $(this).attr('sort_key');
+ $(this).click( function() {
+ set_sort_condition(sort_key);
+ return false;
+ });
+
+ });
+
+ // Initialize page links.
+ $('.page-link > a').each( function() {
+ var page_num = $(this).attr('page_num');
+ $(this).click( function() {
+ set_page(page_num);
+ return false;
+ });
+
+ });
+ $('#show-all-link').click( function() {
+ set_page('all');
+ return false;
+ });
+
+ // Initialize categorical filters.
+ $('.categorical-filter > a').each( function() {
+ $(this).click( function() {
+ var filter_key = $(this).attr('filter_key');
+ var filter_val = $(this).attr('filter_val');
+ set_categorical_filter(filter_key, filter_val);
+ return false;
+ });
+ });
+
+ // Initialize text filters.
+ $('.text-filter-form').each( function() {
+ $(this).submit( function() {
+ var column_key = $(this).attr('column_key');
+ var text_input_obj = $('#input-' + column_key + '-filter');
+ var text_input = text_input_obj.val();
+ text_input_obj.val('');
+ add_filter_condition(column_key, text_input, true);
+ return false;
+ });
+ });
+
+ // Initialize autocomplete for text inputs in search UI.
+ var t = $("#input-tags-filter");
+ if (t.length) {
+ t.autocomplete( "${h.url_for( controller='tag', action='tag_autocomplete_data', item_class='History' )}",
+ { selectFirst: false, autoFill: false, highlight: false, mustMatch: false });
+ }
+
+ var t2 = $("#input-name-filter");
+ if (t2.length) {
+ t2.autocomplete( "${h.url_for( controller='history', action='name_autocomplete_data' )}",
+ { selectFirst: false, autoFill: false, highlight: false, mustMatch: false });
+ }
+
+ // Initialize advanced search toggles.
+ $('.advanced-search-toggle').each( function() {
+ $(this).click( function() {
+ $('#more-search-options').slideToggle('fast');
return false;
- });
- });
-
- // Initialize text filters.
- $('.text-filter-form').each( function()
- {
- $(this).submit( function() {
- var column_key = $(this).attr('column_key');
- var text_input_obj = $('#input-' + column_key + '-filter');
- var text_input = text_input_obj.val();
- text_input_obj.val('');
- add_filter_condition(column_key, text_input, true);
- return false;
- });
- });
-
- // Initialize autocomplete for text inputs in search UI.
- var t = $("#input-tags-filter");
- if (t.length)
- {
-
- var autocomplete_options =
- { selectFirst: false, autoFill: false, highlight: false, mustMatch: false };
-
- t.autocomplete("${h.url_for( controller='tag', action='tag_autocomplete_data', item_class='History' )}", autocomplete_options);
- }
-
- var t2 = $("#input-name-filter");
- if (t2.length)
- {
- var autocomplete_options =
- { selectFirst: false, autoFill: false, highlight: false, mustMatch: false };
-
- t2.autocomplete("${h.url_for( controller='history', action='name_autocomplete_data' )}", autocomplete_options);
- }
-
- // Initialize advanced search toggles.
- $('.advanced-search-toggle').each( function()
- {
- $(this).click( function() {
- $('#more-search-options').slideToggle('fast');
- return false;
- });
- });
- }
-
- // Initialize grid elements.
- function init_grid_elements()
- {
- // Initialize grid selection checkboxes.
- $(".grid").each( function() {
- var grid = this;
- var checkboxes = $(this).find("input.grid-row-select-checkbox");
- var update = $(this).find( "span.grid-selected-count" );
- update.text("");
- $(checkboxes).each( function() {
- $(this).change( function() {
- var n = $(checkboxes).filter("[checked]").size();
- update.text( n );
- });
- })
- });
-
- // Initialize item labels.
- $(".label").each( function() {
- // If href has an operation in it, do operation when clicked. Otherwise do nothing.
- var href = $(this).attr('href');
- if ( href.indexOf('operation=') != -1 )
- {
- $(this).click( function() {
- do_operation_from_href( $(this).attr('href') );
- return false;
- });
- }
- });
-
- // Initialize item menu operations.
- make_popup_menus();
- }
-
- // Filter values for categorical filters.
- var categorical_filters = new Object();
- %for column in grid.columns:
- %if column.filterable is not None and not isinstance( column, TextColumn ):
- var ${column.key}_filters =
- {
- %for i, filter in enumerate( column.get_accepted_filters() ):
- %if i > 0:
- ,
- %endif
- ${filter.label} : ${h.to_json_string( filter.args )}
- %endfor
- };
- categorical_filters['${column.key}'] = ${column.key}_filters;
- %endif
- %endfor
-
- // Initialize URL args with filter arguments.
- var url_args = ${h.to_json_string( cur_filter_dict )};
-
- // Place "f-" in front of all filter arguments.
- var arg;
- for (arg in url_args)
- {
- value = url_args[arg];
- delete url_args[arg];
- url_args["f-" + arg] = value;
- }
-
- // Add sort argument to URL args.
- url_args['sort'] = "${encoded_sort_key}";
-
- // Add async keyword to URL args.
- url_args['async'] = true;
-
- // Add page to URL args.
- url_args['page'] = ${cur_page_num};
-
- var num_pages = ${num_pages};
-
- // Go back to page one; this is useful when a filter is applied.
- function go_page_one()
- {
- // Need to go back to page 1 if not showing all.
- var cur_page = url_args['page'];
- if (cur_page != null && cur_page != undefined && cur_page != 'all')
- url_args['page'] = 1;
- }
-
- // Add tag to grid filter.
- function add_tag_to_grid_filter(tag_name, tag_value)
- {
- // Put tag name and value together.
- var tag = tag_name + (tag_value != null && tag_value != "" ? ":" + tag_value : "");
- $('#more-search-options').show('fast');
- add_filter_condition("tags", tag, true);
- }
-
- // Add a condition to the grid filter; this adds the condition and refreshes the grid.
- function add_filter_condition(name, value, append)
- {
- // Do nothing is value is empty.
- if (value == "")
- return false;
-
- // Update URL arg with new condition.
- if (append)
- {
- // Update or append value.
- var cur_val = url_args["f-" + name];
- var new_val;
- if (cur_val == null || cur_val == undefined)
- {
- new_val = value;
- }
- else if (typeof(cur_val) == "string")
- {
- if (cur_val == "All")
- new_val = value;
- else
- {
- // Replace string with array.
- var values = new Array();
- values[0] = cur_val;
- values[1] = value;
- new_val = values;
- }
- }
- else {
- // Current value is an array.
- new_val = cur_val;
- new_val[new_val.length] = value;
- }
- url_args["f-" + name] = new_val;
- }
- else
- {
- // Replace value.
- url_args["f-" + name] = value;
- }
-
- // Add button that displays filter and provides a button to delete it.
- var t = $("<span>" + value +
- " <a href='#'><img src='${h.url_for('/static/images/delete_tag_icon_gray.png')}'/></a></span>");
- t.addClass('text-filter-val');
- t.click(function() {
- // Remove filter condition.
-
- // Remove visible element.
- $(this).remove();
-
- // Remove condition from URL args.
- var cur_val = url_args["f-" + name];
- if (cur_val == null || cur_val == undefined)
- {
- // Unexpected. Throw error?
- }
- else if (typeof(cur_val) == "string")
- {
- if (cur_val == "All")
- {
- // Unexpected. Throw error?
- }
- else
- // Remove condition.
- delete url_args["f-" + name];
- }
- else {
- // Current value is an array.
- var conditions = cur_val;
- var index;
- for (index = 0; index < conditions.length; index++)
- if (conditions[index] == value)
- {
- conditions.splice(index, 1);
- break;
- }
- }
-
- go_page_one();
- update_grid();
- });
-
- var container = $('#' + name + "-filtering-criteria");
- container.append(t);
-
- go_page_one();
- update_grid();
- }
-
- // Set sort condition for grid.
- function set_sort_condition(col_key)
- {
- // Set new sort condition. New sort is col_key if sorting new column; if reversing sort on
- // currently sorted column, sort is reversed.
- var cur_sort = url_args['sort'];
- var new_sort = col_key;
- if ( cur_sort.indexOf( col_key ) != -1)
- {
- // Reverse sort.
- if ( cur_sort.substring(0,1) != '-' )
- new_sort = '-' + col_key;
- else
- {
- // Sort reversed by using just col_key.
- }
- }
-
- // Remove sort arrows elements.
- $('.sort-arrow').remove()
-
- // Add sort arrow element to new sort column.
- var sort_arrow = "↑";
- if (new_sort.substring(0,1) != '-')
- sort_arrow = "↓";
- var t = $("<span>" + sort_arrow + "</span>").addClass('sort-arrow');
- var th = $("#" + col_key + '-header');
- th.append(t);
-
- // Need to go back to page 1 if not showing all.
- var cur_page = url_args['page'];
- if (cur_page != null && cur_page != undefined && cur_page != 'all')
- url_args['page'] = 1;
-
- // Update grid.
- url_args['sort'] = new_sort;
- go_page_one();
- update_grid();
- }
-
- // Set new value for categorical filter.
- function set_categorical_filter(name, new_value)
- {
- // Update filter hyperlinks to reflect new filter value.
- var category_filter = categorical_filters[name];
- var cur_value = url_args["f-" + name];
- $("." + name + "-filter").each( function() {
- var text = $.trim( $(this).text() );
- var filter = category_filter[text];
- var filter_value = filter[name];
- if (filter_value == new_value)
- {
- // Remove filter link since grid will be using this filter. It is assumed that
+ });
+ });
+ }
+
+ // Initialize grid elements.
+ function init_grid_elements() {
+ // Initialize grid selection checkboxes.
+ $(".grid").each( function() {
+ var checkboxes = $(this).find("input.grid-row-select-checkbox");
+ var update = $(this).find( "span.grid-selected-count" );
+ update.text("");
+ $(checkboxes).each( function() {
+ $(this).change( function() {
+ var n = $(checkboxes).filter("[checked]").size();
+ update.text( n );
+ });
+ });
+ });
+
+ // Initialize item labels.
+ $(".label").each( function() {
+ // If href has an operation in it, do operation when clicked. Otherwise do nothing.
+ var href = $(this).attr('href');
+ if ( href.indexOf('operation=') != -1 ) {
+ $(this).click( function() {
+ do_operation_from_href( $(this).attr('href') );
+ return false;
+ });
+ }
+ });
+
+ // Initialize item menu operations.
+ make_popup_menus();
+ }
+
+ // Filter values for categorical filters.
+ var categorical_filters = {};
+ %for column in grid.columns:
+ %if column.filterable is not None and not isinstance( column, TextColumn ):
+ var ${column.key}_filters = ${ h.to_json_string( dict([ (filter.label, filter.args) for filter in column.get_accepted_filters() ]) ) };
+ categorical_filters['${column.key}'] = ${column.key}_filters;
+ %endif
+ %endfor
+
+ // Initialize URL args with filter arguments.
+ var url_args = ${h.to_json_string( cur_filter_dict )};
+
+ // Place "f-" in front of all filter arguments.
+ $.map(url_args, function(arg) {
+ return "f-" + arg;
+ });
+
+ // Add sort argument to URL args.
+ url_args['sort'] = "${encoded_sort_key}";
+
+ // Add async keyword to URL args.
+ url_args['async'] = true;
+
+ // Add page to URL args.
+ url_args['page'] = ${cur_page_num};
+
+ var num_pages = ${num_pages};
+
+ // Go back to page one; this is useful when a filter is applied.
+ function go_page_one() {
+ // Need to go back to page 1 if not showing all.
+ var cur_page = url_args['page'];
+ if (cur_page !== null && cur_page !== undefined && cur_page != 'all') {
+ url_args['page'] = 1;
+ }
+ }
+
+ // Add a condition to the grid filter; this adds the condition and refreshes the grid.
+ function add_filter_condition(name, value, append) {
+ // Do nothing is value is empty.
+ if (value == "") {
+ return false;
+ }
+
+ // Update URL arg with new condition.
+ if (append) {
+ // Update or append value.
+ var cur_val = url_args["f-" + name];
+ var new_val;
+ if (cur_val === null || cur_val === undefined) {
+ new_val = value;
+ } else if (typeof(cur_val) == "string") {
+ if (cur_val == "All") {
+ new_val = value;
+ } else {
+ // Replace string with array.
+ var values = [];
+ values[0] = cur_val;
+ values[1] = value;
+ new_val = values;
+ }
+ } else {
+ // Current value is an array.
+ new_val = cur_val;
+ new_val[new_val.length] = value;
+ }
+ url_args["f-" + name] = new_val;
+ } else {
+ // Replace value.
+ url_args["f-" + name] = value;
+ }
+
+ // Add button that displays filter and provides a button to delete it.
+ var t = $("<span>" + value +
+ " <a href='#'><img src='${h.url_for('/static/images/delete_tag_icon_gray.png')}'/></a></span>");
+ t.addClass('text-filter-val');
+ t.click(function() {
+ // Remove filter condition.
+
+ // Remove visible element.
+ $(this).remove();
+
+ // Remove condition from URL args.
+ var cur_val = url_args["f-" + name];
+ if (cur_val === null || cur_val === undefined) {
+ // Unexpected. Throw error?
+ } else if (typeof(cur_val) == "string") {
+ if (cur_val == "All") {
+ // Unexpected. Throw error?
+ } else {
+ // Remove condition.
+ delete url_args["f-" + name];
+ }
+ } else {
+ // Current value is an array.
+ var conditions = cur_val;
+ for (var index = 0; index < conditions.length; index++) {
+ if (conditions[index] == value) {
+ conditions.splice(index, 1);
+ break;
+ }
+ }
+ }
+
+ go_page_one();
+ update_grid();
+ });
+
+ var container = $('#' + name + "-filtering-criteria");
+ container.append(t);
+
+ go_page_one();
+ update_grid();
+ }
+
+ // Add tag to grid filter.
+ function add_tag_to_grid_filter(tag_name, tag_value) {
+ // Put tag name and value together.
+ var tag = tag_name + (tag_value !== null && tag_value != "" ? ":" + tag_value : "");
+ $('#more-search-options').show('fast');
+ add_filter_condition("tags", tag, true);
+ }
+
+ // Set sort condition for grid.
+ function set_sort_condition(col_key) {
+ // Set new sort condition. New sort is col_key if sorting new column; if reversing sort on
+ // currently sorted column, sort is reversed.
+ var cur_sort = url_args['sort'];
+ var new_sort = col_key;
+ if ( cur_sort.indexOf( col_key ) != -1) {
+ // Reverse sort.
+ if ( cur_sort.substring(0,1) != '-' ) {
+ new_sort = '-' + col_key;
+ } else {
+ // Sort reversed by using just col_key.
+ }
+ }
+
+ // Remove sort arrows elements.
+ $('.sort-arrow').remove();
+
+ // Add sort arrow element to new sort column.
+ var sort_arrow = (new_sort.substring(0,1) == '-') ? "↑" : "↓";
+ var t = $("<span>" + sort_arrow + "</span>").addClass('sort-arrow');
+ var th = $("#" + col_key + '-header');
+ th.append(t);
+
+ // Need to go back to page 1 if not showing all.
+ var cur_page = url_args['page'];
+ if (cur_page !== null && cur_page !== undefined && cur_page != 'all') {
+ url_args['page'] = 1;
+ }
+ // Update grid.
+ url_args['sort'] = new_sort;
+ go_page_one();
+ update_grid();
+ }
+
+ // Set new value for categorical filter.
+ function set_categorical_filter(name, new_value) {
+ // Update filter hyperlinks to reflect new filter value.
+ var category_filter = categorical_filters[name];
+ var cur_value = url_args["f-" + name];
+ $("." + name + "-filter").each( function() {
+ var text = $.trim( $(this).text() );
+ var filter = category_filter[text];
+ var filter_value = filter[name];
+ if (filter_value == new_value) {
+ // Remove filter link since grid will be using this filter. It is assumed that
+ // this element has a single child, a hyperlink/anchor with text.
+ $(this).empty();
+ $(this).addClass("current-filter");
+ $(this).append(text);
+ } else if (filter_value == cur_value) {
+ // Add hyperlink for this filter since grid will no longer be using this filter. It is assumed that
+ // this element has a single child, a hyperlink/anchor.
+ $(this).empty();
+ var t = $("<a href='#'>" + text + "</a>");
+ t.click(function() {
+ set_categorical_filter( name, filter_value );
+ });
+ $(this).removeClass("current-filter");
+ $(this).append(t);
+ }
+ });
+
+ // Update grid.
+ url_args["f-" + name] = new_value;
+ go_page_one();
+ update_grid();
+ }
+
+ // Set page to view.
+ function set_page(new_page) {
+ // Update page hyperlink to reflect new page.
+ $(".page-link").each( function() {
+ var id = $(this).attr('id');
+ var page_num = parseInt( id.split("-")[2] ); // Id has form 'page-link-<page_num>
+ var cur_page = url_args['page'];
+ if (page_num == new_page) {
+ // Remove link to page since grid will be on this page. It is assumed that
// this element has a single child, a hyperlink/anchor with text.
+ var text = $(this).children().text();
$(this).empty();
- $(this).addClass("current-filter");
- $(this).append(text);
- }
- else if (filter_value == cur_value)
- {
- // Add hyperlink for this filter since grid will no longer be using this filter. It is assumed that
+ $(this).addClass("inactive-link");
+ $(this).text(text);
+ } else if (page_num == cur_page) {
+ // Add hyperlink to this page since grid will no longer be on this page. It is assumed that
// this element has a single child, a hyperlink/anchor.
+ var text = $(this).text();
$(this).empty();
+ $(this).removeClass("inactive-link");
var t = $("<a href='#'>" + text + "</a>");
t.click(function() {
- set_categorical_filter( name, filter_value );
+ set_page(page_num);
});
- $(this).removeClass("current-filter");
$(this).append(t);
}
- });
-
- // Update grid.
- url_args["f-" + name] = new_value;
- go_page_one();
- update_grid();
- }
-
- // Set page to view.
- function set_page(new_page)
- {
- // Update page hyperlink to reflect new page.
- $(".page-link").each( function() {
- var id = $(this).attr('id');
- var page_num = parseInt( id.split("-")[2] ); // Id has form 'page-link-<page_num>
- var cur_page = url_args['page'];
- if (page_num == new_page)
- {
- // Remove link to page since grid will be on this page. It is assumed that
- // this element has a single child, a hyperlink/anchor with text.
- var text = $(this).children().text();
- $(this).empty();
- $(this).addClass("inactive-link");
- $(this).text(text);
- }
- else if (page_num == cur_page)
- {
- // Add hyperlink to this page since grid will no longer be on this page. It is assumed that
- // this element has a single child, a hyperlink/anchor.
- var text = $(this).text();
- $(this).empty();
- $(this).removeClass("inactive-link");
- var t = $("<a href='#'>" + text + "</a>");
- t.click(function() {
- set_page(page_num);
- });
- $(this).append(t);
- }
- });
-
- var maintain_page_links = true;
- if (new_page == "all")
- {
- url_args['page'] = new_page;
- maintain_page_links = false;
- }
- else
- url_args['page'] = parseInt(new_page);
- update_grid(maintain_page_links);
- }
-
- // Perform a grid operation.
- function do_operation(operation, item_ids)
- {
- operation = operation.toLowerCase();
-
- // Update URL args.
- url_args['operation'] = operation;
- url_args['id'] = item_ids;
-
- // If operation cannot be performed asynchronously, redirect to location. Otherwise do operation.
- var no_async = ( async_ops[operation] == undefined || async_ops[operation] == null);
- if (no_async)
- {
- go_to_URL();
- }
- else
- {
- update_grid(true);
- delete url_args['operation'];
- delete url_args['id'];
- }
- }
-
- // Perform a hyperlink click that initiates an operation. If there is no operation, ignore click.
- function do_operation_from_href(href)
- {
- // Get operation, id in hyperlink's href.
- var href_parts = href.split("?");
- if (href_parts.length > 1)
- {
- var href_parms_str = href_parts[1];
- var href_parms = href_parms_str.split("&");
- var operation = null;
- var id = -1;
- for (var index = 0; index < href_parms.length; index++)
- {
- if (href_parms[index].indexOf('operation') != -1)
- {
- // Found operation parm; get operation value.
- operation = href_parms[index].split('=')[1];
- }
- else if (href_parms[index].indexOf('id') != -1)
- {
- // Found id parm; get id value.
- id = href_parms[index].split('=')[1];
- }
- }
-
- // Do operation.
- do_operation(operation, id);
- return false;
- }
-
- }
-
- // Navigate window to the URL defined by url_args. This method should be used to short-circuit grid AJAXing.
- function go_to_URL()
- {
- // Not async request.
- url_args['async'] = false;
-
- // Build argument string.
- var arg_str = "";
- var arg;
- for (arg in url_args)
- arg_str = arg_str + arg + "=" + url_args[arg] + "&";
-
- // Go.
- window.location = encodeURI( "${h.url_for()}?" + arg_str );
- }
-
- // Update grid.
- function update_grid(maintain_page_links)
- {
- ## If grid is not using async, then go to URL.
- %if not grid.use_async:
+ });
+
+ var maintain_page_links = true;
+ if (new_page == "all") {
+ url_args['page'] = new_page;
+ maintain_page_links = false;
+ } else {
+ url_args['page'] = parseInt(new_page);
+ }
+ update_grid(maintain_page_links);
+ }
+
+ // Perform a grid operation.
+ function do_operation(operation, item_ids) {
+ operation = operation.toLowerCase();
+
+ // Update URL args.
+ url_args['operation'] = operation;
+ url_args['id'] = item_ids;
+
+ // If operation cannot be performed asynchronously, redirect to location. Otherwise do operation.
+ var no_async = ( async_ops[operation] === undefined || async_ops[operation] === null);
+ if (no_async) {
go_to_URL();
- return;
- %endif
-
- // If there's an operation in the args, do POST; otherwise, do GET.
- var operation = url_args['operation'];
- var method = (operation != null && operation != undefined ? "POST" : "GET" );
- $('.loading-elt-overlay').show(); // Show overlay to indicate loading and prevent user actions.
- $.ajax({
- type: method,
- url: "${h.url_for()}",
- data: url_args,
- error: function() { alert( "Grid refresh failed" ) },
- success: function(response_text) {
- // HACK: use a simple string to separate the elements in the
- // response: (1) table body; (2) number of pages in table; and (3) message.
- var parsed_response_text = response_text.split("*****");
-
- // Update grid body.
- var table_body = parsed_response_text[0];
- $('#grid-table-body').html(table_body);
-
- // Process grid body.
- init_grid_elements();
- make_popup_menus();
-
- // Update number of pages.
- var num_pages = parseInt( parsed_response_text[1] );
-
- // Rebuild page links.
- if (!maintain_page_links)
- {
- // Remove page links.
- var page_link_container = $('#page-link-container');
- page_link_container.children().remove();
-
- // First page is the current page.
- var t = $("<span>1</span>");
- t.addClass('page-link');
- t.addClass('inactive-link');
- t.attr('id', 'page-link-1');
- page_link_container.append(t);
-
- // Show all link is visible only if there are multiple pages.
- var elt = $('#show-all-link-span');
- if (num_pages > 1)
- elt.show();
- else
- elt.hide();
-
- // Subsequent pages are navigable.
- for (var i = 2; i <= num_pages; i++)
- {
- var span = $("<span></span>");
- span.addClass('page-link');
- span.attr('id', 'page-link-' + i);
- var t = $("<a href='#'>" + i + "</a>");
- t.attr('page', i);
- t.click(function() {
- var page = $(this).attr('page');
- set_page(page);
- });
- span.append(t)
- page_link_container.append(span);
- }
- }
-
- // Hide loading overlay.
- $('.loading-elt-overlay').hide();
-
- // Show message if there is one.
- var message = $.trim( parsed_response_text[2] );
- if (message != "")
- {
- $('#grid-message').html( message );
- setTimeout("$('#grid-message').hide()", 5000);
- }
- }
- });
- }
+ } else {
+ update_grid(true);
+ delete url_args['operation'];
+ delete url_args['id'];
+ }
+ }
+
+ // Perform a hyperlink click that initiates an operation. If there is no operation, ignore click.
+ function do_operation_from_href(href) {
+ // Get operation, id in hyperlink's href.
+ var href_parts = href.split("?");
+ if (href_parts.length > 1) {
+ var href_parms_str = href_parts[1];
+ var href_parms = href_parms_str.split("&");
+ var operation = null;
+ var id = -1;
+ for (var index = 0; index < href_parms.length; index++) {
+ if (href_parms[index].indexOf('operation') != -1) {
+ // Found operation parm; get operation value.
+ operation = href_parms[index].split('=')[1];
+ } else if (href_parms[index].indexOf('id') != -1) {
+ // Found id parm; get id value.
+ id = href_parms[index].split('=')[1];
+ }
+ }
+
+ // Do operation.
+ do_operation(operation, id);
+ return false;
+ }
+
+ }
+
+ // Navigate window to the URL defined by url_args. This method should be used to short-circuit grid AJAXing.
+ function go_to_URL() {
+ // Not async request.
+ url_args['async'] = false;
+
+ // Build argument string.
+ var arg_str = "";
+ for (var arg in url_args) {
+ arg_str = arg_str + arg + "=" + url_args[arg] + "&";
+ }
+
+ // Go.
+ window.location = encodeURI( "${h.url_for()}?" + arg_str );
+ }
+
+ // Update grid.
+ function update_grid(maintain_page_links) {
+ ## If grid is not using async, then go to URL.
+ %if not grid.use_async:
+ go_to_URL();
+ return;
+ %endif
+
+ // If there's an operation in the args, do POST; otherwise, do GET.
+ var operation = url_args['operation'];
+ var method = (operation !== null && operation !== undefined ? "POST" : "GET" );
+ $('.loading-elt-overlay').show(); // Show overlay to indicate loading and prevent user actions.
+ $.ajax({
+ type: method,
+ url: "${h.url_for()}",
+ data: url_args,
+ error: function() { alert( "Grid refresh failed" ); },
+ success: function(response_text) {
+ // HACK: use a simple string to separate the elements in the
+ // response: (1) table body; (2) number of pages in table; and (3) message.
+ var parsed_response_text = response_text.split("*****");
+
+ // Update grid body.
+ var table_body = parsed_response_text[0];
+ $('#grid-table-body').html(table_body);
+
+ // Process grid body.
+ init_grid_elements();
+ make_popup_menus();
+
+ // Update number of pages.
+ var num_pages = parseInt( parsed_response_text[1] );
+
+ // Rebuild page links.
+ if (!maintain_page_links) {
+ // Remove page links.
+ var page_link_container = $('#page-link-container');
+ page_link_container.children().remove();
+
+ // First page is the current page.
+ var t = $("<span>1</span>");
+ t.addClass('page-link');
+ t.addClass('inactive-link');
+ t.attr('id', 'page-link-1');
+ page_link_container.append(t);
+
+ // Show all link is visible only if there are multiple pages.
+ var elt = $('#show-all-link-span');
+ if (num_pages > 1) {
+ elt.show();
+ } else {
+ elt.hide();
+ }
+
+ // Subsequent pages are navigable.
+ for (var i = 2; i <= num_pages; i++) {
+ var span = $("<span></span>");
+ span.addClass('page-link');
+ span.attr('id', 'page-link-' + i);
+ var t = $("<a href='#'>" + i + "</a>");
+ t.attr('page', i);
+ t.click(function() {
+ var page = $(this).attr('page');
+ set_page(page);
+ });
+ span.append(t);
+ page_link_container.append(span);
+ }
+ }
+
+ // Hide loading overlay.
+ $('.loading-elt-overlay').hide();
+
+ // Show message if there is one.
+ var message = $.trim( parsed_response_text[2] );
+ if (message != "") {
+ $('#grid-message').html( message );
+ setTimeout( function() { $('#grid-message').hide(); }, 5000);
+ }
+ }
+ });
+ }
</script>
</%def>
1
0
24 Feb '10
details: http://www.bx.psu.edu/hg/galaxy/rev/9dd990a2fa94
changeset: 3429:9dd990a2fa94
user: Dan Blankenberg <dan(a)bx.psu.edu>
date: Tue Feb 23 16:48:07 2010 -0500
description:
Add a new FASTQ tool suite. Four FASTQ variants are supported: sanger, illumina, solexa and solid.
Tools include:
FASTQ Groomer convert between various FASTQ quality formats
Combine FASTA and QUAL into FASTQ
FASTQ joiner on paired end reads
FASTQ splitter on joined paired end reads
FASTQ to FASTA converter
FASTQ Summary Statistics by column
Filter FASTQ reads by quality score and length
FASTQ Trimmer by column
Manipulate FASTQ reads on various attributes
Boxplot of quality statistics (Generic, with outliers)
diffstat:
datatypes_conf.xml.sample | 7 +-
lib/galaxy/datatypes/converters/interval_to_bedstrict_converter.py | 2 +-
lib/galaxy/datatypes/qualityscore.py | 19 +-
lib/galaxy/datatypes/sequence.py | 12 +
lib/galaxy_utils/sequence/fastq.py | 702 ++++++++++
lib/galaxy_utils/sequence/sequence.py | 61 +
lib/galaxy_utils/sequence/transform.py | 74 +
test-data/3.fastqsanger | 1 -
test-data/boxplot_summary_statistics_out.png | 0
test-data/combine_phiX_out_1.fastqsolid | 576 ++++++++
test-data/combine_phiX_out_2.fastqsolid | 576 ++++++++
test-data/fastq_combiner_in_1.fasta | 14 +
test-data/fastq_combiner_in_1.qual454 | 22 +
test-data/fastq_stats_1_out.tabular | 37 +
test-data/fastq_to_fasta_python_1.out | 4 +
test-data/fastq_to_fasta_python_2.out | 4 +
test-data/fastq_trimmer_out1.fastqsanger | 8 +
test-data/illumina_full_range_as_sanger.fastqsanger | 8 +
test-data/illumina_full_range_as_solexa.fastqsolexa | 8 +
test-data/illumina_full_range_as_solid.fastqsolid | 8 +
test-data/illumina_full_range_original_illumina.fastqillumina | 8 +
test-data/sanger_full_range_as_decimal_sanger.fastqsanger | 8 +
test-data/sanger_full_range_as_illumina.fastqillumina | 8 +
test-data/sanger_full_range_as_rna.fastqsanger | 8 +
test-data/sanger_full_range_as_solexa.fastqsolexa | 8 +
test-data/sanger_full_range_as_solid.fastqsolid | 8 +
test-data/sanger_full_range_original_sanger.fastqsanger | 8 +
test-data/sanger_full_range_rev_comp.fastqsanger | 8 +
test-data/sanger_full_range_rev_comp_1_seq.fastqsanger | 8 +
test-data/solexa_full_range_as_decimal_solexa.fastqsolexa | 8 +
test-data/solexa_full_range_as_illumina.fastqillumina | 8 +
test-data/solexa_full_range_as_sanger.fastqsanger | 8 +
test-data/solexa_full_range_as_solid.fastqsolid | 8 +
test-data/solexa_full_range_original_solexa.fastqsolexa | 8 +
test-data/split_pair_reads_1.fastqsanger | 20 +
test-data/split_pair_reads_2.fastqsanger | 20 +
test-data/split_paired_reads_out_1.fastqsanger | 20 -
test-data/split_paired_reads_out_2.fastqsanger | 20 -
test-data/wrapping_as_illumina.fastqillumina | 12 +
test-data/wrapping_as_sanger.fastqsanger | 12 +
test-data/wrapping_as_sanger_decimal.fastqsanger | 12 +
test-data/wrapping_as_solexa.fastqsolexa | 12 +
test-data/wrapping_original_sanger.fastqsanger | 24 +
tool_conf.xml.sample | 13 +-
tools/fastq/fastq_combiner.py | 45 +
tools/fastq/fastq_combiner.xml | 55 +
tools/fastq/fastq_filter.py | 34 +
tools/fastq/fastq_filter.xml | 311 ++++
tools/fastq/fastq_groomer.py | 37 +
tools/fastq/fastq_groomer.xml | 349 ++++
tools/fastq/fastq_manipulation.py | 37 +
tools/fastq/fastq_manipulation.xml | 386 +++++
tools/fastq/fastq_paired_end_joiner.py | 38 +
tools/fastq/fastq_paired_end_joiner.xml | 55 +
tools/fastq/fastq_paired_end_splitter.py | 33 +
tools/fastq/fastq_paired_end_splitter.xml | 56 +
tools/fastq/fastq_stats.py | 48 +
tools/fastq/fastq_stats.xml | 72 +
tools/fastq/fastq_to_fasta.py | 21 +
tools/fastq/fastq_to_fasta.xml | 33 +
tools/fastq/fastq_trimmer.py | 41 +
tools/fastq/fastq_trimmer.xml | 113 +
tools/metag_tools/split_paired_reads.xml | 4 +-
tools/plotting/boxplot.xml | 72 +
64 files changed, 4210 insertions(+), 50 deletions(-)
diffs (truncated from 4591 to 3000 lines):
diff -r 03dbef081cf2 -r 9dd990a2fa94 datatypes_conf.xml.sample
--- a/datatypes_conf.xml.sample Tue Feb 23 16:12:20 2010 -0500
+++ b/datatypes_conf.xml.sample Tue Feb 23 16:48:07 2010 -0500
@@ -1,6 +1,6 @@
<?xml version="1.0"?>
<datatypes>
- <registration converters_path="lib/galaxy/datatypes/converters">
+ <registration converters_path="lib/galaxy/datatypes/converters" display_path="display_applications">
<datatype extension="ab1" type="galaxy.datatypes.binary:Ab1" mimetype="application/octet-stream" display_in_upload="true"/>
<datatype extension="axt" type="galaxy.datatypes.sequence:Axt" display_in_upload="true"/>
<datatype extension="bam" type="galaxy.datatypes.binary:Bam" mimetype="application/octet-stream" display_in_upload="true">
@@ -34,6 +34,9 @@
</datatype>
<datatype extension="fastq" type="galaxy.datatypes.sequence:Fastq" display_in_upload="true"/>
<datatype extension="fastqsanger" type="galaxy.datatypes.sequence:FastqSanger" display_in_upload="true"/>
+ <datatype extension="fastqsolexa" type="galaxy.datatypes.sequence:FastqSolexa" display_in_upload="true"/>
+ <datatype extension="fastqsolid" type="galaxy.datatypes.sequence:FastqSolid" display_in_upload="true"/>
+ <datatype extension="fastqillumina" type="galaxy.datatypes.sequence:FastqIllumina" display_in_upload="true"/>
<datatype extension="genetrack" type="galaxy.datatypes.tracks:GeneTrack">
<!-- <display file="genetrack.xml" /> -->
</datatype>
@@ -60,7 +63,9 @@
</datatype>
<datatype extension="pdf" type="galaxy.datatypes.images:Image" mimetype="application/pdf"/>
<datatype extension="png" type="galaxy.datatypes.images:Image" mimetype="image/png"/>
+ <datatype extension="qual" type="galaxy.datatypes.qualityscore:QualityScore" />
<datatype extension="qualsolexa" type="galaxy.datatypes.qualityscore:QualityScoreSolexa" display_in_upload="true"/>
+ <datatype extension="qualillumina" type="galaxy.datatypes.qualityscore:QualityScoreIllumina" display_in_upload="true"/>
<datatype extension="qualsolid" type="galaxy.datatypes.qualityscore:QualityScoreSOLiD" display_in_upload="true"/>
<datatype extension="qual454" type="galaxy.datatypes.qualityscore:QualityScore454" display_in_upload="true"/>
<datatype extension="sam" type="galaxy.datatypes.tabular:Sam" display_in_upload="true"/>
diff -r 03dbef081cf2 -r 9dd990a2fa94 lib/galaxy/datatypes/converters/interval_to_bedstrict_converter.py
--- a/lib/galaxy/datatypes/converters/interval_to_bedstrict_converter.py Tue Feb 23 16:12:20 2010 -0500
+++ b/lib/galaxy/datatypes/converters/interval_to_bedstrict_converter.py Tue Feb 23 16:48:07 2010 -0500
@@ -47,7 +47,7 @@
#does file already conform to bed strict?
#if so, we want to keep extended columns, otherwise we'll create a generic 6 column bed file
strict_bed = True
- if extension == 'bed' and ( chromCol, startCol, endCol, nameCol, strandCol ) == ( 0, 1, 2, 3, 5 ):
+ if extension in [ 'bed', 'bedstrict' ] and ( chromCol, startCol, endCol, nameCol, strandCol ) == ( 0, 1, 2, 3, 5 ):
for count, line in enumerate( open( input_name ) ):
line = line.strip()
if line == "" or line.startswith("#"):
diff -r 03dbef081cf2 -r 9dd990a2fa94 lib/galaxy/datatypes/qualityscore.py
--- a/lib/galaxy/datatypes/qualityscore.py Tue Feb 23 16:12:20 2010 -0500
+++ b/lib/galaxy/datatypes/qualityscore.py Tue Feb 23 16:48:07 2010 -0500
@@ -9,7 +9,13 @@
log = logging.getLogger(__name__)
-class QualityScoreSOLiD ( data.Text ):
+class QualityScore ( data.Text ):
+ """
+ until we know more about quality score formats
+ """
+ file_ext = "qual"
+
+class QualityScoreSOLiD ( QualityScore ):
"""
until we know more about quality score formats
"""
@@ -58,7 +64,7 @@
pass
return False
-class QualityScore454 ( data.Text ):
+class QualityScore454 ( QualityScore ):
"""
until we know more about quality score formats
"""
@@ -97,9 +103,14 @@
pass
return False
-class QualityScoreSolexa ( data.Text ):
+class QualityScoreSolexa ( QualityScore ):
"""
until we know more about quality score formats
"""
file_ext = "qualsolexa"
-
\ No newline at end of file
+
+class QualityScoreIllumina ( QualityScore ):
+ """
+ until we know more about quality score formats
+ """
+ file_ext = "qualillumina"
diff -r 03dbef081cf2 -r 9dd990a2fa94 lib/galaxy/datatypes/sequence.py
--- a/lib/galaxy/datatypes/sequence.py Tue Feb 23 16:12:20 2010 -0500
+++ b/lib/galaxy/datatypes/sequence.py Tue Feb 23 16:48:07 2010 -0500
@@ -216,6 +216,18 @@
"""Class representing a FASTQ sequence ( the Sanger variant )"""
file_ext = "fastqsanger"
+class FastqSolexa( Fastq ):
+ """Class representing a FASTQ sequence ( the Solexa variant )"""
+ file_ext = "fastqsolexa"
+
+class FastqIllumina( Fastq ):
+ """Class representing a FASTQ sequence ( the Illumina 1.3+ variant )"""
+ file_ext = "fastqillumina"
+
+class FastqSolid( Fastq ):
+ """Class representing a FASTQ sequence ( the SOLiD (color space) variant )"""
+ file_ext = "fastqsolid"
+
try:
from galaxy import eggs
import pkg_resources; pkg_resources.require( "bx-python" )
diff -r 03dbef081cf2 -r 9dd990a2fa94 lib/galaxy_utils/sequence/fastq.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/galaxy_utils/sequence/fastq.py Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,702 @@
+#Dan Blankenberg
+import math
+import string
+import transform
+from sequence import SequencingRead
+
+class fastqSequencingRead( SequencingRead ):
+ format = 'sanger' #sanger is default
+ ascii_min = 33
+ ascii_max = 126
+ quality_min = 0
+ quality_max = 93
+ score_system = 'phred' #phred or solexa
+ sequence_space = 'base' #base or color
+ @classmethod
+ def get_class_by_format( cls, format ):
+ assert format in FASTQ_FORMATS, 'Unknown format type specified: %s' % format
+ return FASTQ_FORMATS[ format ]
+ @classmethod
+ def convert_score_phred_to_solexa( cls, decimal_score_list ):
+ def phred_to_solexa( score ):
+ if score <= 0: #can't take log10( 1 - 1 ); make <= 0 into -5
+ return -5
+ return int( round( 10.0 * math.log10( math.pow( 10.0, ( float( score ) / 10.0 ) ) - 1.0 ) ) )
+ return map( phred_to_solexa, decimal_score_list )
+ @classmethod
+ def convert_score_solexa_to_phred( cls, decimal_score_list ):
+ def solexa_to_phred( score ):
+ return int( round( 10.0 * math.log10( math.pow( 10.0, ( float( score ) / 10.0 ) ) + 1.0 ) ) )
+ return map( solexa_to_phred, decimal_score_list )
+ @classmethod
+ def restrict_scores_to_valid_range( cls, decimal_score_list ):
+ def restrict_score( score ):
+ return max( min( score, cls.quality_max ), cls.quality_min )
+ return map( restrict_score, decimal_score_list )
+ @classmethod
+ def convert_base_to_color_space( cls, sequence ):
+ return cls.color_space_converter.to_color_space( sequence )
+ @classmethod
+ def convert_color_to_base_space( cls, sequence ):
+ return cls.color_space_converter.to_base_space( sequence )
+ def is_ascii_encoded( self ):
+ return ' ' not in self.quality #as per fastq definition only decimal quality strings can have spaces in them (and must have a trailing space)
+ def get_ascii_quality_scores( self ):
+ if self.is_ascii_encoded():
+ return list( self.quality )
+ else:
+ quality = self.quality.rstrip() #decimal scores should have a trailing space
+ if quality:
+ try:
+ return [ chr( int( val ) + self.ascii_min - self.quality_min ) for val in quality.split( ' ' ) ]
+ except ValueError, e:
+ raise ValueError( 'Error Parsing quality String. ASCII quality strings cannot contain spaces (%s): %s' % ( self.quality, e ) )
+ else:
+ return []
+ def get_decimal_quality_scores( self ):
+ if self.is_ascii_encoded():
+ return [ ord( val ) - self.ascii_min + self.quality_min for val in self.quality ]
+ else:
+ quality = self.quality.rstrip() #decimal scores should have a trailing space
+ if quality:
+ return map( int, quality.split( ' ' ) )
+ else:
+ return []
+ def convert_read_to_format( self, format, force_quality_encoding = None ):
+ assert format in FASTQ_FORMATS, 'Unknown format type specified: %s' % format
+ assert force_quality_encoding in [ None, 'ascii', 'decimal' ], 'Invalid force_quality_encoding: %s' % force_quality_encoding
+ new_class = FASTQ_FORMATS[ format ]
+ new_read = new_class()
+ new_read.identifier = self.identifier
+ if self.sequence_space == new_class.sequence_space:
+ new_read.sequence = self.sequence
+ else:
+ if self.sequence_space == 'base':
+ new_read.sequence = self.convert_base_to_color_space( self.sequence )
+ else:
+ new_read.sequence = self.convert_color_to_base_space( self.sequence )
+ new_read.description = self.description
+ if self.score_system != new_read.score_system:
+ if self.score_system == 'phred':
+ score_list = self.convert_score_phred_to_solexa( self.get_decimal_quality_scores() )
+ else:
+ score_list = self.convert_score_solexa_to_phred( self.get_decimal_quality_scores() )
+ else:
+ score_list = self.get_decimal_quality_scores()
+ new_read.quality = "%s " % " ".join( map( str, new_class.restrict_scores_to_valid_range( score_list ) ) ) #need trailing space to be valid decimal fastq
+ if force_quality_encoding is None:
+ if self.is_ascii_encoded():
+ new_encoding = 'ascii'
+ else:
+ new_encoding = 'decimal'
+ else:
+ new_encoding = force_quality_encoding
+ if new_encoding == 'ascii':
+ new_read.quality = "".join( new_read.get_ascii_quality_scores() )
+ return new_read
+ def get_sequence( self ):
+ return self.sequence
+ def slice( self, left_column_offset, right_column_offset ):
+ new_read = fastqSequencingRead.get_class_by_format( self.format )()
+ new_read.identifier = self.identifier
+ new_read.sequence = self.get_sequence()[left_column_offset:right_column_offset]
+ new_read.description = self.description
+ if self.is_ascii_encoded():
+ new_read.quality = self.quality[left_column_offset:right_column_offset]
+ else:
+ quality = map( str, self.get_decimal_quality_scores()[left_column_offset:right_column_offset] )
+ if quality:
+ new_read.quality = "%s " % " ".join( quality )
+ else:
+ new_read.quality = ''
+ return new_read
+ def is_valid_format( self ):
+ if self.is_ascii_encoded():
+ for val in self.get_ascii_quality_scores():
+ val = ord( val )
+ if val < self.ascii_min or val > self.ascii_max:
+ return False
+ else:
+ for val in self.get_decimal_quality_scores():
+ if val < self.quality_min or val > self.quality_max:
+ return False
+ if not self.is_valid_sequence():
+ return False
+ return True
+ def is_valid_sequence( self ):
+ for base in self.get_sequence():
+ if base not in self.valid_sequence_list:
+ return False
+ return True
+ def insufficient_quality_length( self ):
+ return len( self.get_ascii_quality_scores() ) < len( self.sequence )
+ def assert_sequence_quality_lengths( self ):
+ qual_len = len( self.get_ascii_quality_scores() )
+ seq_len = len( self.sequence )
+ assert qual_len == seq_len, "Invalid FASTQ file: quality score length (%i) does not match sequence length (%i)" % ( qual_len, seq_len )
+ def reverse( self, clone = True ):
+ #need to override how decimal quality scores are reversed
+ if clone:
+ rval = self.clone()
+ else:
+ rval = self
+ rval.sequence = transform.reverse( self.sequence )
+ if rval.is_ascii_encoded():
+ rval.quality = rval.quality[::-1]
+ else:
+ rval.quality = reversed( rval.get_decimal_quality_scores() )
+ rval.quality = "%s " % " ".join( map( str, rval.quality ) )
+ return rval
+
+class fastqSangerRead( fastqSequencingRead ):
+ format = 'sanger'
+ ascii_min = 33
+ ascii_max = 126
+ quality_min = 0
+ quality_max = 93
+ score_system = 'phred'
+ sequence_space = 'base'
+
+class fastqIlluminaRead( fastqSequencingRead ):
+ format = 'illumina'
+ ascii_min = 64
+ ascii_max = 126
+ quality_min = 0
+ quality_max = 62
+ score_system = 'phred'
+ sequence_space = 'base'
+
+class fastqSolexaRead( fastqSequencingRead ):
+ format = 'solexa'
+ ascii_min = 59
+ ascii_max = 126
+ quality_min = -5
+ quality_max = 62
+ score_system = 'solexa'
+ sequence_space = 'base'
+
+class fastqSolidRead( fastqSequencingRead ):
+ format = 'solid' #color space
+ ascii_min = 33
+ ascii_max = 126
+ quality_min = 0
+ quality_max = 93
+ score_system = 'phred'
+ sequence_space = 'color'
+ valid_sequence_list = map( str, range( 7 ) ) + [ '.' ]
+ def __len__( self ):
+ if self.has_adapter_base(): #Adapter base is not counted in length of read
+ return len( self.sequence ) - 1
+ return fastqSequencingRead.__len__( self )
+ def has_adapter_base( self ):
+ if self.sequence and self.sequence[0] in string.letters: #adapter base must be a letter
+ return True
+ return False
+ def insufficient_quality_length( self ):
+ if self.has_adapter_base():
+ return len( self.get_ascii_quality_scores() ) + 1 < len( self.sequence )
+ return fastqSequencingRead.insufficient_quality_length( self )
+ def assert_sequence_quality_lengths( self ):
+ if self.has_adapter_base():
+ qual_len = len( self.get_ascii_quality_scores() )
+ seq_len = len( self.sequence )
+ assert qual_len + 1 == seq_len, "Invalid FASTQ file: quality score length (%i) does not match sequence length (%i with adapter base)" % ( qual_len, seq_len )
+ else:
+ return fastqSequencingRead.assert_sequence_quality_lengths( self )
+ def get_sequence( self ):
+ if self.has_adapter_base():
+ return self.sequence[1:]
+ return self.sequence
+ def reverse( self, clone = True ):
+ #need to override how color space is reversed
+ if clone:
+ rval = self.clone()
+ else:
+ rval = self
+ if rval.has_adapter_base():
+ adapter = rval.sequence[0]
+ #sequence = rval.sequence[1:]
+ rval.sequence = self.color_space_converter.to_color_space( transform.reverse( self.color_space_converter.to_base_space( rval.sequence ) ), adapter_base = adapter )
+ else:
+ rval.sequence = transform.reverse( rval.sequence )
+
+ if rval.is_ascii_encoded():
+ rval.quality = rval.quality[::-1]
+ else:
+ rval.quality = reversed( rval.get_decimal_quality_scores() )
+ rval.quality = "%s " % " ".join( map( str, rval.quality ) )
+ return rval
+ def complement( self, clone = True ):
+ #need to override how color space is complemented
+ if clone:
+ rval = self.clone()
+ else:
+ rval = self
+ if rval.has_adapter_base(): #No adapter, color space stays the same
+ adapter = rval.sequence[0]
+ sequence = rval.sequence[1:]
+ if adapter.lower() != 'u':
+ adapter = transform.DNA_complement( adapter )
+ else:
+ adapter = transform.RNA_complement( adapter )
+ rval.sequence = "%s%s" % ( adapter, sequence )
+ return rval
+ def change_adapter( self, new_adapter, clone = True ):
+ #if new_adapter is empty, remove adapter, otherwise replace with new_adapter
+ if clone:
+ rval = self.clone()
+ else:
+ rval = self
+ if rval.has_adapter_base():
+ if new_adapter:
+ if new_adapter != rval.sequence[0]:
+ rval.sequence = rval.color_space_converter.to_color_space( rval.color_space_converter.to_base_space( rval.sequence ), adapter_base = new_adapter )
+ else:
+ rval.sequence = rval.sequence[1:]
+ elif new_adapter:
+ rval.sequence = "%s%s" % ( new_adapter, rval.sequence )
+ return rval
+
+
+FASTQ_FORMATS = {}
+for format in [ fastqIlluminaRead, fastqSolexaRead, fastqSangerRead, fastqSolidRead ]:
+ FASTQ_FORMATS[ format.format ] = format
+
+
+class fastqAggregator():
+ VALID_FORMATS = FASTQ_FORMATS.keys()
+ def __init__( self, ):
+ self.ascii_values_used = [] #quick lookup of all ascii chars used
+ self.seq_lens = {} #counts of seqs by read len
+ self.nuc_index_quality = [] #counts of scores by read column
+ self.nuc_index_base = [] #counts of bases by read column
+ def consume_read( self, fastq_read ):
+ #ascii values used
+ for val in fastq_read.get_ascii_quality_scores():
+ if val not in self.ascii_values_used:
+ self.ascii_values_used.append( val )
+ #lengths
+ seq_len = len( fastq_read )
+ self.seq_lens[ seq_len ] = self.seq_lens.get( seq_len, 0 ) + 1
+ #decimal qualities by column
+ for i, val in enumerate( fastq_read.get_decimal_quality_scores() ):
+ if i == len( self.nuc_index_quality ):
+ self.nuc_index_quality.append( {} )
+ self.nuc_index_quality[ i ][ val ] = self.nuc_index_quality[ i ].get( val, 0 ) + 1
+ #bases by column
+ for i, nuc in enumerate( fastq_read.get_sequence() ):
+ if i == len( self.nuc_index_base ):
+ self.nuc_index_base.append( {} )
+ nuc = nuc.upper()
+ self.nuc_index_base[ i ][ nuc ] = self.nuc_index_base[ i ].get( nuc, 0 ) + 1
+ def get_valid_formats( self, check_list = None ):
+ if not check_list:
+ check_list = self.VALID_FORMATS
+ rval = []
+ sequence = []
+ for nuc_dict in self.nuc_index_base:
+ for nuc in nuc_dict.keys():
+ if nuc not in sequence:
+ sequence.append( nuc )
+ sequence = "".join( sequence )
+ quality = "".join( self.ascii_values_used )
+ for fastq_format in check_list:
+ fastq_read = fastqSequencingRead.get_class_by_format( fastq_format )()
+ fastq_read.quality = quality
+ fastq_read.sequence = sequence
+ if fastq_read.is_valid_format():
+ rval.append( fastq_format )
+ return rval
+ def get_ascii_range( self ):
+ return ( min( self.ascii_values_used ), max( self.ascii_values_used ) )
+ def get_decimal_range( self ):
+ decimal_values_used = []
+ for scores in self.nuc_index_quality:
+ decimal_values_used.extend( scores.keys() )
+ return ( min( decimal_values_used ), max( decimal_values_used ) )
+ def get_length_counts( self ):
+ return self.seq_lens
+ def get_max_read_length( self ):
+ return len( self.nuc_index_quality )
+ def get_read_count_for_column( self, column ):
+ if column >= len( self.nuc_index_quality ):
+ return 0
+ return sum( self.nuc_index_quality[ column ].values() )
+ def get_read_count( self ):
+ return self.get_read_count_for_column( 0 )
+ def get_base_counts_for_column( self, column ):
+ return self.nuc_index_base[ column ]
+ def get_score_list_for_column( self, column ):
+ return self.nuc_index_quality[ column ].keys()
+ def get_score_min_for_column( self, column ):
+ return min( self.nuc_index_quality[ column ].keys() )
+ def get_score_max_for_column( self, column ):
+ return max( self.nuc_index_quality[ column ].keys() )
+ def get_score_sum_for_column( self, column ):
+ return sum( score * count for score, count in self.nuc_index_quality[ column ].iteritems() )
+ def get_score_at_position_for_column( self, column, position ):
+ score_value_dict = self.nuc_index_quality[ column ]
+ scores = sorted( score_value_dict.keys() )
+ for score in scores:
+ if score_value_dict[ score ] <= position:
+ position -= score_value_dict[ score ]
+ else:
+ return score
+ def get_summary_statistics_for_column( self, i ):
+ def _get_med_pos( size ):
+ halfed = int( size / 2 )
+ if size % 2 == 1:
+ return [ halfed ]
+ return[ halfed - 1, halfed ]
+ read_count = self.get_read_count_for_column( i )
+
+ min_score = self.get_score_min_for_column( i )
+ max_score = self.get_score_max_for_column( i )
+ sum_score = self.get_score_sum_for_column( i )
+ mean_score = float( sum_score ) / float( read_count )
+ #get positions
+ med_pos = _get_med_pos( read_count )
+ if 0 in med_pos:
+ q1_pos = [ 0 ]
+ q3_pos = [ read_count - 1 ]
+ else:
+ q1_pos = _get_med_pos( min( med_pos ) )
+ q3_pos = []
+ for pos in q1_pos:
+ q3_pos.append( max( med_pos ) + 1 + pos )
+ #get scores at position
+ med_score = float( sum( [ self.get_score_at_position_for_column( i, pos ) for pos in med_pos ] ) ) / float( len( med_pos ) )
+ q1 = float( sum( [ self.get_score_at_position_for_column( i, pos ) for pos in q1_pos ] ) ) / float( len( q1_pos ) )
+ q3 = float( sum( [ self.get_score_at_position_for_column( i, pos ) for pos in q3_pos ] ) ) / float( len( q3_pos ) )
+ #determine iqr and step
+ iqr = q3 - q1
+ step = 1.5 * iqr
+
+ #Determine whiskers and outliers
+ outliers = []
+ score_list = sorted( self.get_score_list_for_column( i ) )
+ left_whisker = q1 - step
+ for score in score_list:
+ if left_whisker <= score:
+ left_whisker = score
+ break
+ else:
+ outliers.append( score )
+
+ right_whisker = q3 + step
+ score_list.reverse()
+ for score in score_list:
+ if right_whisker >= score:
+ right_whisker = score
+ break
+ else:
+ outliers.append( score )
+
+ column_stats = { 'read_count': read_count,
+ 'min_score': min_score,
+ 'max_score': max_score,
+ 'sum_score': sum_score,
+ 'mean_score': mean_score,
+ 'q1': q1,
+ 'med_score': med_score,
+ 'q3': q3,
+ 'iqr': iqr,
+ 'left_whisker': left_whisker,
+ 'right_whisker': right_whisker,
+ 'outliers': outliers }
+ return column_stats
+
+class fastqReader( object ):
+ def __init__( self, fh, format = 'sanger' ):
+ self.file = fh
+ self.format = format
+ def close( self ):
+ return self.file.close()
+ def next(self):
+ while True:
+ fastq_header = self.file.readline()
+ if not fastq_header:
+ raise StopIteration
+ fastq_header = fastq_header.rstrip( '\n\r' )
+ #remove empty lines, apparently extra new lines at end of file is common?
+ if fastq_header:
+ break
+
+ assert fastq_header.startswith( '@' ), 'Invalid fastq header: %s' % fastq_header
+ rval = fastqSequencingRead.get_class_by_format( self.format )()
+ rval.identifier = fastq_header
+ while True:
+ line = self.file.readline()
+ if not line:
+ raise Exception( 'Invalid FASTQ file: could not parse second instance of sequence identifier.' )
+ line = line.rstrip( '\n\r' )
+ if line.startswith( '+' ) and ( len( line ) == 1 or line[1:].startswith( fastq_header[1:] ) ):
+ rval.description = line
+ break
+ rval.append_sequence( line )
+ while rval.insufficient_quality_length():
+ line = self.file.readline()
+ if not line:
+ break
+ rval.append_quality( line )
+ rval.assert_sequence_quality_lengths()
+ return rval
+ def __iter__( self ):
+ while True:
+ yield self.next()
+
+class fastqNamedReader( object ):
+ def __init__( self, fh, format = 'sanger' ):
+ self.file = fh
+ self.format = format
+ self.reader = fastqReader( self.file, self.format )
+ #self.last_offset = self.file.tell()
+ self.offset_dict = {}
+ self.eof = False
+ def close( self ):
+ return self.file.close()
+ def get( self, sequence_id ):
+ rval = None
+ if sequence_id in self.offset_dict:
+ initial_offset = self.file.tell()
+ seq_offset = self.offset_dict[ sequence_id ].pop( 0 )
+ if not self.offset_dict[ sequence_id ]:
+ del self.offset_dict[ sequence_id ]
+ self.file.seek( seq_offset )
+ rval = self.reader.next()
+ #assert rval.identifier == sequence_id, 'seq id mismatch' #should be able to remove this
+ self.file.seek( initial_offset )
+ else:
+ while True:
+ offset = self.file.tell()
+ try:
+ fastq_read = self.reader.next()
+ except StopIteration:
+ self.eof = True
+ break #eof, id not found, will return None
+ if fastq_read.identifier == sequence_id:
+ rval = fastq_read
+ break
+ else:
+ if fastq_read.identifier not in self.offset_dict:
+ self.offset_dict[ fastq_read.identifier ] = []
+ self.offset_dict[ fastq_read.identifier ].append( offset )
+ return rval
+ def has_data( self ):
+ #returns a string representation of remaining data, or empty string (False) if no data remaining
+ eof = self.eof
+ count = 0
+ rval = ''
+ if self.offset_dict:
+ count = sum( map( len, self.offset_dict.values() ) )
+ if not eof:
+ offset = self.file.tell()
+ try:
+ fastq_read = self.reader.next()
+ except StopIteration:
+ eof = True
+ self.file.seek( offset )
+ if count:
+ rval = "There were %i known sequence reads not utilized. "
+ if not eof:
+ rval = "%s%s" % ( rval, "An additional unknown number of reads exist in the input that were not utilized." )
+ return rval
+
+class fastqWriter( object ):
+ def __init__( self, fh, format = None, force_quality_encoding = None ):
+ self.file = fh
+ self.format = format
+ self.force_quality_encoding = force_quality_encoding
+ def write( self, fastq_read ):
+ if self.format:
+ fastq_read = fastq_read.convert_read_to_format( self.format, force_quality_encoding = self.force_quality_encoding )
+ self.file.write( str( fastq_read ) )
+ def close( self ):
+ return self.file.close()
+
+class fastaWriter( object ):
+ def __init__( self, fh ):
+ self.file = fh
+ def write( self, fastq_read ):
+ #this will include SOLiD adapter base if applicable
+ self.file.write( ">%s\n%s\n" % ( fastq_read.identifier[1:], fastq_read.sequence ) )
+ def close( self ):
+ return self.file.close()
+
+class fastqJoiner( object ):
+ def __init__( self, format, force_quality_encoding = None ):
+ self.format = format
+ self.force_quality_encoding = force_quality_encoding
+ def join( self, read1, read2 ):
+ if read1.identifier.endswith( '/2' ) and read2.identifier.endswith( '/1' ):
+ #swap 1 and 2
+ tmp = read1
+ read1 = read2
+ read2 = tmp
+ del tmp
+ if read1.identifier.endswith( '/1' ) and read2.identifier.endswith( '/2' ):
+ identifier = read1.identifier[:-2]
+ else:
+ identifier = read1.identifier
+
+ #use force quality encoding, if not present force to encoding of first read
+ force_quality_encoding = self.force_quality_encoding
+ if not force_quality_encoding:
+ if read1.is_ascii_encoded():
+ force_quality_encoding = 'ascii'
+ else:
+ force_quality_encoding = 'decimal'
+
+ new_read1 = read1.convert_read_to_format( self.format, force_quality_encoding = force_quality_encoding )
+ new_read2 = read2.convert_read_to_format( self.format, force_quality_encoding = force_quality_encoding )
+ rval = FASTQ_FORMATS[ self.format ]()
+ rval.identifier = identifier
+ if len( read1.description ) > 1:
+ rval.description = "+%s" % ( identifier[1:] )
+ else:
+ rval.description = '+'
+ if rval.sequence_space == 'color':
+ #need to handle color space joining differently
+ #convert to nuc space, join, then convert back
+ rval.sequence = rval.convert_base_to_color_space( new_read1.convert_color_to_base_space( new_read1.sequence ) + new_read2.convert_color_to_base_space( new_read2.sequence ) )
+ else:
+ rval.sequence = new_read1.sequence + new_read2.sequence
+ if force_quality_encoding == 'ascii':
+ rval.quality = new_read1.quality + new_read2.quality
+ else:
+ rval.quality = "%s %s" % ( new_read1.quality.strip(), new_read2.quality.strip() )
+ return rval
+ def get_paired_identifier( self, fastq_read ):
+ identifier = fastq_read.identifier
+ if identifier[-2] == '/':
+ if identifier[-1] == "1":
+ identifier = "%s2" % identifier[:-1]
+ elif identifier[-1] == "2":
+ identifier = "%s1" % identifier[:-1]
+ return identifier
+
+class fastqSplitter( object ):
+ def split( self, fastq_read ):
+ length = len( fastq_read )
+ #Only reads of even lengths can be split
+ if length % 2 != 0:
+ return None, None
+ half = int( length / 2 )
+ read1 = fastq_read.slice( 0, half )
+ read1.identifier += "/1"
+ if len( read1.description ) > 1:
+ read1.description += "/1"
+ read2 = fastq_read.slice( half, None )
+ read2.identifier += "/2"
+ if len( read2.description ) > 1:
+ read2.description += "/2"
+ return read1, read2
+
+class fastaSequence( ):
+ def __init__( self ):
+ self.identifier = None
+ self.sequence = '' #holds raw sequence string: no whitespace
+ def __len__( self ):
+ return len( self.sequence )
+ def __str__( self ):
+ return "%s\n%s\n" % ( self.identifier, self.sequence )
+
+class fastaReader( object ):
+ def __init__( self, fh ):
+ self.file = fh
+ def close( self ):
+ return self.file.close()
+ def next( self ):
+ line = self.file.readline()
+ #remove header comment lines
+ while line and line.startswith( '#' ):
+ line = self.file.readline()
+ if not line:
+ raise StopIteration
+ assert line.startswith( '>' ), "FASTA headers must start with >"
+ rval = fastaSequence()
+ rval.identifier = line.strip()
+ offset = self.file.tell()
+ while True:
+ line = self.file.readline()
+ if not line or line.startswith( '>' ):
+ if line:
+ self.file.seek( offset )
+ return rval
+ #454 qual test data that was used has decimal scores that don't have trailing spaces
+ #so we'll need to parse and build these sequences not based upon de facto standards
+ #i.e. in a less than ideal fashion
+ line = line.rstrip()
+ if ' ' in rval.sequence or ' ' in line:
+ rval.sequence = "%s%s " % ( rval.sequence, line )
+ else:
+ rval.sequence += line
+ offset = self.file.tell()
+ def __iter__( self ):
+ while True:
+ yield self.next()
+
+class fastaNamedReader( object ):
+ def __init__( self, fh ):
+ self.file = fh
+ self.reader = fastaReader( self.file )
+ self.offset_dict = {}
+ self.eof = False
+ def close( self ):
+ return self.file.close()
+ def get( self, sequence_id ):
+ rval = None
+ if sequence_id in self.offset_dict:
+ initial_offset = self.file.tell()
+ seq_offset = self.offset_dict[ sequence_id ].pop( 0 )
+ if not self.offset_dict[ sequence_id ]:
+ del self.offset_dict[ sequence_id ]
+ self.file.seek( seq_offset )
+ rval = self.reader.next()
+ self.file.seek( initial_offset )
+ else:
+ while True:
+ offset = self.file.tell()
+ try:
+ fasta_seq = self.reader.next()
+ except StopIteration:
+ self.eof = True
+ break #eof, id not found, will return None
+ if fasta_seq.identifier == sequence_id:
+ rval = fasta_seq
+ break
+ else:
+ if fasta_seq.identifier not in self.offset_dict:
+ self.offset_dict[ fasta_seq.identifier ] = []
+ self.offset_dict[ fasta_seq.identifier ].append( offset )
+ return rval
+ def has_data( self ):
+ #returns a string representation of remaining data, or empty string (False) if no data remaining
+ eof = self.eof
+ count = 0
+ rval = ''
+ if self.offset_dict:
+ count = sum( map( len, self.offset_dict.values() ) )
+ if not eof:
+ offset = self.file.tell()
+ try:
+ fasta_seq = self.reader.next()
+ except StopIteration:
+ eof = True
+ self.file.seek( offset )
+ if count:
+ rval = "There were %i known sequences not utilized. " % count
+ if not eof:
+ rval = "%s%s" % ( rval, "An additional unknown number of sequences exist in the input that were not utilized." )
+ return rval
+
+class fastqCombiner( object ):
+ def __init__( self, format ):
+ self.format = format
+ def combine(self, fasta_seq, quality_seq ):
+ fastq_read = fastqSequencingRead.get_class_by_format( self.format )()
+ fastq_read.identifier = "@%s" % fasta_seq.identifier[1:]
+ fastq_read.description = '+'
+ fastq_read.sequence = fasta_seq.sequence
+ fastq_read.quality = quality_seq.sequence
+ return fastq_read
diff -r 03dbef081cf2 -r 9dd990a2fa94 lib/galaxy_utils/sequence/sequence.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/galaxy_utils/sequence/sequence.py Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,61 @@
+#Dan Blankenberg
+import transform
+import string
+from copy import deepcopy
+
+class SequencingRead( object ):
+ color_space_converter = transform.ColorSpaceConverter()
+ valid_sequence_list = string.letters
+ def __init__( self ):
+ self.identifier = None
+ self.sequence = '' #holds raw sequence string: no whitespace
+ self.description = None
+ self.quality = '' #holds raw quality string: no whitespace, unless this contains decimal scores
+ def __len__( self ):
+ return len( self.sequence )
+ def __str__( self ):
+ return "%s\n%s\n%s\n%s\n" % ( self.identifier, self.sequence, self.description, self.quality )
+ def append_sequence( self, sequence ):
+ self.sequence += sequence.rstrip( '\n\r' )
+ def append_quality( self, quality ):
+ self.quality += quality.rstrip( '\n\r' )
+ def is_DNA( self ):
+ return 'u' not in self.sequence.lower()
+ def clone( self ):
+ return deepcopy( self )
+ def reverse( self, clone = True ):
+ if clone:
+ rval = self.clone()
+ else:
+ rval = self
+ rval.sequence = transform.reverse( self.sequence )
+ rval.quality = rval.quality[::-1]
+ return rval
+ def complement( self, clone = True ):
+ if clone:
+ rval = self.clone()
+ else:
+ rval = self
+ if rval.is_DNA():
+ rval.sequence = transform.DNA_complement( rval.sequence )
+ else:
+ rval.sequence = transform.RNA_complement( rval.sequence )
+ return rval
+ def reverse_complement( self, clone = True ):
+ #need to reverse first, then complement
+ rval = self.reverse( clone = clone )
+ return rval.complement( clone = False ) #already working with a clone if requested
+ def sequence_as_DNA( self, clone = True ):
+ if clone:
+ rval = self.clone()
+ else:
+ rval = self
+ rval.sequence = transform.to_DNA( rval.sequence )
+ return rval
+ def sequence_as_RNA( self, clone = True ):
+ if clone:
+ rval = self.clone()
+ else:
+ rval = self
+ rval.sequence = transform.to_RNA( rval.sequence )
+ return rval
diff -r 03dbef081cf2 -r 9dd990a2fa94 lib/galaxy_utils/sequence/transform.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/galaxy_utils/sequence/transform.py Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,74 @@
+#Dan Blankenberg
+#Contains methods to tranform sequence strings
+import string
+
+#FIXME: This should Handle ambiguity codes...
+#Translation table for reverse Complement
+DNA_COMPLEMENT = string.maketrans( "ACGTacgt", "TGCAtgca" )
+RNA_COMPLEMENT = string.maketrans( "ACGUacgu", "UGCAugca" )
+#Translation table for DNA <--> RNA
+DNA_TO_RNA = string.maketrans( "Tt", "Uu" )
+RNA_TO_DNA = string.maketrans( "Uu", "Tt" )
+
+#reverse sequence string
+def reverse( sequence ):
+ return sequence[::-1]
+#complement DNA sequence string
+def DNA_complement( sequence ):
+ return sequence.translate( DNA_COMPLEMENT )
+#complement RNA sequence string
+def RNA_complement( sequence ):
+ return sequence.translate( RNA_COMPLEMENT )
+#returns the reverse complement of the sequence
+def DNA_reverse_complement( self, sequence ):
+ sequence = reverse( sequence )
+ return DNA_complement( sequence )
+def RNA_reverse_complement( self, sequence ):
+ sequence = reverse( sequence )
+ return RNA_complement( sequence )
+def to_DNA( sequence ):
+ return sequence.translate( DNA_TO_RNA )
+def to_RNA( sequence ):
+ return sequence.translate( RNA_TO_DNA )
+
+class ColorSpaceConverter( object ):
+ unknown_base = 'N'
+ unknown_color = '.'
+ color_to_base_dict = {}
+ color_to_base_dict[ 'A' ] = { '0':'A', '1':'C', '2':'G', '3':'T', '4':'N', '5':'N', '6':'N', '.':'N' }
+ color_to_base_dict[ 'C' ] = { '0':'C', '1':'A', '2':'T', '3':'G', '4':'N', '5':'N', '6':'N', '.':'N' }
+ color_to_base_dict[ 'G' ] = { '0':'G', '1':'T', '2':'A', '3':'C', '4':'N', '5':'N', '6':'N', '.':'N' }
+ color_to_base_dict[ 'T' ] = { '0':'T', '1':'G', '2':'C', '3':'A', '4':'N', '5':'N', '6':'N', '.':'N' }
+ color_to_base_dict[ 'N' ] = { '0':'N', '1':'N', '2':'N', '3':'N', '4':'N', '5':'N', '6':'N', '.':'N' }
+ base_to_color_dict = {}
+ for base, color_dict in color_to_base_dict.iteritems():
+ base_to_color_dict[ base ] = {}
+ for key, value in color_dict.iteritems():
+ base_to_color_dict[ base ][ value ] = key
+ base_to_color_dict[ base ][ 'N' ] = '4' #force ACGT followed by N to be '4', because this is now 'processed' data; we could force to '.' (non-processed data) also
+ base_to_color_dict[ 'N' ].update( { 'A':'5', 'C':'5', 'G':'5', 'T':'5', 'N':'6' } )
+ def __init__( self, fake_adapter_base = 'G' ):
+ assert fake_adapter_base in self.base_to_color_dict, 'A bad fake adapter base was provided: %s.' % fake_adapter_base
+ self.fake_adapter_base = fake_adapter_base
+ def to_color_space( self, sequence, adapter_base = None ):
+ if adapter_base is None:
+ adapter_base = self.fake_adapter_base
+ last_base = adapter_base #we add a fake adapter base so that the sequence can be decoded properly again
+ rval = last_base
+ for base in sequence:
+ rval += self.base_to_color_dict.get( last_base, self.base_to_color_dict[ self.unknown_base ] ).get( base, self.unknown_color )
+ last_base = base
+ return rval
+ def to_base_space( self, sequence ):
+ if not isinstance( sequence, list ):
+ sequence = list( sequence )
+ if sequence:
+ last_base = sequence.pop( 0 )
+ else:
+ last_base = None
+ assert last_base in self.color_to_base_dict, 'A valid adapter base must be included when converting to base space from color space. Found: %s' % last_base
+ rval = ''
+ for color_val in sequence:
+ last_base = self.color_to_base_dict[ last_base ].get( color_val, self.unknown_base )
+ rval += last_base
+ return rval
diff -r 03dbef081cf2 -r 9dd990a2fa94 test-data/3.fastqsanger
--- a/test-data/3.fastqsanger Tue Feb 23 16:12:20 2010 -0500
+++ b/test-data/3.fastqsanger Tue Feb 23 16:48:07 2010 -0500
@@ -18,4 +18,3 @@
TATCAAAAAAGAATATAATCTGAATCAACACTACAACCTATTAGTGTGTAGAATAGGAAGTAGAGGCCTGCG
+HWI-EAS91_1_30788AAXX:7:64:947:234
hhhhhhhhhhhhhhhhhhhhhhhRhhehhahhhhhJhhhhhhhh^hPhWfhhhhThWUhhfhh_hhNIVPUd
-
diff -r 03dbef081cf2 -r 9dd990a2fa94 test-data/boxplot_summary_statistics_out.png
Binary file test-data/boxplot_summary_statistics_out.png has changed
diff -r 03dbef081cf2 -r 9dd990a2fa94 test-data/combine_phiX_out_1.fastqsolid
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/combine_phiX_out_1.fastqsolid Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,576 @@
+@1831_573_1004_F3
+T00030133312212111300011021310132222
++
+4 29 27 34 5 5 24 24 20 17 10 34 29 20 27 13 30 27 22 24 11 28 19 17 27 17 24 17 25 27 7 24 14 12 22
+@1831_573_1050_F3
+T03330322230322112131010221102122113
++
+8 26 31 31 16 22 30 31 28 29 22 30 30 31 32 23 30 28 28 31 19 32 30 32 19 8 5 10 13 6 5 10 6 16 11
+@1831_573_1067_F3
+T00023032023103330112220321200200002
++
+13 10 10 2 4 7 6 11 4 14 3 11 10 5 16 2 5 8 11 8 5 10 6 9 6 9 4 2 3 5 2 4 7 6 3
+@1831_573_1219_F3
+T11211130300300301021212330201121310
++
+31 31 31 28 19 14 10 8 20 8 19 15 23 30 6 21 21 20 29 9 14 20 30 27 21 16 6 26 27 18 11 25 11 20 12
+@1831_573_1242_F3
+T02132003121011302100130302112221121
++
+29 29 29 25 25 29 16 22 28 32 20 30 31 31 28 26 22 32 28 26 17 13 21 15 29 23 17 27 23 28 22 19 10 26 26
+@1831_573_1333_F3
+T00200312330110101013212313222303112
++
+8 28 6 31 2 4 18 28 13 29 8 14 18 19 9 16 16 22 11 11 14 21 12 19 10 13 24 22 19 17 19 20 21 27 8
+@1831_573_1362_F3
+T21203131001102231121211101111321131
++
+34 33 31 31 30 31 31 30 31 34 31 33 32 30 31 29 31 27 31 23 32 31 30 31 6 13 23 6 30 16 22 25 11 10 30
+@1831_573_1448_F3
+T23101211223113320132212331313312022
++
+22 22 28 32 8 30 11 13 31 32 31 31 25 31 31 27 28 14 22 8 31 27 12 2 23 21 21 17 4 24 21 16 18 5 10
+@1831_573_1490_F3
+T31312310323301210002210123101021011
++
+31 31 31 31 30 11 31 30 30 31 3 29 27 28 29 10 4 14 9 29 9 16 11 8 30 17 21 5 16 17 6 24 4 22 13
+@1831_573_1523_F3
+T10322001220012223202202222001230222
++
+7 11 14 14 9 11 2 23 6 6 13 21 6 6 21 6 17 5 17 22 14 23 15 8 4 5 2 15 6 4 2 9 11 17 6
+@1831_573_1578_F3
+T21202302100010020121100311022120111
++
+31 30 28 31 27 31 34 31 30 31 31 30 30 28 29 31 26 22 27 27 23 27 21 24 19 8 18 20 16 16 7 10 16 27 13
+@1831_573_1647_F3
+T10222233301013033120132223202022123
++
+28 30 31 31 27 31 31 30 30 30 26 32 28 28 31 31 26 24 30 31 30 18 28 26 21 13 19 14 26 21 25 28 14 26 19
+@1831_573_1684_F3
+T13310013212312012302121010221231123
++
+22 29 16 25 23 27 31 18 24 31 31 30 30 24 28 26 31 31 27 29 30 31 31 27 26 27 30 22 29 22 21 30 24 29 30
+@1831_573_1769_F3
+T33220123030232212032021032302233131
++
+22 20 19 22 19 24 5 5 22 21 22 4 14 22 26 18 3 12 22 26 18 2 11 18 14 14 2 11 19 20 14 2 5 15 21
+@1831_573_1853_F3
+T11000012111222211310103212122102331
++
+21 19 13 14 33 31 31 22 17 33 10 14 19 30 31 30 22 30 10 31 24 14 10 24 24 13 6 8 17 27 17 5 8 17 5
+@1831_573_1943_F3
+T20300123032210232001222122001132111
++
+7 29 14 9 16 11 8 11 31 12 8 6 15 9 29 20 6 3 14 30 21 31 14 13 5 30 23 14 7 6 8 32 19 18 11
+@1831_573_1977_F3
+T22212302221310332321002303112011311
++
+31 31 30 21 31 23 31 31 24 32 31 28 19 21 18 18 32 22 30 24 30 27 18 25 10 22 29 6 31 4 31 30 4 18 17
+@1831_574_109_F3
+T13122332123301331032220222133301033
++
+15 22 21 20 16 2 19 23 16 22 29 31 21 20 27 17 25 23 19 22 16 21 28 22 23 23 27 16 24 24 20 13 22 30 21
+@1831_574_148_F3
+T01200113123030012202302312200010231
++
+27 26 12 29 18 26 26 18 29 14 14 29 15 26 26 22 28 11 28 19 12 19 14 10 29 15 17 24 27 24 27 21 17 19 26
+@1831_574_185_F3
+T21123333211302300321312212102123121
++
+31 27 19 26 4 4 31 22 29 2 9 29 24 22 4 21 26 10 23 3 2 27 15 22 4 16 18 22 17 3 4 27 20 19 2
+@1831_574_243_F3
+T30221011230013102201033131203302330
++
+2 31 31 31 24 20 31 28 24 30 9 29 27 19 20 3 27 31 27 19 4 31 24 30 22 2 28 30 29 22 5 29 30 24 22
+@1831_574_257_F3
+T00301133110002100302003000000102301
++
+4 29 29 33 29 8 31 30 29 33 31 33 30 31 16 4 9 4 11 2 10 15 15 13 6 7 10 5 20 5 4 2 3 18 5
+@1831_574_293_F3
+T23213210003000103010211331300320130
++
+5 6 8 22 6 13 9 4 2 5 3 6 14 13 3 2 2 3 13 3 5 9 8 10 9 3 2 23 4 5 4 2 5 5 4
+@1831_574_389_F3
+T21032213032101122333230212301312020
++
+8 8 3 29 14 29 23 8 25 17 31 25 17 16 18 26 26 13 16 8 31 18 4 21 19 4 10 8 27 22 8 10 3 24 17
+@1831_574_575_F3
+T33313322100212102033032123311211302
++
+22 30 31 29 28 30 31 29 23 31 31 31 28 31 21 9 4 5 27 28 6 20 31 27 27 6 11 15 27 28 19 9 20 14 27
+@1831_574_592_F3
+T33103330110123102223122023103310330
++
+22 18 12 20 8 16 24 11 11 27 31 29 19 15 21 22 27 17 13 12 23 21 19 18 19 21 26 24 27 16 14 26 17 16 17
+@1831_574_617_F3
+T20021031221222021210021322200223211
++
+31 29 31 30 26 29 30 28 31 28 28 31 29 31 28 20 30 31 10 31 25 31 19 15 31 29 27 25 15 8 6 8 21 19 12
+@1831_574_725_F3
+T32010020322130330333010031120313210
++
+24 6 29 30 20 17 10 20 28 26 19 3 21 26 27 23 13 16 27 19 22 9 24 10 30 22 7 10 20 26 12 8 13 8 19
+@1831_574_734_F3
+T31132301200020012302210322213222222
++
+13 12 5 13 3 17 5 27 9 7 12 4 8 25 14 8 4 20 25 8 14 4 22 10 11 24 15 18 19 9 32 13 30 22 15
+@1831_574_824_F3
+T30212100033032123311211302122020013
++
+26 31 31 31 26 26 8 11 10 31 27 12 27 22 26 27 5 23 24 30 30 5 17 24 30 27 3 17 25 32 27 8 26 23 30
+@1831_574_959_F3
+T11212130220131221111002020123311211
++
+22 32 28 26 10 30 31 24 26 14 27 31 26 27 23 2 5 5 14 9 4 7 4 13 15 3 15 3 17 8 10 16 3 12 16
+@1831_574_1062_F3
+T30112230030300221001032033012211012
++
+19 31 23 17 16 27 14 14 25 16 18 21 14 23 27 16 14 20 13 19 17 22 13 26 29 17 23 23 14 15 27 16 3 8 14
+@1831_574_1092_F3
+T02013221200031031212200000111130310
++
+27 23 30 13 11 24 23 8 15 18 4 2 11 11 11 7 11 10 10 3 6 21 24 6 2 24 6 22 2 6 26 21 13 4 17
+@1831_574_1103_F3
+T20313113203302010303131123021310121
++
+31 30 30 29 30 31 28 29 31 31 32 27 29 30 28 31 28 28 27 25 30 27 26 20 23 6 5 5 8 25 10 18 20 6 16
+@1831_574_1116_F3
+T21011310123202303021021112021231011
++
+8 31 10 10 11 8 14 8 30 13 14 8 4 27 8 17 29 13 28 28 25 23 30 5 26 19 19 5 14 5 11 8 14 9 19
+@1831_574_1194_F3
+T23303101033322220312200222013013312
++
+25 20 29 26 11 30 30 24 31 24 31 30 31 16 31 31 28 31 18 28 31 29 31 19 30 31 31 24 19 30 22 20 14 11 21
+@1831_574_1204_F3
+T21330132231321322010303023221203200
++
+32 32 20 32 20 33 31 20 25 26 31 31 11 13 24 30 32 16 30 2 13 30 26 18 8 11 29 23 17 4 8 28 6 22 9
+@1831_574_1306_F3
+T10332133020311023221213100301001220
++
+15 17 13 22 5 4 6 6 13 3 5 2 6 4 2 2 3 2 6 2 4 6 8 6 8 3 6 3 4 3 11 8 6 13 16
+@1831_574_1387_F3
+T12301331310032132101301303230121111
++
+12 30 32 30 30 25 31 30 31 31 24 30 31 31 30 24 34 26 25 29 5 8 13 11 11 8 26 5 6 27 5 22 7 14 6
+@1831_574_1431_F3
+T12011023331022213001123111301312011
++
+29 22 30 29 24 33 32 23 24 22 26 10 23 9 28 21 2 21 13 10 20 5 12 2 17 21 3 15 13 11 20 5 6 3 16
+@1831_574_1560_F3
+T32212313302203320020222113111011111
++
+28 8 8 5 21 20 27 19 28 29 24 24 31 25 20 24 22 7 16 5 26 10 5 7 4 5 19 2 11 2 5 5 5 9 3
+@1831_574_1591_F3
+T23202101330322130221230222201123202
++
+28 28 27 32 29 27 30 31 22 23 31 27 28 26 31 5 31 21 29 23 25 30 11 29 27 5 5 27 22 29 23 7 23 10 24
+@1831_574_1624_F3
+T20122200222132200313011102302210332
++
+2 27 21 13 5 7 11 22 12 10 8 8 22 13 13 6 14 26 19 18 13 8 24 17 22 13 7 27 23 20 5 16 18 12 8
+@1831_574_1826_F3
+T13012312120112021233030302313201111
++
+10 31 27 27 11 8 8 19 20 24 27 30 13 10 20 22 6 12 6 5 21 30 16 8 7 26 16 26 15 5 4 19 11 2 3
+@1831_574_1903_F3
+T30232100103132133321330310210101221
++
+27 24 20 21 30 31 29 26 22 31 31 31 23 25 31 29 23 29 27 28 24 29 24 29 31 17 28 22 16 30 16 25 21 26 14
+@1831_574_1961_F3
+T02333101331223303300200011100032200
++
+21 29 12 15 22 12 31 29 7 17 6 31 27 2 15 21 19 31 4 20 4 31 31 21 13 5 27 27 7 24 8 28 25 19 22
+@1831_575_54_F3
+T13331330322230200102132110132013200
++
+29 28 31 31 21 23 27 17 26 27 23 26 30 31 27 29 10 24 29 22 11 11 21 24 22 17 5 20 22 25 19 5 24 27 23
+@1831_575_80_F3
+T33133322233322221003332230323312313
++
+9 30 20 29 27 31 30 14 28 20 4 7 5 13 20 8 10 2 14 15 6 14 6 29 2 3 14 6 18 22 2 7 8 21 5
+@1831_575_192_F3
+T30013012111133003301010212123302011
++
+15 25 23 27 11 24 7 13 28 14 8 2 4 23 3 11 19 6 27 11 25 8 18 14 13 6 13 20 27 11 29 12 26 22 6
+@1831_575_197_F3
+T33312113010133020301131330001310032
++
+11 12 25 30 19 21 18 31 32 25 23 23 30 21 30 19 18 22 27 28 13 17 5 16 13 26 31 21 22 13 19 31 4 17 11
+@1831_575_223_F3
+T10121010002202131221210302100121020
++
+31 30 29 30 23 30 31 25 30 26 29 10 3 6 4 5 11 10 2 3 13 12 12 2 4 3 16 6 5 2 12 22 3 5 6
+@1831_575_420_F3
+T31110103220000101310112112001020212
++
+23 17 30 13 29 30 7 12 6 6 17 10 13 13 31 8 11 3 4 16 31 26 6 8 16 8 30 10 8 22 13 6 8 13 13
+@1831_575_434_F3
+T30312132120223101113223301211113311
++
+27 31 31 29 27 31 33 31 29 28 31 31 30 29 29 27 31 30 26 8 31 30 26 21 13 30 28 19 11 6 6 26 14 18 8
+@1831_575_444_F3
+T33022120112320220100202132332113320
++
+27 17 31 31 26 27 13 28 30 31 27 10 28 25 32 27 27 31 30 27 27 14 29 31 29 27 7 27 23 29 19 5 20 26 29
+@1831_575_459_F3
+T31330310210101223330110231120131100
++
+30 31 31 34 31 30 32 31 31 32 31 30 30 32 31 31 6 21 31 31 33 6 28 26 34 31 6 19 27 28 24 11 31 16 13
+@1831_575_506_F3
+T31210200111210121332321310110132301
++
+23 30 8 17 9 20 31 18 10 13 22 28 30 32 25 23 31 11 14 5 8 25 31 18 22 14 27 23 24 6 10 19 9 8 9
+@1831_575_569_F3
+T10210201321323001012232322323002203
++
+14 6 24 12 11 31 17 24 10 19 22 24 4 5 29 24 2 5 15 23 28 29 22 2 24 29 11 21 24 14 10 6 9 18 8
+@1831_575_622_F3
+T01100031122111023002323113231210111
++
+31 32 23 33 28 31 31 30 27 31 30 27 29 29 28 30 24 21 27 19 24 22 8 27 19 14 27 6 25 19 10 26 22 19 10
+@1831_575_644_F3
+T11332003221203131231202200030110130
++
+27 27 23 29 13 29 5 11 10 8 23 13 16 15 6 25 20 7 14 12 21 17 5 9 13 28 14 4 7 13 27 5 5 16 23
+@1831_575_663_F3
+T32210013303112103322311101322021210
++
+31 31 31 31 31 32 27 14 26 32 29 31 21 29 15 22 24 17 27 20 24 21 21 25 30 26 17 20 10 25 29 27 16 11 10
+@1831_575_681_F3
+T23131132033020103031013233200101021
++
+13 22 17 30 13 8 17 20 26 24 21 12 16 19 6 9 13 15 18 6 2 19 2 10 10 3 8 14 23 10 4 14 7 7 5
+@1831_575_711_F3
+T03032331231101231020121210002332121
++
+19 4 10 25 17 7 2 6 16 10 13 8 5 9 19 20 12 2 11 27 32 12 4 19 26 29 10 8 8 27 26 2 2 9 5
+@1831_575_730_F3
+T31010102200110302123032330331011111
++
+11 4 23 27 4 12 6 8 20 11 9 16 5 28 2 8 7 16 9 16 8 12 29 22 3 13 11 19 6 19 6 5 6 9 5
+@1831_575_904_F3
+T20111213300020123200333321131121211
++
+30 27 29 27 13 21 23 24 31 31 22 31 27 20 19 25 19 28 31 29 21 24 28 25 10 21 12 28 19 17 26 23 27 25 2
+@1831_575_938_F3
+T13103102220022130222233301013033120
++
+26 25 31 31 25 30 31 26 28 23 26 29 28 26 26 25 28 27 24 18 27 19 13 26 27 21 25 17 27 24 26 19 8 23 22
+@1831_575_970_F3
+T23201311301023133303023011202220221
++
+28 31 28 31 28 26 31 31 29 27 31 31 25 24 27 25 28 30 26 29 31 28 30 24 29 29 30 31 25 17 28 28 28 27 20
+@1831_575_991_F3
+T33312212031111111012212120321121210
++
+31 29 29 26 22 30 30 30 14 19 27 25 25 25 11 2 5 9 4 6 3 12 12 20 12 2 7 22 8 5 5 11 12 8 4
+@1831_575_1138_F3
+T23320002011320012120333103233301321
++
+27 28 15 26 4 16 24 18 21 10 30 24 21 30 11 30 20 27 25 17 29 31 21 31 27 25 26 19 29 13 22 26 9 25 16
+@1831_575_1157_F3
+T13121323330203331222022230133102321
++
+31 33 31 33 29 30 32 30 32 31 30 24 6 30 26 30 5 23 30 31 31 21 26 27 31 28 10 27 25 24 24 10 24 21 20
+@1831_575_1180_F3
+T32003310122102323303101123331133110
++
+14 27 33 29 20 30 6 25 14 22 23 30 26 16 26 20 20 25 24 24 22 31 31 29 24 19 28 22 27 16 23 21 12 29 22
+@1831_575_1283_F3
+T02232200301300220130032321323131333
++
+4 34 31 32 20 19 29 27 30 32 22 23 31 27 30 17 29 25 2 29 28 30 31 17 29 23 15 25 6 30 21 24 13 6 22
+@1831_575_1302_F3
+T01201303312333123130200123201013021
++
+5 16 17 29 14 2 17 6 5 12 17 5 4 6 22 10 3 4 9 2 3 14 16 7 5 5 16 17 14 3 11 17 11 11 9
+@1831_575_1310_F3
+T31332131312021303211310220101211133
++
+21 27 27 29 21 21 18 30 24 24 31 7 31 22 28 16 16 31 25 31 31 14 22 30 30 27 31 27 26 29 6 18 12 22 26
+@1831_575_1321_F3
+T11001010233200122122022023000203212
++
+15 26 33 31 30 31 29 28 32 31 27 32 30 29 31 29 30 21 29 31 20 29 6 19 31 24 30 8 22 31 22 30 14 23 24
+@1831_575_1373_F3
+T21213011223311001221321132013121220
++
+32 31 31 31 29 31 26 28 24 27 31 30 30 22 31 29 31 25 31 26 31 26 16 22 30 21 18 15 14 22 28 19 11 17 27
+@1831_575_1419_F3
+T33222200303001021230212332001013020
++
+29 14 14 18 12 29 5 12 13 12 29 4 16 16 14 31 5 14 5 22 25 27 11 12 16 28 11 10 17 27 21 6 4 5 27
+@1831_575_1436_F3
+T13210313021212303321202113301220331
++
+9 17 31 28 26 18 24 9 18 27 9 19 27 25 29 20 17 29 29 24 6 22 25 27 28 6 15 28 29 16 6 16 18 21 27
+@1831_575_1442_F3
+T33132010022331132101132123132020222
++
+23 29 20 23 27 30 22 29 10 16 33 21 12 14 24 27 27 25 20 30 29 32 25 16 31 30 20 18 24 13 31 19 14 16 29
+@1831_575_1454_F3
+T11131130011012021120222231313211113
++
+17 19 28 30 23 28 21 20 23 24 28 15 25 32 28 25 30 29 21 27 26 31 14 11 19 10 12 21 10 14 6 13 11 7 11
+@1831_575_1500_F3
+T11010000223111301132313011130103021
++
+17 30 31 31 30 32 31 30 23 27 21 27 25 24 23 20 28 24 24 24 24 24 28 28 33 18 27 20 27 27 11 22 30 29 24
+@1831_575_1535_F3
+T21312012030320112110211013300131121
++
+31 33 28 31 27 31 31 33 30 25 32 31 31 28 29 31 30 21 23 31 28 30 31 20 30 22 26 25 21 27 27 26 29 20 27
+@1831_575_1724_F3
+T33123002323300220213232301000010010
++
+24 27 33 13 10 31 8 11 17 9 13 4 8 8 8 19 4 17 31 26 22 2 4 7 4 10 3 23 8 8 23 20 4 5 20
+@1831_575_1829_F3
+T21033321320111321230233302313101021
++
+17 17 7 9 6 4 13 18 3 10 22 8 31 5 4 3 6 18 9 10 9 2 14 2 14 9 10 15 13 28 5 2 8 10 15
+@1831_575_1898_F3
+T31330110303103131001110300102101330
++
+31 33 29 31 31 5 16 14 8 8 6 19 15 8 4 2 23 14 13 4 2 23 3 7 7 2 26 19 6 3 6 21 18 11 11
+@1831_575_1964_F3
+T22010201103202213200201301300232123
++
+16 29 18 24 8 31 17 27 17 14 31 10 24 30 17 28 5 8 29 29 31 9 21 17 28 20 5 17 27 19 17 13 6 30 10
+@1831_576_32_F3
+T13012100120333032211330300332022110
++
+10 27 29 30 29 30 28 22 27 17 8 20 17 17 26 29 27 27 31 19 15 31 29 22 15 19 27 29 20 28 17 18 31 10 5
+@1831_576_74_F3
+T30103313210232220102021223012112100
++
+23 28 31 31 30 31 29 7 30 30 27 33 20 30 31 31 31 24 27 31 29 27 10 29 27 26 31 6 26 29 21 24 21 16 30
+@1831_576_86_F3
+T10320000121033022010011030032211310
++
+22 23 16 16 8 17 25 9 13 10 10 20 27 14 25 18 10 19 18 24 17 19 9 8 8 14 25 11 21 5 17 24 8 17 14
+@1831_576_89_F3
+T02132333203332020020220033002121120
++
+17 8 21 24 10 11 6 13 19 28 12 11 29 14 29 7 9 3 2 8 18 15 18 15 9 6 7 11 4 8 17 2 2 3 11
+@1831_576_266_F3
+T30322223101312011300311121221333223
++
+27 31 31 30 28 26 27 30 22 28 31 29 24 11 29 31 16 3 5 5 23 24 3 14 25 29 22 6 18 16 22 23 4 5 21
+@1831_576_327_F3
+T22112331301313021321001332120332130
++
+27 31 30 31 21 31 31 26 27 31 30 29 27 31 29 28 28 18 31 25 28 28 27 18 31 31 29 20 18 27 24 29 27 21 28
+@1831_576_331_F3
+T32012133301311223023011232112333030
++
+26 12 17 8 10 7 9 13 9 16 14 26 20 4 13 12 24 5 2 14 16 6 10 7 3 9 3 2 2 7 8 4 14 3 13
+@1831_576_387_F3
+T00101211032031120300200222001230022
++
+14 23 8 13 3 20 2 16 2 9 4 13 3 2 2 13 9 2 3 4 2 2 12 4 11 10 11 16 2 5 4 13 4 8 8
+@1831_576_406_F3
+T00223133010210122221320212103132011
++
+27 19 27 29 4 4 16 19 25 9 19 21 20 21 8 5 27 17 20 16 5 17 10 18 2 5 16 24 11 21 5 19 29 20 7
+@1831_576_449_F3
+T31312001121222231100020132132100220
++
+7 10 6 5 6 13 11 11 3 14 10 13 8 3 3 23 5 4 2 10 30 5 11 2 8 12 5 2 2 2 22 11 10 2 9
+@1831_576_519_F3
+T03011321130130133213131202130321131
++
+28 28 19 21 27 24 22 31 29 17 14 21 30 26 17 27 19 32 23 23 16 29 24 16 17 16 10 27 16 14 19 13 24 10 22
+@1831_576_603_F3
+T21003032313302312320131221001330311
++
+31 31 19 21 28 31 34 13 30 30 27 32 22 24 31 31 26 12 27 31 31 29 17 24 33 30 29 20 20 27 33 22 20 24 23
+@1831_576_655_F3
+T02001023130302322122200313123123102
++
+28 31 32 32 24 31 31 27 21 9 29 31 31 20 14 27 31 29 24 6 28 26 29 22 10 31 30 24 29 14 24 26 10 11 4
+@1831_576_677_F3
+T13330131023320301031013230210103022
++
+21 17 24 15 5 14 9 15 2 5 6 5 11 13 17 6 2 5 9 3 5 7 6 2 12 4 7 3 9 2 4 3 8 2 4
+@1831_576_718_F3
+T31232113331022231333313223132231213
++
+3 19 2 2 2 3 15 2 2 2 4 7 2 2 2 2 2 2 2 2 2 11 2 2 2 2 4 2 2 2 2 3 2 2 2
+@1831_576_722_F3
+T31230320322120231333030031100313200
++
+7 9 11 12 11 2 2 13 8 9 5 7 9 16 4 9 7 4 7 12 17 2 10 8 12 2 13 5 12 2 4 4 3 6 8
+@1831_576_754_F3
+T30221231132103120112331303112133020
++
+13 19 14 14 2 7 13 3 8 6 6 11 29 7 5 2 16 3 27 11 2 2 4 7 7 11 2 20 30 2 15 9 4 16 9
+@1831_576_815_F3
+T23022113203032010120310102321001031
++
+27 18 29 31 30 24 29 31 30 33 28 29 28 26 29 32 30 30 30 28 29 25 17 20 28 19 13 17 20 30 21 27 20 22 13
+@1831_576_882_F3
+T13230020122320223230022031020110122
++
+30 17 21 30 23 30 31 25 19 29 31 29 24 21 30 30 27 27 28 20 6 16 27 29 24 23 19 21 28 27 24 27 16 29 23
+@1831_576_898_F3
+T10230132312121033222231132231233213
++
+28 31 31 34 17 30 34 29 30 27 29 31 23 23 21 33 30 26 30 13 30 30 23 22 28 33 27 23 27 16 20 30 30 28 13
+@1831_576_923_F3
+T21322010320202013210121223010123122
++
+22 21 13 20 16 28 26 13 21 24 24 27 24 21 29 26 26 19 24 27 26 26 16 16 26 27 31 20 24 25 24 28 21 19 22
+@1831_576_930_F3
+T21322103230123110323102012021020013
++
+17 2 9 15 13 17 5 13 25 7 7 2 6 16 19 6 2 2 12 8 2 4 3 3 17 4 2 3 14 16 5 2 4 14 2
+@1831_576_1019_F3
+T22032121213231032210312001103122312
++
+17 27 3 29 3 11 16 11 5 10 10 5 31 11 13 8 6 10 14 10 2 24 6 21 24 14 21 6 17 7 10 12 6 24 12
+@1831_576_1068_F3
+T00020232013101330112220321203220211
++
+25 29 29 27 28 19 30 26 31 22 28 30 30 24 30 26 24 29 20 31 24 30 25 23 31 25 28 20 6 26 22 26 6 2 19
+@1831_576_1131_F3
+T10233122200222132200313011102302210
++
+16 15 19 31 2 31 14 31 11 19 29 24 30 17 10 30 16 20 22 16 31 6 11 29 28 26 7 22 20 24 26 9 24 17 27
+@1831_576_1168_F3
+T31013300131121323122002113301002010
++
+29 31 34 34 21 31 31 17 30 24 28 29 22 30 26 22 21 27 26 19 21 22 31 26 24 11 15 4 17 21 6 6 11 19 3
+@1831_576_1207_F3
+T21001132013000122220301213221213010
++
+4 3 29 17 11 7 5 30 19 30 7 11 31 25 27 5 11 31 29 30 3 5 25 23 32 4 4 28 15 13 4 11 20 24 22
+@1831_576_1289_F3
+T03021210023110200323310302013121203
++
+31 24 27 29 16 33 31 31 26 22 31 31 21 21 18 28 28 17 23 11 20 6 25 23 27 27 11 13 28 17 29 29 13 20 15
+@1831_576_1329_F3
+T01100302102020113003022000120002100
++
+27 29 5 15 11 23 22 15 14 32 31 31 14 20 13 26 28 26 25 6 5 31 18 6 5 3 3 4 11 10 2 7 3 5 17
+@1831_576_1367_F3
+T12231310311233110031222013332011023
++
+30 30 31 31 27 29 31 31 28 31 27 31 27 28 31 29 31 30 30 24 25 30 27 28 29 28 27 23 26 20 24 31 22 23 22
+@1831_576_1416_F3
+T33021233100123120313103133211203221
++
+10 6 26 30 13 13 16 13 27 31 6 13 28 10 21 13 20 30 22 27 15 12 30 22 26 7 4 28 29 20 21 13 24 23 31
+@1831_576_1461_F3
+T32022221221112233100210223002100100
++
+2 16 5 22 19 2 7 2 7 5 2 2 3 2 11 6 2 2 2 4 2 4 4 2 9 2 5 4 4 2 2 4 4 4 6
+@1831_576_1605_F3
+T30232100103132133321330310210101221
++
+21 27 31 34 31 31 29 16 26 31 25 26 27 27 31 31 24 31 30 30 30 24 27 18 30 20 12 17 16 28 19 23 22 22 11
+@1831_576_1664_F3
+T31212101001312110320301201002011120
++
+31 31 30 29 30 31 28 32 25 31 31 29 31 28 6 28 27 29 28 8 13 29 28 24 9 23 8 7 22 2 14 10 10 26 8
+@1831_576_1671_F3
+T22313332300211322113223102231322313
++
+31 31 30 31 20 29 31 31 23 5 23 30 17 20 2 5 8 5 20 5 5 8 16 20 5 5 11 5 19 4 5 11 5 21 4
+@1831_576_1729_F3
+T11233312313010012320101302101023030
++
+31 30 31 30 27 30 27 31 29 32 30 14 28 28 30 29 30 22 29 30 31 23 27 30 31 29 24 24 26 29 27 10 15 28 29
+@1831_576_1880_F3
+T13032121323320213301001310130212003
++
+15 20 16 20 14 22 24 17 11 25 11 22 14 4 14 15 20 11 4 3 8 25 10 2 23 4 17 7 16 22 20 19 8 8 18
+@1831_576_1982_F3
+T00032312310201201333221212000011030
++
+11 31 31 30 31 11 32 29 27 31 24 31 28 30 31 24 33 28 23 27 21 31 31 21 31 17 27 32 30 29 13 22 27 10 31
+@1831_576_1987_F3
+T30022313313231221213220132001011320
++
+8 2 2 7 8 7 2 5 2 2 8 4 8 14 12 2 4 3 16 16 2 4 18 29 6 2 2 5 3 11 2 3 3 6 10
+@1831_576_2014_F3
+T31123201010100321122111102113021003
++
+31 31 31 24 11 33 17 24 12 20 29 6 30 11 10 30 22 24 10 14 32 6 26 6 17 31 6 20 5 14 24 11 21 5 16
+@1831_576_2028_F3
+T20131211210311112023201213120201100
++
+20 27 29 24 29 20 6 17 7 5 22 15 22 13 23 2 5 5 18 24 11 15 4 22 14 2 7 2 11 9 4 5 20 9 10
+@1831_577_40_F3
+T11111212330120012020200031313303003
++
+24 17 14 19 7 6 13 6 8 7 27 9 30 2 3 8 4 5 27 11 14 18 24 27 7 13 17 11 10 27 28 31 21 16 16
+@1831_577_119_F3
+T33111010021103320103213121313000102
++
+24 29 30 34 16 16 8 12 16 14 8 2 26 2 14 11 23 20 15 9 10 13 10 3 3 20 20 20 15 10 4 12 13 19 15
+@1831_577_133_F3
+T33213323012231300122223032223331322
++
+14 19 31 29 29 30 28 16 30 25 10 29 31 15 22 31 31 29 27 29 31 9 27 10 16 31 16 20 8 24 21 6 17 3 8
+@1831_577_255_F3
+T00332022110020300332022020202002232
++
+22 27 28 23 22 31 29 21 24 4 9 9 2 5 2 12 10 3 13 2 5 5 2 10 3 12 10 4 5 4 13 11 4 20 2
+@1831_577_281_F3
+T03032301231212301013112222111210000
++
+22 12 25 33 26 23 31 28 26 29 22 31 29 19 30 28 30 10 21 20 24 30 26 20 27 22 30 26 24 31 23 7 29 25 30
+@1831_577_288_F3
+T01031120221303100221230021013201130
++
+20 26 14 22 24 30 30 5 28 33 25 25 17 24 23 9 21 13 22 14 10 19 5 17 16 11 22 11 21 30 13 22 2 6 21
+@1831_577_322_F3
+T12003213220230103303201000130312202
++
+24 28 26 29 19 20 15 21 26 17 20 20 19 21 19 12 27 2 22 10 16 24 19 5 17 27 30 21 20 24 21 23 8 22 14
+@1831_577_362_F3
+T31203302330110131230331210121110220
++
+21 17 33 30 25 31 30 31 27 30 24 20 23 28 11 18 25 11 24 15 25 5 6 12 24 24 11 21 27 20 13 7 3 10 21
+@1831_577_382_F3
+T32312123033111120321303230201332100
++
+16 17 24 20 22 14 25 16 8 8 28 22 21 7 9 17 19 26 11 18 10 25 27 13 5 13 5 12 28 16 28 17 14 20 9
+@1831_577_464_F3
+T13020221011130013102221333131203302
++
+18 28 27 22 14 27 23 17 21 8 29 2 13 6 5 19 17 15 19 10 20 2 14 15 19 16 13 22 9 24 16 5 22 20 21
+@1831_577_488_F3
+T13200302330322110200323132101120301
++
+25 19 23 13 11 9 29 21 20 21 21 27 30 23 28 27 28 27 17 29 21 26 24 19 29 26 28 24 29 31 23 24 17 19 31
+@1831_577_511_F3
+T32232133031023313331312220133230333
++
+2 22 14 10 5 3 25 27 22 4 21 11 3 3 4 6 4 14 10 8 2 3 22 7 7 5 9 18 29 16 21 6 15 14 10
+@1831_577_545_F3
+T00112131333222303222210031322103233
++
+29 29 27 27 24 30 27 29 30 32 27 19 23 16 31 27 31 23 28 28 31 22 21 14 21 16 27 24 20 13 20 24 23 23 12
+@1831_577_559_F3
+T32321101303233120102011130022122002
++
+13 27 31 26 30 30 31 29 31 30 14 17 27 13 31 16 28 29 16 17 28 21 16 14 26 28 30 13 5 17 10 24 17 8 6
+@1831_577_562_F3
+T32331101301233110121000220031120031
++
+2 7 7 5 9 5 15 4 8 16 4 8 2 7 3 17 12 11 9 9 9 4 14 12 11 11 8 8 5 11 12 13 16 6 9
+@1831_577_637_F3
+T22113312122202103031023120301031110
++
+23 12 11 19 2 29 25 12 21 10 25 23 11 5 7 20 26 18 28 15 29 22 28 21 23 5 16 14 24 5 6 30 26 19 11
+@1831_577_641_F3
+T13031301101121223221212020032131113
++
+5 19 22 26 14 6 25 32 26 26 20 30 25 22 17 11 7 28 8 11 2 9 30 10 13 2 5 22 3 23 2 4 22 14 6
+@1831_577_692_F3
+T01122320200330103121202301211100220
++
+31 33 11 31 30 31 33 7 31 32 30 31 10 31 31 29 31 10 30 28 29 31 6 28 27 31 27 28 27 24 28 30 22 20 27
diff -r 03dbef081cf2 -r 9dd990a2fa94 test-data/combine_phiX_out_2.fastqsolid
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/combine_phiX_out_2.fastqsolid Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,576 @@
+@1831_573_1004_F3
+T00030133312212111300011021310132222
++
+%><C&&9952+C>5<.?<79,=42<292:<(9/-7
+@1831_573_1050_F3
+T03330322230322112131010221102122113
++
+);@@17?@=>7??@A8?==@4A?A4)&+.'&+'1,
+@1831_573_1067_F3
+T00023032023103330112220321200200002
++
+.++#%(',%/$,+&1#&),)&+'*'*%#$&#%('$
+@1831_573_1219_F3
+T11211130300300301021212330201121310
++
+@@@=4/+)5)408?'665>*/5?<61';<3,:,5-
+@1831_573_1242_F3
+T02132003121011302100130302112221121
++
+>>>::>17=A5?@@=;7A=;2.60>82<8=74+;;
+@1831_573_1333_F3
+T00200312330110101013212313222303112
++
+)='@#%3=.>)/34*117,,/6-4+.9742456<)
+@1831_573_1362_F3
+T21203131001102231121211101111321131
++
+CB@@?@@?@C@BA?@>@<@8A@?@'.8'?17:,+?
+@1831_573_1448_F3
+T23101211223113320132212331313312022
++
+77=A)?,.@A@@:@@<=/7)@<-#8662%9613&+
+@1831_573_1490_F3
+T31312310323301210002210123101021011
++
+@@@@?,@??@$><=>+%/*>*1,)?26&12'9%7.
+@1831_573_1523_F3
+T10322001220012223202202222001230222
++
+(,//*,#8''.6''6'2&27/80)%�'%#*,2'
+@1831_573_1578_F3
+T21202302100010020121100311022120111
++
+@?=@<@C@?@@??=>@;7<<8<694)3511(+1<.
+@1831_573_1647_F3
+T10222233301013033120132223202022123
++
+=?@@<@@???;A==@@;9?@?3=;6.4/;6:=/;4
+@1831_573_1684_F3
+T13310013212312012302121010221231123
++
+7>1:8<@39@@??9=;@@<>?@@<;<?7>76?9>?
+@1831_573_1769_F3
+T33220123030232212032021032302233131
++
+754749&&767%/7;3$-7;3#,3//#,45/#&06
+@1831_573_1853_F3
+T11000012111222211310103212122102331
++
+64./B@@72B+/4?@?7?+@9/+99.')2<2&)2&
+@1831_573_1943_F3
+T20300123032210232001222122001132111
++
+(>/*1,),@-)'0*>5'$/?6(a)/.&?8/(')A43,
+@1831_573_1977_F3
+T22212302221310332321002303112011311
++
+@@?6@8@@9A@=4633A7?9?<3:+7>'@%@?%32
+@1831_574_109_F3
+T13122332123301331032220222133301033
++
+07651#4817>@65<2:84716=788<1995.7?6
+@1831_574_148_F3
+T01200113123030012202302312200010231
++
+<;->3;;3>//>0;;7=,=4-4/+>029<9<624;
+@1831_574_185_F3
+T21123333211302300321312212102123121
++
+@<4;%%@7>#*>97%6;+8$#<07%1372$%<54#
+@1831_574_243_F3
+T30221011230013102201033131203302330
++
+#@@@95@=9?*><45$<@<4%@9?7#=?>7&>?97
+@1831_574_257_F3
+T00301133110002100302003000000102301
++
+%>>B>)@?>B@B?@1%*%,#+00.'(+&5&%#$3&
+@1831_574_293_F3
+T23213210003000103010211331300320130
++
+&')7'.*%#&$'/.$##$.$&*)+*$#8%&%#&&%
+@1831_574_389_F3
+T21032213032101122333230212301312020
++
+))$>/>8):2@:213;;.1)@3%64%+)<7)+$92
+@1831_574_575_F3
+T33313322100212102033032123311211302
++
+7?@>=?@>8@@@=@6*%&<='5@<<',0<=4*5/<
+@1831_574_592_F3
+T33103330110123102223122023103310330
++
+73-5)19,,<@>4067<2.-864346;9<1/;212
+@1831_574_617_F3
+T20021031221222021210021322200223211
++
+@>@?;>?=@==@>@=5?@+@:@40@><:0)')64-
+@1831_574_725_F3
+T32010020322130330333010031120313210
++
+9'>?52+5=;4$6;<8.1<47*9+?7(+5;-).)4
+@1831_574_734_F3
+T31132301200020012302210322213222222
++
+.-&.$2&<*(-%):/)%5:)/%7+,9034*A.?70
+@1831_574_824_F3
+T30212100033032123311211302122020013
++
+;@@@;;),+@<-<7;<&89??&29?<$2:A<);8?
+@1831_574_959_F3
+T11212130220131221111002020123311211
++
+7A=;+?@9;/<@;<8#&&/*%(%.0$0$2)+1$-1
+@1831_574_1062_F3
+T30112230030300221001032033012211012
++
+4@821<//:136/8<1/5.427.;>288/0<1$)/
+@1831_574_1092_F3
+T02013221200031031212200000111130310
++
+<8?.,98)03%#,,,(,++$'69'#9'7#';6.%2
+@1831_574_1103_F3
+T20313113203302010303131123021310121
++
+@??>?@=>@@A<>?=@==<:?<;58'&&):+35'1
+@1831_574_1116_F3
+T21011310123202303021021112021231011
++
+)(a)++,)/)?./)%<)2>.==:8?&;44&/&,)/*4
+@1831_574_1194_F3
+T23303101033322220312200222013013312
++
+:5>;,??9@9@?@1@@=@3=@>@4?@@94?75/,6
+@1831_574_1204_F3
+T21330132231321322010303023221203200
++
+AA5A5B@5:;@@,.9?A1?#.?;3),>82%)='7*
+@1831_574_1306_F3
+T10332133020311023221213100301001220
++
+02.7&%''.$&#'%##$#'#%')')$'$%$,)'.1
+@1831_574_1387_F3
+T12301331310032132101301303230121111
++
+-?A??:@?@@9?@@?9C;:>&).,,);&'<&7(/'
+@1831_574_1431_F3
+T12011023331022213001123111301312011
++
+>7?>9BA897;+8*=6#6.+5&-#26$0.,5&'$1
+@1831_574_1560_F3
+T32212313302203320020222113111011111
++
+=))&65<4=>99@:597(1&;+&(%&4#,#&&&*$
+@1831_574_1591_F3
+T23202101330322130221230222201123202
++
+==<A><?@78@<=;@&@6>8:?,><&&<7>8(8+9
+@1831_574_1624_F3
+T20122200222132200313011102302210332
++
+#<6.&(,7-+))7..'/;43.)927.(<85&13-)
+@1831_574_1826_F3
+T13012312120112021233030302313201111
++
++@<<,))459<?.+57'-'&6?1)(;1;0&%4,#$
+@1831_574_1903_F3
+T30232100103132133321330310210101221
++
+<956?@>;7@@@8:@>8><=9>9>@2=71?1:6;/
+@1831_574_1961_F3
+T02333101331223303300200011100032200
++
+6>-07-@>(2'@<#064@%5%@@6.&<<(9)=:47
+@1831_575_54_F3
+T13331330322230200102132110132013200
++
+>=@@68<2;<8;?@<>+9>7,,6972&57:4&9<8
+@1831_575_80_F3
+T33133322233322221003332230323312313
++
+*?5><@?/=5%(&.5)+#/0'/'>#$/'37#()6&
+@1831_575_192_F3
+T30013012111133003301010212123302011
++
+0:8<,9(.=/)#%8$,4'<,:)3/.'.5<,>-;7'
+@1831_575_197_F3
+T33312113010133020301131330001310032
++
+,-:?463@A:88?6?437<=.2&1.;@67.4@%2,
+@1831_575_223_F3
+T10121010002202131221210302100121020
++
+@?>?8?@:?;>+$'%&,+#$.--#%$1'&#-7$&'
+@1831_575_420_F3
+T31110103220000101310112112001020212
++
+82?.>?(-''2+..@),$%1@;')1)?+)7.')..
+@1831_575_434_F3
+T30312132120223101113223301211113311
++
+<@@><@B@>=@@?>><@?;)@?;6.?=4,'';/3)
+@1831_575_444_F3
+T33022120112320220100202132332113320
++
+<2@@;<.=?@<+=:A<<@?<</>@><(<8>4&5;>
+@1831_575_459_F3
+T31330310210101223330110231120131100
++
+?@@C@?A@@A@??A@@'6@@B'=;C@'4<=9,@1.
+@1831_575_506_F3
+T31210200111210121332321310110132301
++
+8?)2*5@3+.7=?A:8@,/&):@37/<89'+4*)*
+@1831_575_569_F3
+T10210201321323001012232322323002203
++
+/'9-,@29+479%&>9#&08=>7#9>,69/+'*3)
+@1831_575_622_F3
+T01100031122111023002323113231210111
++
+@A8B=@@?<@?<>>=?96<497)<4/<':4+;74+
+@1831_575_644_F3
+T11332003221203131231202200030110130
++
+<<8>.>&,+)8.10':5(/-62&*.=/%(.<&&18
+@1831_575_663_F3
+T32210013303112103322311101322021210
++
+@@@@@A</;A>@6>0792<5966:?;25+:><1,+
+@1831_575_681_F3
+T23131132033020103031013233200101021
++
+.72?.)25;96-14'*.03'#4#++$)/8+%/((&
+@1831_575_711_F3
+T03032331231101231020121210002332121
++
+4%+:2(#'1+.)&*45-#,<A-%4;>+))<;##*&
+@1831_575_730_F3
+T31010102200110302123032330331011111
++
+,%8<%-')5,*1&=#)(1*1)->7$.,4'4'&'*&
+@1831_575_904_F3
+T20111213300020123200333321131121211
++
+?<><.689@@7@<54:4=@>69=:+6-=42;8<:#
+@1831_575_938_F3
+T13103102220022130222233301013033120
++
+;:@@:?@;=8;>=;;:=<93<4.;<6:2<9;4)87
+@1831_575_970_F3
+T23201311301023133303023011202220221
++
+=@=@=;@@><@@:9<:=?;>@=?9>>?@:2===<5
+@1831_575_991_F3
+T33312212031111111012212120321121210
++
+@>>;7???/4<:::,#&*%'$--5-#(7)&&,-)%
+@1831_575_1138_F3
+T23320002011320012120333103233301321
++
+<=0;%1936+?96?,?5<:2>@6@<:;4>.7;*:1
+@1831_575_1157_F3
+T13121323330203331222022230133102321
++
+@B@B>?A?A@?9'?;?&8?@@6;<@=+<:99+965
+@1831_575_1180_F3
+T32003310122102323303101123331133110
++
+/<B>5?':/78?;1;55:997@@>94=7<186->7
+@1831_575_1283_F3
+T02232200301300220130032321323131333
++
+%C@A54><?A78@<?2>:#>=?@2>80:'?69.'7
+@1831_575_1302_F3
+T01201303312333123130200123201013021
++
+&12>/#2'&-2&%'7+$%*#$/1(&&12/$,2,,*
+@1831_575_1310_F3
+T31332131312021303211310220101211133
++
+6<<>663?99@(@7=11@:@@/7??<@<;>'3-7;
+@1831_575_1321_F3
+T11001010233200122122022023000203212
++
+0;B@?@>=A@<A?>@>?6>@5>'4@9?)7@7?/89
+@1831_575_1373_F3
+T21213011223311001221321132013121220
++
+A@@@>@;=9<@??7@>@:@;@;17?630/7=4,2<
+@1831_575_1419_F3
+T33222200303001021230212332001013020
++
+>//3->&-.->%11/@&/&7:<,-1=,+2<6'%&<
+@1831_575_1436_F3
+T13210313021212303321202113301220331
++
+*2@=;39*3<*4<:>52>>9'7:<='0=>1'136<
+@1831_575_1442_F3
+T33132010022331132101132123132020222
++
+8>58<?7>+1B6-/9<<:5?>A:1@?539.@4/1>
+@1831_575_1454_F3
+T11131130011012021120222231313211113
++
+24=?8=6589=0:A=:?>6<;@/,4+-6+/'.,(,
+@1831_575_1500_F3
+T11010000223111301132313011130103021
++
+2?@@?A@?8<6<:985=99999==B3<5<<,7?>9
+@1831_575_1535_F3
+T21312012030320112110211013300131121
++
+@B=@<@@B?:A@@=>@?68@=?@5?7;:6<<;>5<
+@1831_575_1724_F3
+T33123002323300220213232301000010010
++
+9<B.+@),2*.%)))4%2@;7#%(%+$8))85%&5
+@1831_575_1829_F3
+T21033321320111321230233302313101021
++
+22(*'%.3$+7)@&%$'3*+*#/#/*+0.=&#)+0
+@1831_575_1898_F3
+T31330110303103131001110300102101330
++
+@B>@@&1/))'40)%#8/.%#8$((#;4'$'63,,
+@1831_575_1964_F3
+T22010201103202213200201301300232123
++
+1>39)@2<2/@+9?2=&)>>@*62=5&2<42.'?+
+@1831_576_32_F3
+T13012100120333032211330300332022110
++
++<>?>?=7<2)522;><<@40@>704<>5=23@+&
+@1831_576_74_F3
+T30103313210232220102021223012112100
++
+8=@@?@>(??<B5?@@@9<@><+><;@';>6961?
+@1831_576_86_F3
+T10320000121033022010011030032211310
++
+7811)2:*.++5</:3+43924*))/:,6&29)2/
+@1831_576_89_F3
+T02132333203332020020220033002121120
++
+2)69+,'.4=-,>/>(*$#)3030*'(,%)2##$,
+@1831_576_266_F3
+T30322223101312011300311121221333223
++
+<@@?=;<?7=@>9,>@1$&&89$/:>7'3178%&6
+@1831_576_327_F3
+T22112331301313021321001332120332130
++
+<@?@6@@;<@?><@>==3@:==<3@@>53<9><6=
+@1831_576_331_F3
+T32012133301311223023011232112333030
++
+;-2)+(*.*1/;5%.-9&#/1'+($*$##()%/$.
+@1831_576_387_F3
+T00101211032031120300200222001230022
++
+/8).$5#1#*%.$##.*#$%##-%,+,1#&%.%))
+@1831_576_406_F3
+T00223133010210122221320212103132011
++
+<4<>%%14:*4656)&<251&2+3#&19,6&4>5(
+@1831_576_449_F3
+T31312001121222231100020132132100220
++
+(+'&'.,,$/+.)$$8&%#+?&,#)-&###7,+#*
+@1831_576_519_F3
+T03011321130130133213131202130321131
++
+==46<97@>2/6?;2<4A881>9121+<1/4.9+7
+@1831_576_603_F3
+T21003032313302312320131221001330311
++
+@@46=@C.??<A79@@;-<@@>29B?>55<B7598
+@1831_576_655_F3
+T02001023130302322122200313123123102
++
+=@AA9@@<6*>@@5/<@>9'=;>7+@?9>/9;+,%
+@1831_576_677_F3
+T13330131023320301031013230210103022
++
+6290&/*0#&'&,.2'#&*$&('#-%($*#%$)#%
+@1831_576_718_F3
+T31232113331022231333313223132231213
++
+$4###$0###%(#########,####%####$###
+@1831_576_722_F3
+T31230320322120231333030031100313200
++
+(*,-,##.)*&(*1%*(%(-2#+)-#.&-#%%$')
+@1831_576_754_F3
+T30221231132103120112331303112133020
++
+.4//#(.$)'',>($<,##%((,#5?#0*%1*
+@1831_576_815_F3
+T23022113203032010120310102321001031
++
+<3>@?9>@?B=>=;>A???=>:25=4.25?6<57.
+@1831_576_882_F3
+T13230020122320223230022031020110122
++
+?26?8?@:4>@>96??<<=5'1<>9846=<9<1>8
+@1831_576_898_F3
+T10230132312121033222231132231233213
++
+=@@C2?C>?<>@886B?;?.??87=B<8<15??=.
+@1831_576_923_F3
+T21322010320202013210121223010123122
++
+76.51=;.699<96>;;49<;;11;<@59:9=647
+@1831_576_930_F3
+T21322103230123110323102012021020013
++
+2#*0.2&.:((#'14'##-)#%$$2%#$/1&#%/#
+@1831_576_1019_F3
+T22032121213231032210312001103122312
++
+2<$>$,1,&++&@,.)'+/+#9'69/6'2(+-'9-
+@1831_576_1068_F3
+T00020232013101330112220321203220211
++
+:>><=4?;@7=??9?;9>5@9?:8@:=5';7;'#4
+@1831_576_1131_F3
+T10233122200222132200313011102302210
++
+104@#@/@,4>9?2+?1571@',>=;(759;*92<
+@1831_576_1168_F3
+T31013300131121323122002113301002010
++
+>@CC6@@2?9=>7?;76<;467@;9,0%26'',4$
+@1831_576_1207_F3
+T21001132013000122220301213221213010
++
+%$>2,(&?4?(,@:<&,@>?$&:8A%%=0.%,597
+@1831_576_1289_F3
+T03021210023110200323310302013121203
++
+@9<>1B@@;7@@663==28,5':8<<,.=2>>.50
+@1831_576_1329_F3
+T01100302102020113003022000120002100
++
+<>&0,870/A@@/5.;=;:'&@3'&$$%,+#($&2
+@1831_576_1367_F3
+T12231310311233110031222013332011023
++
+??@@<>@@=@<@<=@>@??9:?<=>=<8;59@787
+@1831_576_1416_F3
+T33021233100123120313103133211203221
++
++';?..1.<@'.=+6.5?7<0-?7;(%=>56.98@
+@1831_576_1461_F3
+T32022221221112233100210223002100100
++
+#1&74#(#(&##$#,'###%#%%#*#&%%##%%%'
+@1831_576_1605_F3
+T30232100103132133321330310210101221
++
+6<@C@@>1;@:;<<@@9@???9<3?5-21=4877,
+@1831_576_1664_F3
+T31212101001312110320301201002011120
++
+@@?>?@=A:@@>@='=<>=).>=9*8)(7#/++;)
+@1831_576_1671_F3
+T22313332300211322113223102231322313
++
+@@?@5>@@8&8?25#&)&5&&)15&&,&4%&,&6%
+@1831_576_1729_F3
+T11233312313010012320101302101023030
++
+@?@?<?<@>A?/==?>?7>?@8<?@>99;><+0=>
+@1831_576_1880_F3
+T13032121323320213301001310130212003
++
+0515/792,:,7/%/05,%$):+#8%2(1754))3
+@1831_576_1982_F3
+T00032312310201201333221212000011030
++
+,@@?@,A><@9@=?@9B=8<6@@6@2<A?>.7<+@
+@1831_576_1987_F3
+T30022313313231221213220132001011320
++
+)##()(#&##)%)/-#%$11#%3>'##&$,#$$'+
+@1831_576_2014_F3
+T31123201010100321122111102113021003
++
+@@@9,B29-5>'?,+?79+/A';'2@'5&/9,6&1
+@1831_576_2028_F3
+T20131211210311112023201213120201100
++
+5<>9>5'2(&707.8#&&39,0%7/#(#,*%&5*+
+@1831_577_40_F3
+T11111212330120012020200031313303003
++
+92/4('.')(<*?#$)%&<,/39<(.2,+<=@611
+@1831_577_119_F3
+T33111010021103320103213121313000102
++
+9>?C11)-1/)#;#/,850*+.+$$5550+%-.40
+@1831_577_133_F3
+T33213323012231300122223032223331322
++
+/4@>>?=1?:+>@07@@><>@*<+1@15)96'2$)
+@1831_577_255_F3
+T00332022110020300332022020202002232
++
+7<=87@>69%**#&#-+$.#&&#+$-+%&%.,%5#
+@1831_577_281_F3
+T03032301231212301013112222111210000
++
+7-:B;8@=;>7@>4?=?+659?;5<7?;9@8(>:?
+@1831_577_288_F3
+T01031120221303100221230021013201130
++
+5;/79??&=B::298*6.7/+4&21,7,6?.7#'6
+@1831_577_322_F3
+T12003213220230103303201000130312202
++
+9=;>4506;255464-<#7+194&2<?65968)7/
+@1831_577_362_F3
+T31203302330110131230331210121110220
++
+62B?:@?@<?958=,3:,90:&'-99,6<5.($+6
+@1831_577_382_F3
+T32312123033111120321303230201332100
++
+12957/:1))=76(*24;,3+:<.&.&-=1=2/5*
+@1831_577_464_F3
+T13020221011130013102221333131203302
++
+3=<7/<826)>#.'&4204+5#/041.7*91&756
+@1831_577_488_F3
+T13200302330322110200323132101120301
++
+:48.,*>6566<?8=<=<2>6;94>;=9>@8924@
+@1831_577_511_F3
+T32232133031023313331312220133230333
++
+#7/+&$:<7%6,$$%'%/+)#$7((&*3>16'0/+
+@1831_577_545_F3
+T00112131333222303222210031322103233
++
+>><<9?<>?A<481@<@8==@76/61<95.5988-
+@1831_577_559_F3
+T32321101303233120102011130022122002
++
+.<@;??@>@?/2<.@1=>12=61/;=?.&2+92)'
+@1831_577_562_F3
+T32331101301233110121000220031120031
++
+#((&*&0%)1%)#($2-,***%/-,,))&,-.1'*
+@1831_577_637_F3
+T22113312122202103031023120301031110
++
+8-,4#>:-6+:8,&(5;3=0>7=68&1/9&'?;4,
+@1831_577_641_F3
+T13031301101121223221212020032131113
++
+&47;/':A;;5?:72,(=),#*?+.#&7$8#%7/'
+@1831_577_692_F3
+T01122320200330103121202301211100220
++
+@B,@?@B(@A?@+@@>@+?=>@'=<@<=<9=?75<
diff -r 03dbef081cf2 -r 9dd990a2fa94 test-data/fastq_combiner_in_1.fasta
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/fastq_combiner_in_1.fasta Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,14 @@
+>SRR014849.50939 EIXKN4201BA2EC length=135
+GAAATTTCAGGGCCACCTTTTTTTT
+GATAGAATAATGGAGAAAATTAAAAGCTGTACATATACCAATGAACAATAAATCAATACATAAAAAAGGA
+GAAGTTGGAACCGAAAGGGTTTGAATTCAAACCCTTTCGG
+>SRR014849.110027 EIXKN4201APUB0 length=131
+CTTCAAATGATTC
+CGGGACTGTTGGAACCGAAAGGGTTTGAATTCAAACCC
+TTTTCGGTTCCAACTCGCCGTCCGAATAATCCGTTCAAAATCTTGGCCTGTCAAAACGACTTTACGAC
+CAGAACGATCCG
+>SRR014849.203935 EIXKN4201B4HU6 length=144
+AACCCGTCCCA
+TCAAAGATTTTGGTTGGAACCCGAAAGGGTTTTGAATTCAAACC
+CCTTTCGGTTCCAACTATTCAATTGTTTAACTTTTTT
+TAAATTGATGGTCTGTTGGACCATTTGTAATAATCCCCATCGGAATTTCTTT
diff -r 03dbef081cf2 -r 9dd990a2fa94 test-data/fastq_combiner_in_1.qual454
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/fastq_combiner_in_1.qual454 Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,22 @@
+>SRR014849.110027 EIXKN4201APUB0 length=131
+=B::@<':=5A9?7EA0:=<<?6@7<3?5<
+@;%D?-B=)::0=4<D?
+-EA/D@2";B;B:
+B:A9;;=<B;;<B;<B;<B;:A;<A;8FB7
++=<B;B:A9<1:=FB6(<=<<EA0956;<2
+==A8===:@8=
+>SRR014849.203935 EIXKN4201B4HU6 length=144
+A;@;%75?:#<<9EA1;=EA3%B;B;A;B;
+@;%9EA1EA1EA3%<B;A;8EA0D@
+3$EA1
+=B;A;B;B;:=:B;:B:A9:EA0A9<FA81
++&"D?-B;4<::/<;=:A98-5?6=C>+8<
+<3;=4:DA3%<;=8-9.A=):B=*
+>SRR014849.50939 EIXKN4201BA2EC length=135
+;C?-EA/=<EA/B;<B;D>60,)%"<=:5<
+@8<B;=B;<;E
+A4'@8FB6*<:=<<===<=
+;=B:A9<<B;=B;=EA0:<B:<<=<<FA81
++$?6;<A9=<3>5@7@8<A<(B=*A=)<<2
+?57B=*B=*D?-:=4
+
diff -r 03dbef081cf2 -r 9dd990a2fa94 test-data/fastq_stats_1_out.tabular
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/fastq_stats_1_out.tabular Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,37 @@
+#column count min max sum mean Q1 med Q3 IQR lW rW outliers A_Count C_Count G_Count T_Count N_Count other_bases other_base_count
+1 9 23 34 288 32.0 33.0 33.0 33.0 0.0 33 33 23,34 3 1 4 1 0
+2 9 28 33 287 31.8888888889 30.5 33.0 33.0 2.5 28 33 3 3 2 1 0
+3 9 13 34 268 29.7777777778 27.5 33.0 33.5 6.0 27 34 13 5 1 0 3 0
+4 9 17 33 261 29.0 24.5 33.0 33.0 8.5 17 33 1 2 3 3 0
+5 9 22 33 269 29.8888888889 26.0 33.0 33.0 7.0 22 33 3 3 3 0 0
+6 9 22 33 277 30.7777777778 29.0 33.0 33.0 4.0 28 33 22 5 3 0 1 0
+7 9 21 33 258 28.6666666667 23.0 33.0 33.0 10.0 21 33 4 1 3 1 0
+8 9 12 33 263 29.2222222222 26.5 33.0 33.0 6.5 21 33 12 2 1 1 5 0
+9 9 29 33 290 32.2222222222 31.5 33.0 33.0 1.5 30 33 29 3 3 2 1 0
+10 9 23 33 277 30.7777777778 28.0 33.0 33.0 5.0 23 33 1 4 2 2 0
+11 9 12 33 245 27.2222222222 21.0 31.0 33.0 12.0 12 33 5 2 1 1 0
+12 9 13 33 214 23.7777777778 14.0 24.0 33.0 19.0 13 33 2 4 2 1 0
+13 9 5 33 249 27.6666666667 26.5 31.0 33.0 6.5 24 33 5 2 1 1 5 0
+14 9 5 33 233 25.8888888889 19.5 33.0 33.0 13.5 5 33 3 3 2 1 0
+15 9 15 33 251 27.8888888889 22.5 33.0 33.0 10.5 15 33 5 1 1 2 0
+16 9 23 34 269 29.8888888889 23.5 33.0 33.0 9.5 23 34 3 1 2 3 0
+17 9 13 34 266 29.5555555556 27.0 33.0 33.0 6.0 21 34 13 2 3 1 3 0
+18 9 21 34 272 30.2222222222 26.0 33.0 33.0 7.0 21 34 0 5 1 3 0
+19 9 5 34 244 27.1111111111 24.0 30.0 33.0 9.0 21 34 5 4 4 1 0 0
+20 9 11 34 241 26.7777777778 17.0 32.0 33.0 16.0 11 34 3 4 2 0 0
+21 9 13 33 240 26.6666666667 22.5 27.0 33.0 10.5 13 33 1 4 0 4 0
+22 9 5 33 190 21.1111111111 9.0 21.0 33.0 24.0 5 33 1 4 0 3 1
+23 9 5 33 205 22.7777777778 14.0 26.0 33.0 19.0 5 33 4 4 1 0 0
+24 9 5 33 247 27.4444444444 24.5 31.0 33.0 8.5 21 33 5 1 5 1 2 0
+25 9 11 34 241 26.7777777778 18.5 33.0 33.0 14.5 11 34 3 4 0 2 0
+26 9 5 33 212 23.5555555556 11.5 31.0 33.0 21.5 5 33 0 6 0 3 0
+27 9 5 33 227 25.2222222222 20.0 26.0 33.0 13.0 5 33 3 4 1 1 0
+28 9 21 33 255 28.3333333333 22.5 31.0 33.0 10.5 21 33 2 4 3 0 0
+29 9 5 33 228 25.3333333333 19.5 30.0 33.0 13.5 5 33 2 4 1 2 0
+30 9 10 33 213 23.6666666667 13.5 28.0 33.0 19.5 10 33 3 4 2 0 0
+31 9 5 33 236 26.2222222222 21.0 31.0 33.0 12.0 5 33 1 4 1 3 0
+32 9 5 33 210 23.3333333333 11.5 29.0 33.0 21.5 5 33 3 3 0 3 0
+33 9 5 33 183 20.3333333333 8.0 21.0 33.0 25.0 5 33 1 4 2 2 0
+34 9 5 33 150 16.6666666667 6.0 17.0 25.5 19.5 5 33 3 4 1 1 0
+35 9 13 33 217 24.1111111111 19.5 24.0 31.0 11.5 13 33 1 4 1 3 0
+36 9 5 33 195 21.6666666667 11.5 21.0 32.5 21.0 5 33 3 2 1 3 0
diff -r 03dbef081cf2 -r 9dd990a2fa94 test-data/fastq_to_fasta_python_1.out
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/fastq_to_fasta_python_1.out Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,4 @@
+>FAKE0001 Original version has PHRED scores from 0 to 93 inclusive (in that order)
+ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTAC
+>FAKE0002 Original version has PHRED scores from 93 to 0 inclusive (in that order)
+CATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCA
diff -r 03dbef081cf2 -r 9dd990a2fa94 test-data/fastq_to_fasta_python_2.out
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/fastq_to_fasta_python_2.out Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,4 @@
+>FAKE0001 Original version has PHRED scores from 0 to 93 inclusive (in that order)
+G2131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131
+>FAKE0002 Original version has PHRED scores from 93 to 0 inclusive (in that order)
+G3131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131
diff -r 03dbef081cf2 -r 9dd990a2fa94 test-data/fastq_trimmer_out1.fastqsanger
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/fastq_trimmer_out1.fastqsanger Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,8 @@
+@FAKE0001 Original version has PHRED scores from 0 to 93 inclusive (in that order)
+CGTA
++
+NOPQ
+@FAKE0002 Original version has PHRED scores from 93 to 0 inclusive (in that order)
+ATGC
++
+QPON
diff -r 03dbef081cf2 -r 9dd990a2fa94 test-data/illumina_full_range_as_sanger.fastqsanger
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/illumina_full_range_as_sanger.fastqsanger Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,8 @@
+@FAKE0005 Original version has PHRED scores from 0 to 62 inclusive (in that order)
+ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACG
++
+!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
+@FAKE0006 Original version has PHRED scores from 62 to 0 inclusive (in that order)
+GCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCA
++
+_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!
diff -r 03dbef081cf2 -r 9dd990a2fa94 test-data/illumina_full_range_as_solexa.fastqsolexa
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/illumina_full_range_as_solexa.fastqsolexa Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,8 @@
+@FAKE0005 Original version has PHRED scores from 0 to 62 inclusive (in that order)
+ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACG
++
+;;>@BCEFGHJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
+@FAKE0006 Original version has PHRED scores from 62 to 0 inclusive (in that order)
+GCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCA
++
+~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJHGFECB@>;;
diff -r 03dbef081cf2 -r 9dd990a2fa94 test-data/illumina_full_range_as_solid.fastqsolid
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/illumina_full_range_as_solid.fastqsolid Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,8 @@
+@FAKE0005 Original version has PHRED scores from 0 to 62 inclusive (in that order)
+G213131313131313131313131313131313131313131313131313131313131313
++
+!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
+@FAKE0006 Original version has PHRED scores from 62 to 0 inclusive (in that order)
+G031313131313131313131313131313131313131313131313131313131313131
++
+_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!
diff -r 03dbef081cf2 -r 9dd990a2fa94 test-data/illumina_full_range_original_illumina.fastqillumina
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/illumina_full_range_original_illumina.fastqillumina Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,8 @@
+@FAKE0005 Original version has PHRED scores from 0 to 62 inclusive (in that order)
+ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACG
++
+@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
+@FAKE0006 Original version has PHRED scores from 62 to 0 inclusive (in that order)
+GCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCA
++
+~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@
diff -r 03dbef081cf2 -r 9dd990a2fa94 test-data/sanger_full_range_as_decimal_sanger.fastqsanger
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/sanger_full_range_as_decimal_sanger.fastqsanger Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,8 @@
+@FAKE0001 Original version has PHRED scores from 0 to 93 inclusive (in that order)
+ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTAC
++
+0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
+@FAKE0002 Original version has PHRED scores from 93 to 0 inclusive (in that order)
+CATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCA
++
+93 92 91 90 89 88 87 86 85 84 83 82 81 80 79 78 77 76 75 74 73 72 71 70 69 68 67 66 65 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
diff -r 03dbef081cf2 -r 9dd990a2fa94 test-data/sanger_full_range_as_illumina.fastqillumina
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/sanger_full_range_as_illumina.fastqillumina Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,8 @@
+@FAKE0001 Original version has PHRED scores from 0 to 93 inclusive (in that order)
+ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTAC
++
+@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+@FAKE0002 Original version has PHRED scores from 93 to 0 inclusive (in that order)
+CATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCA
++
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@
diff -r 03dbef081cf2 -r 9dd990a2fa94 test-data/sanger_full_range_as_rna.fastqsanger
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/sanger_full_range_as_rna.fastqsanger Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,8 @@
+@FAKE0001 Original version has PHRED scores from 0 to 93 inclusive (in that order)
+ACGUACGUACGUACGUACGUACGUACGUACGUACGUACGUACGUACGUACGUACGUACGUACGUACGUACGUACGUACGUACGUACGUACGUAC
++
+!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
+@FAKE0002 Original version has PHRED scores from 93 to 0 inclusive (in that order)
+CAUGCAUGCAUGCAUGCAUGCAUGCAUGCAUGCAUGCAUGCAUGCAUGCAUGCAUGCAUGCAUGCAUGCAUGCAUGCAUGCAUGCAUGCAUGCA
++
+~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!
diff -r 03dbef081cf2 -r 9dd990a2fa94 test-data/sanger_full_range_as_solexa.fastqsolexa
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/sanger_full_range_as_solexa.fastqsolexa Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,8 @@
+@FAKE0001 Original version has PHRED scores from 0 to 93 inclusive (in that order)
+ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTAC
++
+;;>@BCEFGHJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+@FAKE0002 Original version has PHRED scores from 93 to 0 inclusive (in that order)
+CATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCA
++
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJHGFECB@>;;
diff -r 03dbef081cf2 -r 9dd990a2fa94 test-data/sanger_full_range_as_solid.fastqsolid
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/sanger_full_range_as_solid.fastqsolid Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,8 @@
+@FAKE0001 Original version has PHRED scores from 0 to 93 inclusive (in that order)
+G2131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131
++
+!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
+@FAKE0002 Original version has PHRED scores from 93 to 0 inclusive (in that order)
+G3131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131
++
+~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!
diff -r 03dbef081cf2 -r 9dd990a2fa94 test-data/sanger_full_range_original_sanger.fastqsanger
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/sanger_full_range_original_sanger.fastqsanger Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,8 @@
+@FAKE0001 Original version has PHRED scores from 0 to 93 inclusive (in that order)
+ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTAC
++
+!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
+@FAKE0002 Original version has PHRED scores from 93 to 0 inclusive (in that order)
+CATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCA
++
+~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!
diff -r 03dbef081cf2 -r 9dd990a2fa94 test-data/sanger_full_range_rev_comp.fastqsanger
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/sanger_full_range_rev_comp.fastqsanger Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,8 @@
+@FAKE0001 Original version has PHRED scores from 0 to 93 inclusive (in that order)
+GTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT
++
+~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!
+@FAKE0002 Original version has PHRED scores from 93 to 0 inclusive (in that order)
+TGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATG
++
+!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
diff -r 03dbef081cf2 -r 9dd990a2fa94 test-data/sanger_full_range_rev_comp_1_seq.fastqsanger
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/sanger_full_range_rev_comp_1_seq.fastqsanger Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,8 @@
+@FAKE0001 Original version has PHRED scores from 0 to 93 inclusive (in that order)
+GTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT
++
+~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!
+@FAKE0002 Original version has PHRED scores from 93 to 0 inclusive (in that order)
+CATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCA
++
+~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!
diff -r 03dbef081cf2 -r 9dd990a2fa94 test-data/solexa_full_range_as_decimal_solexa.fastqsolexa
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/solexa_full_range_as_decimal_solexa.fastqsolexa Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,8 @@
+@FAKE0003 Original version has Solexa scores from -5 to 62 inclusive (in that order)
+ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT
++
+-5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
+@FAKE0004 Original version has Solexa scores from 62 to -5 inclusive (in that order)
+TGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCA
++
+62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 -1 -2 -3 -4 -5
diff -r 03dbef081cf2 -r 9dd990a2fa94 test-data/solexa_full_range_as_illumina.fastqillumina
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/solexa_full_range_as_illumina.fastqillumina Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,8 @@
+@FAKE0003 Original version has Solexa scores from -5 to 62 inclusive (in that order)
+ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT
++
+AABBCCDDEEFGHIJJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
+@FAKE0004 Original version has Solexa scores from 62 to -5 inclusive (in that order)
+TGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCA
++
+~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJJIHGFEEDDCCBBAA
diff -r 03dbef081cf2 -r 9dd990a2fa94 test-data/solexa_full_range_as_sanger.fastqsanger
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/solexa_full_range_as_sanger.fastqsanger Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,8 @@
+@FAKE0003 Original version has Solexa scores from -5 to 62 inclusive (in that order)
+ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT
++
+""##$$%%&&'()*++,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
+@FAKE0004 Original version has Solexa scores from 62 to -5 inclusive (in that order)
+TGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCA
++
+_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,++*)('&&%%$$##""
diff -r 03dbef081cf2 -r 9dd990a2fa94 test-data/solexa_full_range_as_solid.fastqsolid
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/solexa_full_range_as_solid.fastqsolid Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,8 @@
+@FAKE0003 Original version has Solexa scores from -5 to 62 inclusive (in that order)
+G21313131313131313131313131313131313131313131313131313131313131313131
++
+""##$$%%&&'()*++,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
+@FAKE0004 Original version has Solexa scores from 62 to -5 inclusive (in that order)
+G11313131313131313131313131313131313131313131313131313131313131313131
++
+_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,++*)('&&%%$$##""
diff -r 03dbef081cf2 -r 9dd990a2fa94 test-data/solexa_full_range_original_solexa.fastqsolexa
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/solexa_full_range_original_solexa.fastqsolexa Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,8 @@
+@FAKE0003 Original version has Solexa scores from -5 to 62 inclusive (in that order)
+ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT
++
+;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
+@FAKE0004 Original version has Solexa scores from 62 to -5 inclusive (in that order)
+TGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCA
++
+~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;
diff -r 03dbef081cf2 -r 9dd990a2fa94 test-data/split_pair_reads_1.fastqsanger
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/split_pair_reads_1.fastqsanger Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,20 @@
+@HWI-EAS91_1_30788AAXX:7:21:1542:1758/1
+GTCAATTGTACTGGTCAATACTAAAAGAATAGGATC
++HWI-EAS91_1_30788AAXX:7:21:1542:1758/1
+hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
+@HWI-EAS91_1_30788AAXX:7:22:1621:462/1
+ATAATGGCTATTATTGTGGGGGGGATGATGCTGGAA
++HWI-EAS91_1_30788AAXX:7:22:1621:462/1
+hhhhhhhhhhhhQAhh@hhhhNhhhfhMbCIScC?h
+@HWI-EAS91_1_30788AAXX:7:45:408:807/1
+TACCCGATTTTTTGCTTTCCACTTTATCCTACCCTT
++HWI-EAS91_1_30788AAXX:7:45:408:807/1
+hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
+@HWI-EAS91_1_30788AAXX:7:49:654:1439/1
+CTAACTCTATTTATTGTATTTCAACTAAAAATCTCA
++HWI-EAS91_1_30788AAXX:7:49:654:1439/1
+hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
+@HWI-EAS91_1_30788AAXX:7:64:947:234/1
+TATCAAAAAAGAATATAATCTGAATCAACACTACAA
++HWI-EAS91_1_30788AAXX:7:64:947:234/1
+hhhhhhhhhhhhhhhhhhhhhhhRhhehhahhhhhJ
diff -r 03dbef081cf2 -r 9dd990a2fa94 test-data/split_pair_reads_2.fastqsanger
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/split_pair_reads_2.fastqsanger Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,20 @@
+@HWI-EAS91_1_30788AAXX:7:21:1542:1758/2
+GCTCCTAGCATCTGGAGTCTCTATCACCTGAGCCCA
++HWI-EAS91_1_30788AAXX:7:21:1542:1758/2
+hhhhhhhhhhhhhhhhhhhhhhhh`hfhhVZSWehR
+@HWI-EAS91_1_30788AAXX:7:22:1621:462/2
+ACTAGCCCCAATATCAATCCTATATCAAATCTCACC
++HWI-EAS91_1_30788AAXX:7:22:1621:462/2
+hJhhhhChhhJhhhRhhKhePhc\KhhV\KhXhJhh
+@HWI-EAS91_1_30788AAXX:7:45:408:807/2
+ATGAGTGCTAGGATCAGGATGGAGAGGATTAGGGCT
++HWI-EAS91_1_30788AAXX:7:45:408:807/2
+hhhhhhhhhhhhhhhhhh`hhhZh`hhhhhRXhhYh
+@HWI-EAS91_1_30788AAXX:7:49:654:1439/2
+TAGGTTTATTGATAGTTGTGTTGTTGGTGTAAATGG
++HWI-EAS91_1_30788AAXX:7:49:654:1439/2
+hhhhhhhhhhhhhhhhhhhhhhhhhdhh_hG\XhU@
+@HWI-EAS91_1_30788AAXX:7:64:947:234/2
+CCTATTAGTGTGTAGAATAGGAAGTAGAGGCCTGCG
++HWI-EAS91_1_30788AAXX:7:64:947:234/2
+hhhhhhhh^hPhWfhhhhThWUhhfhh_hhNIVPUd
diff -r 03dbef081cf2 -r 9dd990a2fa94 test-data/split_paired_reads_out_1.fastqsanger
--- a/test-data/split_paired_reads_out_1.fastqsanger Tue Feb 23 16:12:20 2010 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-@HWI-EAS91_1_30788AAXX:7:21:1542:1758/1
-GTCAATTGTACTGGTCAATACTAAAAGAATAGGATC
-+HWI-EAS91_1_30788AAXX:7:21:1542:1758/1
-hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
-@HWI-EAS91_1_30788AAXX:7:22:1621:462/1
-ATAATGGCTATTATTGTGGGGGGGATGATGCTGGAA
-+HWI-EAS91_1_30788AAXX:7:22:1621:462/1
-hhhhhhhhhhhhQAhh@hhhhNhhhfhMbCIScC?h
-@HWI-EAS91_1_30788AAXX:7:45:408:807/1
-TACCCGATTTTTTGCTTTCCACTTTATCCTACCCTT
-+HWI-EAS91_1_30788AAXX:7:45:408:807/1
-hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
-@HWI-EAS91_1_30788AAXX:7:49:654:1439/1
-CTAACTCTATTTATTGTATTTCAACTAAAAATCTCA
-+HWI-EAS91_1_30788AAXX:7:49:654:1439/1
-hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
-@HWI-EAS91_1_30788AAXX:7:64:947:234/1
-TATCAAAAAAGAATATAATCTGAATCAACACTACAA
-+HWI-EAS91_1_30788AAXX:7:64:947:234/1
-hhhhhhhhhhhhhhhhhhhhhhhRhhehhahhhhhJ
diff -r 03dbef081cf2 -r 9dd990a2fa94 test-data/split_paired_reads_out_2.fastqsanger
--- a/test-data/split_paired_reads_out_2.fastqsanger Tue Feb 23 16:12:20 2010 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-@HWI-EAS91_1_30788AAXX:7:21:1542:1758/2
-GCTCCTAGCATCTGGAGTCTCTATCACCTGAGCCCA
-+HWI-EAS91_1_30788AAXX:7:21:1542:1758/2
-hhhhhhhhhhhhhhhhhhhhhhhh`hfhhVZSWehR
-@HWI-EAS91_1_30788AAXX:7:22:1621:462/2
-ACTAGCCCCAATATCAATCCTATATCAAATCTCACC
-+HWI-EAS91_1_30788AAXX:7:22:1621:462/2
-hJhhhhChhhJhhhRhhKhePhc\KhhV\KhXhJhh
-@HWI-EAS91_1_30788AAXX:7:45:408:807/2
-ATGAGTGCTAGGATCAGGATGGAGAGGATTAGGGCT
-+HWI-EAS91_1_30788AAXX:7:45:408:807/2
-hhhhhhhhhhhhhhhhhh`hhhZh`hhhhhRXhhYh
-@HWI-EAS91_1_30788AAXX:7:49:654:1439/2
-TAGGTTTATTGATAGTTGTGTTGTTGGTGTAAATGG
-+HWI-EAS91_1_30788AAXX:7:49:654:1439/2
-hhhhhhhhhhhhhhhhhhhhhhhhhdhh_hG\XhU@
-@HWI-EAS91_1_30788AAXX:7:64:947:234/2
-CCTATTAGTGTGTAGAATAGGAAGTAGAGGCCTGCG
-+HWI-EAS91_1_30788AAXX:7:64:947:234/2
-hhhhhhhh^hPhWfhhhhThWUhhfhh_hhNIVPUd
diff -r 03dbef081cf2 -r 9dd990a2fa94 test-data/wrapping_as_illumina.fastqillumina
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/wrapping_as_illumina.fastqillumina Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,12 @@
+(a)SRR014849.50939 EIXKN4201BA2EC length=135
+GAAATTTCAGGGCCACCTTTTTTTTGATAGAATAATGGAGAAAATTAAAAGCTGTACATATACCAATGAACAATAAATCAATACATAAAAAAGGAGAAGTTGGAACCGAAAGGGTTTGAATTCAAACCCTTTCGG
++
+Zb^Ld`N\[d`NaZ[aZc]UOKHDA[\YT[_W[aZ\aZ[Zd`SF_WeaUI[Y\[[\\\[\Z\aY`X[[aZ\aZ\d`OY[aY[[\[[e`WPJC^UZ[`X\[R]T_V_W[`[Ga\I`\H[[Q^TVa\Ia\Ic^LY\S
+(a)SRR014849.110027 EIXKN4201APUB0 length=131
+CTTCAAATGATTCCGGGACTGTTGGAACCGAAAGGGTTTGAATTCAAACCCTTTTCGGTTCCAACTCGCCGTCCGAATAATCCGTTCAAAATCTTGGCCTGTCAAAACGACTTTACGACCAGAACGATCCG
++
+\aYY_[FY\T`X^Vd`OY\[[^U_V[R^T[_ZDc^La\HYYO\S[c^Ld`Nc_QAZaZaYaY`XZZ\[aZZ[aZ[aZ[aZY`Z[`ZWeaVJ\[aZaY`X[PY\eaUG[\[[d`OXTUZ[Q\\`W\\\Y_W\
+(a)SRR014849.203935 EIXKN4201B4HU6 length=144
+AACCCGTCCCATCAAAGATTTTGGTTGGAACCCGAAAGGGTTTTGAATTCAAACCCCTTTCGGTTCCAACTATTCAATTGTTTAACTTTTTTTAAATTGATGGTCTGTTGGACCATTTGTAATAATCCCCATCGGAATTTCTTT
++
+`Z_ZDVT^YB[[Xd`PZ\d`RDaZaZ`ZaZ_ZDXd`Pd`Pd`RD[aZ`ZWd`Oc_RCd`P\aZ`ZaZaZY\YaZYaY`XYd`O`X[e`WPJEAc^LaZS[YYN[Z\Y`XWLT^U\b]JW[[RZ\SYc`RD[Z\WLXM`\HYa\I
diff -r 03dbef081cf2 -r 9dd990a2fa94 test-data/wrapping_as_sanger.fastqsanger
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/wrapping_as_sanger.fastqsanger Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,12 @@
+(a)SRR014849.50939 EIXKN4201BA2EC length=135
+GAAATTTCAGGGCCACCTTTTTTTTGATAGAATAATGGAGAAAATTAAAAGCTGTACATATACCAATGAACAATAAATCAATACATAAAAAAGGAGAAGTTGGAACCGAAAGGGTTTGAATTCAAACCCTTTCGG
++
+;C?-EA/=<EA/B;<B;D>60,)%"<=:5<@8<B;=B;<;EA4'@8FB6*<:=<<===<=;=B:A9<<B;=B;=EA0:<B:<<=<<FA81+$?6;<A9=<3>5@7@8<A<(B=*A=)<<2?57B=*B=*D?-:=4
+(a)SRR014849.110027 EIXKN4201APUB0 length=131
+CTTCAAATGATTCCGGGACTGTTGGAACCGAAAGGGTTTGAATTCAAACCCTTTTCGGTTCCAACTCGCCGTCCGAATAATCCGTTCAAAATCTTGGCCTGTCAAAACGACTTTACGACCAGAACGATCCG
++
+=B::@<':=5A9?7EA0:=<<?6@7<3?5<@;%D?-B=)::0=4<D?-EA/D@2";B;B:B:A9;;=<B;;<B;<B;<B;:A;<A;8FB7+=<B;B:A9<1:=FB6(<=<<EA0956;<2==A8===:@8=
+(a)SRR014849.203935 EIXKN4201B4HU6 length=144
+AACCCGTCCCATCAAAGATTTTGGTTGGAACCCGAAAGGGTTTTGAATTCAAACCCCTTTCGGTTCCAACTATTCAATTGTTTAACTTTTTTTAAATTGATGGTCTGTTGGACCATTTGTAATAATCCCCATCGGAATTTCTTT
++
+A;@;%75?:#<<9EA1;=EA3%B;B;A;B;@;%9EA1EA1EA3%<B;A;8EA0D@3$EA1=B;A;B;B;:=:B;:B:A9:EA0A9<FA81+&"D?-B;4<::/<;=:A98-5?6=C>+8<<3;=4:DA3%<;=8-9.A=):B=*
diff -r 03dbef081cf2 -r 9dd990a2fa94 test-data/wrapping_as_sanger_decimal.fastqsanger
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/wrapping_as_sanger_decimal.fastqsanger Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,12 @@
+(a)SRR014849.50939 EIXKN4201BA2EC length=135
+GAAATTTCAGGGCCACCTTTTTTTTGATAGAATAATGGAGAAAATTAAAAGCTGTACATATACCAATGAACAATAAATCAATACATAAAAAAGGAGAAGTTGGAACCGAAAGGGTTTGAATTCAAACCCTTTCGG
++
+26 34 30 12 36 32 14 28 27 36 32 14 33 26 27 33 26 35 29 21 15 11 8 4 1 27 28 25 20 27 31 23 27 33 26 28 33 26 27 26 36 32 19 6 31 23 37 33 21 9 27 25 28 27 27 28 28 28 27 28 26 28 33 25 32 24 27 27 33 26 28 33 26 28 36 32 15 25 27 33 25 27 27 28 27 27 37 32 23 16 10 3 30 21 26 27 32 24 28 27 18 29 20 31 22 31 23 27 32 27 7 33 28 9 32 28 8 27 27 17 30 20 22 33 28 9 33 28 9 35 30 12 25 28 19
+(a)SRR014849.110027 EIXKN4201APUB0 length=131
+CTTCAAATGATTCCGGGACTGTTGGAACCGAAAGGGTTTGAATTCAAACCCTTTTCGGTTCCAACTCGCCGTCCGAATAATCCGTTCAAAATCTTGGCCTGTCAAAACGACTTTACGACCAGAACGATCCG
++
+28 33 25 25 31 27 6 25 28 20 32 24 30 22 36 32 15 25 28 27 27 30 21 31 22 27 18 30 20 27 31 26 4 35 30 12 33 28 8 25 25 15 28 19 27 35 30 12 36 32 14 35 31 17 1 26 33 26 33 25 33 25 32 24 26 26 28 27 33 26 26 27 33 26 27 33 26 27 33 26 25 32 26 27 32 26 23 37 33 22 10 28 27 33 26 33 25 32 24 27 16 25 28 37 33 21 7 27 28 27 27 36 32 15 24 20 21 26 27 17 28 28 32 23 28 28 28 25 31 23 28
+(a)SRR014849.203935 EIXKN4201B4HU6 length=144
+AACCCGTCCCATCAAAGATTTTGGTTGGAACCCGAAAGGGTTTTGAATTCAAACCCCTTTCGGTTCCAACTATTCAATTGTTTAACTTTTTTTAAATTGATGGTCTGTTGGACCATTTGTAATAATCCCCATCGGAATTTCTTT
++
+32 26 31 26 4 22 20 30 25 2 27 27 24 36 32 16 26 28 36 32 18 4 33 26 33 26 32 26 33 26 31 26 4 24 36 32 16 36 32 16 36 32 18 4 27 33 26 32 26 23 36 32 15 35 31 18 3 36 32 16 28 33 26 32 26 33 26 33 26 25 28 25 33 26 25 33 25 32 24 25 36 32 15 32 24 27 37 32 23 16 10 5 1 35 30 12 33 26 19 27 25 25 14 27 26 28 25 32 24 23 12 20 30 21 28 34 29 10 23 27 27 18 26 28 19 25 35 32 18 4 27 26 28 23 12 24 13 32 28 8 25 33 28 9
diff -r 03dbef081cf2 -r 9dd990a2fa94 test-data/wrapping_as_solexa.fastqsolexa
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/wrapping_as_solexa.fastqsolexa Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,12 @@
+(a)SRR014849.50939 EIXKN4201BA2EC length=135
+GAAATTTCAGGGCCACCTTTTTTTTGATAGAATAATGGAGAAAATTAAAAGCTGTACATATACCAATGAACAATAAATCAATACATAAAAAAGGAGAAGTTGGAACCGAAAGGGTTTGAATTCAAACCCTTTCGG
++
+Zb^Ld`N\[d`NaZ[aZc]UOKGB;[\YT[_W[aZ\aZ[Zd`SE_WeaUH[Y\[[\\\[\Z\aY`X[[aZ\aZ\d`OY[aY[[\[[e`WPJ@^UZ[`X\[R]T_V_W[`[Fa\H`\G[[Q^TVa\Ha\Hc^LY\S
+(a)SRR014849.110027 EIXKN4201APUB0 length=131
+CTTCAAATGATTCCGGGACTGTTGGAACCGAAAGGGTTTGAATTCAAACCCTTTTCGGTTCCAACTCGCCGTCCGAATAATCCGTTCAAAATCTTGGCCTGTCAAAACGACTTTACGACCAGAACGATCCG
++
+\aYY_[EY\T`X^Vd`OY\[[^U_V[R^T[_ZBc^La\GYYO\S[c^Ld`Nc_Q;ZaZaYaY`XZZ\[aZZ[aZ[aZ[aZY`Z[`ZWeaVJ\[aZaY`X[PY\eaUF[\[[d`OXTUZ[Q\\`W\\\Y_W\
+(a)SRR014849.203935 EIXKN4201B4HU6 length=144
+AACCCGTCCCATCAAAGATTTTGGTTGGAACCCGAAAGGGTTTTGAATTCAAACCCCTTTCGGTTCCAACTATTCAATTGTTTAACTTTTTTTAAATTGATGGTCTGTTGGACCATTTGTAATAATCCCCATCGGAATTTCTTT
++
+`Z_ZBVT^Y>[[Xd`PZ\d`RBaZaZ`ZaZ_ZBXd`Pd`Pd`RB[aZ`ZWd`Oc_R@d`P\aZ`ZaZaZY\YaZYaY`XYd`O`X[e`WPJC;c^LaZS[YYN[Z\Y`XWLT^U\b]JW[[RZ\SYc`RB[Z\WLXM`\GYa\H
diff -r 03dbef081cf2 -r 9dd990a2fa94 test-data/wrapping_original_sanger.fastqsanger
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/wrapping_original_sanger.fastqsanger Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,24 @@
+(a)SRR014849.50939 EIXKN4201BA2EC length=135
+GAAATTTCAGGGCCACCTTTTTTTTGATAGAATAATGGAGAAAATTAAAAGCTGTACATATACCAATGAACAATAAATCAATACATAAAAAAGGAGAAGTTGGAACCGAAAGGGTTTGAATTCAAACCCTTTCGG
++
+;C?-EA/=<EA/B;<B;D>60,)%"<=:5<
+@8<B;=B;<;EA4'@8FB6*<:=<<===<=
+;=B:A9<<B;=B;=EA0:<B:<<=<<FA81
++$?6;<A9=<3>5@7@8<A<(B=*A=)<<2
+?57B=*B=*D?-:=4
+(a)SRR014849.110027 EIXKN4201APUB0 length=131
+CTTCAAATGATTCCGGGACTGTTGGAACCGAAAGGGTTTGAATTCAAACCCTTTTCGGTTCCAACTCGCCGTCCGAATAATCCGTTCAAAATCTTGGCCTGTCAAAACGACTTTACGACCAGAACGATCCG
++
+=B::@<':=5A9?7EA0:=<<?6@7<3?5<
+@;%D?-B=)::0=4<D?-EA/D@2";B;B:
+B:A9;;=<B;;<B;<B;<B;:A;<A;8FB7
++=<B;B:A9<1:=FB6(<=<<EA0956;<2
+==A8===:@8=
+(a)SRR014849.203935 EIXKN4201B4HU6 length=144
+AACCCGTCCCATCAAAGATTTTGGTTGGAACCCGAAAGGGTTTTGAATTCAAACCCCTTTCGGTTCCAACTATTCAATTGTTTAACTTTTTTTAAATTGATGGTCTGTTGGACCATTTGTAATAATCCCCATCGGAATTTCTTT
++
+A;@;%75?:#<<9EA1;=EA3%B;B;A;B;
+@;%9EA1EA1EA3%<B;A;8EA0D@3$EA1
+=B;A;B;B;:=:B;:B:A9:EA0A9<FA81
++&"D?-B;4<::/<;=:A98-5?6=C>+8<
+<3;=4:DA3%<;=8-9.A=):B=*
diff -r 03dbef081cf2 -r 9dd990a2fa94 tool_conf.xml.sample
--- a/tool_conf.xml.sample Tue Feb 23 16:12:20 2010 -0500
+++ b/tool_conf.xml.sample Tue Feb 23 16:48:07 2010 -0500
@@ -127,6 +127,7 @@
<tool file="plotting/scatterplot.xml" />
<tool file="plotting/bar_chart.xml" />
<tool file="plotting/xy_plot.xml" />
+ <tool file="plotting/boxplot.xml" />
<tool file="visualization/GMAJ.xml" />
<tool file="visualization/LAJ.xml" />
<tool file="visualization/build_ucsc_custom_track.xml" />
@@ -174,7 +175,17 @@
<tool file="fastx_toolkit/fastx_collapser.xml" />
</section>
<section name="NGS: QC and manipulation" id="cshl_library_information">
- <label text="Generic FASTQ data" id="fastq" />
+ <label text="Generic FASTQ data" id="new_fastq" />
+ <tool file="fastq/fastq_combiner.xml" />
+ <tool file="fastq/fastq_groomer.xml" />
+ <tool file="fastq/fastq_paired_end_joiner.xml" />
+ <tool file="fastq/fastq_paired_end_splitter.xml" />
+ <tool file="fastq/fastq_stats.xml" />
+ <tool file="fastq/fastq_filter.xml" />
+ <tool file="fastq/fastq_trimmer.xml" />
+ <tool file="fastq/fastq_manipulation.xml" />
+ <tool file="fastq/fastq_to_fasta.xml" />
+ <label text="Deprecated: Generic FASTQ data" id="fastq" />
<tool file="next_gen_conversion/fastq_gen_conv.xml" />
<tool file="fastx_toolkit/fastq_quality_converter.xml" />
<tool file="fastx_toolkit/fastx_quality_statistics.xml" />
diff -r 03dbef081cf2 -r 9dd990a2fa94 tools/fastq/fastq_combiner.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/fastq/fastq_combiner.py Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,45 @@
+#Dan Blankenberg
+import sys, os, shutil
+from galaxy_utils.sequence.fastq import fastqWriter, fastaReader, fastaNamedReader, fastqSequencingRead, fastqCombiner
+
+def main():
+ #Read command line arguments
+ fasta_filename = sys.argv[1]
+ fasta_type = sys.argv[2] or 'fasta' #should always be fasta or csfasta? what if txt?
+ qual_filename = sys.argv[3]
+ qual_type = sys.argv[4] or 'qualsanger' #qual454 qualsolid
+ output_filename = sys.argv[5]
+ force_quality_encoding = sys.argv[6]
+ if force_quality_encoding == 'None':
+ force_quality_encoding = None
+
+ format = 'sanger'
+ if fasta_type == 'csfasta' or qual_type == 'qualsolid':
+ format = 'solid'
+ elif qual_type == 'qualsolexa':
+ format = 'solexa'
+ elif qual_type == 'qualillumina':
+ format = 'illumina'
+
+ out = fastqWriter( open( output_filename, 'wb' ), format = format, force_quality_encoding = force_quality_encoding )
+ qual_input = fastaNamedReader( open( qual_filename, 'rb' ) )
+ fastq_combiner = fastqCombiner( format )
+ i = None
+ skip_count = 0
+ for i, sequence in enumerate( fastaReader( open( fasta_filename, 'rb' ) ) ):
+ quality = qual_input.get( sequence.identifier )
+ if quality:
+ fastq_read = fastq_combiner.combine( sequence, quality )
+ #Should we check that fastq read is valid? for now, assume groomer will be used to verify
+ out.write( fastq_read )
+ else:
+ skip_count += 1
+ out.close()
+ if i is None:
+ print "Your file contains no valid FASTA sequences."
+ else:
+ print qual_input.has_data()
+ print 'Combined %s of %s sequences with quality scores (%.2f%%).' % ( i - skip_count + 1, i + 1, float( i - skip_count + 1 ) / float( i + 1 ) * 100.0 )
+
+if __name__ == "__main__":
+ main()
diff -r 03dbef081cf2 -r 9dd990a2fa94 tools/fastq/fastq_combiner.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/fastq/fastq_combiner.xml Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,55 @@
+<tool id="fastq_combiner" name="Combine FASTA and QUAL" version="1.0.0">
+ <description>into FASTQ</description>
+ <command interpreter="python">fastq_combiner.py '$fasta_file' '${fasta_file.extension}' '$qual_file' '${qual_file.extension}' '$output_file' '$force_quality_encoding'</command>
+ <inputs>
+ <param name="fasta_file" type="data" format="fasta,csfasta" label="FASTA File" />
+ <param name="qual_file" type="data" format="qual" label="Quality Score File" />
+ <param name="force_quality_encoding" type="select" label="Force Quality Score encoding">
+ <option value="None">Use Source Encoding</option>
+ <option value="ascii" selected="True">ASCII</option>
+ <option value="decimal">Decimal</option>
+ </param>
+ </inputs>
+ <outputs>
+ <data name="output_file" format="fastqsanger">
+ <change_format>
+ <when input_dataset="fasta_file" attribute="extension" value="csfasta" format="fastqsolid" />
+ <when input_dataset="qual_file" attribute="extension" value="qualsolid" format="fastqsolid" />
+ <when input_dataset="qual_file" attribute="extension" value="qualsolexa" format="fastqsolexa" />
+ <when input_dataset="qual_file" attribute="extension" value="qualillumina" format="fastqillumina" />
+ </change_format>
+ </data>
+ </outputs>
+ <tests>
+ <test>
+ <param name="fasta_file" value="s2fq_phiX.csfasta" ftype="csfasta" />
+ <param name="qual_file" value="s2fq_phiX.qualsolid" ftype="qualsolid" />
+ <param name="force_quality_encoding" value="None" />
+ <output name="output_file" file="combine_phiX_out_1.fastqsolid" />
+ </test>
+ <test>
+ <param name="fasta_file" value="s2fq_phiX.csfasta" ftype="csfasta" />
+ <param name="qual_file" value="s2fq_phiX.qualsolid" ftype="qualsolid" />
+ <param name="force_quality_encoding" value="ascii" />
+ <output name="output_file" file="combine_phiX_out_2.fastqsolid" />
+ </test>
+ <test>
+ <param name="fasta_file" value="fastq_combiner_in_1.fasta" ftype="fasta" />
+ <param name="qual_file" value="fastq_combiner_in_1.qual454" ftype="qual454" />
+ <param name="force_quality_encoding" value="None" />
+ <output name="output_file" file="wrapping_as_sanger.fastqsanger" />
+ </test>
+ <test>
+ <param name="fasta_file" value="fastq_combiner_in_1.fasta" ftype="fasta" />
+ <param name="qual_file" value="fastq_combiner_in_1.qual454" ftype="qual454" />
+ <param name="force_quality_encoding" value="decimal" />
+ <output name="output_file" file="wrapping_as_sanger_decimal.fastqsanger" />
+ </test>
+ </tests>
+ <help>
+**What it does**
+
+This tool joins a FASTA file to a Quality Score file, creating a single FASTQ block for each read.
+
+ </help>
+</tool>
diff -r 03dbef081cf2 -r 9dd990a2fa94 tools/fastq/fastq_filter.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/fastq/fastq_filter.py Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,34 @@
+#Dan Blankenberg
+import sys, os, shutil
+from galaxy_utils.sequence.fastq import fastqReader, fastqWriter
+
+def main():
+ #Read command line arguments
+ input_filename = sys.argv[1]
+ script_filename = sys.argv[2]
+ output_filename = sys.argv[3]
+ additional_files_path = sys.argv[4]
+ input_type = sys.argv[5] or 'sanger'
+
+ #Save script file for debuging/verification info later
+ os.mkdir( additional_files_path )
+ shutil.copy( script_filename, os.path.join( additional_files_path, 'debug.txt' ) )
+
+ out = fastqWriter( open( output_filename, 'wb' ), format = input_type )
+
+ i = None
+ reads_kept = 0
+ for i, fastq_read in enumerate( fastqReader( open( input_filename ), format = input_type ) ):
+ local = {'fastq_read':fastq_read, 'ret_val':False}
+ execfile( script_filename, {}, local )
+ if local['ret_val']:
+ out.write( fastq_read )
+ reads_kept += 1
+ out.close()
+ if i is None:
+ print "Your file contains no valid fastq reads."
+ else:
+ print 'Kept %s of %s reads (%.2f%%).' % ( reads_kept, i + 1, float( reads_kept ) / float( i + 1 ) * 100.0 )
+
+if __name__ == "__main__":
+ main()
diff -r 03dbef081cf2 -r 9dd990a2fa94 tools/fastq/fastq_filter.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/fastq/fastq_filter.xml Tue Feb 23 16:48:07 2010 -0500
@@ -0,0 +1,311 @@
+<tool id="fastq_filter" name="Filter FASTQ" version="1.0.0">
+ <description>reads by quality score and length</description>
+ <command interpreter="python">fastq_filter.py $input_file $fastq_filter_file $output_file $output_file.files_path '${input_file.extension[len( 'fastq' ):]}'</command>
+ <inputs>
+ <page>
+ <param name="input_file" type="data" format="fastqsanger,fastqillumina,fastqsolexa,fastqsolid" label="FASTQ File" help="Requires groomed data: if your data does not appear here try using the FASTQ groomer."/>
+ <param name="min_size" label="Minimum Size" value="0" type="integer">
+ <validator type="in_range" message="Minimum size must be positive" min="0"/>
+ </param>
+ <param name="max_size" label="Maximum Size" value="0" type="integer" help="A maximum size less than 1 indicates no limit."/>
+ <param name="min_quality" label="Minimum Quality" value="0" type="float"/>
+ <param name="max_quality" label="Maximum Quality" value="0" type="float" help="A maximum quality less than 1 indicates no limit."/>
+ <param name="max_num_deviants" label="Maximum number of bases allowed outside of quality range" value="0" type="integer">
+ <validator type="in_range" message="Maximum number of deviate bases must be positive" min="0"/>
+ </param>
+ <param name="paired_end" label="This is paired end data" type="boolean" truevalue="paired_end" falsevalue="single_end" checked="False"/>
+ <repeat name="fastq_filters" title="Quality Filter on a Range of Bases" help="The above settings do not apply to these filters.">
+ <conditional name="offset_type">
+ <param name="base_offset_type" type="select" label="Define Base Offsets as">
+ <option value="offsets_absolute" selected="true">Absolute Values</option>
+ <option value="offsets_percent">Percentage of Read Length</option>
+ </param>
+ <when value="offsets_absolute">
+ <param name="left_column_offset" label="Absolute Left Base Offset" value="0" type="integer" help="Values start at 0, increasing from the left">
+ <validator type="in_range" message="Base Offsets must be positive" min="0" max="inf"/>
+ <validator type="expression" message="An integer is required.">int( float( value ) ) == float( value )</validator>
+ </param>
+ <param name="right_column_offset" label="Absolute Right Base Offset" value="0" type="integer" help="Values start at 0, increasing from the right">
+ <validator type="in_range" message="Base Offsets must be positive" min="0" max="inf"/>
+ <validator type="expression" message="An integer is required.">int( float( value ) ) == float( value )</validator>
+ </param>
+ </when>
+ <when value="offsets_percent">
+ <param name="left_column_offset" label="Percentage Left Base Offset" value="0" type="float">
+ <validator type="in_range" message="Base Offsets must be between 0 and 100" min="0" max="100"/>
+ </param>
+ <param name="right_column_offset" label="Percentage Right Base Offset" value="0" type="float">
+ <validator type="in_range" message="Base Offsets must be between 0 and 100" min="0" max="100"/>
+ </param>
+ </when>
+ </conditional>
+ <param name="score_operation" type="select" label="Aggregate read score for specified range">
+ <option value="min" selected="True">min score</option>
+ <option value="max">max score</option>
+ <option value="sum">sum of scores</option>
+ <option value="mean">mean of scores</option>
+ </param>
+ <param name="score_comparison" type="select" label="Keep read when aggregate score is">
+ <option value=">">></option>
+ <option value=">=" selected="true">>=</option>
+ <option value="==">==</option>
+ <option value="<"><</option>
+ <option value="<="><=</option>
+ <sanitizer sanitize="False"/>
+ </param>
+ <param name="score" label="Quality Score" value="0" type="float" />
+ </repeat>
+ </page>
+ </inputs>
+ <configfiles>
+ <configfile name="fastq_filter_file">
+def fastq_read_pass_filter( fastq_read ):
+ def mean( score_list ):
+ return float( sum( score_list ) ) / float( len( score_list ) )
+ if len( fastq_read ) < $min_size:
+ return False
+ if $max_size > 0 and len( fastq_read ) > $max_size:
+ return False
+ num_deviates = $max_num_deviants
+ qual_scores = fastq_read.get_decimal_quality_scores()
+ for qual_score in qual_scores:
+ if qual_score < $min_quality or ( $max_quality > 0 and qual_score > $max_quality ):
+ if num_deviates == 0:
+ return False
+ else:
+ num_deviates -= 1
+#if $paired_end.value == 'single_end':
+ qual_scores_split = [ qual_scores ]
+#else:
+ qual_scores_split = [ qual_scores[ 0:int( len( qual_scores ) / 2 ) ], qual_scores[ int( len( qual_scores ) / 2 ): ] ]
+#end if
+#for $fastq_filter in $fastq_filters:
+ for split_scores in qual_scores_split:
+ left_column_offset = $fastq_filter[ 'offset_type' ][ 'left_column_offset' ]
+ right_column_offset = $fastq_filter[ 'offset_type' ][ 'right_column_offset' ]
+#if $fastq_filter[ 'offset_type' ]['base_offset_type'] == 'offsets_percent':
+ left_column_offset = int( round( float( left_column_offset ) / 100.0 * float( len( split_scores ) ) ) )
+ right_column_offset = int( round( float( right_column_offset ) / 100.0 * float( len( split_scores ) ) ) )
+#end if
+ if right_column_offset > 0:
+ split_scores = split_scores[ left_column_offset:-right_column_offset]
+ else:
+ split_scores = split_scores[ left_column_offset:]
+ if split_scores: ##if a read doesn't have enough columns, it passes by default
+ if not ( ${fastq_filter[ 'score_operation' ]}( split_scores ) $fastq_filter[ 'score_comparison' ] $fastq_filter[ 'score' ] ):
+ return False
+#end for
+ return True
+ret_val = fastq_read_pass_filter( fastq_read )
+</configfile>
+ </configfiles>
+ <outputs>
+ <data format="input" name="output_file" />
+ </outputs>
+ <tests>
+ <!-- Do nothing filter -->
+ <test>
+ <param name="input_file" value="sanger_full_range_original_sanger.fastqsanger" ftype="fastqsanger"/>
+ <param name="min_size" value="0"/>
+ <param name="max_size" value="0"/>
+ <param name="min_quality" value="0"/>
+ <param name="max_quality" value="0"/>
+ <param name="max_num_deviants" value="0"/>
+ <param name="paired_end" value="single_end"/>
+ <param name="base_offset_type" value="offsets_absolute"/>
+ <param name="left_column_offset" value="0"/>
+ <param name="right_column_offset" value="0"/>
+ <param name="score_operation" value="min"/>
+ <param name="score_comparison" value=">="/>
+ <param name="score" value="0"/>
+ <output name="out_file1" file="sanger_full_range_original_sanger.fastqsanger"/>
+ </test>
+ <test>
+ <param name="input_file" value="solexa_full_range_original_solexa.fastqsolexa" ftype="fastqsolexa"/>
+ <param name="min_size" value="0"/>
+ <param name="max_size" value="0"/>
+ <param name="min_quality" value="-5"/>
+ <param name="max_quality" value="0"/>
+ <param name="max_num_deviants" value="0"/>
+ <param name="paired_end" value="single_end"/>
+ <param name="base_offset_type" value="offsets_absolute"/>
+ <param name="left_column_offset" value="0"/>
+ <param name="right_column_offset" value="0"/>
+ <param name="score_operation" value="min"/>
+ <param name="score_comparison" value=">="/>
+ <param name="score" value="-5"/>
+ <output name="out_file1" file="solexa_full_range_original_solexa.fastqsolexa"/>
+ </test>
+ <!-- No trim, so does not remove Adapter from solid -->
+ <test>
+ <param name="input_file" value="sanger_full_range_as_solid.fastqsolid" ftype="fastqsolid"/>
+ <param name="min_size" value="0"/>
+ <param name="max_size" value="0"/>
+ <param name="min_quality" value="0"/>
+ <param name="max_quality" value="0"/>
+ <param name="max_num_deviants" value="0"/>
+ <param name="paired_end" value="single_end"/>
+ <param name="base_offset_type" value="offsets_absolute"/>
+ <param name="left_column_offset" value="0"/>
+ <param name="right_column_offset" value="0"/>
+ <param name="score_operation" value="min"/>
+ <param name="score_comparison" value=">="/>
+ <param name="score" value="0"/>
+ <output name="out_file1" file="sanger_full_range_as_solid.fastqsolid"/>
+ </test>
+ <!-- Remove all Filter -->
+ <test>
+ <param name="input_file" value="sanger_full_range_original_sanger.fastqsanger" ftype="fastqsanger"/>
+ <param name="min_size" value="0"/>
+ <param name="max_size" value="0"/>
+ <param name="min_quality" value="1"/>
+ <param name="max_quality" value="0"/>
+ <param name="max_num_deviants" value="0"/>
+ <param name="paired_end" value="single_end"/>
+ <param name="base_offset_type" value="offsets_absolute"/>
+ <param name="left_column_offset" value="0"/>
+ <param name="right_column_offset" value="0"/>
+ <param name="score_operation" value="min"/>
+ <param name="score_comparison" value=">="/>
+ <param name="score" value="0"/>
+ <output name="out_file1" file="empty_file.dat"/>
+ </test>
+ <test>
+ <param name="input_file" value="solexa_full_range_original_solexa.fastqsolexa" ftype="fastqsolexa"/>
+ <param name="min_size" value="0"/>
+ <param name="max_size" value="0"/>
+ <param name="min_quality" value="-4"/>
+ <param name="max_quality" value="0"/>
+ <param name="max_num_deviants" value="0"/>
+ <param name="paired_end" value="single_end"/>
+ <param name="base_offset_type" value="offsets_absolute"/>
+ <param name="left_column_offset" value="0"/>
+ <param name="right_column_offset" value="0"/>
+ <param name="score_operation" value="min"/>
+ <param name="score_comparison" value=">="/>
+ <param name="score" value="-5"/>
1
0
24 Feb '10
details: http://www.bx.psu.edu/hg/galaxy/rev/03dbef081cf2
changeset: 3428:03dbef081cf2
user: Nate Coraor <nate(a)bx.psu.edu>
date: Tue Feb 23 16:12:20 2010 -0500
description:
update buildbot_setup.sh for new data location
diffstat:
buildbot_setup.sh | 47 ++++++++++++++++++++++++++---------------------
1 files changed, 26 insertions(+), 21 deletions(-)
diffs (73 lines):
diff -r 6dbe31bbbf02 -r 03dbef081cf2 buildbot_setup.sh
--- a/buildbot_setup.sh Tue Feb 23 15:14:28 2010 -0500
+++ b/buildbot_setup.sh Tue Feb 23 16:12:20 2010 -0500
@@ -19,31 +19,34 @@
done
[ ! -d "$HYPHY" ] && unset HYPHY
;;
+ solaris2.10)
+ HYPHY="/galaxy/software/linux2.6-x86_64/hyphy"
+ ;;
esac
LINKS="
-/depot/data2/galaxy/alignseq.loc
-/depot/data2/galaxy/annotation_profiler/annotation_profiler.loc
-/depot/data2/galaxy/annotation_profiler/annotation_profiler_options.xml
-/depot/data2/galaxy/annotation_profiler/annotation_profiler_valid_builds.txt
-/depot/data2/galaxy/binned_scores.loc
-/depot/data2/galaxy/blastdb.loc
-/depot/data2/galaxy/bowtie_indices.loc
-/depot/data2/galaxy/bowtie_indices_color.loc
-/depot/data2/galaxy/bwa_index.loc
-/depot/data2/galaxy/encode_datasets.loc
+/galaxy/data/location/alignseq.loc
+/galaxy/data/annotation_profiler/annotation_profiler.loc
+/galaxy/data/annotation_profiler/annotation_profiler_options.xml
+/galaxy/data/annotation_profiler/annotation_profiler_valid_builds.txt
+/galaxy/data/location/binned_scores.loc
+/galaxy/data/location/blastdb.loc
+/galaxy/data/location/bowtie_indices.loc
+/galaxy/data/location/bowtie_indices_color.loc
+/galaxy/data/location/bwa_index.loc
+/galaxy/data/location/encode_datasets.loc
/galaxy/home/universe/encode_feature_partitions
-/depot/data2/galaxy/lastz_seqs.loc
-/depot/data2/galaxy/liftOver.loc
-/depot/data2/galaxy/maf_index.loc
-/depot/data2/galaxy/maf_pairwise.loc
-/depot/data2/galaxy/microbes/microbial_data.loc
-/depot/data2/galaxy/phastOdds.loc
-/depot/data2/galaxy/quality_scores.loc
-/depot/data2/galaxy/regions.loc
-/depot/data2/galaxy/sam_fa_indices.loc
-/depot/data2/galaxy/taxonomy
-/depot/data2/galaxy/twobit.loc
+/galaxy/data/location/lastz_seqs.loc
+/galaxy/data/location/liftOver.loc
+/galaxy/data/location/maf_index.loc
+/galaxy/data/location/maf_pairwise.loc
+/galaxy/data/location/microbes/microbial_data.loc
+/galaxy/data/location/phastOdds.loc
+/galaxy/data/location/quality_scores.loc
+/galaxy/data/location/regions.loc
+/galaxy/data/location/sam_fa_indices.loc
+/galaxy/data/location/taxonomy
+/galaxy/data/location/twobit.loc
"
SAMPLES="
@@ -63,11 +66,13 @@
for link in $LINKS; do
echo "Linking $link"
+ rm -f tool-data/`basename $link`
ln -sf $link tool-data
done
if [ -d "$HYPHY" ]; then
echo "Linking $HYPHY"
+ rm -f tool-data/HYPHY
ln -sf $HYPHY tool-data/HYPHY
fi
1
0
24 Feb '10
details: http://www.bx.psu.edu/hg/galaxy/rev/6dbe31bbbf02
changeset: 3427:6dbe31bbbf02
user: Nate Coraor <nate(a)bx.psu.edu>
date: Tue Feb 23 15:14:28 2010 -0500
description:
Modify functional_tests.py to allow for testing of an environment nearly identical to Galaxy Test/Main via buildbot
diffstat:
scripts/functional_tests.py | 132 +++++++++++++++++++++++++++++++++-----------
1 files changed, 99 insertions(+), 33 deletions(-)
diffs (206 lines):
diff -r 1f05b0c4071f -r 6dbe31bbbf02 scripts/functional_tests.py
--- a/scripts/functional_tests.py Tue Feb 23 10:40:19 2010 -0500
+++ b/scripts/functional_tests.py Tue Feb 23 15:14:28 2010 -0500
@@ -1,6 +1,6 @@
#!/usr/bin/env python
-import os, sys
+import os, sys, shutil
# Assume we are run from the galaxy root directory, add lib to the python path
cwd = os.getcwd()
@@ -52,32 +52,68 @@
if not os.path.isabs( galaxy_test_file_dir ):
galaxy_test_file_dir = os.path.join( os.getcwd(), galaxy_test_file_dir )
start_server = 'GALAXY_TEST_EXTERNAL' not in os.environ
+ tool_path = os.environ.get( 'GALAXY_TEST_TOOL_PATH', 'tools' )
if start_server:
- if 'GALAXY_TEST_DBPATH' in os.environ:
- db_path = os.environ['GALAXY_TEST_DBPATH']
- else:
- tempdir = tempfile.mkdtemp()
- db_path = os.path.join( tempdir, 'database' )
- file_path = os.path.join( db_path, 'files' )
- try:
- os.makedirs( file_path )
- except OSError:
- pass
- if 'GALAXY_TEST_DBURI' in os.environ:
- database_connection = os.environ['GALAXY_TEST_DBURI']
+ psu_production = False
+ galaxy_test_proxy_port = None
+ if 'GALAXY_TEST_PSU_PRODUCTION' in os.environ:
+ if not galaxy_test_port:
+ raise Exception( 'Please set GALAXY_TEST_PORT to the port to which the proxy server will proxy' )
+ galaxy_test_proxy_port = os.environ.get( 'GALAXY_TEST_PROXY_PORT', None )
+ if not galaxy_test_proxy_port:
+ raise Exception( 'Please set GALAXY_TEST_PROXY_PORT to the port on which the proxy server is listening' )
+ base_file_path = os.environ.get( 'GALAXY_TEST_BASE_FILE_PATH', None )
+ if not base_file_path:
+ raise Exception( 'Please set GALAXY_TEST_BASE_FILE_PATH to the directory which will contain the dataset files directory' )
+ base_new_file_path = os.environ.get( 'GALAXY_TEST_BASE_NEW_FILE_PATH', None )
+ if not base_new_file_path:
+ raise Exception( 'Please set GALAXY_TEST_BASE_NEW_FILE_PATH to the directory which will contain the temporary directory' )
+ database_connection = os.environ.get( 'GALAXY_TEST_DBURI', None )
+ if not database_connection:
+ raise Exception( 'Please set GALAXY_TEST_DBURI to the URI of the database to be used for tests' )
+ nginx_upload_store = os.environ.get( 'GALAXY_TEST_NGINX_UPLOAD_STORE', None )
+ if not nginx_upload_store:
+ raise Exception( 'Please set GALAXY_TEST_NGINX_UPLOAD_STORE to the path where the nginx upload module places uploaded files' )
+ file_path = tempfile.mkdtemp( dir=base_file_path )
+ new_file_path = tempfile.mkdtemp( dir=base_new_file_path )
+ cluster_files_directory = os.path.join( new_file_path, 'pbs' )
+ job_working_directory = os.path.join( new_file_path, 'job_working_directory' )
+ os.mkdir( cluster_files_directory )
+ os.mkdir( job_working_directory )
+ kwargs = dict( database_engine_option_pool_size = '10',
+ database_engine_option_max_overflow = '20',
+ database_engine_option_strategy = 'threadlocal',
+ nginx_x_accel_redirect_base = '/_x_accel_redirect',
+ nginx_upload_store = nginx_upload_store,
+ nginx_upload_path = '/_upload',
+ cluster_files_directory = cluster_files_directory,
+ job_working_directory = job_working_directory,
+ outputs_to_working_directory = 'True',
+ set_metadata_externally = 'True',
+ static_enabled = 'False',
+ debug = 'False',
+ track_jobs_in_database = 'True',
+ job_scheduler_policy = 'FIFO',
+ start_job_runners = 'pbs',
+ default_cluster_job_runner = 'pbs:///', )
+ psu_production = True
else:
- database_connection = 'sqlite:///' + os.path.join( db_path, 'universe.sqlite' )
- if 'GALAXY_TEST_RUNNERS' in os.environ:
- start_job_runners = os.environ['GALAXY_TEST_RUNNERS']
- else:
- start_job_runners = None
- if 'GALAXY_TEST_DEF_RUNNER' in os.environ:
- default_cluster_job_runner = os.environ['GALAXY_TEST_DEF_RUNNER']
- else:
- default_cluster_job_runner = 'local:///'
- set_metadata_externally = False
- if 'GALAXY_SET_METADATA_EXTERNALLY' in os.environ:
- set_metadata_externally = True
+ if 'GALAXY_TEST_DBPATH' in os.environ:
+ db_path = os.environ['GALAXY_TEST_DBPATH']
+ else:
+ tempdir = tempfile.mkdtemp()
+ db_path = os.path.join( tempdir, 'database' )
+ file_path = os.path.join( db_path, 'files' )
+ new_file_path = os.path.join( db_path, 'tmp' )
+ if 'GALAXY_TEST_DBURI' in os.environ:
+ database_connection = os.environ['GALAXY_TEST_DBURI']
+ else:
+ database_connection = 'sqlite:///' + os.path.join( db_path, 'universe.sqlite' )
+ try:
+ os.makedirs( file_path )
+ except OSError:
+ pass
+ kwargs = {}
print "Database connection:", database_connection
@@ -91,17 +127,20 @@
if start_server:
+ global_conf = { '__file__' : 'universe_wsgi.ini.sample' }
+ if psu_production:
+ global_conf = None
+
# Build the Universe Application
app = UniverseApplication( job_queue_workers = 5,
- start_job_runners = start_job_runners,
- default_cluster_job_runner = default_cluster_job_runner,
id_secret = 'changethisinproductiontoo',
template_path = "templates",
database_connection = database_connection,
file_path = file_path,
+ new_file_path = new_file_path,
+ tool_path = tool_path,
tool_config_file = "tool_conf.xml.sample",
datatype_converters_config_file = "datatype_converters_conf.xml.sample",
- tool_path = "tools",
tool_parse_help = False,
test_conf = "test.conf",
log_destination = "stdout",
@@ -111,8 +150,8 @@
admin_users = 'test(a)bx.psu.edu',
library_import_dir = galaxy_test_file_dir,
user_library_import_dir = os.path.join( galaxy_test_file_dir, 'users' ),
- set_metadata_externally = set_metadata_externally,
- global_conf = { "__file__": "universe_wsgi.ini.sample" } )
+ global_conf = global_conf,
+ **kwargs )
log.info( "Embedded Universe application started" );
@@ -140,14 +179,17 @@
raise
else:
raise Exception( "Unable to open a port between %s and %s to start Galaxy server" % ( default_galaxy_test_port_min, default_galaxy_test_port_max ) )
- os.environ['GALAXY_TEST_PORT'] = galaxy_test_port
+ if galaxy_test_proxy_port:
+ os.environ['GALAXY_TEST_PORT'] = galaxy_test_proxy_port
+ else:
+ os.environ['GALAXY_TEST_PORT'] = galaxy_test_port
t = threading.Thread( target=server.serve_forever )
t.start()
# Test if the server is up
for i in range( 10 ):
- conn = httplib.HTTPConnection( galaxy_test_host, galaxy_test_port )
+ conn = httplib.HTTPConnection( galaxy_test_host, galaxy_test_port ) # directly test the app, not the proxy
conn.request( "GET", "/" )
if conn.getresponse().status == 200:
break
@@ -155,6 +197,13 @@
else:
raise Exception( "Test HTTP server did not return '200 OK' after 10 tries" )
+ # Test if the proxy server is up
+ if psu_production:
+ conn = httplib.HTTPConnection( galaxy_test_host, galaxy_test_proxy_port ) # directly test the app, not the proxy
+ conn.request( "GET", "/" )
+ if not conn.getresponse().status == 200:
+ raise Exception( "Test HTTP proxy server did not return '200 OK'" )
+
log.info( "Embedded web server started" )
@@ -179,7 +228,10 @@
# ---- Find tests ---------------------------------------------------------
- log.info( "Functional tests will be run against %s:%s" % ( galaxy_test_host, galaxy_test_port ) )
+ if galaxy_test_proxy_port:
+ log.info( "Functional tests will be run against %s:%s" % ( galaxy_test_host, galaxy_test_proxy_port ) )
+ else:
+ log.info( "Functional tests will be run against %s:%s" % ( galaxy_test_host, galaxy_test_port ) )
success = False
@@ -231,6 +283,20 @@
app.shutdown()
app = None
log.info( "Embedded Universe application stopped" )
+ try:
+ if os.path.exists( tempdir ) and 'GALAXY_TEST_NO_CLEANUP' not in os.environ:
+ log.info( "Cleaning up temporary files in %s" % tempdir )
+ shutil.rmtree( tempdir )
+ except:
+ pass
+ if psu_production and 'GALAXY_TEST_NO_CLEANUP' not in os.environ:
+ for dir in ( file_path, new_file_path ):
+ try:
+ if os.path.exists( dir ):
+ log.info( 'Cleaning up temporary files in %s' % dir )
+ shutil.rmtree( dir )
+ except:
+ pass
if success:
return 0
1
0
details: http://www.bx.psu.edu/hg/galaxy/rev/c0192e97a79a
changeset: 3425:c0192e97a79a
user: gua110
date: Mon Feb 22 16:22:12 2010 -0500
description:
Bug fixes to LCA tool
diffstat:
test-data/lca_input2.taxonomy | 4 +
test-data/lca_input3.taxonomy | 100 +++++++++++++++++++++++++++++++++++++++++
test-data/lca_output2.taxonomy | 1 +
test-data/lca_output3.taxonomy | 40 ++++++++++++++++
tools/taxonomy/lca.py | 49 +++++++++++++------
tools/taxonomy/lca.xml | 24 +++++++--
6 files changed, 195 insertions(+), 23 deletions(-)
diffs (308 lines):
diff -r 9d9f0dfeeebf -r c0192e97a79a test-data/lca_input2.taxonomy
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/lca_input2.taxonomy Mon Feb 22 16:22:12 2010 -0500
@@ -0,0 +1,4 @@
+read_1 1 root superkingdom1 kingdom1 subkingdom1 superphylum1 phylum1 subphylum1 superclass1 class1 subclass1 superorder1 order1 suborder1 superfamily1 family1 subfamily1 tribe1 subtribe1 genus1 subgenus1 species1 subspecies1 1 2 3 4
+read_1 2 root superkingdom1 kingdom1 subkingdom1 superphylum1 phylum1 subphylum1 superclass1 class1 subclass1 superorder1 order1 suborder1 superfamily1 family1 subfamily1 tribe1 subtribe1 genus2 subgenus2 species2 subspecies2 1 2 3 4
+read_2 3 root superkingdom1 kingdom1 subkingdom1 superphylum1 phylum3 subphylum3 superclass3 class3 subclass3 superorder3 order3 suborder3 superfamily3 family3 subfamily3 tribe3 subtribe3 genus3 subgenus3 species3 subspecies3 1 X Y Z
+read_2 4 root superkingdom1 kingdom1 subkingdom1 superphylum1 phylum4 subphylum4 superclass4 class4 subclass4 superorder4 order4 suborder4 superfamily4 family4 subfamily4 tribe4 subtribe4 genus4 subgenus4 species4 subspecies4 1 X Y Z
diff -r 9d9f0dfeeebf -r c0192e97a79a test-data/lca_input3.taxonomy
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/lca_input3.taxonomy Mon Feb 22 16:22:12 2010 -0500
@@ -0,0 +1,100 @@
+IA_1-79371 591020 root Bacteria n n n Proteobacteria n n Gammaproteobacteria n n Enterobacteriales n n Enterobacteriaceae n n n Shigella n Shigella flexneri n 281604065
+IA_1-84488 591020 root Bacteria n n n Proteobacteria n n Gammaproteobacteria n n Enterobacteriales n n Enterobacteriaceae n n n Shigella n Shigella flexneri n 281604065
+IA_1-270826 591020 root Bacteria n n n Proteobacteria n n Gammaproteobacteria n n Enterobacteriales n n Enterobacteriaceae n n n Shigella n Shigella flexneri n 281604070
+IA_1-285361 591020 root Bacteria n n n Proteobacteria n n Gammaproteobacteria n n Enterobacteriales n n Enterobacteriaceae n n n Shigella n Shigella flexneri n 281604070
+IA_1-93958 591020 root Bacteria n n n Proteobacteria n n Gammaproteobacteria n n Enterobacteriales n n Enterobacteriaceae n n n Shigella n Shigella flexneri n 281604070
+IA_1-99821 591020 root Bacteria n n n Proteobacteria n n Gammaproteobacteria n n Enterobacteriales n n Enterobacteriaceae n n n Shigella n Shigella flexneri n 281604070
+IA_1-144417 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604077
+IA_1-278966 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604077
+IA_1-314709 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604077
+IA_1-324951 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604077
+IA_1-27817 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604153
+IA_1-95255 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604181
+IA_1-104173 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-135979 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-139090 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-139090 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-139090 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-144996 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-160446 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-160446 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-160446 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-160446 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-160446 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-160446 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-160446 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-160446 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-161439 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-190855 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-190855 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-190855 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-190855 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-190855 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-190855 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-190855 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-190855 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-190855 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-190855 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-190855 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-190855 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-190855 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-190855 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-190855 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-190855 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-190855 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-190855 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-190855 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-190855 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-190855 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-205154 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-205154 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-205154 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-205154 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-205154 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-205154 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-205154 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-205154 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-205154 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-205154 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-216231 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-236286 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-236286 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-236286 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-236286 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-236286 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-236286 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-236286 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-236286 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-236286 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-236286 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-236286 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-236286 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-237681 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-250166 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-254274 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-254274 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-27817 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-29000 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-291427 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-291427 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-293054 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-293054 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-296315 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-296315 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus
+IA_1-310974 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-310974 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-311282 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-311282 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-322295 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n
+IA_1-42600 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-45102 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-45102 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-48105 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-48105 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-57254 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-61975 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-61975 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-66943 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-68288 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-82334 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-95526 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
diff -r 9d9f0dfeeebf -r c0192e97a79a test-data/lca_output2.taxonomy
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/lca_output2.taxonomy Mon Feb 22 16:22:12 2010 -0500
@@ -0,0 +1,1 @@
+read_1 1 root superkingdom1 kingdom1 subkingdom1 superphylum1 phylum1 subphylum1 superclass1 class1 subclass1 superorder1 order1 suborder1 superfamily1 family1 subfamily1 tribe1 subtribe1 n n n n 1 2 3 4
diff -r 9d9f0dfeeebf -r c0192e97a79a test-data/lca_output3.taxonomy
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/lca_output3.taxonomy Mon Feb 22 16:22:12 2010 -0500
@@ -0,0 +1,40 @@
+IA_1-104173 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-135979 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-139090 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-144417 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604077
+IA_1-144996 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-160446 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-161439 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-190855 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-205154 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-216231 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-236286 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-237681 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-250166 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-254274 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-270826 591020 root Bacteria n n n Proteobacteria n n Gammaproteobacteria n n Enterobacteriales n n Enterobacteriaceae n n n Shigella n Shigella flexneri n 281604070
+IA_1-27817 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604153
+IA_1-278966 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604077
+IA_1-285361 591020 root Bacteria n n n Proteobacteria n n Gammaproteobacteria n n Enterobacteriales n n Enterobacteriaceae n n n Shigella n Shigella flexneri n 281604070
+IA_1-29000 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-291427 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-293054 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-296315 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-310974 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-311282 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-314709 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604077
+IA_1-324951 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604077
+IA_1-42600 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-45102 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-48105 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-57254 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-61975 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-66943 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-68288 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-79371 591020 root Bacteria n n n Proteobacteria n n Gammaproteobacteria n n Enterobacteriales n n Enterobacteriaceae n n n Shigella n Shigella flexneri n 281604065
+IA_1-82334 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-84488 591020 root Bacteria n n n Proteobacteria n n Gammaproteobacteria n n Enterobacteriales n n Enterobacteriaceae n n n Shigella n Shigella flexneri n 281604065
+IA_1-93958 591020 root Bacteria n n n Proteobacteria n n Gammaproteobacteria n n Enterobacteriales n n Enterobacteriaceae n n n Shigella n Shigella flexneri n 281604070
+IA_1-95255 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604181
+IA_1-95526 10116 root Eukaryota Metazoa n n Chordata Craniata Gnathostomata Mammalia n Euarchontoglires Rodentia Sciurognathi n Muridae Murinae n n Rattus n Rattus norvegicus n 281604186
+IA_1-99821 591020 root Bacteria n n n Proteobacteria n n Gammaproteobacteria n n Enterobacteriales n n Enterobacteriaceae n n n Shigella n Shigella flexneri n 281604070
diff -r 9d9f0dfeeebf -r c0192e97a79a tools/taxonomy/lca.py
--- a/tools/taxonomy/lca.py Mon Feb 22 13:56:51 2010 -0500
+++ b/tools/taxonomy/lca.py Mon Feb 22 16:22:12 2010 -0500
@@ -42,6 +42,16 @@
except:
stop_err("Syntax error: Use correct syntax: program infile outfile")
+ fin = open(sys.argv[1],'r')
+ for j, line in enumerate( fin ):
+ elems = line.strip().split('\t')
+ if len(elems) < 24:
+ stop_err("The format of the input dataset is incorrect. Taxonomy datatype should contain at least 24 columns.")
+ if j > 30:
+ break
+ cols = range(1,len(elems))
+ fin.close()
+
group_col = 0
tmpfile = tempfile.NamedTemporaryFile()
@@ -68,11 +78,11 @@
remaining_vals = []
skipped_lines = 0
fout = open(outfile, "w")
- cols = range(1,25)
block_valid = False
+
for ii, line in enumerate( file( tmpfile.name )):
- if line and not line.startswith( '#' ):
+ if line and not line.startswith( '#' ) and len(line.split('\t')) >= 24: #Taxonomy datatype should have at least 24 columns
line = line.rstrip( '\r\n' )
try:
fields = line.split("\t")
@@ -95,14 +105,11 @@
corresponding aggregate values into the output file. This works
due to the sort on group_col we've applied to the data above.
"""
- out_list = ['']*25
+ out_list = ['']*24
out_list[0] = str(prev_item)
out_list[1] = str(prev_vals[0][0])
out_list[2] = str(prev_vals[1][0])
- try:
- out_list[24] = str(prev_vals[23][0])
- except:
- pass
+
for k, col in enumerate(cols):
if col >= 3 and col < 24:
if len(set(prev_vals[k])) == 1:
@@ -113,11 +120,17 @@
out_list[k+1] = 'n'
k += 1
+ j = 0
+ while True:
+ try:
+ out_list.append(str(prev_vals[23+j][0]))
+ j += 1
+ except:
+ break
+
if rank_bound == 0:
print >>fout, '\t'.join(out_list).strip()
- #print 'n'*( 24 - rank_bound )
else:
- #print '\t'.join(out_list[rank_bound:24])
if ''.join(out_list[rank_bound:24]) != 'n'*( 24 - rank_bound ):
print >>fout, '\t'.join(out_list).strip()
@@ -144,15 +157,11 @@
skipped_lines += 1
# Handle the last grouped value
- out_list = ['']*25
+ out_list = ['']*24
out_list[0] = str(prev_item)
out_list[1] = str(prev_vals[0][0])
out_list[2] = str(prev_vals[1][0])
- try:
- out_list[24] = str(prev_vals[23][0])
- except:
- pass
-
+
for k, col in enumerate(cols):
if col >= 3 and col < 24:
if len(set(prev_vals[k])) == 1:
@@ -163,11 +172,17 @@
out_list[k+1] = 'n'
k += 1
+ j = 0
+ while True:
+ try:
+ out_list.append(str(prev_vals[23+j][0]))
+ j += 1
+ except:
+ break
+
if rank_bound == 0:
print >>fout, '\t'.join(out_list).strip()
else:
- #print ''.join(out_list[rank_bound:24])
- #print 'n'*( 24 - rank_bound )
if ''.join(out_list[rank_bound:24]) != 'n'*( 24 - rank_bound ):
print >>fout, '\t'.join(out_list).strip()
diff -r 9d9f0dfeeebf -r c0192e97a79a tools/taxonomy/lca.xml
--- a/tools/taxonomy/lca.xml Mon Feb 22 13:56:51 2010 -0500
+++ b/tools/taxonomy/lca.xml Mon Feb 22 16:22:12 2010 -0500
@@ -1,4 +1,4 @@
-<tool id="lca1" name="Find lowest diagnostic rank" version="1.0.0">
+<tool id="lca1" name="Find lowest diagnostic rank" version="1.0.1">
<description></description>
<command interpreter="python">
lca.py $input1 $out_file1 $rank_bound
@@ -34,11 +34,23 @@
<data format="taxonomy" name="out_file1" metadata_source="input1" />
</outputs>
<tests>
- <test>
- <param name="input1" value="lca_input.taxonomy" ftype="taxonomy"/>
- <param name="rank_bound" value="0" />
- <output name="out_file1" file="lca_output.taxonomy" ftype="taxonomy"/>
- </test>
+ <test>
+ <param name="input1" value="lca_input.taxonomy" ftype="taxonomy"/>
+ <param name="rank_bound" value="0" />
+ <output name="out_file1" file="lca_output.taxonomy" ftype="taxonomy"/>
+ </test>
+ <test>
+ <param name="input1" value="lca_input2.taxonomy" ftype="taxonomy"/>
+ <param name="rank_bound" value="7" />
+ <output name="out_file1" file="lca_output2.taxonomy" ftype="taxonomy"/>
+ </test>
+
+ <!--Test case with invalid lines -->
+ <test>
+ <param name="input1" value="lca_input3.taxonomy" ftype="taxonomy"/>
+ <param name="rank_bound" value="10" />
+ <output name="out_file1" file="lca_output3.taxonomy" ftype="taxonomy"/>
+ </test>
</tests>
<help>
1
0
24 Feb '10
details: http://www.bx.psu.edu/hg/galaxy/rev/1f05b0c4071f
changeset: 3426:1f05b0c4071f
user: Kelly Vincent <kpvincent(a)bx.psu.edu>
date: Tue Feb 23 10:40:19 2010 -0500
description:
Updated BWA wrapper, SAM to BAM, SAM Merge, and SAM Pileup so that the return code of the program is captured and if it fails, the stderr is printed; temp files are created locally; a message is printed if results file empty.
diffstat:
test-data/sam_pileup_in1.bam | 0
test-data/sam_pileup_out1.pileup | 3286 ++++++++++++++++++++++++++++++++++++++
test-data/sam_pileup_out2.pileup | 3286 ++++++++++++++++++++++++++++++++++++++
test-data/sam_to_bam_out2.bam | 0
tools/samtools/sam_merge.py | 35 +-
tools/samtools/sam_merge.xml | 43 +-
tools/samtools/sam_pileup.py | 128 +-
tools/samtools/sam_pileup.xml | 69 +-
tools/samtools/sam_to_bam.py | 92 +-
tools/samtools/sam_to_bam.xml | 19 +
tools/sr_mapping/bwa_wrapper.py | 152 +-
tools/sr_mapping/bwa_wrapper.xml | 99 +-
12 files changed, 6990 insertions(+), 219 deletions(-)
diffs (truncated from 7568 to 3000 lines):
diff -r c0192e97a79a -r 1f05b0c4071f test-data/sam_pileup_in1.bam
Binary file test-data/sam_pileup_in1.bam has changed
diff -r c0192e97a79a -r 1f05b0c4071f test-data/sam_pileup_out1.pileup
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/sam_pileup_out1.pileup Tue Feb 23 10:40:19 2010 -0500
@@ -0,0 +1,3286 @@
+chrM 23 A 1 ^:. I
+chrM 24 A 1 . I
+chrM 25 G 1 . I
+chrM 26 C 1 . I
+chrM 27 A 1 . I
+chrM 28 A 1 . I
+chrM 29 G 1 . I
+chrM 30 G 1 N "
+chrM 31 C 1 N "
+chrM 32 A 1 . I
+chrM 33 C 1 . I
+chrM 34 T 1 . I
+chrM 35 G 1 . I
+chrM 36 A 1 . I
+chrM 37 A 1 . I
+chrM 38 A 1 . I
+chrM 39 A 1 . I
+chrM 40 T 1 . I
+chrM 41 G 1 . I
+chrM 42 C 1 . I
+chrM 43 C 1 . I
+chrM 44 T 1 . I
+chrM 45 A 1 . I
+chrM 46 G 1 . I
+chrM 47 A 1 . E
+chrM 48 T 1 . I
+chrM 49 G 1 . I
+chrM 50 A 1 . I
+chrM 51 G 1 . I
+chrM 52 T 1 . I
+chrM 53 A 1 . I
+chrM 54 T 1 . I
+chrM 55 T 1 . I
+chrM 56 C 1 . I
+chrM 57 T 1 . I
+chrM 58 T 1 .$ I
+chrM 96 T 1 ^:. I
+chrM 97 T 1 . I
+chrM 98 A 1 . I
+chrM 99 G 1 . I
+chrM 100 T 1 . I
+chrM 101 T 1 . I
+chrM 102 A 1 . I
+chrM 103 T 1 N "
+chrM 104 T 1 N "
+chrM 105 A 1 . I
+chrM 106 A 1 . I
+chrM 107 T 1 . I
+chrM 108 A 1 . I
+chrM 109 G 1 . I
+chrM 110 A 1 . I
+chrM 111 A 1 . I
+chrM 112 T 1 . I
+chrM 113 T 1 . I
+chrM 114 A 1 . I
+chrM 115 C 1 . I
+chrM 116 A 1 . I
+chrM 117 C 1 . I
+chrM 118 A 1 . H
+chrM 119 T 1 . I
+chrM 120 G 1 . I
+chrM 121 C 1 . I
+chrM 122 A 1 . E
+chrM 123 A 1 . I
+chrM 124 G 1 . 5
+chrM 125 T 1 . I
+chrM 126 A 1 . I
+chrM 127 T 1 . I
+chrM 128 C 1 . I
+chrM 129 C 1 . I
+chrM 130 G 1 . 4
+chrM 131 C 1 .$ I
+chrM 492 A 1 ^:, I
+chrM 493 A 1 , I
+chrM 494 A 1 , I
+chrM 495 C 1 , E
+chrM 496 T 1 , I
+chrM 497 G 1 , I
+chrM 498 G 1 , I
+chrM 499 G 1 , I
+chrM 500 A 1 , I
+chrM 501 T 1 , I
+chrM 502 T 1 , I
+chrM 503 A 1 , I
+chrM 504 G 1 , I
+chrM 505 A 1 , I
+chrM 506 T 1 , I
+chrM 507 A 1 , I
+chrM 508 C 1 , I
+chrM 509 C 1 , I
+chrM 510 C 1 , I
+chrM 511 C 1 , I
+chrM 512 A 1 , I
+chrM 513 C 1 , I
+chrM 514 T 1 , I
+chrM 515 A 1 , I
+chrM 516 T 1 , I
+chrM 517 G 1 , I
+chrM 518 C 1 , I
+chrM 519 T 1 n "
+chrM 520 T 1 n "
+chrM 521 A 1 , I
+chrM 522 G 1 , I
+chrM 523 C 1 , I
+chrM 524 C 1 , I
+chrM 525 C 1 , I
+chrM 526 T 1 , I
+chrM 527 A 1 ,$ I
+chrM 893 G 1 ^:, 6
+chrM 894 C 1 , 0
+chrM 895 T 1 , 4
+chrM 896 T 1 , I
+chrM 897 A 1 , I
+chrM 898 A 1 , I
+chrM 899 T 1 , ?
+chrM 900 T 1 , I
+chrM 901 G 1 , I
+chrM 902 A 1 , I
+chrM 903 A 1 , I
+chrM 904 T 1 , <
+chrM 905 C 1 , I
+chrM 906 A 1 , I
+chrM 907 G 1 , I
+chrM 908 G 1 , I
+chrM 909 C 1 , I
+chrM 910 C 1 , I
+chrM 911 A 1 , I
+chrM 912 T 1 , I
+chrM 913 G 1 , I
+chrM 914 A 1 , I
+chrM 915 A 1 , I
+chrM 916 G 1 , I
+chrM 917 C 1 , I
+chrM 918 G 1 , I
+chrM 919 C 1 , I
+chrM 920 G 1 n "
+chrM 921 C 1 n "
+chrM 922 A 1 , I
+chrM 923 C 1 , I
+chrM 924 A 1 , I
+chrM 925 C 1 , I
+chrM 926 A 1 , I
+chrM 927 C 1 , I
+chrM 928 C 1 ,$ I
+chrM 1159 T 1 ^:. I
+chrM 1160 T 1 . I
+chrM 1161 A 1 . I
+chrM 1162 A 1 . I
+chrM 1163 C 1 . I
+chrM 1164 T 1 . I
+chrM 1165 A 1 . I
+chrM 1166 A 1 N "
+chrM 1167 A 1 N "
+chrM 1168 A 1 . I
+chrM 1169 C 1 . I
+chrM 1170 A 1 . I
+chrM 1171 T 1 . I
+chrM 1172 T 1 . I
+chrM 1173 C 1 . I
+chrM 1174 A 1 . I
+chrM 1175 C 1 . I
+chrM 1176 C 1 . I
+chrM 1177 A 1 . I
+chrM 1178 A 1 . I
+chrM 1179 A 1 . A
+chrM 1180 C 1 . I
+chrM 1181 C 1 . I
+chrM 1182 A 1 . =
+chrM 1183 T 1 . I
+chrM 1184 T 1 . I
+chrM 1185 A 1 . B
+chrM 1186 A 1 . 5
+chrM 1187 A 1 . 8
+chrM 1188 G 1 . I
+chrM 1189 T 1 . =
+chrM 1190 A 1 . <
+chrM 1191 T 1 . I
+chrM 1192 A 2 .^:. ;I
+chrM 1193 G 2 .. II
+chrM 1194 G 2 .$. II
+chrM 1195 A 1 . I
+chrM 1196 G 1 . I
+chrM 1197 A 1 . I
+chrM 1198 T 1 . I
+chrM 1199 A 1 N "
+chrM 1200 G 1 N "
+chrM 1201 A 1 . I
+chrM 1202 A 1 . I
+chrM 1203 A 1 . I
+chrM 1204 T 1 . I
+chrM 1205 T 1 . I
+chrM 1206 T 1 . I
+chrM 1207 T 1 . I
+chrM 1208 A 1 . I
+chrM 1209 A 1 . I
+chrM 1210 C 1 . I
+chrM 1211 T 1 . I
+chrM 1212 T 1 . I
+chrM 1213 G 1 . I
+chrM 1214 G 1 . I
+chrM 1215 C 1 . I
+chrM 1216 G 1 . I
+chrM 1217 C 1 . I
+chrM 1218 T 1 . I
+chrM 1219 A 1 . I
+chrM 1220 T 1 . I
+chrM 1221 A 1 . C
+chrM 1222 G 1 . <
+chrM 1223 A 1 . I
+chrM 1224 G 1 . H
+chrM 1225 A 1 . I
+chrM 1226 A 1 . I
+chrM 1227 A 1 .$ I
+chrM 1499 A 1 ^:, I
+chrM 1500 A 1 , I
+chrM 1501 A 1 , I
+chrM 1502 T 1 , I
+chrM 1503 T 2 ,^:, EI
+chrM 1504 T 2 ,, II
+chrM 1505 A 2 ,, II
+chrM 1506 C 2 ,, +,
+chrM 1507 C 2 ,, EH
+chrM 1508 T 2 ,, II
+chrM 1509 A 2 ,, II
+chrM 1510 A 2 ,, II
+chrM 1511 A 2 ,, II
+chrM 1512 A 2 ,, II
+chrM 1513 A 2 ,, II
+chrM 1514 C 2 ,, II
+chrM 1515 T 2 ,, II
+chrM 1516 A 2 ,, II
+chrM 1517 C 2 ,, II
+chrM 1518 T 2 ,, II
+chrM 1519 C 2 ,, II
+chrM 1520 A 2 ,, II
+chrM 1521 A 2 ,, II
+chrM 1522 T 2 ,, II
+chrM 1523 T 2 ,, II
+chrM 1524 C 2 ,, II
+chrM 1525 T 2 ,, II
+chrM 1526 A 2 n, "I
+chrM 1527 A 2 n, "I
+chrM 1528 T 2 ,, II
+chrM 1529 G 2 ,, II
+chrM 1530 T 2 ,n I"
+chrM 1531 A 2 ,n I"
+chrM 1532 A 2 ,, II
+chrM 1533 A 2 ,, II
+chrM 1534 T 2 ,$, II
+chrM 1535 T 1 , I
+chrM 1536 T 1 , I
+chrM 1537 A 1 , I
+chrM 1538 A 1 ,$ I
+chrM 1616 A 1 ^:. I
+chrM 1617 G 1 . I
+chrM 1618 T 1 . I
+chrM 1619 T 1 . I
+chrM 1620 G 1 . I
+chrM 1621 G 1 . I
+chrM 1622 C 1 . I
+chrM 1623 T 1 N "
+chrM 1624 T 1 N "
+chrM 1625 A 1 . I
+chrM 1626 A 1 . I
+chrM 1627 A 1 . I
+chrM 1628 A 1 . I
+chrM 1629 G 1 . I
+chrM 1630 C 1 . I
+chrM 1631 A 1 . I
+chrM 1632 G 1 . I
+chrM 1633 C 1 . I
+chrM 1634 C 1 . I
+chrM 1635 A 1 . C
+chrM 1636 T 1 . I
+chrM 1637 C 1 . I
+chrM 1638 A 1 . =
+chrM 1639 A 1 . G
+chrM 1640 T 1 . I
+chrM 1641 T 1 . I
+chrM 1642 A 1 . I
+chrM 1643 A 1 . I
+chrM 1644 G 1 . I
+chrM 1645 A 1 . @
+chrM 1646 A 1 . I
+chrM 1647 A 1 . G
+chrM 1648 G 1 . I
+chrM 1649 C 1 . I
+chrM 1650 G 1 . I
+chrM 1651 T 1 .$ I
+chrM 2261 C 1 ^:, I
+chrM 2262 A 1 , I
+chrM 2263 G 1 , I
+chrM 2264 C 1 , I
+chrM 2265 A 1 , G
+chrM 2266 A 1 , I
+chrM 2267 T 1 , 2
+chrM 2268 T 1 , =
+chrM 2269 T 1 , 3
+chrM 2270 C 1 , I
+chrM 2271 G 1 , I
+chrM 2272 G 1 , I
+chrM 2273 T 1 , I
+chrM 2274 T 1 , I
+chrM 2275 G 1 , I
+chrM 2276 G 1 , I
+chrM 2277 G 1 , I
+chrM 2278 G 1 , I
+chrM 2279 T 1 , I
+chrM 2280 G 1 , I
+chrM 2281 A 1 , I
+chrM 2282 C 1 , I
+chrM 2283 C 1 , I
+chrM 2284 T 1 , I
+chrM 2285 C 1 , I
+chrM 2286 G 1 , I
+chrM 2287 G 1 , I
+chrM 2288 A 1 n "
+chrM 2289 G 1 n "
+chrM 2290 A 1 , I
+chrM 2291 A 1 , I
+chrM 2292 C 1 , I
+chrM 2293 A 1 , I
+chrM 2294 A 1 , I
+chrM 2295 A 1 , I
+chrM 2296 A 1 ,$ I
+chrM 2334 A 1 ^:, I
+chrM 2335 A 1 , I
+chrM 2336 A 1 , I
+chrM 2337 T 1 , I
+chrM 2338 A 1 , I
+chrM 2339 T 1 , H
+chrM 2340 A 1 , I
+chrM 2341 T 1 , =
+chrM 2342 A 1 , I
+chrM 2343 A 1 , I
+chrM 2344 T 1 , C
+chrM 2345 C 1 , I
+chrM 2346 A 1 , I
+chrM 2347 C 1 , I
+chrM 2348 T 1 , ?
+chrM 2349 T 1 , I
+chrM 2350 A 1 , I
+chrM 2351 T 1 , I
+chrM 2352 T 1 , I
+chrM 2353 G 1 , I
+chrM 2354 A 1 , I
+chrM 2355 T 1 , D
+chrM 2356 C 1 , I
+chrM 2357 C 1 , I
+chrM 2358 A 1 , I
+chrM 2359 A 1 , I
+chrM 2360 A 1 , I
+chrM 2361 C 1 n "
+chrM 2362 C 1 n "
+chrM 2363 A 1 , I
+chrM 2364 T 1 , I
+chrM 2365 T 1 , I
+chrM 2366 G 1 , I
+chrM 2367 A 1 , I
+chrM 2368 T 1 , I
+chrM 2369 C 1 ,$ I
+chrM 2389 G 1 ^:, I
+chrM 2390 G 1 , 8
+chrM 2391 G 1 , I
+chrM 2392 A 1 , I
+chrM 2393 T 1 , I
+chrM 2394 A 1 , I
+chrM 2395 A 1 , I
+chrM 2396 C 1 , 8
+chrM 2397 A 1 , I
+chrM 2398 G 1 , I
+chrM 2399 C 1 , I
+chrM 2400 G 1 , I
+chrM 2401 C 1 , I
+chrM 2402 A 1 , I
+chrM 2403 A 1 , I
+chrM 2404 T 1 , I
+chrM 2405 C 1 , I
+chrM 2406 C 1 , I
+chrM 2407 T 1 , G
+chrM 2408 A 1 , I
+chrM 2409 T 1 , I
+chrM 2410 T 1 , B
+chrM 2411 C 1 , I
+chrM 2412 C 1 , I
+chrM 2413 A 1 , I
+chrM 2414 G 1 , I
+chrM 2415 A 1 , I
+chrM 2416 G 1 n "
+chrM 2417 T 1 n "
+chrM 2418 C 1 , I
+chrM 2419 C 1 , I
+chrM 2420 A 1 , I
+chrM 2421 T 1 , I
+chrM 2422 A 1 , I
+chrM 2423 T 1 , I
+chrM 2424 C 1 ,$ I
+chrM 2735 t 1 ^:, I
+chrM 2736 t 1 , 9
+chrM 2737 t 1 , I
+chrM 2738 a 1 , I
+chrM 2739 c 1 , I
+chrM 2740 a 1 , I
+chrM 2741 c 1 , I
+chrM 2742 t 1 , 5
+chrM 2743 c 1 , I
+chrM 2744 a 1 , I
+chrM 2745 g 1 , I
+chrM 2746 a 1 , I
+chrM 2747 g 1 , I
+chrM 2748 g 1 , I
+chrM 2749 t 1 , I
+chrM 2750 t 1 , I
+chrM 2751 c 1 , I
+chrM 2752 a 1 , I
+chrM 2753 a 1 , I
+chrM 2754 c 1 , I
+chrM 2755 t 1 , I
+chrM 2756 c 1 , I
+chrM 2757 c 1 , I
+chrM 2758 t 1 , I
+chrM 2759 c 1 , I
+chrM 2760 t 1 , I
+chrM 2761 c 1 , I
+chrM 2762 c 1 n "
+chrM 2763 c 1 n "
+chrM 2764 t 1 , I
+chrM 2765 a 1 , I
+chrM 2766 a 1 , I
+chrM 2767 c 1 , I
+chrM 2768 a 1 , I
+chrM 2769 a 1 , I
+chrM 2770 c 1 ,$ I
+chrM 2844 G 1 ^:. I
+chrM 2845 A 1 . I
+chrM 2846 A 1 . I
+chrM 2847 A 1 . I
+chrM 2848 A 1 . I
+chrM 2849 G 1 . I
+chrM 2850 T 1 . I
+chrM 2851 C 1 N "
+chrM 2852 T 1 N "
+chrM 2853 T 1 . I
+chrM 2854 A 1 . I
+chrM 2855 G 1 . I
+chrM 2856 G 1 . I
+chrM 2857 C 1 . I
+chrM 2858 T 1 . I
+chrM 2859 A 1 . I
+chrM 2860 T 1 . I
+chrM 2861 A 1 . B
+chrM 2862 T 1 . I
+chrM 2863 G 1 . I
+chrM 2864 C 1 . I
+chrM 2865 A 1 . I
+chrM 2866 A 1 . B
+chrM 2867 C 1 . I
+chrM 2868 T 1 . I
+chrM 2869 T 1 . I
+chrM 2870 C 1 . I
+chrM 2871 G 1 . =
+chrM 2872 C 1 . I
+chrM 2873 A 1 . @
+chrM 2874 A 1 . 9
+chrM 2875 A 1 . 6
+chrM 2876 G 1 . D
+chrM 2877 G 1 . 2
+chrM 2878 A 1 . *
+chrM 2879 C 1 .$ I
+chrM 3080 T 1 ^:. I
+chrM 3081 T 1 . I
+chrM 3082 C 1 . I
+chrM 3083 A 1 . I
+chrM 3084 T 1 . I
+chrM 3085 A 1 . I
+chrM 3086 C 1 . I
+chrM 3087 T 1 N "
+chrM 3088 A 1 N "
+chrM 3089 G 1 . I
+chrM 3090 C 1 . I
+chrM 3091 C 1 . I
+chrM 3092 A 1 . I
+chrM 3093 T 1 . I
+chrM 3094 G 1 . I
+chrM 3095 T 1 . I
+chrM 3096 C 1 . I
+chrM 3097 C 1 . I
+chrM 3098 A 1 . I
+chrM 3099 G 1 . H
+chrM 3100 C 1 . I
+chrM 3101 C 1 . I
+chrM 3102 T 1 . I
+chrM 3103 A 1 . I
+chrM 3104 G 1 . I
+chrM 3105 C 1 . I
+chrM 3106 T 1 . I
+chrM 3107 G 1 . I
+chrM 3108 T 1 . I
+chrM 3109 C 1 . I
+chrM 3110 T 1 . I
+chrM 3111 A 1 . <
+chrM 3112 C 1 . I
+chrM 3113 T 1 . I
+chrM 3114 C 1 . I
+chrM 3115 A 1 .$ F
+chrM 3188 A 1 ^:, I
+chrM 3189 T 1 , =
+chrM 3190 C 1 , I
+chrM 3191 T 1 , I
+chrM 3192 C 1 , I
+chrM 3193 A 1 , I
+chrM 3194 T 1 , I
+chrM 3195 A 1 , I
+chrM 3196 C 1 , I
+chrM 3197 G 1 , @
+chrM 3198 A 1 , I
+chrM 3199 A 1 , I
+chrM 3200 G 1 , I
+chrM 3201 T 1 , I
+chrM 3202 A 1 , I
+chrM 3203 A 1 , I
+chrM 3204 C 1 , I
+chrM 3205 T 1 , I
+chrM 3206 C 1 , I
+chrM 3207 T 1 , I
+chrM 3208 A 1 , I
+chrM 3209 G 1 , I
+chrM 3210 C 1 , I
+chrM 3211 A 1 , I
+chrM 3212 A 1 , I
+chrM 3213 T 1 , I
+chrM 3214 C 1 , I
+chrM 3215 A 1 n "
+chrM 3216 T 1 n "
+chrM 3217 C 1 , I
+chrM 3218 C 1 , I
+chrM 3219 T 1 , I
+chrM 3220 A 1 , I
+chrM 3221 C 1 , I
+chrM 3222 T 1 , I
+chrM 3223 C 1 ,$ I
+chrM 3502 A 1 ^:. I
+chrM 3503 G 1 . I
+chrM 3504 C 1 . I
+chrM 3505 A 1 . I
+chrM 3506 T 1 . I
+chrM 3507 T 1 . I
+chrM 3508 T 1 . I
+chrM 3509 C 1 N "
+chrM 3510 A 1 N "
+chrM 3511 C 1 . I
+chrM 3512 A 1 . I
+chrM 3513 A 1 . I
+chrM 3514 C 1 . I
+chrM 3515 C 1 . I
+chrM 3516 C 1 . I
+chrM 3517 C 1 . I
+chrM 3518 T 1 . I
+chrM 3519 A 1 . I
+chrM 3520 C 1 . I
+chrM 3521 C 1 . I
+chrM 3522 T 1 . I
+chrM 3523 G 1 . I
+chrM 3524 C 1 . I
+chrM 3525 C 1 . I
+chrM 3526 A 1 . >
+chrM 3527 G 1 . I
+chrM 3528 A 1 . 4
+chrM 3529 A 1 . @
+chrM 3530 C 1 . I
+chrM 3531 T 1 . I
+chrM 3532 C 1 . I
+chrM 3533 T 1 . I
+chrM 3534 A 1 . I
+chrM 3535 C 1 . I
+chrM 3536 T 1 . I
+chrM 3537 C 1 .$ I
+chrM 3678 G 1 ^:. I
+chrM 3679 A 1 . I
+chrM 3680 C 1 . I
+chrM 3681 A 1 . I
+chrM 3682 C 1 . I
+chrM 3683 G 1 . I
+chrM 3684 T 1 . I
+chrM 3685 C 1 N "
+chrM 3686 T 1 N "
+chrM 3687 C 1 . I
+chrM 3688 A 1 . I
+chrM 3689 C 1 . I
+chrM 3690 T 1 . I
+chrM 3691 T 1 . I
+chrM 3692 C 1 . I
+chrM 3693 C 1 . I
+chrM 3694 A 1 . I
+chrM 3695 A 1 . :
+chrM 3696 T 1 . I
+chrM 3697 C 1 . I
+chrM 3698 A 1 . I
+chrM 3699 T 1 . I
+chrM 3700 A 1 . 8
+chrM 3701 C 1 . I
+chrM 3702 T 1 . I
+chrM 3703 A 1 . E
+chrM 3704 T 1 . I
+chrM 3705 C 1 . I
+chrM 3706 C 1 . I
+chrM 3707 A 1 . I
+chrM 3708 G 1 . -
+chrM 3709 C 1 . I
+chrM 3710 A 1 . A
+chrM 3711 T 1 . I
+chrM 3712 C 1 . I
+chrM 3713 C 1 .$ I
+chrM 3753 T 1 ^:. I
+chrM 3754 T 1 . I
+chrM 3755 T 1 . I
+chrM 3756 G 1 . I
+chrM 3757 A 1 . I
+chrM 3758 T 1 . I
+chrM 3759 A 1 . I
+chrM 3760 G 1 N "
+chrM 3761 A 1 N "
+chrM 3762 G 1 . I
+chrM 3763 T 1 . I
+chrM 3764 A 1 . I
+chrM 3765 A 1 . I
+chrM 3766 A 1 . I
+chrM 3767 A 1 . I
+chrM 3768 C 1 . I
+chrM 3769 A 1 . I
+chrM 3770 T 1 . I
+chrM 3771 A 1 . I
+chrM 3772 G 1 . I
+chrM 3773 A 1 . I
+chrM 3774 G 1 . I
+chrM 3775 G 1 . I
+chrM 3776 C 1 . I
+chrM 3777 T 1 . I
+chrM 3778 C 1 . I
+chrM 3779 A 1 . C
+chrM 3780 A 1 . I
+chrM 3781 A 1 . I
+chrM 3782 C 1 . I
+chrM 3783 C 1 . I
+chrM 3784 C 1 . I
+chrM 3785 T 1 . I
+chrM 3786 C 1 . I
+chrM 3787 T 1 . I
+chrM 3788 T 1 .$ I
+chrM 3841 t 1 ^:, G
+chrM 3842 g 1 , I
+chrM 3843 c 1 , +
+chrM 3844 t 1 , I
+chrM 3845 a 1 , I
+chrM 3846 c 1 , %
+chrM 3847 c 1 , (
+chrM 3848 g 1 , I
+chrM 3849 a 1 , I
+chrM 3850 a 1 , I
+chrM 3851 t 1 , I
+chrM 3852 t 1 , I
+chrM 3853 a 1 , I
+chrM 3854 c 1 , I
+chrM 3855 a 1 , I
+chrM 3856 c 1 , I
+chrM 3857 c 1 , I
+chrM 3858 a 1 , I
+chrM 3859 t 1 , I
+chrM 3860 g 1 , I
+chrM 3861 t 1 , I
+chrM 3862 c 1 , I
+chrM 3863 c 1 , I
+chrM 3864 t 1 , I
+chrM 3865 a 1 , I
+chrM 3866 C 1 , I
+chrM 3867 A 1 , I
+chrM 3868 A 1 n "
+chrM 3869 G 1 n "
+chrM 3870 T 1 , I
+chrM 3871 A 1 , I
+chrM 3872 A 1 , I
+chrM 3873 G 1 , I
+chrM 3874 G 1 , I
+chrM 3875 T 1 , I
+chrM 3876 C 1 ,$ I
+chrM 3921 C 1 ^:, I
+chrM 3922 A 1 , I
+chrM 3923 C 1 , I
+chrM 3924 C 1 , I
+chrM 3925 C 1 , I
+chrM 3926 T 1 , =
+chrM 3927 T 1 , A
+chrM 3928 C 1 , I
+chrM 3929 C 1 , I
+chrM 3930 C 1 , I
+chrM 3931 G 1 , I
+chrM 3932 T 1 , I
+chrM 3933 A 1 , I
+chrM 3934 C 1 , I
+chrM 3935 T 1 , I
+chrM 3936 A 1 , I
+chrM 3937 A 1 , I
+chrM 3938 T 1 , I
+chrM 3939 A 1 , I
+chrM 3940 A 1 , I
+chrM 3941 A 1 , I
+chrM 3942 T 1 , B
+chrM 3943 C 1 , I
+chrM 3944 C 1 , I
+chrM 3945 C 1 , I
+chrM 3946 C 1 , I
+chrM 3947 T 1 , I
+chrM 3948 T 1 n "
+chrM 3949 A 1 n "
+chrM 3950 T 1 , I
+chrM 3951 C 1 , I
+chrM 3952 T 1 , I
+chrM 3953 T 1 , I
+chrM 3954 C 1 , I
+chrM 3955 A 1 , I
+chrM 3956 C 1 ,$ I
+chrM 4249 A 1 ^:, I
+chrM 4250 A 1 , I
+chrM 4251 A 1 , I
+chrM 4252 C 1 , I
+chrM 4253 T 1 , 5
+chrM 4254 T 1 , 6
+chrM 4255 G 1 , I
+chrM 4256 G 1 , I
+chrM 4257 A 1 , I
+chrM 4258 C 1 , I
+chrM 4259 T 1 , I
+chrM 4260 C 1 , I
+chrM 4261 A 1 , I
+chrM 4262 C 1 , I
+chrM 4263 A 1 , I
+chrM 4264 C 1 , I
+chrM 4265 C 1 , I
+chrM 4266 A 1 , I
+chrM 4267 T 1 , I
+chrM 4268 T 1 , I
+chrM 4269 C 1 , I
+chrM 4270 C 1 , I
+chrM 4271 A 1 , I
+chrM 4272 C 1 , I
+chrM 4273 T 1 , I
+chrM 4274 T 1 , I
+chrM 4275 C 1 , I
+chrM 4276 T 1 n "
+chrM 4277 G 1 n "
+chrM 4278 A 1 , I
+chrM 4279 G 1 , I
+chrM 4280 T 1 , I
+chrM 4281 A 1 , I
+chrM 4282 C 1 , I
+chrM 4283 C 1 , I
+chrM 4284 C 1 ,$ I
+chrM 4552 T 1 ^:. I
+chrM 4553 T 1 . I
+chrM 4554 A 1 . I
+chrM 4555 A 1 . I
+chrM 4556 T 1 . I
+chrM 4557 T 1 . I
+chrM 4558 T 1 . I
+chrM 4559 A 1 N "
+chrM 4560 C 1 N "
+chrM 4561 A 1 . I
+chrM 4562 T 1 . I
+chrM 4563 T 1 . I
+chrM 4564 A 1 . I
+chrM 4565 T 1 . I
+chrM 4566 A 1 . I
+chrM 4567 A 1 . I
+chrM 4568 T 1 . I
+chrM 4569 A 1 . I
+chrM 4570 A 1 . I
+chrM 4571 C 1 . I
+chrM 4572 A 1 . I
+chrM 4573 C 1 . I
+chrM 4574 T 1 . I
+chrM 4575 C 1 . I
+chrM 4576 A 1 . I
+chrM 4577 C 1 . I
+chrM 4578 A 1 . I
+chrM 4579 A 1 . ?
+chrM 4580 T 1 . I
+chrM 4581 A 1 . 6
+chrM 4582 T 1 . I
+chrM 4583 T 1 . I
+chrM 4584 C 1 . I
+chrM 4585 A 1 . I
+chrM 4586 T 1 . I
+chrM 4587 A 1 .$ 6
+chrM 4697 T 1 ^:, 5
+chrM 4698 C 1 , =
+chrM 4699 C 1 , 4
+chrM 4700 C 1 , &
+chrM 4701 C 1 , G
+chrM 4702 C 1 , 1
+chrM 4703 C 1 , 3
+chrM 4704 A 1 , I
+chrM 4705 C 1 , .
+chrM 4706 T 1 , ?
+chrM 4707 A 1 , I
+chrM 4708 T 1 , I
+chrM 4709 C 1 , I
+chrM 4710 A 1 , I
+chrM 4711 G 1 , I
+chrM 4712 G 1 , I
+chrM 4713 A 1 , I
+chrM 4714 T 1 , I
+chrM 4715 T 1 , I
+chrM 4716 C 1 , I
+chrM 4717 A 1 , I
+chrM 4718 T 1 , I
+chrM 4719 A 1 , I
+chrM 4720 C 1 , I
+chrM 4721 C 1 , I
+chrM 4722 C 1 , I
+chrM 4723 A 1 , I
+chrM 4724 A 1 n "
+chrM 4725 A 1 n "
+chrM 4726 T 1 , I
+chrM 4727 G 1 , I
+chrM 4728 A 1 , I
+chrM 4729 A 1 , I
+chrM 4730 T 1 , I
+chrM 4731 A 1 , I
+chrM 4732 A 1 ,$ I
+chrM 4742 A 1 ^:. I
+chrM 4743 G 1 . I
+chrM 4744 C 1 . I
+chrM 4745 T 1 . I
+chrM 4746 C 1 . I
+chrM 4747 A 1 . I
+chrM 4748 C 1 . I
+chrM 4749 C 1 N "
+chrM 4750 A 1 N "
+chrM 4751 A 1 . I
+chrM 4752 A 1 . I
+chrM 4753 A 1 . I
+chrM 4754 A 1 . I
+chrM 4755 T 1 . I
+chrM 4756 A 1 . I
+chrM 4757 G 1 . I
+chrM 4758 C 1 . I
+chrM 4759 A 1 . I
+chrM 4760 G 1 . I
+chrM 4761 C 1 . I
+chrM 4762 A 1 . I
+chrM 4763 T 1 . I
+chrM 4764 C 1 . I
+chrM 4765 A 1 . I
+chrM 4766 T 1 . I
+chrM 4767 C 1 . I
+chrM 4768 C 1 . I
+chrM 4769 T 1 . I
+chrM 4770 C 1 . I
+chrM 4771 C 1 . I
+chrM 4772 C 1 . I
+chrM 4773 C 1 . I
+chrM 4774 A 1 . 8
+chrM 4775 C 1 . I
+chrM 4776 A 1 . :
+chrM 4777 C 1 .$ I
+chrM 4932 C 1 ^:, I
+chrM 4933 T 1 , -
+chrM 4934 C 1 , A
+chrM 4935 C 1 , I
+chrM 4936 C 1 , I
+chrM 4937 T 1 , 7
+chrM 4938 A 1 , I
+chrM 4939 C 1 , I
+chrM 4940 T 1 , 5
+chrM 4941 C 1 , I
+chrM 4942 C 1 , I
+chrM 4943 T 1 , :
+chrM 4944 C 1 , I
+chrM 4945 C 1 , I
+chrM 4946 C 1 , I
+chrM 4947 C 1 , I
+chrM 4948 C 1 , I
+chrM 4949 T 1 , I
+chrM 4950 A 1 , I
+chrM 4951 A 1 , I
+chrM 4952 C 1 , I
+chrM 4953 C 1 , I
+chrM 4954 C 1 , I
+chrM 4955 C 1 , I
+chrM 4956 C 1 , I
+chrM 4957 A 1 , I
+chrM 4958 T 1 , I
+chrM 4959 A 1 n "
+chrM 4960 C 1 n "
+chrM 4961 T 1 , I
+chrM 4962 A 1 , I
+chrM 4963 T 1 , I
+chrM 4964 C 1 , I
+chrM 4965 A 1 , I
+chrM 4966 A 1 , I
+chrM 4967 T 1 ,$ I
+chrM 5155 G 1 ^:, 7
+chrM 5156 T 1 , I
+chrM 5157 T 1 , I
+chrM 5158 A 1 , I
+chrM 5159 A 1 , I
+chrM 5160 C 1 , I
+chrM 5161 A 1 , I
+chrM 5162 G 1 , I
+chrM 5163 C 1 , I
+chrM 5164 T 1 , I
+chrM 5165 A 1 , I
+chrM 5166 A 1 , I
+chrM 5167 A 1 , I
+chrM 5168 T 1 , I
+chrM 5169 A 1 , I
+chrM 5170 C 1 , I
+chrM 5171 C 1 , I
+chrM 5172 C 1 , I
+chrM 5173 T 1 , I
+chrM 5174 A 1 , I
+chrM 5175 A 1 , I
+chrM 5176 T 1 , I
+chrM 5177 C 1 , I
+chrM 5178 A 1 , I
+chrM 5179 A 1 , I
+chrM 5180 C 1 , I
+chrM 5181 T 1 , I
+chrM 5182 G 1 n "
+chrM 5183 G 1 n "
+chrM 5184 C 1 , I
+chrM 5185 T 1 , I
+chrM 5186 T 1 , I
+chrM 5187 C 1 , I
+chrM 5188 A 1 , I
+chrM 5189 A 1 , I
+chrM 5190 T 1 ,$ I
+chrM 5309 T 1 ^:, I
+chrM 5310 C 1 , I
+chrM 5311 C 1 , I
+chrM 5312 A 1 , I
+chrM 5313 A 1 , I
+chrM 5314 C 1 , I
+chrM 5315 C 1 , I
+chrM 5316 C 1 , I
+chrM 5317 C 1 , I
+chrM 5318 T 1 , I
+chrM 5319 G 1 , I
+chrM 5320 T 1 , I
+chrM 5321 C 1 , I
+chrM 5322 T 1 , I
+chrM 5323 T 1 , I
+chrM 5324 T 1 , I
+chrM 5325 A 1 , I
+chrM 5326 G 1 , I
+chrM 5327 A 1 , I
+chrM 5328 T 1 , I
+chrM 5329 T 1 , I
+chrM 5330 T 1 , I
+chrM 5331 A 1 , I
+chrM 5332 C 1 , I
+chrM 5333 A 1 , I
+chrM 5334 G 1 , I
+chrM 5335 T 1 , I
+chrM 5336 C 1 n "
+chrM 5337 T 1 n "
+chrM 5338 A 1 , I
+chrM 5339 A 1 , I
+chrM 5340 T 1 , I
+chrM 5341 G 1 , I
+chrM 5342 C 1 , I
+chrM 5343 T 1 , I
+chrM 5344 T 1 ,$ I
+chrM 5540 C 1 ^:, ?
+chrM 5541 C 1 , :
+chrM 5542 C 1 , ;
+chrM 5543 A 1 , I
+chrM 5544 T 1 , 9
+chrM 5545 G 1 , D
+chrM 5546 C 1 , D
+chrM 5547 A 1 , I
+chrM 5548 T 1 , B
+chrM 5549 T 1 , E
+chrM 5550 C 1 , I
+chrM 5551 G 1 , I
+chrM 5552 T 1 , I
+chrM 5553 A 1 , I
+chrM 5554 A 1 , I
+chrM 5555 T 1 , I
+chrM 5556 A 1 , I
+chrM 5557 A 1 , I
+chrM 5558 T 1 , E
+chrM 5559 T 1 , I
+chrM 5560 T 1 , E
+chrM 5561 T 1 , I
+chrM 5562 C 1 , I
+chrM 5563 T 1 , I
+chrM 5564 T 1 , I
+chrM 5565 T 1 , I
+chrM 5566 A 1 , I
+chrM 5567 T 1 n "
+chrM 5568 G 1 n "
+chrM 5569 G 1 , I
+chrM 5570 T 1 , I
+chrM 5571 C 1 , I
+chrM 5572 A 1 , I
+chrM 5573 T 1 , I
+chrM 5574 A 1 , I
+chrM 5575 C 1 ,$ I
+chrM 6016 T 1 ^:, @
+chrM 6017 T 1 , 7
+chrM 6018 C 1 , I
+chrM 6019 T 1 , <
+chrM 6020 T 1 , ?
+chrM 6021 C 1 , I
+chrM 6022 G 1 , I
+chrM 6023 A 1 , I
+chrM 6024 C 1 , I
+chrM 6025 C 1 , I
+chrM 6026 C 1 , I
+chrM 6027 C 1 , I
+chrM 6028 G 1 , I
+chrM 6029 C 1 , I
+chrM 6030 A 1 , I
+chrM 6031 G 1 , I
+chrM 6032 G 1 , I
+chrM 6033 A 1 , I
+chrM 6034 G 1 , I
+chrM 6035 G 1 , I
+chrM 6036 A 1 , I
+chrM 6037 G 1 , I
+chrM 6038 G 1 , I
+chrM 6039 G 1 , I
+chrM 6040 G 2 ,^:. II
+chrM 6041 A 2 ,. II
+chrM 6042 T 2 ,. II
+chrM 6043 C 2 n. "I
+chrM 6044 C 2 n. "I
+chrM 6045 A 2 ,. II
+chrM 6046 A 2 ,. II
+chrM 6047 T 2 ,N I"
+chrM 6048 C 2 ,N I"
+chrM 6049 C 2 ,. II
+chrM 6050 T 2 ,. II
+chrM 6051 T 2 ,$. II
+chrM 6052 T 1 . I
+chrM 6053 A 2 .^:. II
+chrM 6054 T 2 .. II
+chrM 6055 C 2 .. II
+chrM 6056 A 2 .. II
+chrM 6057 A 2 .. II
+chrM 6058 C 2 .. II
+chrM 6059 A 2 .. II
+chrM 6060 C 2 .N I"
+chrM 6061 C 2 .N I"
+chrM 6062 T 2 .. II
+chrM 6063 A 2 .. II
+chrM 6064 T 2 .. II
+chrM 6065 T 2 .. II
+chrM 6066 C 2 .. II
+chrM 6067 T 2 .. II
+chrM 6068 G 2 .. II
+chrM 6069 A 2 .. II
+chrM 6070 T 2 .. II
+chrM 6071 T 2 .. II
+chrM 6072 C 2 .. II
+chrM 6073 T 2 .. II
+chrM 6074 T 2 .. II
+chrM 6075 C 2 .$. II
+chrM 6076 G 1 . I
+chrM 6077 G 1 . I
+chrM 6078 A 1 . I
+chrM 6079 C 1 . I
+chrM 6080 A 1 . A
+chrM 6081 C 1 . I
+chrM 6082 C 1 . I
+chrM 6083 C 1 . I
+chrM 6084 C 1 . I
+chrM 6085 G 1 . F
+chrM 6086 A 1 . (
+chrM 6087 A 1 . .
+chrM 6088 G 1 .$ I
+chrM 6379 T 1 ^:. I
+chrM 6380 G 1 . I
+chrM 6381 A 1 . I
+chrM 6382 G 1 . I
+chrM 6383 C 1 . I
+chrM 6384 T 1 . I
+chrM 6385 C 1 . I
+chrM 6386 T 1 N "
+chrM 6387 A 1 N "
+chrM 6388 G 1 . I
+chrM 6389 G 1 . I
+chrM 6390 C 1 . I
+chrM 6391 T 1 . I
+chrM 6392 T 1 . I
+chrM 6393 C 1 . I
+chrM 6394 A 1 . C
+chrM 6395 T 1 . I
+chrM 6396 C 1 . I
+chrM 6397 T 1 . I
+chrM 6398 T 1 . I
+chrM 6399 C 1 . I
+chrM 6400 T 1 . I
+chrM 6401 T 1 . I
+chrM 6402 A 1 . I
+chrM 6403 T 1 . I
+chrM 6404 T 1 . I
+chrM 6405 C 1 . I
+chrM 6406 A 1 . I
+chrM 6407 C 1 . I
+chrM 6408 A 1 . I
+chrM 6409 G 1 . @
+chrM 6410 T 1 . I
+chrM 6411 A 1 . I
+chrM 6412 G 1 . 5
+chrM 6413 G 1 . @
+chrM 6414 A 1 .$ F
+chrM 6591 A 1 ^:. I
+chrM 6592 A 1 . I
+chrM 6593 A 1 . I
+chrM 6594 A 1 . I
+chrM 6595 A 1 . I
+chrM 6596 T 1 . I
+chrM 6597 C 1 . I
+chrM 6598 C 1 N "
+chrM 6599 A 1 N "
+chrM 6600 C 1 . I
+chrM 6601 T 1 . I
+chrM 6602 T 1 . I
+chrM 6603 T 1 . I
+chrM 6604 A 1 . I
+chrM 6605 C 1 . I
+chrM 6606 A 1 . I
+chrM 6607 A 1 . I
+chrM 6608 T 1 . I
+chrM 6609 T 1 . I
+chrM 6610 A 1 . I
+chrM 6611 T 1 . I
+chrM 6612 A 1 . I
+chrM 6613 T 1 . I
+chrM 6614 T 1 . I
+chrM 6615 C 1 . I
+chrM 6616 G 1 . F
+chrM 6617 T 1 . I
+chrM 6618 A 1 . I
+chrM 6619 G 1 . I
+chrM 6620 G 1 . 6
+chrM 6621 G 1 . A
+chrM 6622 G 1 . I
+chrM 6623 T 1 . I
+chrM 6624 A 1 . I
+chrM 6625 A 1 . G
+chrM 6626 A 1 .$ I
+chrM 6695 A 1 ^:. I
+chrM 6696 C 1 . I
+chrM 6697 G 1 . I
+chrM 6698 C 1 . I
+chrM 6699 A 1 . I
+chrM 6700 T 1 . I
+chrM 6701 A 1 . I
+chrM 6702 T 1 N "
+chrM 6703 A 2 N^:. "I
+chrM 6704 C 2 .. II
+chrM 6705 A 2 .. II
+chrM 6706 A 2 .. II
+chrM 6707 C 2 .. II
+chrM 6708 A 2 .. II
+chrM 6709 T 2 .. II
+chrM 6710 G 2 .N I"
+chrM 6711 A 2 .N I"
+chrM 6712 A 2 .. II
+chrM 6713 A 2 .. II
+chrM 6714 T 2 .. II
+chrM 6715 A 2 .. II
+chrM 6716 C 2 .. II
+chrM 6717 C 2 .. II
+chrM 6718 A 2 .. II
+chrM 6719 T 2 .. II
+chrM 6720 C 2 .. IA
+chrM 6721 T 2 .. II
+chrM 6722 C 2 .. II
+chrM 6723 A 2 .. FI
+chrM 6724 T 2 .. II
+chrM 6725 C 2 .. II
+chrM 6726 C 2 .. II
+chrM 6727 A 2 .. I>
+chrM 6728 T 2 .. II
+chrM 6729 A 2 .. GI
+chrM 6730 G 2 .$. IH
+chrM 6731 G 1 . I
+chrM 6732 A 1 . =
+chrM 6733 T 1 . I
+chrM 6734 C 1 . I
+chrM 6735 T 1 . I
+chrM 6736 T 1 . I
+chrM 6737 T 1 . I
+chrM 6738 T 1 .$ I
+chrM 6809 C 1 ^:, )
+chrM 6810 T 1 , I
+chrM 6811 A 1 , I
+chrM 6812 C 1 , &
+chrM 6813 A 1 , I
+chrM 6814 G 1 , I
+chrM 6815 T 1 , I
+chrM 6816 A 1 , I
+chrM 6817 G 1 , I
+chrM 6818 A 1 , I
+chrM 6819 A 1 , I
+chrM 6820 T 1 , I
+chrM 6821 T 1 , I
+chrM 6822 A 1 , I
+chrM 6823 A 1 , I
+chrM 6824 C 1 , 1
+chrM 6825 C 1 , I
+chrM 6826 T 1 , I
+chrM 6827 C 1 , I
+chrM 6828 A 1 , I
+chrM 6829 A 1 , I
+chrM 6830 C 1 , I
+chrM 6831 T 1 , I
+chrM 6832 A 1 , I
+chrM 6833 A 1 , I
+chrM 6834 T 1 , I
+chrM 6835 C 1 , I
+chrM 6836 T 1 n "
+chrM 6837 G 1 n "
+chrM 6838 G 1 , I
+chrM 6839 A 1 , I
+chrM 6840 A 1 , I
+chrM 6841 T 1 , I
+chrM 6842 G 1 , I
+chrM 6843 A 1 , I
+chrM 6844 C 1 ,$ I
+chrM 7018 A 1 ^:. I
+chrM 7019 A 1 . I
+chrM 7020 A 1 . I
+chrM 7021 T 1 . I
+chrM 7022 T 1 . I
+chrM 7023 A 1 . I
+chrM 7024 T 1 . I
+chrM 7025 A 1 N "
+chrM 7026 G 1 N "
+chrM 7027 G 1 . I
+chrM 7028 T 1 . I
+chrM 7029 T 1 . I
+chrM 7030 A 1 . I
+chrM 7031 A 1 . I
+chrM 7032 A 1 . I
+chrM 7033 C 1 . I
+chrM 7034 C 1 . I
+chrM 7035 C 1 . I
+chrM 7036 C 1 . I
+chrM 7037 T 1 . I
+chrM 7038 A 1 . I
+chrM 7039 T 1 . I
+chrM 7040 A 1 . B
+chrM 7041 T 1 . I
+chrM 7042 A 1 . D
+chrM 7043 C 1 . I
+chrM 7044 C 1 . I
+chrM 7045 T 1 . I
+chrM 7046 C 1 . I
+chrM 7047 T 1 . I
+chrM 7048 A 1 . 0
+chrM 7049 T 1 . I
+chrM 7050 G 1 . I
+chrM 7051 G 1 . -
+chrM 7052 C 1 . I
+chrM 7053 C 1 .$ G
+chrM 7122 C 1 ^:, I
+chrM 7123 C 1 , I
+chrM 7124 A 1 , I
+chrM 7125 C 1 , 4
+chrM 7126 A 1 , I
+chrM 7127 C 1 , I
+chrM 7128 A 1 , I
+chrM 7129 C 1 , I
+chrM 7130 T 1 , I
+chrM 7131 A 1 , I
+chrM 7132 A 1 , I
+chrM 7133 T 1 , I
+chrM 7134 A 1 , I
+chrM 7135 A 1 , I
+chrM 7136 T 1 , I
+chrM 7137 C 1 , I
+chrM 7138 G 1 , I
+chrM 7139 T 1 , I
+chrM 7140 A 1 , I
+chrM 7141 T 1 , I
+chrM 7142 T 1 , I
+chrM 7143 C 1 , I
+chrM 7144 C 1 , I
+chrM 7145 T 1 , I
+chrM 7146 A 1 , I
+chrM 7147 A 1 , I
+chrM 7148 T 1 , I
+chrM 7149 T 1 n "
+chrM 7150 A 1 n "
+chrM 7151 G 1 , I
+chrM 7152 C 1 , I
+chrM 7153 T 1 , I
+chrM 7154 C 1 , I
+chrM 7155 T 1 , I
+chrM 7156 C 1 , I
+chrM 7157 T 1 ,$ I
+chrM 7191 T 1 ^:, <
+chrM 7192 A 1 , I
+chrM 7193 A 1 , I
+chrM 7194 A 1 , I
+chrM 7195 T 1 , 0
+chrM 7196 T 1 , E
+chrM 7197 A 1 , I
+chrM 7198 A 1 , I
+chrM 7199 C 1 , 3
+chrM 7200 C 1 , +
+chrM 7201 C 1 , 3
+chrM 7202 A 1 , I
+chrM 7203 T 1 , 2
+chrM 7204 A 1 , 9
+chrM 7205 C 1 , I
+chrM 7206 C 1 , >
+chrM 7207 A 1 , I
+chrM 7208 G 1 , I
+chrM 7209 C 1 , I
+chrM 7210 A 1 , 8
+chrM 7211 C 1 , A
+chrM 7212 C 1 , I
+chrM 7213 A 1 , I
+chrM 7214 T 1 , I
+chrM 7215 A 1 , I
+chrM 7216 G 1 , I
+chrM 7217 A 1 , I
+chrM 7218 T 1 n "
+chrM 7219 G 1 n "
+chrM 7220 C 1 , I
+chrM 7221 T 1 , I
+chrM 7222 C 1 , I
+chrM 7223 A 1 , I
+chrM 7224 A 1 , I
+chrM 7225 G 1 , I
+chrM 7226 A 1 ,$ I
+chrM 7348 G 1 ^:, I
+chrM 7349 G 1 , I
+chrM 7350 C 1 , /
+chrM 7351 C 1 , <
+chrM 7352 A 1 , )
+chrM 7353 C 1 , 2
+chrM 7354 C 1 , I
+chrM 7355 A 1 , I
+chrM 7356 A 1 , I
+chrM 7357 T 1 , I
+chrM 7358 G 1 , I
+chrM 7359 A 1 , I
+chrM 7360 T 1 , I
+chrM 7361 A 1 , I
+chrM 7362 C 1 , I
+chrM 7363 T 1 , I
+chrM 7364 G 1 , I
+chrM 7365 A 1 , I
+chrM 7366 A 1 , I
+chrM 7367 G 1 , I
+chrM 7368 C 1 , I
+chrM 7369 T 1 , I
+chrM 7370 A 1 , I
+chrM 7371 C 1 , I
+chrM 7372 G 1 , I
+chrM 7373 A 1 , I
+chrM 7374 G 1 , I
+chrM 7375 T 1 n "
+chrM 7376 A 1 n "
+chrM 7377 T 1 , I
+chrM 7378 A 1 , I
+chrM 7379 C 1 , I
+chrM 7380 C 1 , I
+chrM 7381 G 1 , I
+chrM 7382 A 1 , I
+chrM 7383 T 1 ,$ I
+chrM 7398 C 1 ^:, I
+chrM 7399 T 1 , E
+chrM 7400 T 1 , I
+chrM 7401 T 1 , I
+chrM 7402 G 1 , I
+chrM 7403 A 1 , I
+chrM 7404 C 1 , I
+chrM 7405 T 1 , I
+chrM 7406 C 1 , I
+chrM 7407 C 1 , I
+chrM 7408 T 1 , I
+chrM 7409 A 1 , I
+chrM 7410 C 1 , I
+chrM 7411 A 1 , I
+chrM 7412 T 1 , I
+chrM 7413 G 1 , I
+chrM 7414 A 1 , I
+chrM 7415 T 1 , I
+chrM 7416 C 1 , I
+chrM 7417 C 1 , I
+chrM 7418 C 1 , I
+chrM 7419 C 1 , I
+chrM 7420 A 1 , I
+chrM 7421 C 1 , I
+chrM 7422 A 1 , I
+chrM 7423 T 1 , I
+chrM 7424 C 1 , I
+chrM 7425 A 1 n "
+chrM 7426 G 1 n "
+chrM 7427 A 1 , I
+chrM 7428 C 1 , I
+chrM 7429 C 1 , I
+chrM 7430 T 1 , I
+chrM 7431 A 1 , I
+chrM 7432 A 1 , I
+chrM 7433 A 1 ,$ I
+chrM 7564 G 1 ^:, 5
+chrM 7565 A 1 , I
+chrM 7566 C 1 , I
+chrM 7567 G 1 , I
+chrM 7568 C 1 , @
+chrM 7569 T 1 , 6
+chrM 7570 A 1 , I
+chrM 7571 T 1 , I
+chrM 7572 C 1 , I
+chrM 7573 C 1 , I
+chrM 7574 C 1 , I
+chrM 7575 T 1 , >
+chrM 7576 G 1 , I
+chrM 7577 G 1 , I
+chrM 7578 G 1 , I
+chrM 7579 C 1 , 5
+chrM 7580 G 1 , I
+chrM 7581 C 1 , I
+chrM 7582 C 1 , I
+chrM 7583 T 1 , I
+chrM 7584 A 1 , I
+chrM 7585 A 1 , I
+chrM 7586 A 1 , I
+chrM 7587 T 1 , I
+chrM 7588 C 1 , I
+chrM 7589 A 1 , I
+chrM 7590 G 1 , I
+chrM 7591 A 1 n "
+chrM 7592 C 1 n "
+chrM 7593 A 1 , I
+chrM 7594 A 1 , I
+chrM 7595 C 1 , I
+chrM 7596 T 1 , I
+chrM 7597 C 1 , I
+chrM 7598 T 1 , I
+chrM 7599 C 1 ,$ I
+chrM 7752 A 1 ^:. I
+chrM 7753 G 1 . I
+chrM 7754 C 1 . I
+chrM 7755 A 1 . I
+chrM 7756 T 1 . I
+chrM 7757 T 1 . I
+chrM 7758 A 1 . I
+chrM 7759 A 1 N "
+chrM 7760 C 1 N "
+chrM 7761 C 1 . I
+chrM 7762 T 1 . I
+chrM 7763 T 1 . I
+chrM 7764 T 1 . I
+chrM 7765 T 1 . I
+chrM 7766 A 1 . I
+chrM 7767 A 1 . ,
+chrM 7768 G 1 . I
+chrM 7769 T 1 . I
+chrM 7770 T 1 . I
+chrM 7771 A 1 . B
+chrM 7772 A 1 . ;
+chrM 7773 A 1 . B
+chrM 7774 G 1 . I
+chrM 7775 A 1 . <
+chrM 7776 T 1 . I
+chrM 7777 T 1 . I
+chrM 7778 G 1 . I
+chrM 7779 A 1 . I
+chrM 7780 G 1 . I
+chrM 7781 G 1 . I
+chrM 7782 G 1 . +
+chrM 7783 T 1 . I
+chrM 7784 T 1 . I
+chrM 7785 C 1 . I
+chrM 7786 A 1 . B
+chrM 7787 A 1 .$ I
+chrM 7971 G 1 ^:, @
+chrM 7972 A 1 , I
+chrM 7973 A 1 , I
+chrM 7974 A 1 , I
+chrM 7975 A 1 , I
+chrM 7976 T 1 , 7
+chrM 7977 C 1 , I
+chrM 7978 T 1 , I
+chrM 7979 A 1 , I
+chrM 7980 T 1 , D
+chrM 7981 T 1 , C
+chrM 7982 C 1 , I
+chrM 7983 G 1 , I
+chrM 7984 C 1 , I
+chrM 7985 C 1 , I
+chrM 7986 T 1 , B
+chrM 7987 C 1 , I
+chrM 7988 T 1 , I
+chrM 7989 T 1 , I
+chrM 7990 T 1 , I
+chrM 7991 C 1 , I
+chrM 7992 G 1 , I
+chrM 7993 C 1 , I
+chrM 7994 T 1 , I
+chrM 7995 A 1 , I
+chrM 7996 C 1 , I
+chrM 7997 C 1 , I
+chrM 7998 C 1 n "
+chrM 7999 C 1 n "
+chrM 8000 A 1 , I
+chrM 8001 A 1 , I
+chrM 8002 C 1 , I
+chrM 8003 A 1 , I
+chrM 8004 A 1 , I
+chrM 8005 T 1 , I
+chrM 8006 A 1 ,$ I
+chrM 8346 T 1 ^:. I
+chrM 8347 T 1 . I
+chrM 8348 T 1 . I
+chrM 8349 C 1 . I
+chrM 8350 T 1 . I
+chrM 8351 A 1 . I
+chrM 8352 C 1 . I
+chrM 8353 C 1 N "
+chrM 8354 T 1 N "
+chrM 8355 C 1 . I
+chrM 8356 A 1 . I
+chrM 8357 A 1 . I
+chrM 8358 G 1 . I
+chrM 8359 G 1 . I
+chrM 8360 G 1 . =
+chrM 8361 A 1 . I
+chrM 8362 C 1 . 7
+chrM 8363 G 1 . I
+chrM 8364 C 1 . I
+chrM 8365 C 1 . I
+chrM 8366 C 1 . I
+chrM 8367 A 1 . 3
+chrM 8368 T 1 . I
+chrM 8369 T 1 . I
+chrM 8370 T 1 . I
+chrM 8371 T 1 . I
+chrM 8372 C 1 . I
+chrM 8373 C 1 . I
+chrM 8374 T 1 . I
+chrM 8375 C 1 . I
+chrM 8376 A 1 . /
+chrM 8377 T 1 . I
+chrM 8378 C 1 . D
+chrM 8379 C 1 . @
+chrM 8380 C 1 . I
+chrM 8381 C 1 .$ I
+chrM 8421 C 1 ^:, I
+chrM 8422 C 1 , I
+chrM 8423 T 1 , %
+chrM 8424 G 1 , :
+chrM 8425 T 1 , :
+chrM 8426 A 1 , I
+chrM 8427 G 1 , <
+chrM 8428 C 1 , I
+chrM 8429 C 1 , I
+chrM 8430 C 1 , I
+chrM 8431 T 1 , I
+chrM 8432 A 1 , I
+chrM 8433 G 1 , E
+chrM 8434 C 1 , I
+chrM 8435 C 1 , I
+chrM 8436 G 1 , I
+chrM 8437 T 1 , 8
+chrM 8438 G 1 , I
+chrM 8439 C 1 , I
+chrM 8440 G 1 , I
+chrM 8441 G 1 , I
+chrM 8442 C 1 , I
+chrM 8443 T 1 , I
+chrM 8444 A 1 , I
+chrM 8445 A 1 , I
+chrM 8446 C 1 , I
+chrM 8447 C 1 , I
+chrM 8448 G 1 n "
+chrM 8449 C 1 n "
+chrM 8450 T 2 ,^:, II
+chrM 8451 A 2 ,, II
+chrM 8452 A 2 ,, II
+chrM 8453 C 2 ,, II
+chrM 8454 A 2 ,, II
+chrM 8455 T 2 ,, I>
+chrM 8456 T 2 ,$, I1
+chrM 8457 A 1 , I
+chrM 8458 C 1 , I
+chrM 8459 C 1 , I
+chrM 8460 G 1 , I
+chrM 8461 C 1 , I
+chrM 8462 C 1 , I
+chrM 8463 G 1 , I
+chrM 8464 G 1 , I
+chrM 8465 A 1 , I
+chrM 8466 C 1 , I
+chrM 8467 A 1 , I
+chrM 8468 C 1 , I
+chrM 8469 C 1 , I
+chrM 8470 T 1 , I
+chrM 8471 C 1 , I
+chrM 8472 C 1 , I
+chrM 8473 T 1 , I
+chrM 8474 A 1 , I
+chrM 8475 A 1 , I
+chrM 8476 T 1 , I
+chrM 8477 A 1 n "
+chrM 8478 C 1 n "
+chrM 8479 A 1 , I
+chrM 8480 C 1 , I
+chrM 8481 C 1 , I
+chrM 8482 T 1 , I
+chrM 8483 C 1 , I
+chrM 8484 A 1 , I
+chrM 8485 T 1 ,$ I
+chrM 8630 A 1 ^:. I
+chrM 8631 C 1 . I
+chrM 8632 A 1 . I
+chrM 8633 C 1 . I
+chrM 8634 G 1 . I
+chrM 8635 A 1 . I
+chrM 8636 C 1 . I
+chrM 8637 A 1 N "
+chrM 8638 A 1 N "
+chrM 8639 C 1 . I
+chrM 8640 A 1 . I
+chrM 8641 C 1 . I
+chrM 8642 C 1 . I
+chrM 8643 T 1 . I
+chrM 8644 A 1 . I
+chrM 8645 A 1 . I
+chrM 8646 T 1 . I
+chrM 8647 G 1 . I
+chrM 8648 A 1 . I
+chrM 8649 C 1 . I
+chrM 8650 C 1 . I
+chrM 8651 C 1 . I
+chrM 8652 A 1 . I
+chrM 8653 C 1 . I
+chrM 8654 C 1 . I
+chrM 8655 A 1 . >
+chrM 8656 A 1 . C
+chrM 8657 A 1 . :
+chrM 8658 C 1 . I
+chrM 8659 C 1 . I
+chrM 8660 C 1 . I
+chrM 8661 A 1 . D
+chrM 8662 C 1 . I
+chrM 8663 G 1 . <
+chrM 8664 C 1 . I
+chrM 8665 T 1 .$ I
+chrM 8752 C 1 ^:, I
+chrM 8753 T 1 , B
+chrM 8754 T 1 , I
+chrM 8755 T 1 , I
+chrM 8756 A 1 , I
+chrM 8757 A 1 , I
+chrM 8758 C 1 , I
+chrM 8759 T 1 , I
+chrM 8760 C 1 , I
+chrM 8761 A 1 , I
+chrM 8762 A 1 , I
+chrM 8763 C 1 , I
+chrM 8764 C 2 ,^:, II
+chrM 8765 T 2 ,, IA
+chrM 8766 T 2 ,, IA
+chrM 8767 A 2 ,, II
+chrM 8768 C 2 ,, II
+chrM 8769 T 2 ,, IH
+chrM 8770 T 2 ,, IA
+chrM 8771 C 2 ,, II
+chrM 8772 T 2 ,, I?
+chrM 8773 A 2 ,, II
+chrM 8774 G 2 ,, II
+chrM 8775 C 2 ,, II
+chrM 8776 T 2 ,, II
+chrM 8777 A 2 ,, II
+chrM 8778 T 2 ,, II
+chrM 8779 A 2 n, "I
+chrM 8780 G 2 n, "I
+chrM 8781 G 2 ,, II
+chrM 8782 G 2 ,, II
+chrM 8783 C 2 ,, II
+chrM 8784 T 2 ,, II
+chrM 8785 A 2 ,, II
+chrM 8786 T 2 ,, II
+chrM 8787 T 2 ,$, II
+chrM 8788 A 1 , I
+chrM 8789 A 1 , I
+chrM 8790 C 1 , I
+chrM 8791 T 1 n "
+chrM 8792 A 1 n "
+chrM 8793 A 1 , I
+chrM 8794 C 1 , I
+chrM 8795 A 1 , I
+chrM 8796 T 1 , I
+chrM 8797 C 1 , I
+chrM 8798 C 1 , I
+chrM 8799 T 1 ,$ I
+chrM 8908 C 1 ^:, I
+chrM 8909 T 1 , :
+chrM 8910 C 1 , I
+chrM 8911 A 1 , I
+chrM 8912 G 1 , D
+chrM 8913 A 1 , I
+chrM 8914 A 1 , I
+chrM 8915 G 1 , I
+chrM 8916 T 1 , I
+chrM 8917 C 1 , I
+chrM 8918 T 1 , I
+chrM 8919 T 1 , <
+chrM 8920 C 1 , I
+chrM 8921 T 1 , F
+chrM 8922 T 1 , I
+chrM 8923 C 1 , I
+chrM 8924 T 1 , F
+chrM 8925 T 1 , E
+chrM 8926 C 1 , I
+chrM 8927 T 1 , H
+chrM 8928 C 1 , I
+chrM 8929 T 2 ,^:, II
+chrM 8930 G 2 ,, II
+chrM 8931 G 2 ,, II
+chrM 8932 C 2 ,, II
+chrM 8933 T 2 ,, II
+chrM 8934 T 2 ,, II
+chrM 8935 C 2 n, "I
+chrM 8936 T 2 n, ";
+chrM 8937 T 2 ,, IG
+chrM 8938 C 2 ,, II
+chrM 8939 T 2 ,, IE
+chrM 8940 G 2 ,, II
+chrM 8941 A 2 ,, II
+chrM 8942 G 2 ,, II
+chrM 8943 C 2 ,$, II
+chrM 8944 C 1 , I
+chrM 8945 T 1 , I
+chrM 8946 T 1 , I
+chrM 8947 T 1 , I
+chrM 8948 T 1 , I
+chrM 8949 A 1 , I
+chrM 8950 C 1 , I
+chrM 8951 C 1 , I
+chrM 8952 A 1 , I
+chrM 8953 C 1 , I
+chrM 8954 T 1 , I
+chrM 8955 C 1 , I
+chrM 8956 A 1 n "
+chrM 8957 A 1 n "
+chrM 8958 G 1 , I
+chrM 8959 C 1 , I
+chrM 8960 C 1 , I
+chrM 8961 T 1 , I
+chrM 8962 A 1 , I
+chrM 8963 G 1 , I
+chrM 8964 C 1 ,$ I
+chrM 9111 G 1 ^:. I
+chrM 9112 T 1 . I
+chrM 9113 A 1 . I
+chrM 9114 A 1 . I
+chrM 9115 A 1 . I
+chrM 9116 A 1 . I
+chrM 9117 A 1 . I
+chrM 9118 T 1 N "
+chrM 9119 A 1 N "
+chrM 9120 T 1 . I
+chrM 9121 G 1 . I
+chrM 9122 C 1 . I
+chrM 9123 T 1 . I
+chrM 9124 C 1 . I
+chrM 9125 C 1 . I
+chrM 9126 A 1 . I
+chrM 9127 A 1 . I
+chrM 9128 G 1 . I
+chrM 9129 G 1 . I
+chrM 9130 C 1 . I
+chrM 9131 C 1 . I
+chrM 9132 T 1 . I
+chrM 9133 A 1 . I
+chrM 9134 T 1 . I
+chrM 9135 T 1 . I
+chrM 9136 C 1 . I
+chrM 9137 A 1 . I
+chrM 9138 T 1 . I
+chrM 9139 C 1 . I
+chrM 9140 A 1 . E
+chrM 9141 C 1 . I
+chrM 9142 A 1 . B
+chrM 9143 A 1 . 8
+chrM 9144 T 1 . I
+chrM 9145 T 1 . I
+chrM 9146 T 1 .$ I
+chrM 9331 C 1 ^:, &
+chrM 9332 A 1 , ,
+chrM 9333 G 1 , *
+chrM 9334 C 1 , I
+chrM 9335 C 1 , I
+chrM 9336 A 1 , -
+chrM 9337 C 1 , <
+chrM 9338 C 1 , ?
+chrM 9339 A 1 , <
+chrM 9340 C 1 , I
+chrM 9341 T 1 , I
+chrM 9342 T 1 , 4
+chrM 9343 C 1 , I
+chrM 9344 G 1 , (
+chrM 9345 G 1 , I
+chrM 9346 A 1 , 1
+chrM 9347 T 1 , I
+chrM 9348 T 1 , I
+chrM 9349 C 1 , I
+chrM 9350 G 2 ,^:. II
+chrM 9351 A 2 ,. II
+chrM 9352 A 2 ,. DI
+chrM 9353 G 2 ,. II
+chrM 9354 C 2 ,. II
+chrM 9355 A 2 ,. II
+chrM 9356 G 2 ,. II
+chrM 9357 C 2 ,N I"
+chrM 9358 C 2 nN ""
+chrM 9359 G 2 n. "I
+chrM 9360 C 2 ,. II
+chrM 9361 T 2 ,. II
+chrM 9362 T 2 ,. II
+chrM 9363 G 2 ,. II
+chrM 9364 A 2 ,. II
+chrM 9365 T 2 ,. II
+chrM 9366 A 2 ,$. II
+chrM 9367 C 1 . I
+chrM 9368 T 1 . I
+chrM 9369 G 1 . I
+chrM 9370 A 1 . I
+chrM 9371 C 1 . I
+chrM 9372 A 1 . I
+chrM 9373 C 1 . I
+chrM 9374 T 1 . I
+chrM 9375 T 1 . I
+chrM 9376 C 1 . I
+chrM 9377 G 1 . I
+chrM 9378 T 1 . I
+chrM 9379 C 1 . I
+chrM 9380 G 1 . I
+chrM 9381 A 1 . 9
+chrM 9382 C 1 . I
+chrM 9383 G 1 . I
+chrM 9384 T 1 . D
+chrM 9385 A 1 .$ F
+chrM 9563 C 1 ^:, I
+chrM 9564 T 1 , +
+chrM 9565 G 1 , -
+chrM 9566 A 1 , I
+chrM 9567 C 1 , I
+chrM 9568 T 1 , ?
+chrM 9569 A 1 , I
+chrM 9570 C 1 , D
+chrM 9571 C 1 , I
+chrM 9572 A 1 , I
+chrM 9573 C 1 , I
+chrM 9574 A 1 , I
+chrM 9575 A 1 , I
+chrM 9576 C 1 , I
+chrM 9577 T 1 , I
+chrM 9578 A 1 , I
+chrM 9579 A 1 , I
+chrM 9580 A 1 , I
+chrM 9581 C 1 , I
+chrM 9582 A 1 , I
+chrM 9583 T 1 , I
+chrM 9584 C 1 , I
+chrM 9585 T 1 , I
+chrM 9586 A 1 , I
+chrM 9587 T 1 , I
+chrM 9588 G 1 , I
+chrM 9589 C 1 , I
+chrM 9590 A 1 n "
+chrM 9591 G 1 n "
+chrM 9592 A 1 , I
+chrM 9593 A 1 , I
+chrM 9594 A 1 , I
+chrM 9595 A 1 , I
+chrM 9596 A 1 , I
+chrM 9597 A 1 , I
+chrM 9598 C 1 ,$ I
+chrM 9689 A 1 ^:, ,
+chrM 9690 T 1 , C
+chrM 9691 T 1 , I
+chrM 9692 C 1 , I
+chrM 9693 G 1 , I
+chrM 9694 A 1 , .
+chrM 9695 C 1 , I
+chrM 9696 T 1 , I
+chrM 9697 T 1 , 0
+chrM 9698 A 1 , I
+chrM 9699 G 1 , <
+chrM 9700 A 1 , I
+chrM 9701 A 1 , F
+chrM 9702 A 1 , I
+chrM 9703 T 1 , ;
+chrM 9704 T 1 , I
+chrM 9705 G 1 , I
+chrM 9706 C 1 , I
+chrM 9707 C 1 , I
+chrM 9708 C 1 , I
+chrM 9709 T 1 , D
+chrM 9710 C 1 , I
+chrM 9711 C 1 , I
+chrM 9712 T 1 , I
+chrM 9713 A 1 , I
+chrM 9714 T 1 , I
+chrM 9715 T 1 , I
+chrM 9716 A 1 n "
+chrM 9717 C 1 n "
+chrM 9718 C 1 , I
+chrM 9719 C 1 , I
+chrM 9720 C 1 , I
+chrM 9721 T 1 , I
+chrM 9722 T 1 , &
+chrM 9723 C 1 , I
+chrM 9724 C 1 ,$ I
+chrM 9810 G 1 ^:, A
+chrM 9811 A 1 , I
+chrM 9812 A 1 , I
+chrM 9813 T 1 , I
+chrM 9814 G 1 , I
+chrM 9815 A 1 , I
+chrM 9816 A 1 , I
+chrM 9817 C 1 , ?
+chrM 9818 C 1 , 2
+chrM 9819 C 1 , 2
+chrM 9820 A 1 , I
+chrM 9821 A 1 , I
+chrM 9822 A 1 , I
+chrM 9823 A 1 , I
+chrM 9824 A 1 , I
+chrM 9825 G 1 , I
+chrM 9826 G 1 , I
+chrM 9827 A 1 , I
+chrM 9828 C 1 , I
+chrM 9829 T 1 , I
+chrM 9830 A 1 , I
+chrM 9831 G 1 , I
+chrM 9832 A 1 , I
+chrM 9833 A 1 , I
+chrM 9834 T 1 , I
+chrM 9835 G 1 , I
+chrM 9836 A 1 , I
+chrM 9837 A 1 n "
+chrM 9838 C 1 n "
+chrM 9839 T 1 , I
+chrM 9840 G 1 , I
+chrM 9841 A 1 , I
+chrM 9842 G 1 , I
+chrM 9843 T 1 , I
+chrM 9844 A 1 , I
+chrM 9845 T 1 ,$ I
+chrM 9916 T 1 ^:. I
+chrM 9917 G 1 . I
+chrM 9918 T 1 . I
+chrM 9919 C 1 . I
+chrM 9920 A 1 . I
+chrM 9921 C 1 . I
+chrM 9922 T 1 . I
+chrM 9923 A 1 N "
+chrM 9924 G 1 N "
+chrM 9925 T 1 . I
+chrM 9926 C 1 . I
+chrM 9927 C 1 . I
+chrM 9928 A 1 . I
+chrM 9929 T 1 . I
+chrM 9930 A 1 . =
+chrM 9931 T 1 . I
+chrM 9932 T 1 . I
+chrM 9933 A 1 . I
+chrM 9934 A 1 . 9
+chrM 9935 T 1 . I
+chrM 9936 A 1 . @
+chrM 9937 T 1 . I
+chrM 9938 C 1 . I
+chrM 9939 T 1 . I
+chrM 9940 T 1 . I
+chrM 9941 C 1 . I
+chrM 9942 C 1 . I
+chrM 9943 T 1 . I
+chrM 9944 A 1 . B
+chrM 9945 G 1 . I
+chrM 9946 C 1 . I
+chrM 9947 A 1 . E
+chrM 9948 T 1 . I
+chrM 9949 T 1 . I
+chrM 9950 C 1 . I
+chrM 9951 A 1 .$ >
+chrM 10002 C 1 ^:, I
+chrM 10003 T 1 , :
+chrM 10004 C 1 , 2
+chrM 10005 C 1 , I
+chrM 10006 T 1 , E
+chrM 10007 A 1 , I
+chrM 10008 T 1 , :
+chrM 10009 G 1 , I
+chrM 10010 C 1 , I
+chrM 10011 C 1 , D
+chrM 10012 T 1 , I
+chrM 10013 A 1 , I
+chrM 10014 G 1 , I
+chrM 10015 A 1 , I
+chrM 10016 A 1 , I
+chrM 10017 G 1 , I
+chrM 10018 G 1 , 4
+chrM 10019 A 1 , I
+chrM 10020 A 1 , I
+chrM 10021 T 1 , I
+chrM 10022 A 1 , I
+chrM 10023 A 1 , I
+chrM 10024 T 1 , I
+chrM 10025 A 1 , I
+chrM 10026 C 1 , I
+chrM 10027 T 1 , I
+chrM 10028 A 1 , I
+chrM 10029 T 1 n "
+chrM 10030 C 1 n "
+chrM 10031 A 1 , I
+chrM 10032 C 1 , I
+chrM 10033 T 1 , I
+chrM 10034 A 1 , I
+chrM 10035 T 1 , I
+chrM 10036 T 1 , I
+chrM 10037 C 1 ,$ I
+chrM 10391 G 1 ^:. I
+chrM 10392 C 1 . I
+chrM 10393 C 1 . I
+chrM 10394 C 1 . I
+chrM 10395 C 1 . I
+chrM 10396 A 1 . I
+chrM 10397 C 1 . I
+chrM 10398 T 1 N "
+chrM 10399 T 1 N "
+chrM 10400 C 1 . I
+chrM 10401 T 1 . I
+chrM 10402 G 1 . I
+chrM 10403 G 1 . I
+chrM 10404 T 1 . I
+chrM 10405 G 1 . I
+chrM 10406 T 1 . I
+chrM 10407 T 1 . I
+chrM 10408 G 1 . I
+chrM 10409 A 1 . I
+chrM 10410 C 1 . I
+chrM 10411 A 1 . I
+chrM 10412 A 1 . I
+chrM 10413 C 1 . I
+chrM 10414 A 1 . =
+chrM 10415 T 1 . I
+chrM 10416 G 1 . *
+chrM 10417 A 1 . 5
+chrM 10418 C 1 . I
+chrM 10419 T 1 . I
+chrM 10420 A 1 . <
+chrM 10421 C 1 . I
+chrM 10422 T 1 . I
+chrM 10423 G 1 . '
+chrM 10424 C 1 . I
+chrM 10425 C 1 . I
+chrM 10426 A 1 .$ (
+chrM 10597 T 1 ^:, H
+chrM 10598 A 1 , I
+chrM 10599 T 1 , <
+chrM 10600 C 1 , I
+chrM 10601 A 1 , I
+chrM 10602 T 1 , ;
+chrM 10603 C 1 , I
+chrM 10604 A 1 , I
+chrM 10605 C 1 , I
+chrM 10606 C 1 , I
+chrM 10607 C 1 , I
+chrM 10608 G 1 , I
+chrM 10609 C 1 , I
+chrM 10610 T 1 , I
+chrM 10611 G 1 , I
+chrM 10612 A 1 , I
+chrM 10613 G 1 , I
+chrM 10614 G 1 , I
+chrM 10615 C 1 , I
+chrM 10616 A 1 , I
+chrM 10617 A 2 ,^:, II
+chrM 10618 C 2 ,, II
+chrM 10619 C 2 ,, II
+chrM 10620 A 2 ,, II
+chrM 10621 A 2 ,, II
+chrM 10622 A 2 ,, II
+chrM 10623 C 2 ,, II
+chrM 10624 A 2 n, "I
+chrM 10625 G 2 n, "I
+chrM 10626 A 2 ,, II
+chrM 10627 A 2 ,, II
+chrM 10628 C 2 ,, II
+chrM 10629 G 2 ,, II
+chrM 10630 C 2 ,, II
+chrM 10631 C 2 ,, II
+chrM 10632 T 2 ,$, II
+chrM 10633 G 1 , I
+chrM 10634 A 1 , I
+chrM 10635 A 1 , I
+chrM 10636 C 1 , I
+chrM 10637 G 1 , I
+chrM 10638 C 1 , I
+chrM 10639 A 1 , I
+chrM 10640 G 1 , I
+chrM 10641 G 1 , I
+chrM 10642 C 1 , I
+chrM 10643 C 1 , I
+chrM 10644 T 1 n "
+chrM 10645 C 1 n "
+chrM 10646 T 1 , I
+chrM 10647 A 1 , I
+chrM 10648 C 1 , I
+chrM 10649 T 1 , I
+chrM 10650 T 1 , I
+chrM 10651 C 1 , I
+chrM 10652 C 1 ,$ I
+chrM 10669 A 1 ^:, I
+chrM 10670 G 1 , I
+chrM 10671 G 1 , I
+chrM 10672 T 1 , I
+chrM 10673 T 1 , <
+chrM 10674 C 1 , I
+chrM 10675 C 1 , I
+chrM 10676 C 1 , I
+chrM 10677 T 1 , C
+chrM 10678 C 1 , I
+chrM 10679 C 1 , I
+chrM 10680 C 1 , I
+chrM 10681 A 1 , I
+chrM 10682 C 1 , I
+chrM 10683 T 1 , I
+chrM 10684 C 1 , I
+chrM 10685 T 1 , F
+chrM 10686 T 1 , I
+chrM 10687 A 1 , I
+chrM 10688 G 1 , I
+chrM 10689 T 1 , I
+chrM 10690 T 1 , I
+chrM 10691 G 1 , I
+chrM 10692 C 1 , I
+chrM 10693 A 1 , I
+chrM 10694 C 1 , I
+chrM 10695 T 1 , I
+chrM 10696 A 1 n "
+chrM 10697 A 1 n "
+chrM 10698 T 1 , I
+chrM 10699 C 1 , I
+chrM 10700 T 1 , I
+chrM 10701 C 1 , I
+chrM 10702 T 1 , I
+chrM 10703 A 1 , I
+chrM 10704 T 1 ,$ I
+chrM 10731 T 1 ^:. I
+chrM 10732 C 1 . I
+chrM 10733 C 1 . I
+chrM 10734 T 1 . I
+chrM 10735 A 1 . I
+chrM 10736 T 1 . I
+chrM 10737 T 1 . I
+chrM 10738 A 1 N "
+chrM 10739 A 1 N "
+chrM 10740 T 1 . I
+chrM 10741 T 1 . I
+chrM 10742 C 1 . I
+chrM 10743 A 1 . I
+chrM 10744 A 1 . I
+chrM 10745 T 1 . I
+chrM 10746 A 1 . I
+chrM 10747 C 1 . I
+chrM 10748 T 1 . I
+chrM 10749 G 1 . I
+chrM 10750 A 1 . I
+chrM 10751 A 1 . I
+chrM 10752 A 1 . I
+chrM 10753 C 1 . I
+chrM 10754 C 1 . I
+chrM 10755 A 1 . I
+chrM 10756 A 1 . F
+chrM 10757 G 1 . I
+chrM 10758 C 1 . I
+chrM 10759 A 1 . I
+chrM 10760 C 1 . I
+chrM 10761 T 1 . I
+chrM 10762 A 1 . @
+chrM 10763 C 1 . I
+chrM 10764 C 1 . I
+chrM 10765 C 1 . I
+chrM 10766 G 1 .$ H
+chrM 10784 T 1 ^:, E
+chrM 10785 T 1 , 9
+chrM 10786 C 1 , I
+chrM 10787 C 1 , /
+chrM 10788 T 1 , B
+chrM 10789 A 1 , I
+chrM 10790 T 1 , I
+chrM 10791 G 1 , I
+chrM 10792 A 1 , I
+chrM 10793 C 1 , C
+chrM 10794 T 1 , I
+chrM 10795 A 1 , I
+chrM 10796 G 1 , I
+chrM 10797 C 1 , I
+chrM 10798 A 1 , I
+chrM 10799 T 1 , F
+chrM 10800 G 1 , I
+chrM 10801 T 1 , I
+chrM 10802 A 1 , I
+chrM 10803 T 1 , I
+chrM 10804 A 1 , I
+chrM 10805 A 1 , I
+chrM 10806 T 1 , I
+chrM 10807 A 1 , I
+chrM 10808 G 1 , I
+chrM 10809 C 1 , I
+chrM 10810 A 1 , I
+chrM 10811 T 1 n "
+chrM 10812 T 1 n "
+chrM 10813 C 1 , I
+chrM 10814 A 1 , I
+chrM 10815 T 1 , I
+chrM 10816 A 1 , I
+chrM 10817 G 1 , I
+chrM 10818 T 1 , I
+chrM 10819 C 1 ,$ I
+chrM 10864 T 1 ^:, D
+chrM 10865 G 1 , B
+chrM 10866 T 1 , A
+chrM 10867 A 1 , I
+chrM 10868 G 1 , I
+chrM 10869 A 1 , I
+chrM 10870 A 1 , I
+chrM 10871 G 1 , I
+chrM 10872 C 1 , I
+chrM 10873 C 1 , I
+chrM 10874 C 1 , I
+chrM 10875 C 1 , I
+chrM 10876 A 1 , I
+chrM 10877 A 1 , I
+chrM 10878 T 1 , F
+chrM 10879 T 1 , I
+chrM 10880 G 1 , I
+chrM 10881 C 1 , I
+chrM 10882 C 1 , I
+chrM 10883 G 1 , I
+chrM 10884 G 1 , I
+chrM 10885 A 1 , I
+chrM 10886 T 1 , I
+chrM 10887 C 1 , I
+chrM 10888 C 1 , I
+chrM 10889 A 1 , I
+chrM 10890 T 1 , I
+chrM 10891 A 2 n^:, "5
+chrM 10892 G 2 n, "7
+chrM 10893 T 2 ,, I-
+chrM 10894 G 2 ,, IC
+chrM 10895 C 2 ,, I5
+chrM 10896 T 2 ,, I,
+chrM 10897 A 2 ,, II
+chrM 10898 G 2 ,, I5
+chrM 10899 C 2 ,$, II
+chrM 10900 A 1 , I
+chrM 10901 G 1 , I
+chrM 10902 C 2 ,^:, I'
+chrM 10903 C 2 ,, IA
+chrM 10904 A 2 ,, II
+chrM 10905 T 2 ,, II
+chrM 10906 T 2 ,, II
+chrM 10907 C 2 ,, I7
+chrM 10908 T 2 ,, I=
+chrM 10909 A 2 ,, @I
+chrM 10910 C 2 ,, II
+chrM 10911 T 2 ,, ID
+chrM 10912 A 2 ,, II
+chrM 10913 A 2 ,, II
+chrM 10914 A 2 ,, II
+chrM 10915 A 2 ,, I8
+chrM 10916 C 2 ,, I6
+chrM 10917 T 2 ,, I.
+chrM 10918 A 2 n, "I
+chrM 10919 G 2 n, "I
+chrM 10920 G 2 ,, II
+chrM 10921 A 2 ,, II
+chrM 10922 G 2 ,, II
+chrM 10923 G 2 ,, II
+chrM 10924 C 2 ,, II
+chrM 10925 T 2 ,, II
+chrM 10926 A 2 ,$, II
+chrM 10927 C 1 , I
+chrM 10928 G 1 , I
+chrM 10929 G 1 n "
+chrM 10930 A 1 n "
+chrM 10931 A 1 , I
+chrM 10932 T 1 , I
+chrM 10933 A 1 , I
+chrM 10934 C 1 , I
+chrM 10935 T 1 , I
+chrM 10936 A 1 , I
+chrM 10937 C 1 ,$ 7
+chrM 10991 A 1 ^:. I
+chrM 10992 T 1 . I
+chrM 10993 A 1 . I
+chrM 10994 C 1 . I
+chrM 10995 T 1 . I
+chrM 10996 A 1 . I
+chrM 10997 T 1 . I
+chrM 10998 C 1 N "
+chrM 10999 C 1 N "
+chrM 11000 C 1 . I
+chrM 11001 T 1 . I
+chrM 11002 G 1 . I
+chrM 11003 T 1 . I
+chrM 11004 G 1 . I
+chrM 11005 A 1 . 2
+chrM 11006 G 1 . I
+chrM 11007 G 1 . I
+chrM 11008 A 1 . I
+chrM 11009 A 1 . I
+chrM 11010 T 1 . I
+chrM 11011 A 1 . I
+chrM 11012 A 1 . I
+chrM 11013 T 1 . I
+chrM 11014 C 1 . I
+chrM 11015 A 1 . I
+chrM 11016 T 1 . I
+chrM 11017 A 1 . F
+chrM 11018 A 1 . I
+chrM 11019 C 1 . I
+chrM 11020 T 1 . I
+chrM 11021 A 1 . :
+chrM 11022 G 1 . I
+chrM 11023 T 1 . I
+chrM 11024 T 1 . I
+chrM 11025 C 1 . I
+chrM 11026 C 1 .$ I
+chrM 11036 C 1 ^:, I
+chrM 11037 G 1 , I
+chrM 11038 A 1 , I
+chrM 11039 C 1 , I
+chrM 11040 A 1 , I
+chrM 11041 A 1 , I
+chrM 11042 A 1 , I
+chrM 11043 C 1 , I
+chrM 11044 C 1 , I
+chrM 11045 G 1 , I
+chrM 11046 A 1 , I
+chrM 11047 T 1 , I
+chrM 11048 C 1 , I
+chrM 11049 T 1 , I
+chrM 11050 A 1 , I
+chrM 11051 A 1 , I
+chrM 11052 A 1 , I
+chrM 11053 A 1 , I
+chrM 11054 T 1 , I
+chrM 11055 C 1 , I
+chrM 11056 A 1 , I
+chrM 11057 C 1 , I
+chrM 11058 T 1 , I
+chrM 11059 T 1 , I
+chrM 11060 A 1 , I
+chrM 11061 T 1 , I
+chrM 11062 T 1 , I
+chrM 11063 G 1 n "
+chrM 11064 C 1 n "
+chrM 11065 A 1 , I
+chrM 11066 T 1 , I
+chrM 11067 A 1 , I
+chrM 11068 C 1 , I
+chrM 11069 T 1 , I
+chrM 11070 C 1 , I
+chrM 11071 C 1 ,$ I
+chrM 11086 A 1 ^:, I
+chrM 11087 G 1 , 1
+chrM 11088 C 1 , '
+chrM 11089 C 1 , =
+chrM 11090 C 1 , D
+chrM 11091 T 1 , 0
+chrM 11092 A 1 , I
+chrM 11093 G 1 , @
+chrM 11094 T 1 , 4
+chrM 11095 A 1 , I
+chrM 11096 A 1 , I
+chrM 11097 T 1 , A
+chrM 11098 C 1 , I
+chrM 11099 G 1 , I
+chrM 11100 T 1 , D
+chrM 11101 A 1 , I
+chrM 11102 G 1 , I
+chrM 11103 C 1 , I
+chrM 11104 C 1 , I
+chrM 11105 G 1 , I
+chrM 11106 T 1 , I
+chrM 11107 C 1 , I
+chrM 11108 C 1 , I
+chrM 11109 T 1 , I
+chrM 11110 C 1 , I
+chrM 11111 A 1 , I
+chrM 11112 T 1 , I
+chrM 11113 C 1 n "
+chrM 11114 C 1 n "
+chrM 11115 A 1 , I
+chrM 11116 A 1 , I
+chrM 11117 A 1 , I
+chrM 11118 C 1 , I
+chrM 11119 A 1 , I
+chrM 11120 C 1 , I
+chrM 11121 C 1 ,$ I
+chrM 11375 A 1 ^:. I
+chrM 11376 T 1 . I
+chrM 11377 T 1 . I
+chrM 11378 A 1 . I
+chrM 11379 C 1 . I
+chrM 11380 C 1 . I
+chrM 11381 A 1 . I
+chrM 11382 T 1 N "
+chrM 11383 T 1 N "
+chrM 11384 A 1 . I
+chrM 11385 T 1 . I
+chrM 11386 C 1 . I
+chrM 11387 C 1 . I
+chrM 11388 T 1 . I
+chrM 11389 A 1 . I
+chrM 11390 A 1 . I
+chrM 11391 T 1 . I
+chrM 11392 A 1 . G
+chrM 11393 G 1 . I
+chrM 11394 G 1 . I
+chrM 11395 A 1 . I
+chrM 11396 G 1 . I
+chrM 11397 C 1 . I
+chrM 11398 C 1 . I
+chrM 11399 A 1 . I
+chrM 11400 A 1 . I
+chrM 11401 T 1 . I
+chrM 11402 A 1 . I
+chrM 11403 T 1 . I
+chrM 11404 C 1 . I
+chrM 11405 A 1 . @
+chrM 11406 C 1 . I
+chrM 11407 C 1 . I
+chrM 11408 A 1 . 4
+chrM 11409 T 1 . I
+chrM 11410 C 1 .$ I
+chrM 11457 A 1 ^:. I
+chrM 11458 A 1 . I
+chrM 11459 T 1 . I
+chrM 11460 A 1 . I
+chrM 11461 C 1 . I
+chrM 11462 A 1 . I
+chrM 11463 C 1 . I
+chrM 11464 A 1 N "
+chrM 11465 C 1 N "
+chrM 11466 A 1 . I
+chrM 11467 C 1 . I
+chrM 11468 C 1 . I
+chrM 11469 A 1 . I
+chrM 11470 T 1 . I
+chrM 11471 A 1 . I
+chrM 11472 T 1 . I
+chrM 11473 C 1 . I
+chrM 11474 A 1 . I
+chrM 11475 A 1 . I
+chrM 11476 C 1 . I
+chrM 11477 A 1 . I
+chrM 11478 G 1 . I
+chrM 11479 C 1 . I
+chrM 11480 A 1 . I
+chrM 11481 T 1 . I
+chrM 11482 T 1 . I
+chrM 11483 A 1 . I
+chrM 11484 A 1 . I
+chrM 11485 A 1 . I
+chrM 11486 C 1 . I
+chrM 11487 C 1 . I
+chrM 11488 T 1 . I
+chrM 11489 T 1 . I
+chrM 11490 C 1 . I
+chrM 11491 A 1 . @
+chrM 11492 T 1 .$ I
+chrM 11616 G 1 ^:, I
+chrM 11617 A 1 , I
+chrM 11618 T 1 , 9
+chrM 11619 C 1 , I
+chrM 11620 T 1 , I
+chrM 11621 A 1 , I
+chrM 11622 G 1 , I
+chrM 11623 A 1 , I
+chrM 11624 A 1 , I
+chrM 11625 A 1 , I
+chrM 11626 C 1 , I
+chrM 11627 A 1 , I
+chrM 11628 G 1 , I
+chrM 11629 A 1 , I
+chrM 11630 A 1 , I
+chrM 11631 A 1 , I
+chrM 11632 C 1 , I
+chrM 11633 T 1 , I
+chrM 11634 T 1 , I
+chrM 11635 A 1 , I
+chrM 11636 A 1 , I
+chrM 11637 T 1 , I
+chrM 11638 A 1 , I
+chrM 11639 T 1 , I
+chrM 11640 T 1 , I
+chrM 11641 T 1 , I
+chrM 11642 C 1 , I
+chrM 11643 T 1 n "
+chrM 11644 T 1 n "
+chrM 11645 A 1 , I
+chrM 11646 T 1 , I
+chrM 11647 T 1 , I
+chrM 11648 T 1 , I
+chrM 11649 A 1 , I
+chrM 11650 C 1 , I
+chrM 11651 C 1 ,$ I
+chrM 11721 A 1 ^:. I
+chrM 11722 G 1 . I
+chrM 11723 G 1 . I
+chrM 11724 A 1 . I
+chrM 11725 T 1 . I
+chrM 11726 A 1 . I
+chrM 11727 G 1 . I
+chrM 11728 G 1 N "
+chrM 11729 A 1 N "
+chrM 11730 G 1 . I
+chrM 11731 C 1 . I
+chrM 11732 T 1 . I
+chrM 11733 A 1 . I
+chrM 11734 T 1 . I
+chrM 11735 C 1 . I
+chrM 11736 C 1 . I
+chrM 11737 G 1 . I
+chrM 11738 T 1 . I
+chrM 11739 T 1 . I
+chrM 11740 G 1 . I
+chrM 11741 G 1 . I
+chrM 11742 T 1 . I
+chrM 11743 C 1 . I
+chrM 11744 T 1 . I
+chrM 11745 T 1 . I
+chrM 11746 A 1 . I
+chrM 11747 G 1 . I
+chrM 11748 G 1 . I
+chrM 11749 A 1 . F
+chrM 11750 A 1 . I
+chrM 11751 C 1 . I
+chrM 11752 C 1 . I
+chrM 11753 A 1 . H
+chrM 11754 A 1 . :
+chrM 11755 A 1 . 6
+chrM 11756 A 1 .$ I
+chrM 12013 C 1 ^:, I
+chrM 12014 C 1 , I
+chrM 12015 T 1 , I
+chrM 12016 A 1 , I
+chrM 12017 A 1 , I
+chrM 12018 G 1 , I
+chrM 12019 C 1 , I
+chrM 12020 T 1 , I
+chrM 12021 T 1 , F
+chrM 12022 C 1 , I
+chrM 12023 A 1 , I
+chrM 12024 A 1 , I
+chrM 12025 A 1 , I
+chrM 12026 C 1 , I
+chrM 12027 T 1 , I
+chrM 12028 A 1 , I
+chrM 12029 G 1 , I
+chrM 12030 A 1 , I
+chrM 12031 T 1 , I
+chrM 12032 T 1 , I
+chrM 12033 A 1 , I
+chrM 12034 C 1 , I
+chrM 12035 T 1 , I
+chrM 12036 T 1 , I
+chrM 12037 C 1 , I
+chrM 12038 T 1 , I
+chrM 12039 C 1 , I
+chrM 12040 A 1 n "
+chrM 12041 A 1 n "
+chrM 12042 T 1 , I
+chrM 12043 A 1 , I
+chrM 12044 A 1 , I
+chrM 12045 T 1 , I
+chrM 12046 T 1 , I
+chrM 12047 T 1 , I
+chrM 12048 T 1 ,$ I
+chrM 12295 A 1 ^:. I
+chrM 12296 A 1 . I
+chrM 12297 T 1 . I
+chrM 12298 C 1 . I
+chrM 12299 C 1 . I
+chrM 12300 T 1 . I
+chrM 12301 T 1 . I
+chrM 12302 T 1 N "
+chrM 12303 A 1 N "
+chrM 12304 T 1 . I
+chrM 12305 A 1 . I
+chrM 12306 A 1 . I
+chrM 12307 C 1 . I
+chrM 12308 C 1 . I
+chrM 12309 G 1 . I
+chrM 12310 C 1 . I
+chrM 12311 A 1 . I
+chrM 12312 T 1 . I
+chrM 12313 C 1 . I
+chrM 12314 G 1 . I
+chrM 12315 G 1 . I
+chrM 12316 G 1 . I
+chrM 12317 G 1 . I
+chrM 12318 A 1 . I
+chrM 12319 T 1 . I
+chrM 12320 A 1 . I
+chrM 12321 T 1 . I
+chrM 12322 C 1 . I
+chrM 12323 G 1 . I
+chrM 12324 G 1 . I
+chrM 12325 C 1 . I
+chrM 12326 T 1 . I
+chrM 12327 T 1 . I
+chrM 12328 C 1 . :
+chrM 12329 A 1 . (
+chrM 12330 T 1 .$ D
+chrM 12387 T 1 ^:, F
+chrM 12388 C 1 , I
+chrM 12389 A 1 , I
+chrM 12390 T 1 , H
+chrM 12391 A 1 , I
+chrM 12392 C 1 , I
+chrM 12393 T 1 , ;
+chrM 12394 C 1 , I
+chrM 12395 G 1 , I
+chrM 12396 A 1 , I
+chrM 12397 C 1 , I
+chrM 12398 C 1 , I
+chrM 12399 C 1 , I
+chrM 12400 C 1 , I
+chrM 12401 A 1 , I
+chrM 12402 A 1 , I
+chrM 12403 C 1 , I
+chrM 12404 C 1 , I
+chrM 12405 T 1 , I
+chrM 12406 T 1 , I
+chrM 12407 A 1 , I
+chrM 12408 C 1 , I
+chrM 12409 C 1 , I
+chrM 12410 A 1 , I
+chrM 12411 A 1 , I
+chrM 12412 C 1 , I
+chrM 12413 C 1 , I
+chrM 12414 T 1 n "
+chrM 12415 C 1 n "
+chrM 12416 C 1 , I
+chrM 12417 C 1 , I
+chrM 12418 G 1 , I
+chrM 12419 C 1 , I
+chrM 12420 T 1 , I
+chrM 12421 C 1 , I
+chrM 12422 C 1 ,$ I
+chrM 12584 G 1 ^:. I
+chrM 12585 A 1 . I
+chrM 12586 A 1 . I
+chrM 12587 A 1 . I
+chrM 12588 A 1 . I
+chrM 12589 C 1 . I
+chrM 12590 A 1 . I
+chrM 12591 A 1 N "
+chrM 12592 C 1 N "
+chrM 12593 A 1 . I
+chrM 12594 A 1 . I
+chrM 12595 A 1 . I
+chrM 12596 A 1 . I
+chrM 12597 C 1 . I
+chrM 12598 A 1 . I
+chrM 12599 A 1 . I
+chrM 12600 T 1 . I
+chrM 12601 C 1 . I
+chrM 12602 C 1 . I
+chrM 12603 A 1 . I
+chrM 12604 G 1 . I
+chrM 12605 T 1 . I
+chrM 12606 C 1 . I
+chrM 12607 A 1 . I
+chrM 12608 C 1 . I
+chrM 12609 T 1 . I
+chrM 12610 T 1 . I
+chrM 12611 A 1 . I
+chrM 12612 C 1 . I
+chrM 12613 C 1 . I
+chrM 12614 C 1 . I
+chrM 12615 T 1 . I
+chrM 12616 A 1 . @
+chrM 12617 T 1 . I
+chrM 12618 G 1 . I
+chrM 12619 C 1 .$ I
+chrM 12988 G 1 ^:. I
+chrM 12989 T 1 . I
+chrM 12990 A 1 . I
+chrM 12991 C 1 . I
+chrM 12992 A 1 . I
+chrM 12993 C 1 . I
+chrM 12994 C 1 . I
+chrM 12995 A 1 N "
+chrM 12996 A 1 N "
+chrM 12997 C 1 . I
+chrM 12998 G 1 . I
+chrM 12999 C 1 . I
+chrM 13000 C 1 . I
+chrM 13001 T 1 . I
+chrM 13002 G 1 . I
+chrM 13003 A 1 . 9
+chrM 13004 G 1 . I
+chrM 13005 C 1 . I
+chrM 13006 C 1 . I
+chrM 13007 C 1 . I
+chrM 13008 T 1 . I
+chrM 13009 A 1 . I
+chrM 13010 C 1 . E
+chrM 13011 T 1 . I
+chrM 13012 A 1 . (
+chrM 13013 A 1 . I
+chrM 13014 T 1 . I
+chrM 13015 A 1 . 9
+chrM 13016 A 1 . .
+chrM 13017 C 1 . I
+chrM 13018 T 1 . 4
+chrM 13019 C 1 . I
+chrM 13020 T 1 . I
+chrM 13021 C 1 . I
+chrM 13022 A 1 . ,
+chrM 13023 T 1 .$ I
+chrM 13560 T 1 ^:, I
+chrM 13561 C 1 , I
+chrM 13562 A 1 , I
+chrM 13563 C 1 , I
+chrM 13564 C 1 , I
+chrM 13565 C 1 , I
+chrM 13566 T 1 , I
+chrM 13567 T 1 , I
+chrM 13568 A 1 , I
+chrM 13569 C 1 , I
+chrM 13570 C 1 , I
+chrM 13571 C 1 , I
+chrM 13572 T 1 , I
+chrM 13573 A 1 , I
+chrM 13574 A 1 , I
+chrM 13575 G 1 , I
+chrM 13576 C 1 , I
+chrM 13577 A 1 , I
+chrM 13578 T 1 , I
+chrM 13579 A 1 , I
+chrM 13580 C 1 , I
+chrM 13581 T 1 , I
+chrM 13582 A 1 , I
+chrM 13583 C 1 , I
+chrM 13584 T 1 , I
+chrM 13585 T 1 , I
+chrM 13586 T 1 , I
+chrM 13587 T 1 n "
+chrM 13588 T 1 n "
+chrM 13589 A 1 , I
+chrM 13590 A 1 , I
+chrM 13591 T 1 , I
+chrM 13592 C 1 , I
+chrM 13593 T 1 , I
+chrM 13594 C 1 , I
+chrM 13595 C 1 ,$ I
+chrM 13783 T 1 ^:. I
+chrM 13784 C 1 . I
+chrM 13785 A 1 . I
+chrM 13786 C 1 . I
+chrM 13787 T 1 . I
+chrM 13788 C 1 . I
+chrM 13789 T 1 . I
+chrM 13790 T 1 N "
+chrM 13791 C 1 N "
+chrM 13792 A 1 . I
+chrM 13793 G 1 . I
+chrM 13794 A 1 . I
+chrM 13795 A 1 . I
+chrM 13796 C 1 . I
+chrM 13797 A 1 . I
+chrM 13798 T 1 . I
+chrM 13799 A 1 . I
+chrM 13800 T 1 . I
+chrM 13801 A 1 . I
+chrM 13802 A 1 . I
+chrM 13803 A 1 . I
+chrM 13804 A 1 . I
+chrM 13805 C 1 . I
+chrM 13806 C 1 . I
+chrM 13807 A 1 . I
+chrM 13808 A 1 . I
+chrM 13809 C 1 . I
+chrM 13810 A 1 . ?
+chrM 13811 T 1 . I
+chrM 13812 A 1 . C
+chrM 13813 A 1 . C
+chrM 13814 C 1 . I
+chrM 13815 C 1 . I
+chrM 13816 T 1 . I
+chrM 13817 C 1 . I
+chrM 13818 C 1 .$ I
+chrM 13855 G 1 ^:, I
+chrM 13856 T 1 , I
+chrM 13857 A 1 , I
+chrM 13858 T 1 , I
+chrM 13859 T 1 , I
+chrM 13860 A 1 , I
+chrM 13861 G 1 , I
+chrM 13862 A 1 , I
+chrM 13863 C 1 , I
+chrM 13864 A 1 , I
+chrM 13865 C 1 , I
+chrM 13866 C 1 , I
+chrM 13867 C 1 , I
+chrM 13868 A 1 , I
+chrM 13869 T 1 , I
+chrM 13870 A 1 , I
+chrM 13871 C 1 , I
+chrM 13872 C 1 , I
+chrM 13873 T 1 , I
+chrM 13874 C 1 , I
+chrM 13875 A 1 , I
+chrM 13876 G 1 , I
+chrM 13877 G 1 , I
+chrM 13878 A 1 , I
+chrM 13879 T 1 , I
+chrM 13880 A 1 , I
+chrM 13881 C 1 , I
+chrM 13882 T 1 n "
+chrM 13883 G 1 n "
+chrM 13884 C 1 , I
+chrM 13885 T 1 , I
+chrM 13886 C 1 , I
+chrM 13887 A 1 , I
+chrM 13888 G 1 , I
+chrM 13889 T 1 , I
+chrM 13890 A 1 ,$ I
+chrM 14023 A 1 ^:, I
+chrM 14024 A 1 , I
+chrM 14025 A 1 , I
+chrM 14026 C 1 , /
+chrM 14027 C 1 , :
+chrM 14028 C 1 , &
+chrM 14029 C 1 , G
+chrM 14030 C 1 , I
+chrM 14031 A 1 , I
+chrM 14032 T 1 , 3
+chrM 14033 A 1 , I
+chrM 14034 A 1 , I
+chrM 14035 A 2 ,^:, II
+chrM 14036 T 2 ,, ;;
+chrM 14037 A 2 ,, II
+chrM 14038 G 2 ,, II
+chrM 14039 G 2 ,, II
+chrM 14040 T 2 ,, II
+chrM 14041 G 2 ,, II
+chrM 14042 A 2 ,, II
+chrM 14043 A 2 ,, II
+chrM 14044 G 2 ,, II
+chrM 14045 G 2 ,, II
+chrM 14046 T 2 ,, II
+chrM 14047 T 2 ,, II
+chrM 14048 T 2 ,, II
+chrM 14049 T 2 ,, II
+chrM 14050 G 2 n, "I
+chrM 14051 A 2 n, "I
+chrM 14052 A 2 ,, II
+chrM 14053 G 2 ,, II
+chrM 14054 A 2 ,, II
+chrM 14055 A 2 ,, II
+chrM 14056 A 2 ,, II
+chrM 14057 A 2 ,, II
+chrM 14058 C 2 ,$, II
+chrM 14059 C 1 , I
+chrM 14060 C 1 , I
+chrM 14061 C 1 , I
+chrM 14062 A 2 n^:, "I
+chrM 14063 C 2 n, "+
+chrM 14064 A 2 ,, II
+chrM 14065 A 2 ,, II
+chrM 14066 A 2 ,, II
+chrM 14067 A 2 ,, II
+chrM 14068 C 2 ,, I1
+chrM 14069 T 2 ,, II
+chrM 14070 A 2 ,$, II
+chrM 14071 A 1 , I
+chrM 14072 C 1 , I
+chrM 14073 A 1 , I
+chrM 14074 A 1 , I
+chrM 14075 C 1 , I
+chrM 14076 A 1 , I
+chrM 14077 A 1 , I
+chrM 14078 A 1 , I
+chrM 14079 A 1 , I
+chrM 14080 A 1 , I
+chrM 14081 T 1 , I
+chrM 14082 A 1 , I
+chrM 14083 A 1 , I
+chrM 14084 C 1 , I
+chrM 14085 A 1 , I
+chrM 14086 C 1 , I
+chrM 14087 T 1 , I
+chrM 14088 C 1 , I
+chrM 14089 A 1 n "
+chrM 14090 A 1 n "
+chrM 14091 A 1 , I
+chrM 14092 A 1 , I
+chrM 14093 T 1 , I
+chrM 14094 A 1 , I
+chrM 14095 A 1 , I
+chrM 14096 A 1 , I
+chrM 14097 C 1 ,$ I
+chrM 14239 T 1 ^:, I
+chrM 14240 T 1 , I
+chrM 14241 T 1 , I
+chrM 14242 A 1 , I
+chrM 14243 T 1 , I
+chrM 14244 T 1 , B
+chrM 14245 G 1 , I
+chrM 14246 A 1 , I
+chrM 14247 C 1 , I
+chrM 14248 C 1 , I
+chrM 14249 T 1 , I
+chrM 14250 A 1 , I
+chrM 14251 C 1 , I
+chrM 14252 C 1 , I
+chrM 14253 A 1 , I
+chrM 14254 G 1 , I
+chrM 14255 C 1 , I
+chrM 14256 C 1 , I
+chrM 14257 C 1 , I
+chrM 14258 C 1 , I
+chrM 14259 C 1 , I
+chrM 14260 T 1 , I
+chrM 14261 C 1 , I
+chrM 14262 A 1 , I
+chrM 14263 A 1 , I
+chrM 14264 A 1 , I
+chrM 14265 C 1 , I
+chrM 14266 A 1 n "
+chrM 14267 T 1 n "
+chrM 14268 T 1 , I
+chrM 14269 T 1 , I
+chrM 14270 C 1 , I
+chrM 14271 A 1 , I
+chrM 14272 T 1 , I
+chrM 14273 C 1 , I
+chrM 14274 A 1 ,$ I
+chrM 14463 C 1 ^:, I
+chrM 14464 T 1 , G
+chrM 14465 G 1 , I
+chrM 14466 C 1 , I
+chrM 14467 C 1 , I
+chrM 14468 T 1 , ;
+chrM 14469 C 1 , I
+chrM 14470 T 1 , I
+chrM 14471 T 1 , 8
+chrM 14472 C 1 , I
+chrM 14473 A 1 , I
+chrM 14474 T 1 , I
+chrM 14475 T 1 , I
+chrM 14476 C 1 , I
+chrM 14477 A 1 , I
+chrM 14478 C 1 , I
+chrM 14479 G 1 , I
+chrM 14480 T 1 , I
+chrM 14481 A 1 , I
+chrM 14482 G 1 , I
+chrM 14483 G 1 , I
+chrM 14484 A 1 , I
+chrM 14485 C 1 , I
+chrM 14486 G 1 , I
+chrM 14487 C 1 , I
+chrM 14488 G 1 , I
+chrM 14489 G 1 , I
+chrM 14490 C 1 n "
+chrM 14491 C 1 n "
+chrM 14492 T 1 , I
+chrM 14493 C 1 , I
+chrM 14494 T 1 , I
+chrM 14495 A 1 , I
+chrM 14496 C 1 , I
1
0
24 Feb '10
details: http://www.bx.psu.edu/hg/galaxy/rev/9d9f0dfeeebf
changeset: 3424:9d9f0dfeeebf
user: jeremy goecks <jeremy.goecks(a)emory.edu>
date: Mon Feb 22 13:56:51 2010 -0500
description:
Annotations for published items: (1) added annotations to pages; (2) added annotation column to all published item grids; (3) refactored annotation code out of base controller and into its own mixin.
diffstat:
lib/galaxy/model/__init__.py | 3 +
lib/galaxy/model/mapping.py | 13 ++++-
lib/galaxy/model/migrate/versions/0040_page_annotations.py | 42 ++++++++++++++
lib/galaxy/web/base/controller.py | 8 ++-
lib/galaxy/web/controllers/dataset.py | 2 +-
lib/galaxy/web/controllers/history.py | 3 +-
lib/galaxy/web/controllers/page.py | 24 +++++--
lib/galaxy/web/controllers/root.py | 2 +-
lib/galaxy/web/controllers/workflow.py | 3 +-
lib/galaxy/web/framework/helpers/grids.py | 39 ++++++++++--
10 files changed, 118 insertions(+), 21 deletions(-)
diffs (351 lines):
diff -r 8d77e3acf653 -r 9d9f0dfeeebf lib/galaxy/model/__init__.py
--- a/lib/galaxy/model/__init__.py Mon Feb 22 09:21:42 2010 -0500
+++ b/lib/galaxy/model/__init__.py Mon Feb 22 13:56:51 2010 -0500
@@ -1567,6 +1567,9 @@
class WorkflowStepAnnotationAssociation( object ):
pass
+class PageAnnotationAssociation( object ):
+ pass
+
class UserPreference ( object ):
def __init__( self, name=None, value=None ):
self.name = name
diff -r 8d77e3acf653 -r 9d9f0dfeeebf lib/galaxy/model/mapping.py
--- a/lib/galaxy/model/mapping.py Mon Feb 22 09:21:42 2010 -0500
+++ b/lib/galaxy/model/mapping.py Mon Feb 22 13:56:51 2010 -0500
@@ -814,6 +814,12 @@
Column( "workflow_step_id", Integer, ForeignKey( "workflow_step.id" ), index=True ),
Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
Column( "annotation", TEXT, index=True) )
+
+PageAnnotationAssociation.table = Table( "page_annotation_association", metadata,
+ Column( "id", Integer, primary_key=True ),
+ Column( "page_id", Integer, ForeignKey( "page.id" ), index=True ),
+ Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
+ Column( "annotation", TEXT, index=True) )
# User tables.
@@ -1304,7 +1310,8 @@
latest_revision=relation( PageRevision, post_update=True,
primaryjoin=( Page.table.c.latest_revision_id == PageRevision.table.c.id ),
lazy=False ),
- tags=relation(PageTagAssociation, order_by=PageTagAssociation.table.c.id, backref="pages")
+ tags=relation(PageTagAssociation, order_by=PageTagAssociation.table.c.id, backref="pages"),
+ annotations=relation( PageAnnotationAssociation, order_by=PageAnnotationAssociation.table.c.id, backref="pages" )
) )
# Set up proxy so that
@@ -1377,6 +1384,10 @@
properties=dict( workflow_step=relation( WorkflowStep ), user=relation( User ) )
)
+assign_mapper( context, PageAnnotationAssociation, PageAnnotationAssociation.table,
+ properties=dict( page=relation( Page ), user=relation( User ) )
+ )
+
assign_mapper( context, UserPreference, UserPreference.table,
properties = {}
)
diff -r 8d77e3acf653 -r 9d9f0dfeeebf lib/galaxy/model/migrate/versions/0040_page_annotations.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/galaxy/model/migrate/versions/0040_page_annotations.py Mon Feb 22 13:56:51 2010 -0500
@@ -0,0 +1,42 @@
+"""
+Migration script to (a) create tables for annotating pages.
+"""
+
+from sqlalchemy import *
+from sqlalchemy.orm import *
+from migrate import *
+from migrate.changeset import *
+
+import logging
+log = logging.getLogger( __name__ )
+
+metadata = MetaData( migrate_engine )
+db_session = scoped_session( sessionmaker( bind=migrate_engine, autoflush=False, autocommit=True ) )
+
+PageAnnotationAssociation_table = Table( "page_annotation_association", metadata,
+ Column( "id", Integer, primary_key=True ),
+ Column( "page_id", Integer, ForeignKey( "page.id" ), index=True ),
+ Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
+ Column( "annotation", TEXT, index=True) )
+
+def upgrade():
+ print __doc__
+ metadata.reflect()
+
+ # Create history_annotation_association table.
+ try:
+ PageAnnotationAssociation_table.create()
+ except Exception, e:
+ print str(e)
+ log.debug( "Creating page_annotation_association table failed: %s" % str( e ) )
+
+def downgrade():
+ metadata.reflect()
+
+ # Drop page_annotation_association table.
+ try:
+ PageAnnotationAssociation_table.drop()
+ except Exception, e:
+ print str(e)
+ log.debug( "Dropping page_annotation_association table failed: %s" % str( e ) )
+
\ No newline at end of file
diff -r 8d77e3acf653 -r 9d9f0dfeeebf lib/galaxy/web/base/controller.py
--- a/lib/galaxy/web/base/controller.py Mon Feb 22 09:21:42 2010 -0500
+++ b/lib/galaxy/web/base/controller.py Mon Feb 22 13:56:51 2010 -0500
@@ -41,6 +41,10 @@
item_class = None
return item_class
+Root = BaseController
+
+class UsesAnnotations:
+ """ Mixin for getting and setting item annotations. """
def get_item_annotation_str( self, db_session, user, item ):
""" Returns a user's annotation string for an item. """
annotation_obj = self.get_item_annotation_obj( db_session, user, item )
@@ -67,6 +71,8 @@
annotation_assoc = annotation_assoc.filter_by( stored_workflow=item )
elif item.__class__ == model.WorkflowStep:
annotation_assoc = annotation_assoc.filter_by( workflow_step=item )
+ elif item.__class__ == model.Page:
+ annotation_assoc = annotation_assoc.filter_by( page=item )
return annotation_assoc.first()
def add_item_annotation( self, trans, item, annotation ):
@@ -89,8 +95,6 @@
# Set annotation.
annotation_assoc.annotation = annotation
return True
-
-Root = BaseController
class SharableItemSecurity:
""" Mixin for handling security for sharable items. """
diff -r 8d77e3acf653 -r 9d9f0dfeeebf lib/galaxy/web/controllers/dataset.py
--- a/lib/galaxy/web/controllers/dataset.py Mon Feb 22 09:21:42 2010 -0500
+++ b/lib/galaxy/web/controllers/dataset.py Mon Feb 22 13:56:51 2010 -0500
@@ -110,7 +110,7 @@
# a user relation.
return query.select_from( model.HistoryDatasetAssociation.table.join( model.History.table ) ).filter( model.History.user == trans.user )
-class DatasetInterface( BaseController, UsesHistoryDatasetAssociation ):
+class DatasetInterface( BaseController, UsesAnnotations, UsesHistoryDatasetAssociation ):
stored_list_grid = HistoryDatasetAssociationListGrid()
diff -r 8d77e3acf653 -r 9d9f0dfeeebf lib/galaxy/web/controllers/history.py
--- a/lib/galaxy/web/controllers/history.py Mon Feb 22 09:21:42 2010 -0500
+++ b/lib/galaxy/web/controllers/history.py Mon Feb 22 13:56:51 2010 -0500
@@ -128,6 +128,7 @@
use_async = True
columns = [
NameURLColumn( "Name", key="name", model_class=model.History, filterable="advanced" ),
+ grids.OwnerAnnotationColumn( "Annotation", key="annotation", model_class=model.History, model_annotation_association_class=model.HistoryAnnotationAssociation, filterable="advanced" ),
grids.OwnerColumn( "Owner", key="username", model_class=model.User, filterable="advanced", sortable=False ),
grids.CommunityTagsColumn( "Community Tags", "tags", model.History, model.HistoryTagAssociation, filterable="advanced", grid_name="PublicHistoryListGrid" ),
grids.GridColumn( "Last Updated", key="update_time", format=time_ago )
@@ -146,7 +147,7 @@
# A public history is published, has a slug, and is not deleted.
return query.filter( self.model_class.published == True ).filter( self.model_class.slug != None ).filter( self.model_class.deleted == False )
-class HistoryController( BaseController, Sharable, UsesHistory ):
+class HistoryController( BaseController, Sharable, UsesAnnotations, UsesHistory ):
@web.expose
def index( self, trans ):
return ""
diff -r 8d77e3acf653 -r 9d9f0dfeeebf lib/galaxy/web/controllers/page.py
--- a/lib/galaxy/web/controllers/page.py Mon Feb 22 09:21:42 2010 -0500
+++ b/lib/galaxy/web/controllers/page.py Mon Feb 22 13:56:51 2010 -0500
@@ -45,7 +45,7 @@
]
operations = [
grids.DisplayByUsernameAndSlugGridOperation( "View", allow_multiple=False ),
- grids.GridOperation( "Edit name/id", allow_multiple=False, url_args=dict( action='edit') ),
+ grids.GridOperation( "Edit attributes", allow_multiple=False, url_args=dict( action='edit') ),
grids.GridOperation( "Edit content", allow_multiple=False, url_args=dict( action='edit_content') ),
grids.GridOperation( "Share or Publish", allow_multiple=False, condition=( lambda item: not item.deleted ), async_compatible=False ),
grids.GridOperation( "Delete" ),
@@ -63,6 +63,7 @@
default_filter = dict( title="All", username="All" )
columns = [
grids.PublicURLColumn( "Title", key="title", model_class=model.Page, filterable="advanced"),
+ grids.OwnerAnnotationColumn( "Annotation", key="annotation", model_class=model.Page, model_annotation_association_class=model.PageAnnotationAssociation, filterable="advanced" ),
grids.OwnerColumn( "Owner", key="username", model_class=model.User, filterable="advanced", sortable=False ),
grids.CommunityTagsColumn( "Community Tags", "tags", model.Page, model.PageTagAssociation, filterable="advanced", grid_name="PageAllPublishedGrid" ),
grids.GridColumn( "Last Updated", key="update_time", format=time_ago )
@@ -70,7 +71,7 @@
columns.append(
grids.MulticolFilterColumn(
"Search",
- cols_to_filter=[ columns[0], columns[1], columns[2] ],
+ cols_to_filter=[ columns[0], columns[1], columns[2], columns[3] ],
key="free-text-search", visible=False, filterable="standard" )
)
def build_initial_query( self, session ):
@@ -285,7 +286,7 @@
# Default behavior:
_BaseHTMLProcessor.unknown_endtag( self, tag )
-class PageController( BaseController, Sharable, UsesHistory, UsesStoredWorkflow, UsesHistoryDatasetAssociation ):
+class PageController( BaseController, Sharable, UsesAnnotations, UsesHistory, UsesStoredWorkflow, UsesHistoryDatasetAssociation ):
_page_list = PageListGrid()
_all_published_list = PageAllPublishedGrid()
@@ -385,7 +386,7 @@
@web.expose
@web.require_login( "create pages" )
- def edit( self, trans, id, page_title="", page_slug="" ):
+ def edit( self, trans, id, page_title="", page_slug="", page_annotation="" ):
"""
Create a new page
"""
@@ -395,7 +396,7 @@
page = session.query( model.Page ).get( id )
user = trans.user
assert page.user == user
- page_title_err = page_slug_err = ""
+ page_title_err = page_slug_err = page_annotation_err = ""
if trans.request.method == "POST":
if not page_title:
page_title_err = "Page name is required"
@@ -403,17 +404,24 @@
page_slug_err = "Page id is required"
elif not VALID_SLUG_RE.match( page_slug ):
page_slug_err = "Page identifier must consist of only lowercase letters, numbers, and the '-' character"
- elif page_slug == page.slug or trans.sa_session.query( model.Page ).filter_by( user=user, slug=page_slug, deleted=False ).first():
+ elif page_slug != page.slug and trans.sa_session.query( model.Page ).filter_by( user=user, slug=page_slug, deleted=False ).first():
page_slug_err = "Page id must be unique"
+ elif not page_annotation:
+ page_annotation_err = "Page annotation is required"
else:
page.title = page_title
page.slug = page_slug
+ page_annotation = sanitize_html( page_annotation, 'utf-8', 'text/html' )
+ self.add_item_annotation( trans, page, page_annotation )
session.flush()
# Redirect to page list.
return trans.response.send_redirect( web.url_for( action='list' ) )
else:
page_title = page.title
page_slug = page.slug
+ page_annotation = self.get_item_annotation_str( trans.sa_session, trans.get_user(), page )
+ if not page_annotation:
+ page_annotation = ""
return trans.show_form(
web.FormBuilder( web.url_for( id=encoded_id ), "Edit page attributes", submit_text="Submit" )
.add_text( "page_title", "Page title", value=page_title, error=page_title_err )
@@ -422,7 +430,9 @@
public links to this page. A default is generated
from the page title, but can be edited. This field
must contain only lowercase letters, numbers, and
- the '-' character.""" ),
+ the '-' character.""" )
+ .add_text( "page_annotation", "Page annotation", value=page_annotation, error=page_annotation_err,
+ help="A description of or notes about the page. Annotation is shown alongside published pages."),
template="page/create.mako" )
@web.expose
diff -r 8d77e3acf653 -r 9d9f0dfeeebf lib/galaxy/web/controllers/root.py
--- a/lib/galaxy/web/controllers/root.py Mon Feb 22 09:21:42 2010 -0500
+++ b/lib/galaxy/web/controllers/root.py Mon Feb 22 13:56:51 2010 -0500
@@ -10,7 +10,7 @@
log = logging.getLogger( __name__ )
-class RootController( BaseController, UsesHistory ):
+class RootController( BaseController, UsesHistory, UsesAnnotations ):
@web.expose
def default(self, trans, target1=None, target2=None, **kwd):
diff -r 8d77e3acf653 -r 9d9f0dfeeebf lib/galaxy/web/controllers/workflow.py
--- a/lib/galaxy/web/controllers/workflow.py Mon Feb 22 09:21:42 2010 -0500
+++ b/lib/galaxy/web/controllers/workflow.py Mon Feb 22 13:56:51 2010 -0500
@@ -60,6 +60,7 @@
use_async = True
columns = [
grids.PublicURLColumn( "Name", key="name", model_class=model.StoredWorkflow, filterable="advanced" ),
+ grids.OwnerAnnotationColumn( "Annotation", key="annotation", model_class=model.StoredWorkflow, model_annotation_association_class=model.StoredWorkflowAnnotationAssociation, filterable="advanced" ),
grids.OwnerColumn( "Owner", key="username", model_class=model.User, filterable="advanced", sortable=False ),
grids.CommunityTagsColumn( "Community Tags", "tags", model.StoredWorkflow, model.StoredWorkflowTagAssociation, filterable="advanced", grid_name="PublicWorkflowListGrid" ),
grids.GridColumn( "Last Updated", key="update_time", format=time_ago )
@@ -78,7 +79,7 @@
# A public workflow is published, has a slug, and is not deleted.
return query.filter( self.model_class.published==True ).filter( self.model_class.slug != None ).filter( self.model_class.deleted == False )
-class WorkflowController( BaseController, Sharable, UsesStoredWorkflow ):
+class WorkflowController( BaseController, Sharable, UsesStoredWorkflow, UsesAnnotations ):
stored_list_grid = StoredWorkflowListGrid()
published_list_grid = StoredWorkflowAllPublishedGrid()
diff -r 8d77e3acf653 -r 9d9f0dfeeebf lib/galaxy/web/framework/helpers/grids.py
--- a/lib/galaxy/web/framework/helpers/grids.py Mon Feb 22 09:21:42 2010 -0500
+++ b/lib/galaxy/web/framework/helpers/grids.py Mon Feb 22 13:56:51 2010 -0500
@@ -1,6 +1,7 @@
from galaxy.model import *
from galaxy.model.orm import *
+from galaxy.web.base import controller
from galaxy.web.framework.helpers import iff
from galaxy.tags.tag_handler import TagHandler
from galaxy.web import url_for
@@ -341,22 +342,46 @@
elif column_filter:
query = query.filter( self.get_filter( user, column_filter ) )
return query
+
def get_filter( self, user, column_filter ):
- """ Returns a SQLAlchemy criterion derived from column_filter. """
- model_class_key_field = getattr( self.model_class, self.key )
-
+ """ Returns a SQLAlchemy criterion derived from column_filter. """
if isinstance( column_filter, basestring ):
- return func.lower( model_class_key_field ).like( "%" + column_filter.lower() + "%" )
+ return self.get_single_filter( user, column_filter )
elif isinstance( column_filter, list ):
clause_list = []
for filter in column_filter:
- clause_list.append( func.lower( model_class_key_field ).like( "%" + filter.lower() + "%" ) )
+ clause_list.append( self.get_single_filter( user, filter ) )
return and_( *clause_list )
-
+
+ def get_single_filter( self, user, a_filter ):
+ """ Returns a SQLAlchemy criterion derived for a single filter. Single filter is the most basic filter--usually a string--and cannot be a list. """
+ model_class_key_field = getattr( self.model_class, self.key )
+ return func.lower( model_class_key_field ).like( "%" + a_filter.lower() + "%" )
+
+class OwnerAnnotationColumn( TextColumn, controller.UsesAnnotations ):
+ """ Column that displays and filters item owner's annotations. """
+ def __init__( self, col_name, key, model_class, model_annotation_association_class, filterable ):
+ GridColumn.__init__( self, col_name, key=key, model_class=model_class, filterable=filterable )
+ self.sortable = False
+ self.model_annotation_association_class = model_annotation_association_class
+
+ def get_value( self, trans, grid, item ):
+ """ Returns item annotation. """
+ annotation = self.get_item_annotation_str( trans.sa_session, item.user, item )
+ return iff( annotation, annotation, "" )
+
+ def get_single_filter( self, user, a_filter ):
+ """ Filter by annotation and annotation owner. """
+ return self.model_class.annotations.any(
+ and_( func.lower( self.model_annotation_association_class.annotation ).like( "%" + a_filter.lower() + "%" ),
+ # TODO: not sure why, to filter by owner's annotations, we have to do this rather than
+ # 'self.model_class.user==self.model_annotation_association_class.user'
+ self.model_annotation_association_class.table.c.user_id==self.model_class.table.c.user_id ) )
+
class CommunityTagsColumn( TextColumn ):
""" Column that supports community tags. """
def __init__( self, col_name, key, model_class, model_tag_association_class, filterable, grid_name=None ):
- GridColumn.__init__(self, col_name, key=key, model_class=model_class, filterable=filterable)
+ GridColumn.__init__( self, col_name, key=key, model_class=model_class, filterable=filterable )
self.model_tag_association_class = model_tag_association_class
# Tags cannot be sorted.
self.sortable = False
1
0
24 Feb '10
details: http://www.bx.psu.edu/hg/galaxy/rev/8d77e3acf653
changeset: 3423:8d77e3acf653
user: Greg Von Kuster <greg(a)bx.psu.edu>
date: Mon Feb 22 09:21:42 2010 -0500
description:
Fix for displaying datasets in the bx browser.
diffstat:
lib/galaxy/datatypes/interval.py | 2 +-
lib/galaxy/datatypes/tabular.py | 2 --
2 files changed, 1 insertions(+), 3 deletions(-)
diffs (24 lines):
diff -r 94741c94de0a -r 8d77e3acf653 lib/galaxy/datatypes/interval.py
--- a/lib/galaxy/datatypes/interval.py Mon Feb 22 08:12:03 2010 -0500
+++ b/lib/galaxy/datatypes/interval.py Mon Feb 22 09:21:42 2010 -0500
@@ -54,7 +54,7 @@
"""Initialize interval datatype, by adding UCSC display apps"""
Tabular.__init__(self, **kwd)
self.add_display_app ( 'ucsc', 'display at UCSC', 'as_ucsc_display_file', 'ucsc_links' )
- self.add_display_app ( 'main', 'BX', 'as_bx_display_file', 'bx_links' )
+ self.add_display_app ( 'main', 'BX', 'as_ucsc_display_file', 'bx_links' )
def init_meta( self, dataset, copy_from=None ):
Tabular.init_meta( self, dataset, copy_from=copy_from )
diff -r 94741c94de0a -r 8d77e3acf653 lib/galaxy/datatypes/tabular.py
--- a/lib/galaxy/datatypes/tabular.py Mon Feb 22 08:12:03 2010 -0500
+++ b/lib/galaxy/datatypes/tabular.py Mon Feb 22 09:21:42 2010 -0500
@@ -214,8 +214,6 @@
return open( dataset.file_name )
def as_ucsc_display_file( self, dataset, **kwd ):
return open( dataset.file_name )
- def as_bx_display_file( self, dataset, **kwd ):
- return open( dataset.file_name )
class Taxonomy( Tabular ):
def __init__(self, **kwd):
1
0