galaxy-dev
Threads by month
- ----- 2025 -----
- July
- June
- May
- April
- March
- February
- January
- ----- 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
- 10008 discussions

18 Mar '10
details: http://www.bx.psu.edu/hg/galaxy/rev/2590120aed68
changeset: 3545:2590120aed68
user: jeremy goecks <jeremy.goecks(a)emory.edu>
date: Thu Mar 18 12:57:29 2010 -0400
description:
Style and functional fixes for embedded items.
diffstat:
static/june_2007_style/blue/embed_item.css | 4 ++--
static/june_2007_style/embed_item.css.tmpl | 4 ++--
templates/display_base.mako | 18 ++++++++++++++++++
templates/history/display.mako | 7 +------
templates/history/view.mako | 2 +-
templates/page/display.mako | 10 +++++++++-
templates/workflow/display.mako | 8 +-------
7 files changed, 34 insertions(+), 19 deletions(-)
diffs (147 lines):
diff -r cb9b4a967ff2 -r 2590120aed68 static/june_2007_style/blue/embed_item.css
--- a/static/june_2007_style/blue/embed_item.css Wed Mar 17 20:59:47 2010 -0400
+++ b/static/june_2007_style/blue/embed_item.css Thu Mar 18 12:57:29 2010 -0400
@@ -4,8 +4,8 @@
.embedded-item.history p{background:#C1C9E5 no-repeat 2px 2px;margin-top:0;margin-bottom:0;}
.embedded-item.dataset{background-color:#CFC}
.embedded-item.dataset p{background:#CFC no-repeat 2px 2px;margin-top:0;margin-bottom:0;}
-.embedded-item.workflow{background-color:#EBD9B2}
-.embedded-item.workflow p{background:#EBD9B2 no-repeat 2px 2px;margin-top:0;margin-bottom:0;}
+.embedded-item.workflow{background-color:#FBDDB3}
+.embedded-item.workflow p{background:#FBDDB3 no-repeat 2px 2px;margin-top:0;margin-bottom:0;}
.embedded-item.placeholder{}
.embedded-item .item-content{max-height:25em;overflow:auto;display:none;}
.embedded-item .title{vertical-align:top;text-align:center;font-weight:bold;}
diff -r cb9b4a967ff2 -r 2590120aed68 static/june_2007_style/embed_item.css.tmpl
--- a/static/june_2007_style/embed_item.css.tmpl Wed Mar 17 20:59:47 2010 -0400
+++ b/static/june_2007_style/embed_item.css.tmpl Thu Mar 18 12:57:29 2010 -0400
@@ -32,11 +32,11 @@
}
.embedded-item.workflow {
- background-color:#EBD9B2
+ background-color:#FBDDB3
}
.embedded-item.workflow p {
- background:#EBD9B2 no-repeat 2px 2px;
+ background:#FBDDB3 no-repeat 2px 2px;
margin-top:0;
margin-bottom:0;
}
diff -r cb9b4a967ff2 -r 2590120aed68 templates/display_base.mako
--- a/templates/display_base.mako Wed Mar 17 20:59:47 2010 -0400
+++ b/templates/display_base.mako Thu Mar 18 12:57:29 2010 -0400
@@ -92,6 +92,24 @@
border: 2px solid #DDDDDD;
border-top: 4px solid #DDDDDD;
}
+
+ ## Make sure that history items and workflow steps do not get too long.
+ .historyItemContainer, .toolForm {
+ max-width: 500px;
+ }
+
+ ## Space out tool forms in workflows.
+ div.toolForm{
+ margin-top: 10px;
+ margin-bottom: 10px;
+ }
+
+ ## Add border to history item container.
+ .historyItemContainer {
+ padding-right: 3px;
+ border-right-style: solid;
+ border-right-color: #66AA66;
+ }
</style>
</%def>
diff -r cb9b4a967ff2 -r 2590120aed68 templates/history/display.mako
--- a/templates/history/display.mako Wed Mar 17 20:59:47 2010 -0400
+++ b/templates/history/display.mako Thu Mar 18 12:57:29 2010 -0400
@@ -208,11 +208,6 @@
${parent.stylesheets()}
${h.css( "history" )}
<style type="text/css">
- .visible-right-border {
- padding-right: 3px;
- border-right-style: solid;
- border-right-color: #66AA66;
- }
.historyItemBody {
display: none;
}
@@ -252,7 +247,7 @@
%else:
## Render requested datasets, ordered from newest to oldest, including annotations.
<table class="annotated-item">
- <tr><th>Dataset</th><th class="annotation">Description/Notes</th></tr>
+ <tr><th>Dataset</th><th class="annotation">Annotation</th></tr>
%for data in datasets:
<tr>
%if data.visible:
diff -r cb9b4a967ff2 -r 2590120aed68 templates/history/view.mako
--- a/templates/history/view.mako Wed Mar 17 20:59:47 2010 -0400
+++ b/templates/history/view.mako Thu Mar 18 12:57:29 2010 -0400
@@ -269,7 +269,7 @@
${parent.stylesheets()}
${h.css( "history", "autocomplete_tagging" )}
<style type="text/css">
- .visible-right-border {
+ .historyItemContainer {
padding-right: 3px;
border-right-style: solid;
border-right-color: #66AA66;
diff -r cb9b4a967ff2 -r 2590120aed68 templates/page/display.mako
--- a/templates/page/display.mako Wed Mar 17 20:59:47 2010 -0400
+++ b/templates/page/display.mako Thu Mar 18 12:57:29 2010 -0400
@@ -47,6 +47,15 @@
container.find(".item-content").html(item_content).show("fast");
container.find(".toggle-expand").hide();
container.find(".toggle-contract").show();
+
+ // Init needed for history items.
+ setupHistoryItem( container.find("div.historyItemWrapper") );
+ container.find( "div.historyItemBody:visible" ).each( function() {
+ if ( $.browser.mozilla ) {
+ $(this).find( "pre.peek" ).css( "overflow", "hidden" );
+ }
+ $(this).hide();
+ });
}
});
else
@@ -218,7 +227,6 @@
${h.css( "base", "history", "autocomplete_tagging" )}
<style type="text/css">
.toggle-contract { display: none; }
- .item-content { overflow: auto; }
.embedded-item h4 {
margin: 0px;
}
diff -r cb9b4a967ff2 -r 2590120aed68 templates/workflow/display.mako
--- a/templates/workflow/display.mako Wed Mar 17 20:59:47 2010 -0400
+++ b/templates/workflow/display.mako Thu Mar 18 12:57:29 2010 -0400
@@ -8,12 +8,6 @@
<%def name="stylesheets()">
${parent.stylesheets()}
${h.css( "workflow" )}
- <style type="text/css">
- div.toolForm{
- margin-top: 10px;
- margin-bottom: 10px;
- }
- </style>
</%def>
<%def name="do_inputs( inputs, values, prefix, step, other_values=None )">
@@ -87,7 +81,7 @@
trans.get_history( create=True )
%>
<table class="annotated-item">
- <tr><th>Step</th><th class="annotation">Description/Notes</th></tr>
+ <tr><th>Step</th><th class="annotation">Annotation</th></tr>
%for i, step in enumerate( steps ):
<tr><td>
%if step.type == 'tool' or step.type is None:
1
0

18 Mar '10
details: http://www.bx.psu.edu/hg/galaxy/rev/cb9b4a967ff2
changeset: 3544:cb9b4a967ff2
user: rc
date: Wed Mar 17 20:59:47 2010 -0400
description:
lims: workflow field now appears as a link to workflow run page
diffstat:
templates/admin/requests/show_request.mako | 7 ++++++-
1 files changed, 6 insertions(+), 1 deletions(-)
diffs (17 lines):
diff -r 1d98e3705f35 -r cb9b4a967ff2 templates/admin/requests/show_request.mako
--- a/templates/admin/requests/show_request.mako Wed Mar 17 17:10:24 2010 -0400
+++ b/templates/admin/requests/show_request.mako Wed Mar 17 20:59:47 2010 -0400
@@ -311,7 +311,12 @@
%for field_index, field in fields_dict.items():
<td>
%if sample_values[field_index]:
- ${sample_values[field_index]}
+ %if field['type'] == 'WorkflowField':
+ <% workflow = trans.sa_session.query( trans.app.model.StoredWorkflow ).get( int(sample_values[field_index]) ) %>
+ <a href="${h.url_for( controller='workflow', action='run', id=trans.security.encode_id(workflow.id) )}">${workflow.name}</a>
+ %else:
+ ${sample_values[field_index]}
+ %endif
%else:
<i>None</i>
%endif
1
0

18 Mar '10
details: http://www.bx.psu.edu/hg/galaxy/rev/1d98e3705f35
changeset: 3543:1d98e3705f35
user: rc
date: Wed Mar 17 17:10:24 2010 -0400
description:
lims: added workflow field type to form_builder
diffstat:
lib/galaxy/model/__init__.py | 4 ++++
lib/galaxy/model/mapping.py | 4 +++-
lib/galaxy/web/form_builder.py | 30 +++++++++++++++++++++++++++++-
templates/admin/requests/show_request.mako | 10 ++++++++++
4 files changed, 46 insertions(+), 2 deletions(-)
diffs (95 lines):
diff -r 032aae80bbb0 -r 1d98e3705f35 lib/galaxy/model/__init__.py
--- a/lib/galaxy/model/__init__.py Wed Mar 17 16:40:36 2010 -0400
+++ b/lib/galaxy/model/__init__.py Wed Mar 17 17:10:24 2010 -0400
@@ -1319,6 +1319,10 @@
field_widget.user = user
field_widget.value = value
field_widget.params = params
+ elif field['type'] == 'WorkflowField':
+ field_widget.user = user
+ field_widget.value = value
+ field_widget.params = params
elif field[ 'type' ] == 'SelectField':
for option in field[ 'selectlist' ]:
if option == value:
diff -r 032aae80bbb0 -r 1d98e3705f35 lib/galaxy/model/mapping.py
--- a/lib/galaxy/model/mapping.py Wed Mar 17 16:40:36 2010 -0400
+++ b/lib/galaxy/model/mapping.py Wed Mar 17 17:10:24 2010 -0400
@@ -1304,7 +1304,9 @@
assign_mapper( context, StoredWorkflow, StoredWorkflow.table,
- properties=dict( user=relation( User ),
+ properties=dict( user=relation( User,
+ primaryjoin=( User.table.c.id == StoredWorkflow.table.c.user_id ),
+ backref='stored_workflows' ),
workflows=relation( Workflow, backref='stored_workflow',
cascade="all, delete-orphan",
primaryjoin=( StoredWorkflow.table.c.id == Workflow.table.c.stored_workflow_id ) ),
diff -r 032aae80bbb0 -r 1d98e3705f35 lib/galaxy/web/form_builder.py
--- a/lib/galaxy/web/form_builder.py Wed Mar 17 16:40:36 2010 -0400
+++ b/lib/galaxy/web/form_builder.py Wed Mar 17 17:10:24 2010 -0400
@@ -12,7 +12,7 @@
raise TypeError( "Abstract Method" )
@staticmethod
def form_field_types():
- return ['TextField', 'TextArea', 'SelectField', 'CheckboxField', 'AddressField']
+ return ['TextField', 'TextArea', 'SelectField', 'CheckboxField', 'AddressField', 'WorkflowField']
class TextField(BaseField):
"""
@@ -433,6 +433,34 @@
else:
self.select_address.add_option('Add a new address', 'new')
return self.select_address.get_html()+address_html
+
+
+class WorkflowField(BaseField):
+ def __init__(self, name, user=None, value=None, params=None):
+ self.name = name
+ self.user = user
+ self.value = value
+ self.select_workflow = None
+ self.params = params
+ def get_html(self):
+ from galaxy import util
+ add_ids = ['none']
+ if self.user:
+ for a in self.user.stored_workflows:
+ add_ids.append(str(a.id))
+ self.select_workflow = SelectField(self.name)
+ if self.value == 'none':
+ self.select_workflow.add_option('Select one', 'none', selected=True)
+ else:
+ self.select_workflow.add_option('Select one', 'none')
+ if self.user:
+ for a in self.user.stored_workflows:
+ if not a.deleted:
+ if self.value == str(a.id):
+ self.select_workflow.add_option(a.name, str(a.id), selected=True)
+ else:
+ self.select_workflow.add_option(a.name, str(a.id))
+ return self.select_workflow.get_html()
def get_suite():
diff -r 032aae80bbb0 -r 1d98e3705f35 templates/admin/requests/show_request.mako
--- a/templates/admin/requests/show_request.mako Wed Mar 17 16:40:36 2010 -0400
+++ b/templates/admin/requests/show_request.mako Wed Mar 17 17:10:24 2010 -0400
@@ -284,6 +284,16 @@
%endif
%endfor
</select>
+ %elif field['type'] == 'WorkflowField':
+ <select name="sample_${index}_field_${field_index}">
+ %for option_index, option in enumerate(request.user.stored_workflows):
+ %if option == sample_values[field_index]:
+ <option value="${option.id}" selected>${option.name}</option>
+ %else:
+ <option value="${option.id}">${option.name}</option>
+ %endif
+ %endfor
+ </select>
%elif field['type'] == 'CheckboxField':
<input type="checkbox" name="sample_${index}_field_${field_index}" value="Yes"/>
%endif
1
0

18 Mar '10
details: http://www.bx.psu.edu/hg/galaxy/rev/032aae80bbb0
changeset: 3542:032aae80bbb0
user: Kelly Vincent <kpvincent(a)bx.psu.edu>
date: Wed Mar 17 16:40:36 2010 -0400
description:
First pass as PerM. Also made cosmetic changes to BWA.
diffstat:
buildbot_setup.sh | 2 +
test-data/perm_in1.fastqsanger | 76 ++++
test-data/perm_in2.fastqsanger | 76 ++++
test-data/perm_in3.fastqsanger | 396 +++++++++++++++++++++++
test-data/perm_in4.fastqcssanger | 576 ++++++++++++++++++++++++++++++++++
test-data/perm_in5.fastqcssanger | 48 ++
test-data/perm_in6.fastqcssanger | 48 ++
test-data/perm_out1.sam | 33 +
test-data/perm_out2.sam | 98 +++++
test-data/perm_out3.fastqsanger | 4 +
test-data/perm_out4.sam | 53 +++
test-data/perm_out5.sam | 9 +
tool-data/perm_base_index.loc.sample | 27 +
tool-data/perm_color_index.loc.sample | 27 +
tool_conf.xml.sample | 3 +-
tools/sr_mapping/PerM.xml | 368 +++++++++++++++++++++
tools/sr_mapping/bwa_wrapper.xml | 5 +-
17 files changed, 1845 insertions(+), 4 deletions(-)
diffs (1949 lines):
diff -r 137d93848139 -r 032aae80bbb0 buildbot_setup.sh
--- a/buildbot_setup.sh Tue Mar 16 18:54:23 2010 -0400
+++ b/buildbot_setup.sh Wed Mar 17 16:40:36 2010 -0400
@@ -42,6 +42,8 @@
/galaxy/data/location/maf_index.loc
/galaxy/data/location/maf_pairwise.loc
/galaxy/data/location/microbes/microbial_data.loc
+/galaxy/data/location/perm_base_index.loc
+/galaxy/data/location/perm_color_index.loc
/galaxy/data/location/phastOdds.loc
/galaxy/data/location/quality_scores.loc
/galaxy/data/location/regions.loc
diff -r 137d93848139 -r 032aae80bbb0 test-data/perm_in1.fastqsanger
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/perm_in1.fastqsanger Wed Mar 17 16:40:36 2010 -0400
@@ -0,0 +1,76 @@
+@HWI-EAS91_1_30788AAXX:1:1:1761:343/1
+TTTATCGCTTCCATGACGCAGAAGTTAACACTTTCGGATATTTCTGATGA
++/1
+IIIIIII""IIIIIIIIIII?I0IIIIHIIIGIIIII0II?I""IIIIII
+@HWI-EAS91_1_30788AAXX:1:1:1578:331/1
+TGTCAAAAACTGACGCGTTGGATGAGGAGAAGTGGCTTAATATGCTTGGC
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII
+@HWI-EAS91_1_30788AAXX:1:1:1647:512/1
+TACTGAACAATCCGTACGTTTCCAGACCGCTTTGGCCTCTATTAAGCTCA
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII
+@HWI-EAS91_1_30788AAXX:1:1:1570:620/1
+GAGTAACAAAGTaaaGTTTGGAccGTTTTTGTCTCGTGCTCGTCGCTGCG
++/1
+IIIIIII""IIIIIIIIIIIIIBIIIIIIIIIIII"IIIIIII000IIII
+@HWI-EAS91_1_30788AAXX:1:1:1599:330/1
+AGAAGAAAACGTGCGTCAAAAATTACGTGCaGAAGGAGTGATGTAATGTC
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIII<III@II"IIIIIII000IIII
+@HWI-EAS91_1_30788AAXX:1:1:1652:270/1
+AGCGTAAAGGCGCTCGTCTTTGGTATGTAGGacTTTGCATTGTTTAATTG
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIII6II"IIIIIII000IIII
+@HWI-EAS91_1_30788AAXX:1:1:1746:351/1
+CTCATCGTCACGTTTATGGTGAACAGTGGATTAAGTTCATGAAGGATGGT
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII
+@HWI-EAS91_1_30788AAXX:1:1:1582:633/1
+CCGCTTCCTCCTGAGACTGAGCTTTCTCGCCAAATGACGACTTCTACCAC
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII
+@HWI-EAS91_1_30788AAXX:1:1:1598:534/1
+GCGCTCTAATCTCTGGGCATCTGGCTATGATGTTGATGGAACTGACCAAA
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII
+@HWI-EAS91_1_30788AAXX:1:1:1572:324/1
+AAGGTGCTTaaaTTCgtGGGTCCTGAGCTGGCGACCCTGTTTTGTATGGC
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIII+7I05I"IIIIIII000IIII
+@HWI-EAS91_1_30788AAXX:1:1:1749:466/1
+TTGCAGTGGAATAGTCAGGTTAAATTTAATGTGACCGTTTATCGCAATCT
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII
+@HWI-EAS91_1_30788AAXX:1:1:1629:446/1
+AGGTTATAACGCCGAAGCGGTAAAAATTTTAATTTTTGCCGCTGAGGGGT
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII
+@HWI-EAS91_1_30788AAXX:1:1:1763:587/1
+AAGCTACATCGTCAACGTTATATTTTGATAGTTTGACGGTTAATGCTGGT
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII
+@HWI-EAS91_1_30788AAXX:1:1:1616:363/1
+TGTTTATCCTTTGAATGGTCGCCATGATGGTGGTTATTATACCGTCAAGG
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIDIII"IIIIIII000IIII
+@HWI-EAS91_1_30788AAXX:1:1:1768:715/1
+ACCCTGATGAGGCCGCCCCTAGTTTTGTTTCTGGTGCTATGGCTAAAGCT
++/1
+IIIIIII""IIIIIIIIIIIIIDIIIIIIIIIIII"IIIIIII000IIII
+@HWI-EAS91_1_30788AAXX:1:1:1572:270/1
+TGAGATGCTTGCTTATCAACAGAAGGAGTCTACTGCTCGCGTTGCGTCTA
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII
+@HWI-EAS91_1_30788AAXX:1:1:1785:1272/1
+TATTTTTCATGGTATTGATAAAGCTGTTGCCGATACTTGGAACAATTTCT
++/1
+III""""""IIIIIIIII""FI"IIII""II+ICI"IIIIIII000IIII
+@HWI-EAS91_1_30788AAXX:1:1:1673:514/1
+ATTATTTTGACTTTGAGCGTATCGAGGCTCTTAAACCTGCTATTGAGGCT
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIII1"IIIIIII000IIII
+@HWI-EAS91_1_30788AAXX:1:1:1634:330/1
+GGATATTCGCGATGAGTATAATTACCCCAAAAAGAAAGGTATTAAGGATG
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIII8II"IIIIIII000IIII
diff -r 137d93848139 -r 032aae80bbb0 test-data/perm_in2.fastqsanger
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/perm_in2.fastqsanger Wed Mar 17 16:40:36 2010 -0400
@@ -0,0 +1,76 @@
+@HWI-EAS91_1_30788AAXX:1:1:1761:343/2
+TTGATAAAGCAGGAATTACTACTGCTTGTTTACGAATTAAATCGAAGTGG
++/2
+IIIIIII""IIIIIII0II?I""IIIIIIIIIIII?I0IIIIHIIIGIII
+@HWI-EAS91_1_30788AAXX:1:1:1578:331/2
+AAGGACTGGTTTAGATATGAGTCACATTTTGTTCATGGTAGAGATTCTCT
++/2
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII
+@HWI-EAS91_1_30788AAXX:1:1:1647:512/2
+TTCAGGCTTCTGCCGTTTTGGATTTAACCGAAGATGATTTCGATTTTCTG
++/2
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII
+@HWI-EAS91_1_30788AAXX:1:1:1570:620/2
+CTTGCGTTTATGGTACGCTGGACTTTGTGGGATACCCTCGCTTTCCTGCT
++/2
+IIIIIII""IIIIIIIIIIIIIBIIIIIIIIIIII?I0IIIIHIIIGIII
+@HWI-EAS91_1_30788AAXX:1:1:1599:330/2
+TTCTGGCGCTCGCCCTGGTCGTCCGCAGCCGTTGCGAGGTACTAAAGGCA
++/2
+IIIIIII""IIIIIIIIIIIIIIIIIII<III@II?I0IIIIHIIIGIII
+@HWI-EAS91_1_30788AAXX:1:1:1652:270/2
+GCTTCGGCCCCTTACTTGAGGATAAATTATGTCTAATATTCAAACTGGCG
++/2
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIII6II?I0IIIIHIIIGIII
+@HWI-EAS91_1_30788AAXX:1:1:1746:351/2
+CCACTCCTCTCCCGACTGTGTGTGTGTGTGTTTATATTGACCATGCCGCT
++/2
+IIIIIII""IIIIIIIIIIIIIIIIII?I0IIIIHIIIGIIIIIIIIIII
+@HWI-EAS91_1_30788AAXX:1:1:1582:633/2
+TCTATTGACATTATGGGTCTGCAAGCTGCTTTTTTTTTTTTTTTTTTTTT
++/2
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII
+@HWI-EAS91_1_30788AAXX:1:1:1598:534/2
+TTAGGCCAGTTTTCTGGTCGTGTTCAACAGACCTATAAACATTCTGTGCC
++/2
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII
+@HWI-EAS91_1_30788AAXX:1:1:1572:324/2
+GCCGCCGCGTGAAATTTCTATGAAGGATGTTTTCCGTTCTGGTGATTCGT
++/2
+IIIIIII""IIIIIIIIIIIIIIIIIIII+7I05I?I0IIIIHIIIGIII
+@HWI-EAS91_1_30788AAXX:1:1:1749:466/2
+GCCGACCACTCGCGATTCAATCATGACTTCGTGATAAAAGATTGAGTGTG
++/2
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII
+@HWI-EAS91_1_30788AAXX:1:1:1629:446/2
+CAAGCGAAGCGCGGTAGGTTTTCTGCTTAGGAGTTTAATCATGTTTCAGA
++/2
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII
+@HWI-EAS91_1_30788AAXX:1:1:1763:587/2
+CATTGCATTCAGATGGATACATCTGTCAACGCCGCTAATCAGGTTGTTTC
++/2
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII
+@HWI-EAS91_1_30788AAXX:1:1:1616:363/2
+GTGACTATTGACGTCCTTCCCCGTACGCCGGGCAATAAtGTTTATGTTGG
++/2
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIDIII?I0IIIIHIIIGIII
+@HWI-EAS91_1_30788AAXX:1:1:1768:715/2
+AGGACTTCTTGAAGGTACGTTGCAGGCTGGCACTTCTGCCGTTTCTGATA
++/2
+IIIIIII""IIIIIIIIIIIIIDIIIIIIIIIIII?I0IIIIHIIIGIII
+@HWI-EAS91_1_30788AAXX:1:1:1572:270/2
+ACACCAATCTTTCCAAGCAACAGCAGGTTTCCGAGATTATGCGCCAAATG
++/2
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII
+@HWI-EAS91_1_30788AAXX:1:1:1785:1272/2
+GACGGTAAAGCTGATGGTATTGGCTCTAATTTGTCTAGGAAATAACCGTC
++/2
+III""""""IIIIIIIII""FI"IIII""II+ICI?I0IIIIHIIIGIII
+@HWI-EAS91_1_30788AAXX:1:1:1673:514/2
+GCATTTCTACTCTTTCTCAATCCCCAATGCTTGGCTTCCATAAGCAGATG
++/2
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIII1?I0IIIIHIIIGIII
+@HWI-EAS91_1_30788AAXX:1:1:1634:330/2
+TCAAGATTGCTGGAGGCCTCCACTATGAAATCGCGTAGAGGCTTTaCTAT
++/2
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIII8II?I0IIIIHIIIGIII
diff -r 137d93848139 -r 032aae80bbb0 test-data/perm_in3.fastqsanger
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/perm_in3.fastqsanger Wed Mar 17 16:40:36 2010 -0400
@@ -0,0 +1,396 @@
+@HWI-EAS91_1_30788AAXX:1:1:1513:715/1
+GTTTTTTGGGCATAGATGTTTAGTTGTGGTAGTCAG
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIDI?II-+I
+@HWI-EAS91_1_30788AAXX:1:1:1698:516/1
+GTTGTTAGGGAGAGGAGTTGAACCTCTGAGTGTAAA
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIII5IIIII9I
+@HWI-EAS91_1_30788AAXX:1:1:1491:637/1
+GCTAGCAGGATGGATCCGGCAATTGGGGCTTCTACA
++/1
+IIIIIII""IIIIIIIIIIIIFIIIIIIIIIIIABD
+@HWI-EAS91_1_30788AAXX:1:1:1711:249/1
+GGAAGTAGGGGCCTGCGTTCAGGCGTTCTGTTTGGT
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIIII
+@HWI-EAS91_1_30788AAXX:1:1:1634:211/1
+GAAGCAGGGGCTTGATACTGACACTTCGTCGACGTA
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIIII9IIDF
+@HWI-EAS91_1_30788AAXX:1:1:1218:141/1
+GTTAAATATTGGGAGTGGGGGGGGGGGGGAGTTTTGT
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIII1IIII+I
+@HWI-EAS91_1_30788AAXX:1:1:1398:854/1
+GTGAAGAGGAGGGGATTTATTAGTACGGGAAGGGTG
++/1
+IIIIIII""IIIIIBIIIIIIIIIIIIIIA=IIIII
+@HWI-EAS91_1_30788AAXX:1:1:1310:991/1
+GAATAGTGGTAGTATTATTCCTTCTAGGCATAGGAG
++/1
+IIIIIII""IIIIIIIIII4IIIIIIDII:IEI2:I
+@HWI-EAS91_1_30788AAXX:1:1:1716:413/1
+GATCCAAGGCTTTATCAACACCTATTCTGATTCTTC
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIIII
+@HWI-EAS91_1_30788AAXX:1:1:1630:59/1
+GGAGCGGGGGGTTGGTAAGGTTGGGGTCGAGTATGA
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIII;IIHIIF
+@HWI-EAS91_1_30788AAXX:1:1:1601:805/1
+GAAAACAGGAAAACAATCCAGTCACTTACCCTATGC
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIII@III
+@HWI-EAS91_1_30788AAXX:1:1:1663:724/1
+GTTTGCCGGCGCCATCCTACGCTCCATTCCCAACAA
++/1
+IIIIIII""IIII8IIIIIIHIIII6IIIII1CI=3
+@HWI-EAS91_1_30788AAXX:1:1:1454:975/1
+GCTAGGCGGGAGTGGTAAAAGGCTCAGAAGAAGCCA
++/1
+IIIIIII""IIIIIIIIIIIIIIIIEIG;IIIIIII
+@HWI-EAS91_1_30788AAXX:1:1:1461:255/1
+GTACACCGGCGCCTGAGCCCTACTAATAACTCTCAT
++/1
+IIIIIII""IIIIII9IIIIIIEI(II9.I4III,I
+@HWI-EAS91_1_30788AAXX:1:1:1775:764/1
+GCATCCCGGTAGATCTAATTTTCTAAATCTGTCAAC
++/1
+IIIIIII""III@IIII+IIIIII8H8IIIIIIICI
+@HWI-EAS91_1_30788AAXX:1:1:1269:520/1
+GGAGTATGGAATAAGTGATTTTAGATCGGTTTGTCG
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIIII
+@HWI-EAS91_1_30788AAXX:1:1:1303:1162/1
+GAGCAAGGGCAGGAGGAGGAGTCCTAGGATGTCTTT
++/1
+IIIIIII""IIIIFII4*IGIAI(IAII49',3I6I
+@HWI-EAS91_1_30788AAXX:1:1:1090:409/1
+GTTTGTTGGGAATGGAGCGTAGGATGGCGTAGGCAA
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIII:IIA8I
+@HWI-EAS91_1_30788AAXX:1:1:1336:1000/1
+GGTAAATGGGAAATATTAAGTTTCTGTTTCTAGATC
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIII9II
+@HWI-EAS91_1_30788AAXX:1:1:1199:1376/1
+GTTTTCTGGAAAACCTTCACCTATTTATGGGGGTTT
++/1
+IIIIIII""IIIIIIIIIIIII;III3IIG&:/III
+@HWI-EAS91_1_30788AAXX:1:1:1598:1148/1
+GATCAATGGTTTGGATCAATAAGTGATTATATATTT
++/1
+IIIIIII""IIIIIDIIIIII?IIICII=IHIIIII
+@HWI-EAS91_1_30788AAXX:1:1:1723:1459/1
+GAAACCCGGACGTTTGGATGGGCCCGGAGCGAGGAT
++/1
+IIIIIII""IIIIIIIIDIIIIIIIII9HII-II=I
+@HWI-EAS91_1_30788AAXX:1:1:1442:1346/1
+TATCAAGGGGCTGCTTCGAATCCGAAGTGGTGGCTG
++/1
+IIIIIII""IIIIIDIIIII1I(I4II<?<-II*,&
+@HWI-EAS91_1_30788AAXX:1:1:850:117/1
+GTATGACGGTAAAGAAAATTATTACGAATGCATGGG
++/1
+IIIIIII""IIIIIIEIEIIIIIIIIEBIDD9I;:?
+@HWI-EAS91_1_30788AAXX:1:1:795:325/1
+GGGTACTGGGAAGTGGAATGGTGTGAGTCCAAGTTT
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIII65IIII
+@HWI-EAS91_1_30788AAXX:1:1:873:453/1
+GAGTAGGGGGATTGCTAGAGTTACTTCGTATGAGAT
++/1
+IIIIIII""IIIIIIIIIIIIIIIII@IIIIIII=I
+@HWI-EAS91_1_30788AAXX:1:1:1285:1334/1
+GATATGGGGTCTGGAATAGGATTGCGCTGTTATCCC
++/1
+IIIIIII""IIIIIBIIGIIIIIIIIII8IIIII8I
+@HWI-EAS91_1_30788AAXX:1:1:905:406/1
+GAAAAGTGGTAGGCTATATGCAACTTCGCAAAGGAC
++/1
+IIIIIII""IIIIIIIIBIIIIBIIII=I@96D2*I
+@HWI-EAS91_1_30788AAXX:1:1:1774:595/1
+TTTAGGTGGGATGTGGGGATCATGTAGGAGTCAAAG
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIIEI
+@HWI-EAS91_1_30788AAXX:1:1:1694:931/1
+TTAAATTGGCATTAGAATTGAGTAGTTTTTAGGTAA
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIH,III
+@HWI-EAS91_1_30788AAXX:1:1:1092:1151/1
+GAGAGTTGGCTGATTTAGGCGCCCAGGGATAGCGTC
++/1
+IIIIIII""IIIIIIIIIII5III>IIIII6@III5
+@HWI-EAS91_1_30788AAXX:1:1:803:557/1
+GGTGTGTGGGCGCTTCATGGCCTGATTCAATTAAGC
++/1
+IIIIIII""IIIIIIIIIIIIIII<IIII?III406
+@HWI-EAS91_1_30788AAXX:1:1:1315:1200/1
+TAGTTTTGGGGGGTTTTCTTCAAAACCTTCACCTAT
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIII;I
+@HWI-EAS91_1_30788AAXX:1:1:765:358/1
+GGTGTTTGGATGAGGACGGCTACGATTACTAGGGCT
++/1
+IIIIIII""IIIIIIIIIIIIDIIAII4@I0D='1I
+@HWI-EAS91_1_30788AAXX:1:1:1425:1167/1
+GACCTTAGGTGTAGGACATGGTGTAATTCGGTAGCA
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIII(%II+IG
+@HWI-EAS91_1_30788AAXX:1:1:1775:635/1
+AATAGCCGGATAGCTAGAAGTAAGGTTGAGTTAAAG
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIIBI
+@HWI-EAS91_1_30788AAXX:1:1:1433:749/1
+GACTATGGGTGCTATTATACATGCTAGTCATAGGAA
++/1
+IIIIIII""IIIIIIIIIIIFIIIIICIIIIB/I9E
+@HWI-EAS91_1_30788AAXX:1:1:798:247/1
+GGAGATTGGAAAGTAGTATGCTTAGGGTAAGGGTGA
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIIII
+@HWI-EAS91_1_30788AAXX:1:1:1249:1238/1
+TATTGTTGGGGTAGCGAAAGAGGCGAATAGATTTTC
++/1
+IIIIIII""IIIIIIIIIIIBIIIICDIII7IIII@
+@HWI-EAS91_1_30788AAXX:1:1:1043:1104/1
+GGAAGGGGGAATAGGAGGGCAATTTCTAAGTCGAAT
++/1
+II&IIII""IIIIIIDIIIII;IFI<I0II.IIIC,
+@HWI-EAS91_1_30788AAXX:1:1:1655:1058/1
+AAAAATCGGCTTTACAATTATATTCGTAGGGGTAAA
++/1
+IIIIIII""IIIIIIIIIIIIIIIIFIII6AIIIGI
+@HWI-EAS91_1_30788AAXX:1:1:1764:1403/1
+TGATGAAGGGTTTGAGGGGGCTGGTAGGTCAATAAA
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIBIIIII
+@HWI-EAS91_1_30788AAXX:1:1:1632:34/1
+AGGATAGGGGCTATCCGTTGGTCTTAGGAACCAAAA
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIFIIIH:6I
+@HWI-EAS91_1_30788AAXX:1:1:1367:1208/1
+GACACGTGGCACTTCCAATCATACTATCCAGCATCC
++/1
+IIIIIII""IIIIIIII:IIII8IIEIIII-IAIII
+@HWI-EAS91_1_30788AAXX:1:1:1778:108/1
+AATACACGGACCATATCAACAGCATTAAACCTTCAT
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIII@I
+@HWI-EAS91_1_30788AAXX:1:1:1152:1115/1
+GTAGTATGGCGTAGCCTCCTAGTTTTAGTAGAATGG
++/1
+7IIIIII""IIIIIIIIIII.68IIIDII=7IIIA'
+@HWI-EAS91_1_30788AAXX:1:1:1165:1121/1
+ATACTCAGGTCATTCTAGTCCTTTTTGGGTTCATTC
++/1
+IIIIIII""IIIIIIIIIIIIIIIII22?IIIIIIA
+@HWI-EAS91_1_30788AAXX:1:1:1500:55/1
+ATAGAGAGGAGTGCAACTAAGAGTGGGAGGGAACCT
++/1
+IIIIIII""IIIIIIIIIIFIIIIIIICIII<IIII
+@HWI-EAS91_1_30788AAXX:1:1:1142:1196/1
+TCATTTTGGTACCACTCGCAAGCACCATCGAAAACA
++/1
+IIIIIII""IIIIIIIIIIIIIIIII@I=I79I6II
+@HWI-EAS91_1_30788AAXX:1:1:1693:757/1
+AAATTATGGGTTAAACCCCTATATACCTCTATGGCC
++/1
+IIIIIII""IIIIIIIIIIIIIBIDIIIII0II-IG
+@HWI-EAS91_1_30788AAXX:1:1:1364:1053/1
+TTATTCAGGTGGGTATGAATCCTGATAGTGGGGGGA
++/1
+IIIIIII""IIIIIIIIIIIIIIIII?.I31G&4=5
+@HWI-EAS91_1_30788AAXX:1:1:1450:1443/1
+GTAAAAAGGTGCTCCAAGGCCTATTCATCACAATTT
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIIEIB8III
+@HWI-EAS91_1_30788AAXX:1:1:1701:1298/1
+TAGTAGAGGCCGCGTCCTACGTGAATGAAGAGGCAG
++/1
+IIIIIII""IIIIIIIIIIIIIIIIII8II;IIIGI
+@HWI-EAS91_1_30788AAXX:1:1:1729:856/1
+TCCTATTGGTTCAATACTGAAACCAAGCACTACCCG
++/1
+IIIIIII""IIIIIIIIIIIIIIIIFIIIII@IIIH
+@HWI-EAS91_1_30788AAXX:1:1:1748:933/1
+TGAGCTCGGGGCTTCATCTTCTTATTCACAGTAGGA
++/1
+IIIIIII""IIIIIICIIIIIIIIIIIIII@II5@F
+@HWI-EAS91_1_30788AAXX:1:1:1662:1296/1
+TTAGTTAGGAATAGAATTACACATGCAAGTATCCGC
++/1
+IIIIIII""IIIIIIIIIIIIIHIIIEI5IIIII4I
+@HWI-EAS91_1_30788AAXX:1:1:1393:345/1
+ATTTACAGGAGAATTGAGTAGTTTTTAGGTAAATTT
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIE+IIEIIII
+@HWI-EAS91_1_30788AAXX:1:1:943:780/1
+AGGCGTTGGGTTTGGTTGCCTCAGCGGGTGATGATA
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIII;II<IH
+@HWI-EAS91_1_30788AAXX:1:1:1639:968/1
+AGCTCACGGAAAATAGCAGCATCATCCTCCCCACAC
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIII8I:I
+@HWI-EAS91_1_30788AAXX:1:1:589:1114/1
+GTCATTCGGGATTAGTTGAGGTTAATTCTACTGTAG
++/1
+IIIIIII""IIIIIIIIIII1IIIIIIIIIII&II)
+@HWI-EAS91_1_30788AAXX:1:1:763:408/1
+GCCCCACGGCTGGTGTTGACAACATGACTACTGCCA
++/1
+IIIIIII""IIIIIIIIIIIIII=I*5II<II'II(
+@HWI-EAS91_1_30788AAXX:1:1:950:352/1
+ACGCATAGGCAACATGAAATACCATCTCATCCATAG
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIFIIIIIGI
+@HWI-EAS91_1_30788AAXX:1:1:1164:103/1
+TTAACTAGGACATTCACCAAACCATTAAAGTATAGG
++/1
+IIIIIII""IIIIIIIIIIIAII=IIB58I=<I;II
+@HWI-EAS91_1_30788AAXX:1:1:1078:1202/1
+TAGGGCTGGGCATAGTGGGGTATCTAATCCCAGTTT
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIEIII
+@HWI-EAS91_1_30788AAXX:1:1:1617:490/1
+AATCCTTGGTAACCGCATCGGGGATATCGGCTTCAT
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIII:(D
+@HWI-EAS91_1_30788AAXX:1:1:843:504/1
+ACAACATGGAATACCATCTCATCCATAGGATCTTTT
++/1
+IIIIIII""IIIIIIIIAIIIIII>IIHI=IIIIII
+@HWI-EAS91_1_30788AAXX:1:1:942:318/1
+TTCATACGGGCCATGTCCAGCCTAGCTGTCTACTCA
++/1
+IIIIIII""IIIIIIIIIIHIIIIIIIIIII<IIIF
+@HWI-EAS91_1_30788AAXX:1:1:1719:283/1
+TTTTGTTGGCCGAGGTCACCCCAACCGAAATTGCTG
++/1
+IIIIIII""IIIIIIIIIIIIIIIIII3=2IGIIII
+@HWI-EAS91_1_30788AAXX:1:1:1517:961/1
+TGTCACTGGTCCATATTAATATCTTCCTAGCATTCA
++/1
+IIIIIII""IIIII=III9I@IIIIIIIBIIEIII>
+@HWI-EAS91_1_30788AAXX:1:1:1482:345/1
+AGGATGTGGGTTAATAGCCCTATAGCTAGAAGTAAG
++/1
+IIIIIII""IIIIIIIIIIIIIIIIII?IAHIIAAI
+@HWI-EAS91_1_30788AAXX:1:1:1697:533/1
+ATGAGGTGGATTAGGAGGTGTCCGGCGGTAATGTTA
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIII1>IIIII
+@HWI-EAS91_1_30788AAXX:1:1:1159:1225/1
+TTTCTACGGCAAGGGACGCCCATTTTCCTCATCCCC
++/1
+IIIIIII""IIIII=I7IIII3IIIIIIII/ID@II
+@HWI-EAS91_1_30788AAXX:1:1:982:332/1
+AAGGATTGGATCCCCTCCTCCTGCGGGGTCGAAGAA
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIIII?<I7@
+@HWI-EAS91_1_30788AAXX:1:1:1073:668/1
+AGCATTTGGCAACCCCTACCTGCCAGAACTCTACTC
++/1
+IIIIIII""IIIIIIIIIIIIIII>I4@IIIIIIII
+@HWI-EAS91_1_30788AAXX:1:1:1386:1163/1
+AGTTGGCGGAAAAGCAGCCATCAATTAAGAAAGCGT
++/1
+IIIIIII""IIIIIIIIIICII=GIIIII@IGIIII
+@HWI-EAS91_1_30788AAXX:1:1:1196:344/1
+ATTGAAGGGAGTTGATTAGGGTATTTAGCTGTTAAC
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII7
+@HWI-EAS91_1_30788AAXX:1:1:1551:1269/1
+ATTACCAGGATCCTAATAGGAGCCAATATCACCATC
++/1
+IIIIIII""IIIIIIIIGIIIIIIIIIIII@II4II
+@HWI-EAS91_1_30788AAXX:1:1:928:468/1
+AGGAGATGGAAATTTTAACTTGGCGCTATAGAGAAA
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIIC<IHIII
+@HWI-EAS91_1_30788AAXX:1:1:763:835/1
+GCTCAGAGGAAGCCAGAGAAGAAGAAGACTTCTGAG
++/1
+IIIIIII""IIIIIIIHIEFIIFI<IIIIIIDII:I
+@HWI-EAS91_1_30788AAXX:1:1:1363:330/1
+TAGCCTCGGAGTTTTAGTAGAATGGCTGCTAGCACT
++/1
+IIIIIII""IIIIIIII@IIIIIIIIII5I,5C-75
+@HWI-EAS91_1_30788AAXX:1:1:1001:837/1
+ATACTATGGCTGTGAGGAATAATCATAACTAGTTCC
++/1
+IIIIIII""IIIII2IIIIIIIIIIIFIII:IIIII
+@HWI-EAS91_1_30788AAXX:1:1:1189:616/1
+TTTGATAGGGTAAAACATAGAGGCTCAAACCCTCTT
++/1
+IIIIIII""IIIIIIIIIIIIIIIIICIIIIIIIII
+@HWI-EAS91_1_30788AAXX:1:1:1212:634/1
+ATCAACAGGTATTCTGATTCTTCGGACACCCCGAAG
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIAIIIIF(.I
+@HWI-EAS91_1_30788AAXX:1:1:1271:421/1
+ACACGACGGCACCTAATGACCCACCAAACCCACGCT
++/1
+IIIIIII""IIIIIIIIIIIIIIII>C:IIIDI<II
+@HWI-EAS91_1_30788AAXX:1:1:1582:328/1
+AGCATTAGGCTTTTAAGTTAAAGATTGAGGGTTCAA
++/1
+IIIIIII""IIIIII,IIIB;BI<IIIIII+IIIBI
+@HWI-EAS91_1_30788AAXX:1:1:1133:687/1
+AGAGAGCGGATTAGGAATACGATTATTAGTGTGTGG
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIII4III
+@HWI-EAS91_1_30788AAXX:1:1:1231:662/1
+TCACTCTGGAGAACATATAAAACCAACATAACCTCC
++/1
+IIIIIII""IIIIIIIIIIIIIIIIII?ICCIIIII
+@HWI-EAS91_1_30788AAXX:1:1:1693:1140/1
+ATTGATAGGATGGGGGTTAGGGGGAGGAGTAGGGAG
++/1
+IIIIIII""IIIIIIIIIIIIIII:II5II7IIA-I
+@HWI-EAS91_1_30788AAXX:1:1:867:279/1
+AAGCATTGGACTGTAAATCTAAAGACAGGGGTTGGA
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIIII
+@HWI-EAS91_1_30788AAXX:1:1:1095:605/1
+AAGCAAGGGACTGAAAATGCCTAGATGAGTATTCTT
++/1
+IIIIIII""IIIIIIIIIIIIIIIEIIIIIIIIIII
+@HWI-EAS91_1_30788AAXX:1:1:1650:1185/1
+ACCCCAGGGAACCCTCTCAGCACTCCCCCTCATATT
++/1
+IIIIIII""IIIIIIIIIIII6IIIIIIIII5I-II
+@HWI-EAS91_1_30788AAXX:1:1:799:192/1
+AATGTTAGGGGTTAGCCGCACGGCTAGGGCTACAGG
++/1
+IIIIIII""IIIIIIIIII8IIIEIIIII<I::%II
+@HWI-EAS91_1_30788AAXX:1:1:1082:719/1
+TCTTGAGGGTCTATGGTGCTGGTATGGGTTAATTTA
++/1
+IIIIIII""IIIIIIA8III>I92I3+3IIE0III<
+@HWI-EAS91_1_30788AAXX:1:1:1746:1180/1
+AAAATTAGGGAGAAGTAATCTAGTTTGAAGCTTAGG
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIFIIIIIIII
+@HWI-EAS91_1_30788AAXX:1:1:606:460/1
+TTAATTTGGATTATAATAACACTCACAATATTCATA
++/1
+IIIIIII""IIIIIIIIIIIIIIIIII?I6IIIII6
+@HWI-EAS91_1_30788AAXX:1:1:1059:362/1
+ATCGGTAGGCTCGTAGCTTCAGTATCATTGGTGGCC
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIII2)</II
+@HWI-EAS91_1_30788AAXX:1:1:1483:1161/1
+ATATGTGGGGGGTGGGGATGAGTGCTAGGATCAGGA
++/1
+IIIIIII""IIIIIIIIIIIIIIIHIAIIFIIIIIH
+@HWI-EAS91_1_30788AAXX:1:1:1273:600/1
+TACTGAGGGGTATCCTGAGGTATGGGTGTCTAATAC
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIIII
+@HWI-EAS91_1_30788AAXX:1:1:1190:1283/1
+TTTCTGGGGTACAAGACCAGGGTAATGTGCGATATA
++/1
+IIIIIII""IIIIIIIIIIIIIIIAIIIII-?IIIE
diff -r 137d93848139 -r 032aae80bbb0 test-data/perm_in4.fastqcssanger
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/perm_in4.fastqcssanger Wed Mar 17 16:40:36 2010 -0400
@@ -0,0 +1,576 @@
+@1831_573_1004
+T00030133312212111300011021310132222
++
+%><C&&9952+C>5<.?<79,=42<292:<(9/-7
+@1831_573_1050
+T03330322230322112131010221102122113
++
+);@@17?@=>7??@A8?==@4A?A4)&+.'&+'1,
+@1831_573_1067
+T00023032023103330112220321200200002
++
+.++#%(',%/$,+&1#&),)&+'*'*%#$&#%('$
+@1831_573_1219
+T11211130300300301021212330201121310
++
+@@@=4/+)5)408?'665>*/5?<61';<3,:,5-
+@1831_573_1242
+T02132003121011302100130302112221121
++
+>>>::>17=A5?@@=;7A=;2.60>82<8=74+;;
+@1831_573_1333
+T00200312330110101013212313222303112
++
+)='@#%3=.>)/34*117,,/6-4+.9742456<)
+@1831_573_1362
+T21203131001102231121211101111321131
++
+CB@@?@@?@C@BA?@>@<@8A@?@'.8'?17:,+?
+@1831_573_1448
+T23101211223113320132212331313312022
++
+77=A)?,.@A@@:@@<=/7)@<-#8662%9613&+
+@1831_573_1490
+T31312310323301210002210123101021011
++
+@@@@?,@??@$><=>+%/*>*1,)?26&12'9%7.
+@1831_573_1523
+T10322001220012223202202222001230222
++
+(,//*,#8''.6''6'2&27/80)%�'%#*,2'
+@1831_573_1578
+T21202302100010020121100311022120111
++
+@?=@<@C@?@@??=>@;7<<8<694)3511(+1<.
+@1831_573_1647
+T10222233301013033120132223202022123
++
+=?@@<@@???;A==@@;9?@?3=;6.4/;6:=/;4
+@1831_573_1684
+T13310013212312012302121010221231123
++
+7>1:8<@39@@??9=;@@<>?@@<;<?7>76?9>?
+@1831_573_1769
+T33220123030232212032021032302233131
++
+754749&&767%/7;3$-7;3#,3//#,45/#&06
+@1831_573_1853
+T11000012111222211310103212122102331
++
+64./B@@72B+/4?@?7?+@9/+99.')2<2&)2&
+@1831_573_1943
+T20300123032210232001222122001132111
++
+(>/*1,),@-)'0*>5'$/?6(a)/.&?8/(')A43,
+@1831_573_1977
+T22212302221310332321002303112011311
++
+@@?6@8@@9A@=4633A7?9?<3:+7>'@%@?%32
+@1831_574_109
+T13122332123301331032220222133301033
++
+07651#4817>@65<2:84716=788<1995.7?6
+@1831_574_148
+T01200113123030012202302312200010231
++
+<;->3;;3>//>0;;7=,=4-4/+>029<9<624;
+@1831_574_185
+T21123333211302300321312212102123121
++
+@<4;%%@7>#*>97%6;+8$#<07%1372$%<54#
+@1831_574_243
+T30221011230013102201033131203302330
++
+#@@@95@=9?*><45$<@<4%@9?7#=?>7&>?97
+@1831_574_257
+T00301133110002100302003000000102301
++
+%>>B>)@?>B@B?@1%*%,#+00.'(+&5&%#$3&
+@1831_574_293
+T23213210003000103010211331300320130
++
+&')7'.*%#&$'/.$##$.$&*)+*$#8%&%#&&%
+@1831_574_389
+T21032213032101122333230212301312020
++
+))$>/>8):2@:213;;.1)@3%64%+)<7)+$92
+@1831_574_575
+T33313322100212102033032123311211302
++
+7?@>=?@>8@@@=@6*%&<='5@<<',0<=4*5/<
+@1831_574_592
+T33103330110123102223122023103310330
++
+73-5)19,,<@>4067<2.-864346;9<1/;212
+@1831_574_617
+T20021031221222021210021322200223211
++
+@>@?;>?=@==@>@=5?@+@:@40@><:0)')64-
+@1831_574_725
+T32010020322130330333010031120313210
++
+9'>?52+5=;4$6;<8.1<47*9+?7(+5;-).)4
+@1831_574_734
+T31132301200020012302210322213222222
++
+.-&.$2&<*(-%):/)%5:)/%7+,9034*A.?70
+@1831_574_824
+T30212100033032123311211302122020013
++
+;@@@;;),+@<-<7;<&89??&29?<$2:A<);8?
+@1831_574_959
+T11212130220131221111002020123311211
++
+7A=;+?@9;/<@;<8#&&/*%(%.0$0$2)+1$-1
+@1831_574_1062
+T30112230030300221001032033012211012
++
+4@821<//:136/8<1/5.427.;>288/0<1$)/
+@1831_574_1092
+T02013221200031031212200000111130310
++
+<8?.,98)03%#,,,(,++$'69'#9'7#';6.%2
+@1831_574_1103
+T20313113203302010303131123021310121
++
+@??>?@=>@@A<>?=@==<:?<;58'&&):+35'1
+@1831_574_1116
+T21011310123202303021021112021231011
++
+)(a)++,)/)?./)%<)2>.==:8?&;44&/&,)/*4
+@1831_574_1194
+T23303101033322220312200222013013312
++
+:5>;,??9@9@?@1@@=@3=@>@4?@@94?75/,6
+@1831_574_1204
+T21330132231321322010303023221203200
++
+AA5A5B@5:;@@,.9?A1?#.?;3),>82%)='7*
+@1831_574_1306
+T10332133020311023221213100301001220
++
+02.7&%''.$&#'%##$#'#%')')$'$%$,)'.1
+@1831_574_1387
+T12301331310032132101301303230121111
++
+-?A??:@?@@9?@@?9C;:>&).,,);&'<&7(/'
+@1831_574_1431
+T12011023331022213001123111301312011
++
+>7?>9BA897;+8*=6#6.+5&-#26$0.,5&'$1
+@1831_574_1560
+T32212313302203320020222113111011111
++
+=))&65<4=>99@:597(1&;+&(%&4#,#&&&*$
+@1831_574_1591
+T23202101330322130221230222201123202
++
+==<A><?@78@<=;@&@6>8:?,><&&<7>8(8+9
+@1831_574_1624
+T20122200222132200313011102302210332
++
+#<6.&(,7-+))7..'/;43.)927.(<85&13-)
+@1831_574_1826
+T13012312120112021233030302313201111
++
++@<<,))459<?.+57'-'&6?1)(;1;0&%4,#$
+@1831_574_1903
+T30232100103132133321330310210101221
++
+<956?@>;7@@@8:@>8><=9>9>@2=71?1:6;/
+@1831_574_1961
+T02333101331223303300200011100032200
++
+6>-07-@>(2'@<#064@%5%@@6.&<<(9)=:47
+@1831_575_54
+T13331330322230200102132110132013200
++
+>=@@68<2;<8;?@<>+9>7,,6972&57:4&9<8
+@1831_575_80
+T33133322233322221003332230323312313
++
+*?5><@?/=5%(&.5)+#/0'/'>#$/'37#()6&
+@1831_575_192
+T30013012111133003301010212123302011
++
+0:8<,9(.=/)#%8$,4'<,:)3/.'.5<,>-;7'
+@1831_575_197
+T33312113010133020301131330001310032
++
+,-:?463@A:88?6?437<=.2&1.;@67.4@%2,
+@1831_575_223
+T10121010002202131221210302100121020
++
+@?>?8?@:?;>+$'%&,+#$.--#%$1'&#-7$&'
+@1831_575_420
+T31110103220000101310112112001020212
++
+82?.>?(-''2+..@),$%1@;')1)?+)7.')..
+@1831_575_434
+T30312132120223101113223301211113311
++
+<@@><@B@>=@@?>><@?;)@?;6.?=4,'';/3)
+@1831_575_444
+T33022120112320220100202132332113320
++
+<2@@;<.=?@<+=:A<<@?<</>@><(<8>4&5;>
+@1831_575_459
+T31330310210101223330110231120131100
++
+?@@C@?A@@A@??A@@'6@@B'=;C@'4<=9,@1.
+@1831_575_506
+T31210200111210121332321310110132301
++
+8?)2*5@3+.7=?A:8@,/&):@37/<89'+4*)*
+@1831_575_569
+T10210201321323001012232322323002203
++
+/'9-,@29+479%&>9#&08=>7#9>,69/+'*3)
+@1831_575_622
+T01100031122111023002323113231210111
++
+@A8B=@@?<@?<>>=?96<497)<4/<':4+;74+
+@1831_575_644
+T11332003221203131231202200030110130
++
+<<8>.>&,+)8.10':5(/-62&*.=/%(.<&&18
+@1831_575_663
+T32210013303112103322311101322021210
++
+@@@@@A</;A>@6>0792<5966:?;25+:><1,+
+@1831_575_681
+T23131132033020103031013233200101021
++
+.72?.)25;96-14'*.03'#4#++$)/8+%/((&
+@1831_575_711
+T03032331231101231020121210002332121
++
+4%+:2(#'1+.)&*45-#,<A-%4;>+))<;##*&
+@1831_575_730
+T31010102200110302123032330331011111
++
+,%8<%-')5,*1&=#)(1*1)->7$.,4'4'&'*&
+@1831_575_904
+T20111213300020123200333321131121211
++
+?<><.689@@7@<54:4=@>69=:+6-=42;8<:#
+@1831_575_938
+T13103102220022130222233301013033120
++
+;:@@:?@;=8;>=;;:=<93<4.;<6:2<9;4)87
+@1831_575_970
+T23201311301023133303023011202220221
++
+=@=@=;@@><@@:9<:=?;>@=?9>>?@:2===<5
+@1831_575_991
+T33312212031111111012212120321121210
++
+@>>;7???/4<:::,#&*%'$--5-#(7)&&,-)%
+@1831_575_1138
+T23320002011320012120333103233301321
++
+<=0;%1936+?96?,?5<:2>@6@<:;4>.7;*:1
+@1831_575_1157
+T13121323330203331222022230133102321
++
+@B@B>?A?A@?9'?;?&8?@@6;<@=+<:99+965
+@1831_575_1180
+T32003310122102323303101123331133110
++
+/<B>5?':/78?;1;55:997@@>94=7<186->7
+@1831_575_1283
+T02232200301300220130032321323131333
++
+%C@A54><?A78@<?2>:#>=?@2>80:'?69.'7
+@1831_575_1302
+T01201303312333123130200123201013021
++
+&12>/#2'&-2&%'7+$%*#$/1(&&12/$,2,,*
+@1831_575_1310
+T31332131312021303211310220101211133
++
+6<<>663?99@(@7=11@:@@/7??<@<;>'3-7;
+@1831_575_1321
+T11001010233200122122022023000203212
++
+0;B@?@>=A@<A?>@>?6>@5>'4@9?)7@7?/89
+@1831_575_1373
+T21213011223311001221321132013121220
++
+A@@@>@;=9<@??7@>@:@;@;17?630/7=4,2<
+@1831_575_1419
+T33222200303001021230212332001013020
++
+>//3->&-.->%11/@&/&7:<,-1=,+2<6'%&<
+@1831_575_1436
+T13210313021212303321202113301220331
++
+*2@=;39*3<*4<:>52>>9'7:<='0=>1'136<
+@1831_575_1442
+T33132010022331132101132123132020222
++
+8>58<?7>+1B6-/9<<:5?>A:1@?539.@4/1>
+@1831_575_1454
+T11131130011012021120222231313211113
++
+24=?8=6589=0:A=:?>6<;@/,4+-6+/'.,(,
+@1831_575_1500
+T11010000223111301132313011130103021
++
+2?@@?A@?8<6<:985=99999==B3<5<<,7?>9
+@1831_575_1535
+T21312012030320112110211013300131121
++
+@B=@<@@B?:A@@=>@?68@=?@5?7;:6<<;>5<
+@1831_575_1724
+T33123002323300220213232301000010010
++
+9<B.+@),2*.%)))4%2@;7#%(%+$8))85%&5
+@1831_575_1829
+T21033321320111321230233302313101021
++
+22(*'%.3$+7)@&%$'3*+*#/#/*+0.=&#)+0
+@1831_575_1898
+T31330110303103131001110300102101330
++
+@B>@@&1/))'40)%#8/.%#8$((#;4'$'63,,
+@1831_575_1964
+T22010201103202213200201301300232123
++
+1>39)@2<2/@+9?2=&)>>@*62=5&2<42.'?+
+@1831_576_32
+T13012100120333032211330300332022110
++
++<>?>?=7<2)522;><<@40@>704<>5=23@+&
+@1831_576_74
+T30103313210232220102021223012112100
++
+8=@@?@>(??<B5?@@@9<@><+><;@';>6961?
+@1831_576_86
+T10320000121033022010011030032211310
++
+7811)2:*.++5</:3+43924*))/:,6&29)2/
+@1831_576_89
+T02132333203332020020220033002121120
++
+2)69+,'.4=-,>/>(*$#)3030*'(,%)2##$,
+@1831_576_266
+T30322223101312011300311121221333223
++
+<@@?=;<?7=@>9,>@1$&&89$/:>7'3178%&6
+@1831_576_327
+T22112331301313021321001332120332130
++
+<@?@6@@;<@?><@>==3@:==<3@@>53<9><6=
+@1831_576_331
+T32012133301311223023011232112333030
++
+;-2)+(*.*1/;5%.-9&#/1'+($*$##()%/$.
+@1831_576_387
+T00101211032031120300200222001230022
++
+/8).$5#1#*%.$##.*#$%##-%,+,1#&%.%))
+@1831_576_406
+T00223133010210122221320212103132011
++
+<4<>%%14:*4656)&<251&2+3#&19,6&4>5(
+@1831_576_449
+T31312001121222231100020132132100220
++
+(+'&'.,,$/+.)$$8&%#+?&,#)-&###7,+#*
+@1831_576_519
+T03011321130130133213131202130321131
++
+==46<97@>2/6?;2<4A881>9121+<1/4.9+7
+@1831_576_603
+T21003032313302312320131221001330311
++
+@@46=@C.??<A79@@;-<@@>29B?>55<B7598
+@1831_576_655
+T02001023130302322122200313123123102
++
+=@AA9@@<6*>@@5/<@>9'=;>7+@?9>/9;+,%
+@1831_576_677
+T13330131023320301031013230210103022
++
+6290&/*0#&'&,.2'#&*$&('#-%($*#%$)#%
+@1831_576_718
+T31232113331022231333313223132231213
++
+$4###$0###%(#########,####%####$###
+@1831_576_722
+T31230320322120231333030031100313200
++
+(*,-,##.)*&(*1%*(%(-2#+)-#.&-#%%$')
+@1831_576_754
+T30221231132103120112331303112133020
++
+.4//#(.$)'',>($<,##%((,#5?#0*%1*
+@1831_576_815
+T23022113203032010120310102321001031
++
+<3>@?9>@?B=>=;>A???=>:25=4.25?6<57.
+@1831_576_882
+T13230020122320223230022031020110122
++
+?26?8?@:4>@>96??<<=5'1<>9846=<9<1>8
+@1831_576_898
+T10230132312121033222231132231233213
++
+=@@C2?C>?<>@886B?;?.??87=B<8<15??=.
+@1831_576_923
+T21322010320202013210121223010123122
++
+76.51=;.699<96>;;49<;;11;<@59:9=647
+@1831_576_930
+T21322103230123110323102012021020013
++
+2#*0.2&.:((#'14'##-)#%$$2%#$/1&#%/#
+@1831_576_1019
+T22032121213231032210312001103122312
++
+2<$>$,1,&++&@,.)'+/+#9'69/6'2(+-'9-
+@1831_576_1068
+T00020232013101330112220321203220211
++
+:>><=4?;@7=??9?;9>5@9?:8@:=5';7;'#4
+@1831_576_1131
+T10233122200222132200313011102302210
++
+104@#@/@,4>9?2+?1571@',>=;(759;*92<
+@1831_576_1168
+T31013300131121323122002113301002010
++
+>@CC6@@2?9=>7?;76<;467@;9,0%26'',4$
+@1831_576_1207
+T21001132013000122220301213221213010
++
+%$>2,(&?4?(,@:<&,@>?$&:8A%%=0.%,597
+@1831_576_1289
+T03021210023110200323310302013121203
++
+@9<>1B@@;7@@663==28,5':8<<,.=2>>.50
+@1831_576_1329
+T01100302102020113003022000120002100
++
+<>&0,870/A@@/5.;=;:'&@3'&$$%,+#($&2
+@1831_576_1367
+T12231310311233110031222013332011023
++
+??@@<>@@=@<@<=@>@??9:?<=>=<8;59@787
+@1831_576_1416
+T33021233100123120313103133211203221
++
++';?..1.<@'.=+6.5?7<0-?7;(%=>56.98@
+@1831_576_1461
+T32022221221112233100210223002100100
++
+#1&74#(#(&##$#,'###%#%%#*#&%%##%%%'
+@1831_576_1605
+T30232100103132133321330310210101221
++
+6<@C@@>1;@:;<<@@9@???9<3?5-21=4877,
+@1831_576_1664
+T31212101001312110320301201002011120
++
+@@?>?@=A:@@>@='=<>=).>=9*8)(7#/++;)
+@1831_576_1671
+T22313332300211322113223102231322313
++
+@@?@5>@@8&8?25#&)&5&&)15&&,&4%&,&6%
+@1831_576_1729
+T11233312313010012320101302101023030
++
+@?@?<?<@>A?/==?>?7>?@8<?@>99;><+0=>
+@1831_576_1880
+T13032121323320213301001310130212003
++
+0515/792,:,7/%/05,%$):+#8%2(1754))3
+@1831_576_1982
+T00032312310201201333221212000011030
++
+,@@?@,A><@9@=?@9B=8<6@@6@2<A?>.7<+@
+@1831_576_1987
+T30022313313231221213220132001011320
++
+)##()(#&##)%)/-#%$11#%3>'##&$,#$$'+
+@1831_576_2014
+T31123201010100321122111102113021003
++
+@@@9,B29-5>'?,+?79+/A';'2@'5&/9,6&1
+@1831_576_2028
+T20131211210311112023201213120201100
++
+5<>9>5'2(&707.8#&&39,0%7/#(#,*%&5*+
+@1831_577_40
+T11111212330120012020200031313303003
++
+92/4('.')(<*?#$)%&<,/39<(.2,+<=@611
+@1831_577_119
+T33111010021103320103213121313000102
++
+9>?C11)-1/)#;#/,850*+.+$$5550+%-.40
+@1831_577_133
+T33213323012231300122223032223331322
++
+/4@>>?=1?:+>@07@@><>@*<+1@15)96'2$)
+@1831_577_255
+T00332022110020300332022020202002232
++
+7<=87@>69%**#&#-+$.#&&#+$-+%&%.,%5#
+@1831_577_281
+T03032301231212301013112222111210000
++
+7-:B;8@=;>7@>4?=?+659?;5<7?;9@8(>:?
+@1831_577_288
+T01031120221303100221230021013201130
++
+5;/79??&=B::298*6.7/+4&21,7,6?.7#'6
+@1831_577_322
+T12003213220230103303201000130312202
++
+9=;>4506;255464-<#7+194&2<?65968)7/
+@1831_577_362
+T31203302330110131230331210121110220
++
+62B?:@?@<?958=,3:,90:&'-99,6<5.($+6
+@1831_577_382
+T32312123033111120321303230201332100
++
+12957/:1))=76(*24;,3+:<.&.&-=1=2/5*
+@1831_577_464
+T13020221011130013102221333131203302
++
+3=<7/<826)>#.'&4204+5#/041.7*91&756
+@1831_577_488
+T13200302330322110200323132101120301
++
+:48.,*>6566<?8=<=<2>6;94>;=9>@8924@
+@1831_577_511
+T32232133031023313331312220133230333
++
+#7/+&$:<7%6,$$%'%/+)#$7((&*3>16'0/+
+@1831_577_545
+T00112131333222303222210031322103233
++
+>><<9?<>?A<481@<@8==@76/61<95.5988-
+@1831_577_559
+T32321101303233120102011130022122002
++
+.<@;??@>@?/2<.@1=>12=61/;=?.&2+92)'
+@1831_577_562
+T32331101301233110121000220031120031
++
+#((&*&0%)1%)#($2-,***%/-,,))&,-.1'*
+@1831_577_637
+T22113312122202103031023120301031110
++
+8-,4#>:-6+:8,&(5;3=0>7=68&1/9&'?;4,
+@1831_577_641
+T13031301101121223221212020032131113
++
+&47;/':A;;5?:72,(=),#*?+.#&7$8#%7/'
+@1831_577_692
+T01122320200330103121202301211100220
++
+@B,@?@B(@A?@+@@>@+?=>@'=<@<=<9=?75<
diff -r 137d93848139 -r 032aae80bbb0 test-data/perm_in5.fastqcssanger
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/perm_in5.fastqcssanger Wed Mar 17 16:40:36 2010 -0400
@@ -0,0 +1,48 @@
+@853_60_741/1
+G31030031122312021111010130200021003210121320000223
++
+==9:>>=;><9;=<<>;><>>;?<=?:>?><=>?9<>=<9=;<?=>>><9
+@853_111_1583/1
+G21011211200202112131111130201231220231231220200322
++
+:A<A>>>;=<;=<@A;?<<@<>?@><99A=<7=;=:6;<<:9::<;89=<
+@853_111_1628/1
+G10102021032020010121032020232110130223102122302200
++
+?;<<>;=<=>?8;>9>;<><=9;<;=<5<><;8=>?978<=8;;8<8:;:
+@853_276_1541/1
+G03222011023120123332203020012312001121123311001231
++
+=<><;A<<>@<@<<?:<:<>=:<==;?<<<<:>=A?;==;==;<@;;8:<
+@853_394_432/1
+G13312311132110330003300222221112131200021120330332
++
+@=>@A<?>>==?A?<??=@?>?=?><?=?=:@?=?==A=<;<<@=<<>=5
+@853_460_1442/1
+G02101122101002202021313212112232110310010223211122
++
+>??:?>@>A=?=:>A>>9?><==A>>>=?>;==:>>>;:;==:<;>;9<=
+@865_1106_310/1
+G01222230300213322221202031001001030210000110220102
++
+;6?;=>=:9>:=<:<>:<;<>;?;>>;<<<>9><>:9===?<6<::5:;;
+@869_1532_1255/1
+G21022233110003122233210021301222000112122113330022
++
+=;8:?@=?;;9:8;=>;5A?;<8><<=:9><;9<=8;96>8<5==:<98;
+@889_1337_1562/1
+G32320230101133233031203331023110123123110321101011
++
+==?@=@??@?=@>==;?=>=;;?>=<;==<=:A;<<<=7=8:;==6<>=;
+@891_252_1590/1
+G21001002321200302231203001233020201230020220002300
++
+<A>9<=9A;A><>>>;>@?A>9=;@>@>?<><@>@@<;=;8:7>:;:5=<
+@892_582_183/1
+G01101032230201131100203303123121133333011110033000
++
+;><:><=>;<<>:=>?>>;<=;:9><<:=:>;:;>;:=9;;=799<7699
+@932_1836_1806/1
+G32331100031222332100213012220001121221133300220331
++
+;:<;<;<><;>9@=<=<:>A:8<<=<=?<:@?<=?<;>9;<6<><<::5>
diff -r 137d93848139 -r 032aae80bbb0 test-data/perm_in6.fastqcssanger
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/perm_in6.fastqcssanger Wed Mar 17 16:40:36 2010 -0400
@@ -0,0 +1,48 @@
+@853_60_741/2
+T30321031112011000112320211202221320221313213231311
++
+99?;>=;?>:>=>:<>>?85>=<;:><995@::<7@<=88==>;=?>>9<
+@853_111_1583/2
+T10022103103000201030021103111120021021121130210022
++
+?;<<>;=<=>?8;>9>;<><=9;<;=<5<><;8=>?978<=8;;8<8:;:
+@853_111_1628/2
+T33002021100103231100332001320020101002002311222011
++
+><@A>=>;>?A<A:<;???@==>;?>>?8?<8;:@?=<;6>6<;;9=?<5
+@853_276_1541/2
+T30303002200001133331103221321130031333013232132322
++
+A?:5A<?:=A>A8@8AA:@:<@97<@@@>A7?@6?@;8?A7@986;5;?=
+@853_394_432/2
+T30030000333322020222202211233333002103312202000110
++
+:<:=>:?><==>=><<=><:;>=;:;9;><9<><@8;:;>=;:7:>7:7=
+@853_460_1442/2
+T11130211103112102212221200202022130303003210122101
++
+>A=:>@@==>@>=<<>?9>>=;9<<==:<<;>8;;;<<<:<:7=95>:;9
+@865_1106_310/2
+T33223200002331021122331020030003301230300213231311
++
+?@@=?A>A>==:=;=????A<;;>A<<?=>?<@<=@9:>9>:56A<;;9;
+@869_1532_1255/2
+T03103330303100300112231121121003120312113022230331
++
+@A=><>9=<@>;<;<==?;?<A=?<=<<:A>7>9:;:<=7:8@6><>96<
+@889_1337_1562/2
+T10031203121130222303312100203132322201123110000101
++
+=A;A@>AA@>?>A@>A:>@:<>>=5;;=;<;88?=>5=;899:9<<;>98
+@891_252_1590/2
+T03210330303300030311113131021332033110001211222031
++
+8;8?;><::;9;:>;><:>9=8;68:<?<;=@===<=>9=:>A9=89;==
+@892_582_183/2
+T20322002021213100112021203203010031223003101212213
++
+@?=?@>A?>>>??>A;@>?==>>@<>??><<>>::=?:=?=;6<>=<>=<
+@932_1836_1806/2
+T03233010131101303202311220122201011323220123130010
++
+AA<?A@AAAA>?A>A@=>@>A>??A@?>>@>@=>A9?>:?>8@@=>>=>@
diff -r 137d93848139 -r 032aae80bbb0 test-data/perm_out1.sam
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/perm_out1.sam Wed Mar 17 16:40:36 2010 -0400
@@ -0,0 +1,33 @@
+HWI-EAS91_1_30788AAXX:1:1:1761:343/1 65 PHIX174 5 255 50M = 69 64 TTTATCGCTTCCATGACGCAGAAGTTAACACTTTCGGATATTTCTGATGA IIIIIII""IIIIIIIIIII?I0IIIIHIIIGIIIII0II?I""IIIIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1761:343/1 129 PHIX174 69 255 50M = 5 64 TTGATAAAGCAGGAATTACTACTGCTTGTTTACGAATTAAATCGAAGTGG IIIIIII""IIIIIII0II?I""IIIIIIIIIIII?I0IIIIHIIIGIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1578:331/1 65 PHIX174 209 255 50M = 268 59 TGTCAAAAACTGACGCGTTGGATGAGGAGAAGTGGCTTAATATGCTTGGC IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1578:331/1 129 PHIX174 268 255 50M = 209 59 AAGGACTGGTTTAGATATGAGTCACATTTTGTTCATGGTAGAGATTCTCT IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1647:512/1 65 PHIX174 401 255 50M = 451 50 TACTGAACAATCCGTACGTTTCCAGACCGCTTTGGCCTCTATTAAGCTCA IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1647:512/1 129 PHIX174 451 255 50M = 401 50 TTCAGGCTTCTGCCGTTTTGGATTTAACCGAAGATGATTTCGATTTTCTG IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1570:620/2 0 PHIX174 559 255 50M * 0 0 CTTGCGTTTATGGTACGCTGGACTTTGTGGGATACCCTCGCTTTCCTGCT IIIIIII""IIIIIIIIIIIIIBIIIIIIIIIIII?I0IIIIHIIIGIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1599:330/1 65 PHIX174 803 255 50M = 868 65 AGAAGAAAACGTGCGTCAAAAATTACGTGCAGAAGGAGTGATGTAATGTC IIIIIII""IIIIIIIIIIIIIIIIIII<III@II"IIIIIII000IIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1599:330/1 129 PHIX174 868 255 50M = 803 65 TTCTGGCGCTCGCCCTGGTCGTCCGCAGCCGTTGCGAGGTACTAAAGGCA IIIIIII""IIIIIIIIIIIIIIIIIII<III@II?I0IIIIHIIIGIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1652:270/2 0 PHIX174 973 255 50M * 0 0 GCTTCGGCCCCTTACTTGAGGATAAATTATGTCTAATATTCAAACTGGCG IIIIIII""IIIIIIIIIIIIIIIIIIIIIII6II?I0IIIIHIIIGIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1746:351/1 0 PHIX174 1218 255 50M * 0 0 CTCATCGTCACGTTTATGGTGAACAGTGGATTAAGTTCATGAAGGATGGT IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1582:633/1 0 PHIX174 1517 255 50M * 0 0 CCGCTTCCTCCTGAGACTGAGCTTTCTCGCCAAATGACGACTTCTACCAC IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1598:534/1 65 PHIX174 1717 255 50M = 1772 55 GCGCTCTAATCTCTGGGCATCTGGCTATGATGTTGATGGAACTGACCAAA IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1598:534/1 129 PHIX174 1772 255 50M = 1717 55 TTAGGCCAGTTTTCTGGTCGTGTTCAACAGACCTATAAACATTCTGTGCC IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1572:324/2 0 PHIX174 1972 255 50M * 0 0 GCCGCCGCGTGAAATTTCTATGAAGGATGTTTTCCGTTCTGGTGATTCGT IIIIIII""IIIIIIIIIIIIIIIIIIII+7I05I?I0IIIIHIIIGIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1749:466/1 65 PHIX174 2201 255 50M = 2251 50 TTGCAGTGGAATAGTCAGGTTAAATTTAATGTGACCGTTTATCGCAATCT IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1749:466/1 129 PHIX174 2251 255 50M = 2201 50 GCCGACCACTCGCGATTCAATCATGACTTCGTGATAAAAGATTGAGTGTG IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1629:446/1 65 PHIX174 2301 255 50M = 2355 54 AGGTTATAACGCCGAAGCGGTAAAAATTTTAATTTTTGCCGCTGAGGGGT IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1629:446/1 129 PHIX174 2355 255 50M = 2301 54 CAAGCGAAGCGCGGTAGGTTTTCTGCTTAGGAGTTTAATCATGTTTCAGA IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1763:587/1 65 PHIX174 2501 255 50M = 2566 65 AAGCTACATCGTCAACGTTATATTTTGATAGTTTGACGGTTAATGCTGGT IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1763:587/1 129 PHIX174 2566 255 50M = 2501 65 CATTGCATTCAGATGGATACATCTGTCAACGCCGCTAATCAGGTTGTTTC IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1616:363/1 65 PHIX174 2718 255 50M = 2773 55 TGTTTATCCTTTGAATGGTCGCCATGATGGTGGTTATTATACCGTCAAGG IIIIIII""IIIIIIIIIIIIIIIIIIIIIIDIII"IIIIIII000IIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1616:363/1 129 PHIX174 2773 255 50M = 2718 55 GTGACTATTGACGTCCTTCCCCGTACGCCGGGCAATAATGTTTATGTTGG IIIIIII""IIIIIIIIIIIIIIIIIIIIIIDIII?I0IIIIHIIIGIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1768:715/1 65 PHIX174 3118 255 50M = 3173 55 ACCCTGATGAGGCCGCCCCTAGTTTTGTTTCTGGTGCTATGGCTAAAGCT IIIIIII""IIIIIIIIIIIIIDIIIIIIIIIIII"IIIIIII000IIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1768:715/1 129 PHIX174 3173 255 50M = 3118 55 AGGACTTCTTGAAGGTACGTTGCAGGCTGGCACTTCTGCCGTTTCTGATA IIIIIII""IIIIIIIIIIIIIDIIIIIIIIIIII?I0IIIIHIIIGIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1572:270/1 65 PHIX174 3518 255 50M = 3577 59 TGAGATGCTTGCTTATCAACAGAAGGAGTCTACTGCTCGCGTTGCGTCTA IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1572:270/1 129 PHIX174 3577 255 50M = 3518 59 ACACCAATCTTTCCAAGCAACAGCAGGTTTCCGAGATTATGCGCCAAATG IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1785:1272/1 65 PHIX174 3818 255 50M = 3873 55 TATTTTTCATGGTATTGATAAAGCTGTTGCCGATACTTGGAACAATTTCT III""""""IIIIIIIII""FI"IIII""II+ICI"IIIIIII000IIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1785:1272/1 129 PHIX174 3873 255 50M = 3818 55 GACGGTAAAGCTGATGGTATTGGCTCTAATTTGTCTAGGAAATAACCGTC III""""""IIIIIIIII""FI"IIII""II+ICI?I0IIIIHIIIGIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1673:514/1 65 PHIX174 4018 255 50M = 4072 54 ATTATTTTGACTTTGAGCGTATCGAGGCTCTTAAACCTGCTATTGAGGCT IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIII1"IIIIIII000IIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1673:514/1 129 PHIX174 4072 255 50M = 4018 54 GCATTTCTACTCTTTCTCAATCCCCAATGCTTGGCTTCCATAAGCAGATG IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIII1?I0IIIIHIIIGIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1634:330/1 65 PHIX174 4418 255 50M = 4473 55 GGATATTCGCGATGAGTATAATTACCCCAAAAAGAAAGGTATTAAGGATG IIIIIII""IIIIIIIIIIIIIIIIIIIIIII8II"IIIIIII000IIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1634:330/1 129 PHIX174 4473 255 50M = 4418 55 TCAAGATTGCTGGAGGCCTCCACTATGAAATCGCGTAGAGGCTTTACTAT IIIIIII""IIIIIIIIIIIIIIIIIIIIIII8II?I0IIIIHIIIGIII NM:i:0
diff -r 137d93848139 -r 032aae80bbb0 test-data/perm_out2.sam
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/perm_out2.sam Wed Mar 17 16:40:36 2010 -0400
@@ -0,0 +1,98 @@
+HWI-EAS91_1_30788AAXX:1:1:1513:715/1 16 chrM 9563 255 36M * 0 0 CTGACTACCACAACTAAACATCTATGCCCAAAAAAC I+-II?IDIIIIIIIIIIIIIIIIIII""IIIIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1698:516/1 16 chrM 2735 255 36M * 0 0 TTTACACTCAGAGGTTCAACTCCTCTCCCTAACAAC I9IIIII5IIIIIIIIIIIIIIIIIII""IIIIIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1491:637/1 16 chrM 10864 255 36M * 0 0 TGTAGAAGCCCCAATTGCCGGATCCATCCTGCTAGC DBAIIIIIIIIIIIFIIIIIIIIIIII""IIIIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1711:249/1 16 chrM 10617 255 36M * 0 0 ACCAAACAGAACGCCTGAACGCAGGCCCCTACTTCC IIIIIIIIIIIIIIIIIIIIIIIIIII""IIIIIII NM:i:1
+HWI-EAS91_1_30788AAXX:1:1:1634:211/1 0 chrM 9350 255 36M * 0 0 GAAGCAGGGGCTTGATACTGACACTTCGTCGACGTA IIIIIII""IIIIIIIIIIIIIIIIIIIIII9IIDF NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1398:854/1 16 chrM 3921 255 36M * 0 0 CACCCTTCCCGTACTAATAAATCCCCTCCTCTTCAC IIIII=AIIIIIIIIIIIIIIBIIIII""IIIIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1310:991/1 16 chrM 10002 255 36M * 0 0 CTCCTATGCCTAGAAGGAATAATACTACCACTATTC I:2IEI:IIDIIIIII4IIIIIIIIII""IIIIIII NM:i:1
+HWI-EAS91_1_30788AAXX:1:1:1716:413/1 0 chrM 6040 255 36M * 0 0 GATCCAAGGCTTTATCAACACCTATTCTGATTCTTC IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1630:59/1 16 chrM 12387 255 36M * 0 0 TCATACTCGACCCCAACCTTACCAACCCCCCGCTCC FIIHII;IIIIIIIIIIIIIIIIIIII""IIIIIII NM:i:1
+HWI-EAS91_1_30788AAXX:1:1:1601:805/1 0 chrM 12584 255 36M * 0 0 GAAAACAGGAAAACAATCCAGTCACTTACCCTATGC IIIIIII""IIIIIIIIIIIIIIIIIIIIIII@III NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1663:724/1 0 chrM 15012 255 36M * 0 0 GTTTGCCGGCGCCATCCTACGCTCCATTCCCAACAA IIIIIII""IIII8IIIIIIHIIII6IIIII1CI=3 NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1454:975/1 16 chrM 8929 255 36M * 0 0 TGGCTTCTTCTGAGCCTTTTACCACTCCCGCCTAGC IIIIIII;GIEIIIIIIIIIIIIIIII""IIIIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1461:255/1 0 chrM 12988 255 36M * 0 0 GTACACCGGCGCCTGAGCCCTACTAATAACTCTCAT IIIIIII""IIIIII9IIIIIIEI(II9.I4III,I NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1775:764/1 0 chrM 16613 255 36M * 0 0 GCATCCCGGTAGATCTAATTTTCTAAATCTGTCAAC IIIIIII""III@IIII+IIIIII8H8IIIIIIICI NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1269:520/1 16 chrM 11036 255 36M * 0 0 CGACAAACCGATCTAAAATCACTTATTCCATACTCC IIIIIIIIIIIIIIIIIIIIIIIIIII""IIIIIII NM:i:1
+HWI-EAS91_1_30788AAXX:1:1:1303:1162/1 16 chrM 14866 255 36M * 0 0 AAAGACATCCTAGGACTCCTCCTCCTGCCCTTGCTC I6I3,'94IIAI(IAIGI*4IIFIIII""IIIIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1090:409/1 16 chrM 15014 255 36M * 0 0 TTGCCTACGCCATCCTACGCTCCATTCCCAACAAAC I8AII:IIIIIIIIIIIIIIIIIIIII""IIIIIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1336:1000/1 16 chrM 11616 255 36M * 0 0 GATCTAGAAACAGAAACTTAATATTTCCCATTTACC II9IIIIIIIIIIIIIIIIIIIIIIII""IIIIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1199:1376/1 16 chrM 14023 255 36M * 0 0 AAACCCCCATAAATAGGTGAAGGTTTTCCAGAAAAC III/:&GII3III;IIIIIIIIIIIII""IIIIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1598:1148/1 16 chrM 2334 255 36M * 0 0 AAATATATAATCACTTATTGATCCAAACCATTGATC IIIIIHI=IICIII?IIIIIIDIIIII""IIIIIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1723:1459/1 16 chrM 15787 255 36M * 0 0 ATCCTCGCTCCGGGCCCATCCAAACGTCCGGGTTTC I=II-IIH9IIIIIIIIIDIIIIIIII""IIIIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1442:1346/1 16 chrM 9331 255 36M * 0 0 CAGCCACCACTTCGGATTCGAAGCAGCCCCTTGATA &,*II-<?<II4I(I1IIIIIDIIIII""IIIIIII NM:i:1
+HWI-EAS91_1_30788AAXX:1:1:850:117/1 16 chrM 5540 255 36M * 0 0 CCCATGCATTCGTAATAATTTTCTTTACCGTCATAC ?:;I9DDIBEIIIIIIIIEIEIIIIII""IIIIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:795:325/1 16 chrM 4249 255 36M * 0 0 AAACTTGGACTCACACCATTCCACTTCCCAGTACCC IIII56IIIIIIIIIIIIIIIIIIIII""IIIIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:873:453/1 16 chrM 3188 255 36M * 0 0 ATCTCATACGAAGTAACTCTAGCAATCCCCCTACTC I=IIIIIII@IIIIIIIIIIIIIIIII""IIIIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1285:1334/1 16 chrM 2389 255 36M * 0 0 GGGATAACAGCGCAATCCTATTCCAGACCCCATATC I8IIIII8IIIIIIIIIIGIIBIIIII""IIIIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:905:406/1 0 chrM 2844 255 36M * 0 0 GAAAAGTGGTAGGCTATATGCAACTTCGCAAAGGAC IIIIIII""IIIIIIIIBIIIIBIIII=I@96D2*I NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1774:595/1 16 chrM 7398 255 36M * 0 0 CTTTGACTCCTACATGATCCCCACATCCCACCTAAA IEIIIIIIIIIIIIIIIIIIIIIIIII""IIIIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1694:931/1 16 chrM 1503 255 36M * 0 0 TTACCTAAAAACTACTCAATTCTAATGCCAATTTAA III,HIIIIIIIIIIIIIIIIIIIIII""IIIIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1092:1151/1 16 chrM 7564 255 36M * 0 0 GACGCTATCCCTGGGCGCCTAAATCAGCCAACTCTC 5III@6IIIII>III5IIIIIIIIIII""IIIIIII NM:i:1
+HWI-EAS91_1_30788AAXX:1:1:803:557/1 16 chrM 893 255 36M * 0 0 GCTTAATTGAATCAGGCCATGAAGCGCCCACACACC 604III?IIII<IIIIIIIIIIIIIII""IIIIIII NM:i:1
+HWI-EAS91_1_30788AAXX:1:1:1315:1200/1 16 chrM 14035 255 36M * 0 0 ATAGGTGAAGGTTTTGAAGAAAACCCCCCAAAACTA I;IIIIIIIIIIIIIIIIIIIIIIIII""IIIIIII NM:i:1
+HWI-EAS91_1_30788AAXX:1:1:765:358/1 16 chrM 11086 255 36M * 0 0 AGCCCTAGTAATCGTAGCCGTCCTCATCCAAACACC I1'=D0I@4IIAIIDIIIIIIIIIIII""IIIIIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1425:1167/1 16 chrM 3841 255 36M * 0 0 TGCTACCGAATTACACCATGTCCTACACCTAAGGTC GI+II%(IIIIIIIIIIIIIIIIIIII""IIIIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1775:635/1 16 chrM 8752 255 36M * 0 0 CTTTAACTCAACCTTACTTCTAGCTATCCGGCTATT IBIIIIIIIIIIIIIIIIIIIIIIIII""IIIIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1433:749/1 16 chrM 10784 255 36M * 0 0 TTCCTATGACTAGCATGTATAATAGCACCCATAGTC E9I/BIIIICIIIIIFIIIIIIIIIII""IIIIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:798:247/1 16 chrM 13560 255 36M * 0 0 TCACCCTTACCCTAAGCATACTACTTTCCAATCTCC IIIIIIIIIIIIIIIIIIIIIIIIIII""IIIIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1249:1238/1 16 chrM 7971 255 36M * 0 0 GAAAATCTATTCGCCTCTTTCGCTACCCCAACAATA @IIII7IIIDCIIIIBIIIIIIIIIII""IIIIIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1043:1104/1 16 chrM 9689 255 36M * 0 0 ATTCGACTTAGAAATTGCCCTCCTATTCCCCCTTCC ,CIII.II0I<IFI;IIIIIDIIIIII""IIII&II NM:i:1
+HWI-EAS91_1_30788AAXX:1:1:1655:1058/1 0 chrM 6591 255 36M * 0 0 AAAAATCGGCTTTACAATTATATTCGTAGGGGTAAA IIIIIII""IIIIIIIIIIIIIIIIFIII6AIIIGI NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1764:1403/1 16 chrM 14239 255 36M * 0 0 TTTATTGACCTACCAGCCCCCTCAAACCCTTCATCA IIIIIBIIIIIIIIIIIIIIIIIIIII""IIIIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1632:34/1 0 chrM 11721 255 36M * 0 0 AGGATAGGGGCTATCCGTTGGTCTTAGGAACCAAAA IIIIIII""IIIIIIIIIIIIIIIIIIIFIIIH:6I NM:i:1
+HWI-EAS91_1_30788AAXX:1:1:1367:1208/1 0 chrM 3678 255 36M * 0 0 GACACGTGGCACTTCCAATCATACTATCCAGCATCC IIIIIII""IIIIIIII:IIII8IIEIIII-IAIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1778:108/1 0 chrM 11457 255 36M * 0 0 AATACACGGACCATATCAACAGCATTAAACCTTCAT IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIII@I NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1152:1115/1 16 chrM 10902 255 36M * 0 0 CCATTCTACTAAAACTAGGAGGCTACGCCATACTAC 'AIII7=IIDIII86.IIIIIIIIIII""IIIIII7 NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1165:1121/1 16 chrM 9810 255 36M * 0 0 GAATGAACCCAAAAAGGACTAGAATGACCTGAGTAT AIIIIII?22IIIIIIIIIIIIIIIII""IIIIIII NM:i:1
+HWI-EAS91_1_30788AAXX:1:1:1500:55/1 16 chrM 10669 255 36M * 0 0 AGGTTCCCTCCCACTCTTAGTTGCACTCCTCTCTAT IIII<IIICIIIIIIIFIIIIIIIIII""IIIIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1142:1196/1 0 chrM 15275 255 36M * 0 0 TCATTTTGGTACCACTCGCAAGCACCATCGAAAACA IIIIIII""IIIIIIIIIIIIIIIII@I=I79I6II NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1693:757/1 0 chrM 7018 255 36M * 0 0 AAATTATGGGTTAAACCCCTATATACCTCTATGGCC IIIIIII""IIIIIIIIIIIIIBIDIIIII0II-IG NM:i:1
+HWI-EAS91_1_30788AAXX:1:1:1364:1053/1 16 chrM 4697 255 36M * 0 0 TCCCCCCACTATCAGGATTCATACCCACCTGAATAA 5=4&G13I.?IIIIIIIIIIIIIIIII""IIIIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1450:1443/1 0 chrM 9111 255 36M * 0 0 GTAAAAAGGTGCTCCAAGGCCTATTCATCACAATTT IIIIIII""IIIIIIIIIIIIIIIIIIIIEIB8III NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1701:1298/1 16 chrM 14463 255 36M * 0 0 CTGCCTCTTCATTCACGTAGGACGCGGCCTCTACTA IGIII;II8IIIIIIIIIIIIIIIIII""IIIIIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1729:856/1 0 chrM 10731 255 36M * 0 0 TCCTATTGGTTCAATACTGAAACCAAGCACTACCCG IIIIIII""IIIIIIIIIIIIIIIIFIIIII@IIIH NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1748:933/1 0 chrM 6379 255 36M * 0 0 TGAGCTCGGGGCTTCATCTTCTTATTCACAGTAGGA IIIIIII""IIIIIICIIIIIIIIIIIIII@II5@F NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1662:1296/1 0 chrM 96 255 36M * 0 0 TTAGTTAGGAATAGAATTACACATGCAAGTATCCGC IIIIIII""IIIIIIIIIIIIIHIIIEI5IIIII4I NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1393:345/1 16 chrM 1499 255 36M * 0 0 AAATTTACCTAAAAACTACTCAATTCTCCTGTAAAT IIIIEII+EIIIIIIIIIIIIIIIIII""IIIIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:943:780/1 16 chrM 10597 255 36M * 0 0 TATCATCACCCGCTGAGGCAACCAAACCCAACGCCT HI<II;IIIIIIIIIIIIIIIIIIIII""IIIIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1639:968/1 0 chrM 4742 255 36M * 0 0 AGCTCACGGAAAATAGCAGCATCATCCTCCCCACAC IIIIIII""IIIIIIIIIIIIIIIIIIIIIII8I:I NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:589:1114/1 16 chrM 6809 255 36M * 0 0 CTACAGTAGAATTAACCTCAACTAATCCCGAATGAC )II&IIIIIIIIIII1IIIIIIIIIII""IIIIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:763:408/1 0 chrM 10391 255 36M * 0 0 GCCCCACGGCTGGTGTTGACAACATGACTACTGCCA IIIIIII""IIIIIIIIIIIIII=I*5II<II'II( NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:950:352/1 0 chrM 6695 255 36M * 0 0 ACGCATAGGCAACATGAAATACCATCTCATCCATAG IIIIIII""IIIIIIIIIIIIIIIIIIIFIIIIIGI NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1164:103/1 0 chrM 1159 255 36M * 0 0 TTAACTAGGACATTCACCAAACCATTAAAGTATAGG IIIIIII""IIIIIIIIIIIAII=IIB58I=<I;II NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1078:1202/1 16 chrM 492 255 36M * 0 0 AAACTGGGATTAGATACCCCACTATGCCCAGCCCTA IIIEIIIIIIIIIIIIIIIIIIIIIII""IIIIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1617:490/1 0 chrM 12295 255 36M * 0 0 AATCCTTGGTAACCGCATCGGGGATATCGGCTTCAT IIIIIII""IIIIIIIIIIIIIIIIIIIIIIII:(D NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:843:504/1 0 chrM 6703 255 36M * 0 0 ACAACATGGAATACCATCTCATCCATAGGATCTTTT IIIIIII""IIIIIIIIAIIIIII>IIHI=IIIIII NM:i:1
+HWI-EAS91_1_30788AAXX:1:1:942:318/1 0 chrM 3080 255 36M * 0 0 TTCATACGGGCCATGTCCAGCCTAGCTGTCTACTCA IIIIIII""IIIIIIIIIIHIIIIIIIIIII<IIIF NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1719:283/1 16 chrM 2261 255 36M * 0 0 CAGCAATTTCGGTTGGGGTGACCTCGGCCAACAAAA IIIIGI2=3IIIIIIIIIIIIIIIIII""IIIIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1517:961/1 0 chrM 9916 255 36M * 0 0 TGTCACTGGTCCATATTAATATCTTCCTAGCATTCA IIIIIII""IIIII=III9I@IIIIIIIBIIEIII> NM:i:1
+HWI-EAS91_1_30788AAXX:1:1:1482:345/1 16 chrM 8764 255 36M * 0 0 CTTACTTCTAGCTATAGGGCTATTAACCCACATCCT IAAIIHAI?IIIIIIIIIIIIIIIIII""IIIIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1697:533/1 16 chrM 8450 255 36M * 0 0 TAACATTACCGCCGGACACCTCCTAATCCACCTCAT IIIII>1IIIIIIIIIIIIIIIIIIII""IIIIIII NM:i:1
+HWI-EAS91_1_30788AAXX:1:1:1159:1225/1 0 chrM 8346 255 36M * 0 0 TTTCTACGGCAAGGGACGCCCATTTTCCTCATCCCC IIIIIII""IIIII=I7IIII3IIIIIIII/ID@II NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:982:332/1 16 chrM 6016 255 36M * 0 0 TTCTTCGACCCCGCAGGAGGAGGGGATCCAATCCTT @7I<?IIIIIIIIIIIIIIIIIIIIII""IIIIIII NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1073:668/1 0 chrM 3502 255 36M * 0 0 AGCATTTGGCAACCCCTACCTGCCAGAACTCTACTC IIIIIII""IIIIIIIIIIIIIII>I4@IIIIIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1386:1163/1 0 chrM 1616 255 36M * 0 0 AGTTGGCGGAAAAGCAGCCATCAATTAAGAAAGCGT IIIIIII""IIIIIIIIIICII=GIIIII@IGIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1196:344/1 16 chrM 5155 255 36M * 0 0 GTTAACAGCTAAATACCCTAATCAACTCCCTTCAAT 7IIIIIIIIIIIIIIIIIIIIIIIIII""IIIIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1551:1269/1 0 chrM 11375 255 36M * 0 0 ATTACCAGGATCCTAATAGGAGCCAATATCACCATC IIIIIII""IIIIIIIIGIIIIIIIIIIII@II4II NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:928:468/1 0 chrM 1192 255 36M * 0 0 AGGAGATGGAAATTTTAACTTGGCGCTATAGAGAAA IIIIIII""IIIIIIIIIIIIIIIIIIIIC<IHIII NM:i:1
+HWI-EAS91_1_30788AAXX:1:1:763:835/1 16 chrM 8908 255 36M * 0 0 CTCAGAAGTCTTCTTCTTCTCTGGCTTCCTCTGAGC I:IIDIIIIII<IFIIFEIHIIIIIII""IIIIIII NM:i:1
+HWI-EAS91_1_30788AAXX:1:1:1363:330/1 16 chrM 10891 255 36M * 0 0 AGTGCTAGCAGCCATTCTACTAAAACTCCGAGGCTA 57-C5,I5IIIIIIIIII@IIIIIIII""IIIIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1001:837/1 0 chrM 10991 255 36M * 0 0 ATACTATGGCTGTGAGGAATAATCATAACTAGTTCC IIIIIII""IIIII2IIIIIIIIIIIFIII:IIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1189:616/1 0 chrM 3753 255 36M * 0 0 TTTGATAGGGTAAAACATAGAGGCTCAAACCCTCTT IIIIIII""IIIIIIIIIIIIIIIIICIIIIIIIII NM:i:1
+HWI-EAS91_1_30788AAXX:1:1:1212:634/1 0 chrM 6053 255 36M * 0 0 ATCAACAGGTATTCTGATTCTTCGGACACCCCGAAG IIIIIII""IIIIIIIIIIIIIIIIIIAIIIIF(.I NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1271:421/1 0 chrM 8630 255 36M * 0 0 ACACGACGGCACCTAATGACCCACCAAACCCACGCT IIIIIII""IIIIIIIIIIIIIIII>C:IIIDI<II NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1582:328/1 0 chrM 7752 255 36M * 0 0 AGCATTAGGCTTTTAAGTTAAAGATTGAGGGTTCAA IIIIIII""IIIIII,IIIB;BI<IIIIII+IIIBI NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1133:687/1 16 chrM 7122 255 36M * 0 0 CCACACACTAATAATCGTATTCCTAATCCGCTCTCT III4IIIIIIIIIIIIIIIIIIIIIII""IIIIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1231:662/1 0 chrM 13783 255 36M * 0 0 TCACTCTGGAGAACATATAAAACCAACATAACCTCC IIIIIII""IIIIIIIIIIIIIIIIII?ICCIIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1693:1140/1 16 chrM 4932 255 36M * 0 0 CTCCCTACTCCTCCCCCTAACCCCCATCCTATCAAT I-AII7II5II:IIIIIIIIIIIIIII""IIIIIII NM:i:1
+HWI-EAS91_1_30788AAXX:1:1:867:279/1 16 chrM 5309 255 36M * 0 0 TCCAACCCCTGTCTTTAGATTTACAGTCCAATGCTT IIIIIIIIIIIIIIIIIIIIIIIIIII""IIIIIII NM:i:1
+HWI-EAS91_1_30788AAXX:1:1:1095:605/1 0 chrM 23 255 36M * 0 0 AAGCAAGGGACTGAAAATGCCTAGATGAGTATTCTT IIIIIII""IIIIIIIIIIIIIIIEIIIIIIIIIII NM:i:1
+HWI-EAS91_1_30788AAXX:1:1:1650:1185/1 0 chrM 14956 255 36M * 0 0 ACCCCAGGGAACCCTCTCAGCACTCCCCCTCATATT IIIIIII""IIIIIIIIIIII6IIIIIIIII5I-II NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:799:192/1 16 chrM 8421 255 36M * 0 0 CCTGTAGCCCTAGCCGTGCGGCTAACCCCTAACATT II%::I<IIIIIEIII8IIIIIIIIII""IIIIIII NM:i:1
+HWI-EAS91_1_30788AAXX:1:1:1082:719/1 16 chrM 7191 255 36M * 0 0 TAAATTAACCCATACCAGCACCATAGACCCTCAAGA <III0EII3+3I29I>III8AIIIIII""IIIIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1746:1180/1 16 chrM 12013 255 36M * 0 0 CCTAAGCTTCAAACTAGATTACTTCTCCCTAATTTT IIIIIIIIFIIIIIIIIIIIIIIIIII""IIIIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:606:460/1 0 chrM 4552 255 36M * 0 0 TTAATTTGGATTATAATAACACTCACAATATTCATA IIIIIII""IIIIIIIIIIIIIIIIII?I6IIIII6 NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1059:362/1 16 chrM 7348 255 36M * 0 0 GGCCACCAATGATACTGAAGCTACGAGCCTACCGAT II/<)2IIIIIIIIIIIIIIIIIIIII""IIIIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1483:1161/1 16 chrM 15080 255 36M * 0 0 TCCTGATCCTAGCACTCATCCCCACCCCCCACATAT HIIIIIFIIAIHIIIIIIIIIIIIIII""IIIIIII NM:i:1
+HWI-EAS91_1_30788AAXX:1:1:1273:600/1 16 chrM 13855 255 36M * 0 0 GTATTAGACACCCATACCTCAGGATACCCCTCAGTA IIIIIIIIIIIIIIIIIIIIIIIIIII""IIIIIII NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1190:1283/1 16 chrM 15338 255 36M * 0 0 TATATCGCACATTACCCTGGTCTTGTACCCCAGAAA EIII?-IIIIIAIIIIIIIIIIIIIII""IIIIIII NM:i:2
diff -r 137d93848139 -r 032aae80bbb0 test-data/perm_out3.fastqsanger
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/perm_out3.fastqsanger Wed Mar 17 16:40:36 2010 -0400
@@ -0,0 +1,4 @@
+@HWI-EAS91_1_30788AAXX:1:1:1218:141/1
+GTTAAATATTGGGAGTGGGGGGGGGGGGGAGTTTTG
++
+IIIIIII""IIIIIIIIIIIIIIIIIIII1IIII+I
diff -r 137d93848139 -r 032aae80bbb0 test-data/perm_out4.sam
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/perm_out4.sam Wed Mar 17 16:40:36 2010 -0400
@@ -0,0 +1,53 @@
+1831_573_1219 16 phiX 2201 255 35M * 0 0 TTGCAGTGGAATAGTCAGGTTAAATTTAATGTGAC -A@EE>NVA7FQZSC8GRJK<EVGC<==39BP\__ NM:i:0 CS:Z:G1211130300300301021212330201121310 CQ:Z:@@@=4/+)5)408?'665>*/5?<61';<3,:,5-
+1831_573_1242 0 phiX 647 255 35M * 0 0 TCATCCCGTCAACATTCAAACGGCCTGTCTCATCA [[WSWNGS]US^_\WQW]WL?CEMUIMSTSJ*1U; NM:i:1 CS:Z:T2132003121011302100130302112221121 CQ:Z:>>>::>17=A5?@@=;7A=;2.60>82<8=74+;;
+1831_573_1647 16 phiX 1117 255 35M * 0 0 CGACTCCTTCGAGATGGACGCCGTTGGCGCTCTCC 4NIKVOPIBACPWOQ^^WSZ_\Y][Y]]^_[[_^[ NM:i:0 CS:Z:G0222233301013033120132223202022123 CQ:Z:=?@@<@@???;A==@@;9?@?3=;6.4/;6:=/;4
+1831_573_1684 16 phiX 3695 255 35M * 0 0 TAGTGCTGAGGTTGACTTAGTTCATCAGCAAACGC ?\VWTLTTUZVV[_^\Y[_ZWUW]^_XKR[SQJNT NM:i:0 CS:Z:G3310013212312012302121010221231123 CQ:Z:7>1:8<@39@@??9=;@@<>?@@<;<?7>76?9>?
+1831_574_109 0 phiX 3728 255 35M * 0 0 GCAGAATCAGCGGTATGGCTCTTCTCATATTGGCG 07651#4817>@65<2:84716=788<1995.7?6 NM:i:1 CS:Z:G3122332123301331032220222133301033 CQ:Z:07651#4817>@65<2:84716=788<1995.7?6
+1831_574_148 16 phiX 2368 255 35M * 0 0 GTAGGTTTTCTGCTTAGGAGTTTAATCATGTTTCA ;NEGQTTTJAMH9B@@PHHSQUJML=LPMUMPJGV NM:i:0 CS:Z:T1200113123030012202302312200010231 CQ:Z:<;->3;;3>//>0;;7=,=4-4/+>029<9<624;
+1831_574_575 16 phiX 4005 255 35M * 0 0 GAATGTCACGCTGATTATTTTGACTTTGAGCGTAT <JC>=PXK;2BW[T;CXA"&?U\\__WU]^[Z]^U NM:i:1 CS:Z:A3313322100212102033032123311211302 CQ:Z:7?@>=?@>8@@@=@6*%&<='5@<<',0<=4*5/<
+1831_574_592 16 phiX 2949 255 35M * 0 0 GGCGGTATTGCTTCTGCTCTTGCTGGTGGCGCCAT 2BBLI?LTSPIFFIMD:?MRLECQ][G7DI9=A?I NM:i:0 CS:Z:A3103330110123102223122023103310330 CQ:Z:73-5)19,,<@>4067<2.-864346;9<1/;212
+1831_574_824 16 phiX 3996 255 35M * 0 0 TACCCTTCTGAATGTCACGCTGATTATTTTGACTT ?VRCD\ZK5?ZWJ7D]WP=AVQRHH[J64CUZ__Z NM:i:0 CS:Z:A0212100033032123311211302122020013 CQ:Z:;@@@;;),+@<-<7;<&89??&29?<$2:A<);8?
+1831_574_1194 0 phiX 1135 255 35M * 0 0 CGCCGTTGGCGCTCTCCGTCTTTCTCCATTGCGTC NRXFJ]WXXX^^PP_\\RO\]]SR^_XLRUKC:A6 NM:i:0 CS:Z:C3303101033322220312200222013013312 CQ:Z::5>;,??9@9@?@1@@=@3=@>@4?@@94?75/,6
+1831_574_1591 16 phiX 5117 255 35M * 0 0 GAAGCTGTTCAGAATCAGAATGAGCCGCAACTTCG 9CB??UTRA!7YIJXQUSUEEZWX[WNV^ZY^\XY NM:i:1 CS:Z:C3202101330322130221230222201123202 CQ:Z:==<A><?@78@<=;@&@6>8:?,><&&<7>8(8+9
+1831_574_1624 16 phiX 4057 255 35M * 0 0 CTATTGAGGCTTGTGGCATTTCTACTCTTTCTCAA )5?C6:LSC5DHJA6@FNI54;D?137CB3-3CQ: NM:i:1 CS:Z:C0122200222132200313011102302210332 CQ:Z:#<6.&(,7-+))7..'/;43.)927.(<85&13-)
+1831_574_1903 0 phiX 5208 255 35M * 0 0 AAGCTGGGTTACGACGCGACGCCGTTCAACCAGAC TMJT^]XQV__WQY]UUYXUVVV]QNSGOOJOPI/ NM:i:1 CS:Z:A0232100103132133321330310210101221 CQ:Z:<956?@>;7@@@8:@>8><=9>9>@2=71?1:6;/
+1831_575_54 16 phiX 3586 255 35M * 0 0 TTTCCAAGCAACAGCAGGTTTCCGAGATTATGCGC 8ST4/MPK:7HONA7BTVCHY[^YRSVLMSMU_\Z NM:i:1 CS:Z:G3331330322230200102132110132013200 CQ:Z:>=@@68<2;<8;?@<>+9>7,,6972&57:4&9<8
+1831_575_197 16 phiX 4860 255 35M * 0 0 AGCTTGCAAAATACGTGGCCTTATGGTTACAGTAT ,=.<SADLUZH>67?JXRIFRTTVOQZ`RHIRXF8 NM:i:1 CS:Z:A3312113010133020301131330001310032 CQ:Z:,-:?463@A:88?6?437<=.2&1.;@67.4@%2,
+1831_575_444 16 phiX 5097 255 35M * 0 0 AAGCTGTCGCTACTTCCCAAGAAGCTGTTCAGAAT >XO0/QUSCCY]]LJWZ^[W\ZVGF[^[JIVZ_QM NM:i:1 CS:Z:A3022120112320220100202132332113320 CQ:Z:<2@@;<.=?@<+=:A<<@?<</>@><(<8>4&5;>
+1831_575_622 0 phiX 2484 255 35M * 0 0 TGTTTTACAGACACCTAAAGCTACATCGTCAACGT `XY^\_^Z[^ZY[Z[WNQOLO?DOBJB@M>EQ$!+ NM:i:1 CS:Z:T1100031122111023002323113231210111 CQ:Z:@A8B=@@?<@?<>>=?96<497)<4/<':4+;74+
+1831_575_938 16 phiX 1132 255 35M * 0 0 GGACGCCGTTGGCGCTCTCCGTCTTTCTCCATTGC 7N@<NSTMKOQVHAONKTXVTUWZXRTWZ^XY_YT NM:i:0 CS:Z:G3103102220022130222233301013033120 CQ:Z:;:@@:?@;=8;>=;;:=<93<4.;<6:2<9;4)87
+1831_575_970 16 phiX 231 255 35M * 0 0 TGAGGAGAAGTGGCTTAATATGCTTGGCACGTTCG 5PXYYNKY^\[VW[\]XY[VUTRY_[Y]_ZW\\\\ NM:i:0 CS:Z:C3201311301023133303023011202220221 CQ:Z:=@=@=;@@><@@:9<:=?;>@=?9>>?@:2===<5
+1831_575_1138 0 phiX 1912 255 35M * 0 0 CGCTAAAGGTGCTTTGACTTATACCGATATTGCTG XLJ7-IKH@IWNTJJSPUKO]UU[UTNQKDQDCJ1 NM:i:1 CS:Z:C3320002011320012120333103233301321 CQ:Z:<=0;%1936+?96?,?5<:2>@6@<:;4>.7;*:1
+1831_575_1180 0 phiX 4168 255 35M * 0 0 AGGGCGTTGAGTTCGATAATGGTGATATGTATGTT J]_RSE@HENVYKKOINRQOV_]VLPSRLHMBJT7 NM:i:0 CS:Z:A2003310122102323303101123331133110 CQ:Z:/<B>5?':/78?;1;55:997@@>94=7<186->7
+1831_575_1302 16 phiX 5201 255 35M * 0 0 ACTTACCAAGCTGGGTTACGACGCGACGCCGTTCA *57==/2(a)B6+-8?,!,.(.A=+*7>2,841LOB6 NM:i:1 CS:Z:T1201303312333123130200123201013021 CQ:Z:&12>/#2'&-2&%'7+$%*#$/1(&&12/$,2,,*
+1831_575_1310 16 phiX 1611 255 35M * 0 0 ATACTGACCAAGAACGTGATTACTTCATGCAGCGT ;QC!!DXV[[Z]UEN_YYPAMSVGGXQWQHKSYWQ NM:i:1 CS:Z:A1332131312021303211310220101211133 CQ:Z:6<<>663?99@(@7=11@:@@/7??<@<;>'3-7;
+1831_575_1321 0 phiX 2663 255 35M * 0 0 GTTTGGTTCGCTTTGAGTCTTCTTCGGTTCCGACT 0;B@?@>=A@<A?>@>?6>@5>'4@9?)7@7?/89 NM:i:1 CS:Z:G1001010233200122122022023000203212 CQ:Z:0;B@?@>=A@<A?>@>?6>@5>'4@9?)7@7?/89
+1831_575_1373 16 phiX 4220 255 35M * 0 0 TTCTGACGTTCGTGATGAGTTTGTATCTGTTACTG <M=?PSE>BHTUGKZZZYY]]VU]^[TUWZ]]__` NM:i:0 CS:Z:C1213011223311001221321132013121220 CQ:Z:A@@@>@;=9<@??7@>@:@;@;17?630/7=4,2<
+1831_575_1436 0 phiX 3459 255 35M * 0 0 GCTGGCATTCAGTCGGCGACTTCACGCCAGAATAC ;Q\WMKB<NE=OUWRFO[V?=PUXC6LZN77CHQ< NM:i:0 CS:Z:G3210313021212303321202113301220331 CQ:Z:*2@=;39*3<*4<:>52>>9'7:<='0=>1'136<
+1831_575_1442 0 phiX 3316 255 35M * 0 0 ATGCTTGGGAGCGTGCTGGTGCTGATGCTTCCTCT URLSZUTH;RWB;GTWUNS\^ZJP^SGKFMSB?N> NM:i:0 CS:Z:A3132010022331132101132123132020222 CQ:Z:8>58<?7>+1B6-/9<<:5?>A:1@?539.@4/1>
+1831_575_1500 16 phiX 4268 255 35M * 0 0 TGAATTGGCACAATGCTACAATGTGCTCCCCCAAC 9V\UBGWPPNT^YUQQQQUQLPRUQQSV^`_^_^P NM:i:0 CS:Z:G1010000223111301132313011130103021 CQ:Z:2?@@?A@?8<6<:985=99999==B3<5<<,7?>9
+1831_575_1535 16 phiX 1224 255 35M * 0 0 GTCACGTTTATGGTGAACAGTGGATTAAGTTCATG <PRXVWQOTQUST^[\WMT^]Z\_`ZX`a_[[\^a NM:i:0 CS:Z:C1312012030320112110211013300131121 CQ:Z:@B=@<@@B?:A@@=>@?68@=?@5?7;:6<<;>5<
+1831_576_86 16 phiX 2980 255 35M * 0 0 CCATGTCTAAATTGTTTGGAGGCGGTCAAAAAGCC /@:AJ7;AEH712=EJKF>=LHJP?587CK:9AHN NM:i:0 CS:Z:G0320000121033022010011030032211310 CQ:Z:7811)2:*.++5</:3+43924*))/:,6&29)2/
+1831_576_266 16 phiX 279 255 35M * 0 0 TAGATATGAGTCACATTTTGTTCATGGTAGAGATT 6;*<NGC9=TWH2<P=+#.P]IDV]\SUZVW[^_[ NM:i:1 CS:Z:A0322223101312011300311121221333223 CQ:Z:<@@?=;<?7=@>9,>@1$&&89$/:>7'3178%&6
+1831_576_603 16 phiX 1575 255 35M * 0 0 ACATTATGGGTCTGCAAGCTGCTTATGCTAATTTG 8PMKX]PIR\`ZJO]_[HGZ_XOW\Z]LPb\RIS_ NM:i:0 CS:Z:C1003032313302312320131221001330311 CQ:Z:@@46=@C.??<A79@@;-<@@>29B?>55<B7598
+1831_576_655 16 phiX 3291 255 35M * 0 0 CTTGCTGCTGCATTTCCTGAGCTTAATGCTTGGGA %06ESGLVW^JATXW73V][JCT_]G?Q[_XYa`\ NM:i:1 CS:Z:T2001023130302322122200313123123102 CQ:Z:=@AA9@@<6*>@@5/<@>9'=;>7+@?9>/9;+,%
+1831_576_815 0 phiX 5185 255 35M * 0 0 CGGAGTGCTTAATCCAACTTACCAAGCTGGGTTAC NP]^WV]^`^ZZWX^_]][ZWKFQPA?FSTQPKD. NM:i:0 CS:Z:C3022113203032010120310102321001031 CQ:Z:<3>@?9>@?B=>=;>A???=>:25=4.25?6<57.
+1831_576_882 0 phiX 5052 255 35M * 0 0 GCTAAAGGTCTAGGAGCTAAAGAATGGAACAACTC PGTVV^YMQ]]VNT]ZWXQ;7LYVPKIRXTTLNU8 NM:i:0 CS:Z:G3230020122320223230022031020110122 CQ:Z:?26?8?@:4>@>96??<<=5'1<>9846=<9<1>8
+1831_576_898 0 phiX 517 255 35M * 0 0 GGATTGCTACTGACCGCTCTCGTGCTCGTCGCTGC \_bTPa`\ZY]WOMW`YYLL]VNS^]SSLES][J. NM:i:0 CS:Z:G0230132312121033222231132231233213 CQ:Z:=@@C2?C>?<>@886B?;?.??87=B<8<15??=.
+1831_576_923 0 phiX 1049 255 35M * 0 0 CATCTTGGCTTCCTTGCTGGTCAGATTGGTCGTCT LCBEMWHCNQTTNSXUNLTVUKAKV[TMRRURIJ7 NM:i:0 CS:Z:C1322010320202013210121223010123122 CQ:Z:76.51=;.699<96>;;49<;;11;<@59:9=647
+1831_576_1131 16 phiX 4060 255 35M * 0 0 TTGAGGCTTGTGGCATTTCTACTCTTTCTCAATCC <MJBDSMK>BWZI2FPGKEOI<PWVQ?KNN>>SC@ NM:i:1 CS:Z:G0233122200222132200313011102302210 CQ:Z:104@#@/@,4>9?2+?1571@',>=;(759;*92<
+1831_576_1289 16 phiX 1898 255 35M * 0 0 ATTCAGTACCTTAACGCTAAAGGTGCTTTGACTTA 0DBK[ONJ9GWSQ@;@CINYOHKU_VQZ_aRNYTX NM:i:0 CS:Z:T3021210023110200323310302013121203 CQ:Z:@9<>1B@@;7@@663==28,5':8<<,.=2>>.50
+1831_576_1367 0 phiX 1838 255 35M * 0 0 GAGCATGGCACTATGTTTACTCTTGCGCTTGTTCG ]^_[Y]_\\[[[X\]]^]WRXZXZZXSROMXVNN7 NM:i:0 CS:Z:G2231310311233110031222013332011023 CQ:Z:??@@<>@@=@<@<=@>@??9:?<=>=<8;59@787
+1831_576_1416 0 phiX 4521 255 35M * 0 0 ATTCAGCGTTTGATGAATGCAATGCGACAGGCTCA 1AYL;>>I[F4JG@CBSURK<KUQB,AZRJCFPW@ NM:i:0 CS:Z:A3021233100123120313103133211203221 CQ:Z:+';?..1.<@'.=+6.5?7<0-?7;(%=>56.98@
+1831_576_1605 0 phiX 5208 255 35M * 0 0 AAGCTGGGTTACGACGCGACGCCGTTCAACCAGAC Q[bb_]NKZYTVW[_XX^]]WTNQSA>BMPKNMB, NM:i:1 CS:Z:A0232100103132133321330310210101221 CQ:Z:6<@C@@>1;@:;<<@@9@???9<3?5-21=4877,
+1831_576_1729 16 phiX 5193 255 35M * 0 0 TTAATCCAACTTACCAAGCTGGGTTACGACGCGAC >ZL:FYXSQV]^ZSW^\TU\\[YKM_^][ZZZ^^^ NM:i:0 CS:Z:G1233312313010012320101302101023030 CQ:Z:@?@?<?<@>A?/==?>?7>?@8<?@>99;><+0=>
+1831_576_1982 16 phiX 5023 255 35M * 0 0 TTAACAAAAAGTCAGATATGGACCTTGCTGCTAAA @JFRDK\_\MQUU_UQST^ZX^[\XX[Y^LK^^_K NM:i:0 CS:Z:T0032312310201201333221212000011030 CQ:Z:,@@?@,A><@9@=?@9B=8<6@@6@2<A?>.7<+@
+1831_577_133 16 phiX 1713 255 35M * 0 0 TCATGCGCTCTAATCTCTGGGCATCTGGCTATGAT )&/8<NA=EPP;FEI]YY]_VFO]HDXOM[\[]SB NM:i:1 CS:Z:A3213323012231300122223032223331322 CQ:Z:/4@>>?=1?:+>@07@@><>@*<+1@15)96'2$)
+1831_577_281 16 phiX 4576 255 35M * 0 0 TTTTTGACACTCTCACGTTGGCTGACGACCGATTA ?XWE?WXSYURPOYWMJ@I[[RQ]VTXW\WR\[FC NM:i:0 CS:Z:T3032301231212301013112222111210000 CQ:Z:7-:B;8@=;>7@>4?=?+659?;5<7?;9@8(>:?
+1831_577_322 16 phiX 457 255 35M * 0 0 CTTCTGCCGTTTTGGATTTAACCGAAGATGATTTC /E?@MNMJTZM79LI;A5:H@IIHIFLPEDHQXWU NM:i:1 CS:Z:G2003213220230103303201000130312202 CQ:Z:9=;>4506;255464-<#7+194&2<?65968)7/
+1831_577_362 0 phiX 2152 255 35M * 0 0 ACTTATTCGCCACCATGATTATGACCAGTGTTTCC GS`XY^^[ZWMLTH>LEDHI?,3EQDAQPB5%(@6 NM:i:1 CS:Z:A1203302330110131230331210121110220 CQ:Z:62B?:@?@<?958=,3:,90:&'-99,6<5.($+6
+1831_577_382 16 phiX 4685 255 35M * 0 0 GGGTCGCAAGGCTAATGATTCACACGCCGACTGCT *>C@NMMI2333IUD=>FNE;1=LSE19JHEKMJB NM:i:0 CS:Z:A2312123033111120321303230201332100 CQ:Z:12957/:1))=76(*24;,3+:<.&.&-=1=2/5*
+1831_577_488 16 phiX 4947 255 35M * 0 0 TGGCCTGTTGATGCTAAAGGTGAGCCGCTTAAAGC @SEJPW]VUWXQLSPSOMXXXTVZQKJJSG59EKM NM:i:0 CS:Z:G3200302330322110200323132101120301 CQ:Z::48.,*>6566<?8=<=<2>6;94>;=9>@8924@
+1831_577_545 0 phiX 1710 255 35M * 0 0 TTGTCATGCGCTCTAATCTCTGGGCATCTGGCTAT [YWTWZY\_\OKHP[[WTY\VLDDFLTMBBMPOD- NM:i:0 CS:Z:T0112131333222303222210031322103233 CQ:Z:>><<9?<>?A<481@<@8==@76/61<95.5988-
+1831_577_637 0 phiX 4246 255 35M * 0 0 CTGTTACTGAGAAGTTAATGGATGAATTGGCACAA D8?2<WFB@DQC1-<OMOLMTSRM=6?G>,EYN?, NM:i:1 CS:Z:C2113312122202103031023120301031110 CQ:Z:8-,4#>:-6+:8,&(5;3=0>7=68&1/9&'?;4,
+1831_577_692 0 phiX 3904 255 35M * 0 0 TGTCTAGGAAATAACCGTCAGGATTGACACCCTCC aMK^^aIG`_^JJ_]]JI[Z]FCX[[XXTU[UKP< NM:i:0 CS:Z:T1122320200330103121202301211100220 CQ:Z:@B,@?@B(@A?@+@@>@+?=>@'=<@<=<9=?75<
diff -r 137d93848139 -r 032aae80bbb0 test-data/perm_out5.sam
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/perm_out5.sam Wed Mar 17 16:40:36 2010 -0400
@@ -0,0 +1,9 @@
+865_1106_310/2 16 chrM 16577 255 50M * 0 0 ACATGCTACTTTAATCAATAAAATTTCCATAGACAGGTATCCCCCTAGAT ;SSUV\VJNWVVWRX\X[[Z\Z[ZW\^XUV\_]]][WWVVYZ^^^_[\_^ NM:i:2 CS:Z:A3223200002331021122331020030003301230300213231311 CQ:Z:?@@=?A>A>==:=;=????A<;;>A<<?=>?<@<=@9:>9>:56A<;;9;
+869_1532_1255/1 113 chrM 3727 255 50M = 1979 1748 AGAAATATGTCTGACAAAAGAGTTACTTTGATAGAGTAAAACATAGAGGT ;RPTUVYQPSUSNSRTXTSVYVRVXWYUSVY_UOXZWRQRSUY[\^XQRW NM:i:3 CS:Z:A1022233110003122233210021301222000112122113330022 CQ:Z:=;8:?@=?;;9:8;=>;5A?;<8><<=:9><;9<=8;96>8<5==:<98;
+869_1532_1255/1 177 chrM 1979 255 50M = 3727 1748 GTATTAGAGGCACTGCCTGCCCAGTGACATCTGTTTAAACGGCCGCGGTA <QNVYYSUWQPSXUTTRVTT^ZUWXXZ[]\ZYY[YXVVVX][XUVYYZ]` NM:i:0 CS:Z:T3103330303100300112231121121003120312113022230331 CQ:Z:@A=><>9=<@>;<;<==?;?<A=?<=<<:A>7>9:;:<=7:8@6><>96<
+889_1337_1562/2 16 chrM 1951 255 50M * 0 0 ACCAAAAACATCACCTCTAGCATTCCCAGTATTAGAGGCACTGCCTGCCC 8PVXVWTRRQPRWQRZ[VORVVWWUOQZ[YUY]WZ^]`^\\]`a^]`[[] NM:i:2 CS:Z:G0031203121130222303312100203132322201123110000101 CQ:Z:=A;A@>AA@>?>A@>A:>@:<>>=5;;=;<;88?=>5=;899:9<<;>98
+891_252_1590/1 65 chrM 15434 255 50M = 97 15337 ACCCAAAGCTGAAATTCTACTTAAACTATTCCTTGATTTCCTCCCCTAAA \^VTXUY[[^YY[[XX]^_^VUWZ]]]\ZYY[]]_[VWWRQPTWTTNQX< NM:i:2 CS:Z:A1001002321200302231203001233020201230020220002300 CQ:Z:<A>9<=9A;A><>>>;>@?A>9=;@>@>?<><@>@@<;=;8:7>:;:5=<
+891_252_1590/1 129 chrM 97 255 50M = 15434 15337 TAGTTATTAATAAAATTACACATGCAAGTATCCGCACCCCAGTGAGAATG RRVYXYUSTSSTWXXYUWVUTRPMQUZZVW\\YYXXZVUVW^YUTPSWY= NM:i:2 CS:Z:T3210330303300030311113131021332033110001211222031 CQ:Z:8;8?;><::;9;:>;><:>9=8;68:<?<;=@===<=>9=:>A9=89;==
+892_582_183/1 16 chrM 14089 255 50M * 0 0 AAAATAAACACAATATATGTCATCATTATTCCCACGTGGAATCTAACCAC 9QNLRTQOSWUSUVTXXTTXWVVUWYVRTWXVX[\\ZVWYWVXZXYWUYX NM:i:0 CS:Z:G1101032230201131100203303123121133333011110033000 CQ:Z:;><:><=>;<<>:=>?>>;<=;:9><<:=:>;:;>;:=9;;=799<7699
+932_1836_1806/1 113 chrM 3723 255 50M = 2434 1289 CATAAGAAATATGTCTGACAAAAGAGTTACTTTGATAGAGTAAAACATAG >RNSUWYYQQVSVXVZ[XZ^YUZ[XXXWSQZ^WUXXX\XVXVYYVVVVUT NM:i:2 CS:Z:C2331100031222332100213012220001121221133300220331 CQ:Z:;:<;<;<><;>9@=<=<:>A:8<<=<=?<:@?<=?<;>9;<6<><<::5>
+932_1836_1806/1 177 chrM 2434 255 50M = 3723 1289 GGTTTACGACCTCGATGTTGGATCAAGACATCCTAATGGTGCAACCGCTA @]ZZ[Z\_WU\XW\WY^Z\]]#!\^`_]\^^]]Z\`^^_\^aaa``_Z\a NM:i:1 CS:Z:T3233010131101303202311220122201011323220123130010 CQ:Z:AA<?A@AAAA>?A>A@=>@>A>??A@?>>@>@=>A9?>:?>8@@=>>=>@
diff -r 137d93848139 -r 032aae80bbb0 tool-data/perm_base_index.loc.sample
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tool-data/perm_base_index.loc.sample Wed Mar 17 16:40:36 2010 -0400
@@ -0,0 +1,27 @@
+#This is a sample file distributed with Galaxy that enables tools to
+#use a directory of PerM indexed sequences data files. You will need
+#to create these data files and then create a perm_base_index.loc file
+#similar to this one (store it in this directory) that points to
+#the directories in which those files are stored. The perm_base_index.loc
+#file has this format (white space characters are TAB characters):
+#
+#<build_seed_readlength> <file_base>
+#
+#Because each PerM index is built with a specific seed and a specific read
+#length, this needs to be specified so the user can choose the appropriate
+#one. So, for example, if you had phiX indexed with seed F3 and read length
+#50, and stored in /depot/data/galaxy/phiX/perm_index/,
+#then the perm_base_index.loc entry would look something like this:
+#
+#phiX_F3_50 /depot/data/galaxy/phiX/perm_index/phiX_base_F3_50.index
+#
+#and your /depot/data/galaxy/phiX/perm_index/ directory
+#would contain the file phiX_base_F3_50.index:
+#
+#Your perm_base_index.loc file should include an entry per line for each
+#index set you have stored. For example:
+#
+#phiX_F3_50 /depot/data/galaxy/phiX/perm_index/phiX_base_F3_50.index
+#phiX_F4_50 /depot/data/galaxy/phiX/perm_index/phiX_base_F3_50.index
+#hg19_F3_50 /depot/data/galaxy/hg19/perm_index/hg19_base_F3_50.index
+#hg19_F4_50 /depot/data/galaxy/hg19/perm_index/hg19_base_F3_50.index
diff -r 137d93848139 -r 032aae80bbb0 tool-data/perm_color_index.loc.sample
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tool-data/perm_color_index.loc.sample Wed Mar 17 16:40:36 2010 -0400
@@ -0,0 +1,27 @@
+#This is a sample file distributed with Galaxy that enables tools to
+#use a directory of PerM indexed sequences data files. You will need
+#to create these data files and then create a perm_color_index.loc file
+#similar to this one (store it in this directory) that points to
+#the directories in which those files are stored. The perm_color_index.loc
+#file has this format (white space characters are TAB characters):
+#
+#<build_seed_readlength> <file_base>
+#
+#Because each PerM index is built with a specific seed and a specific read
+#length, this needs to be specified so the user can choose the appropriate
+#one. So, for example, if you had phiX indexed with seed F3 and read length
+#50, and stored in /depot/data/galaxy/phiX/perm_index/,
+#then the perm_color_index.loc entry would look something like this:
+#
+#phiX_F3_50 /depot/data/galaxy/phiX/perm_index/phiX_color_F3_50.index
+#
+#and your /depot/data/galaxy/phiX/perm_index/ directory
+#would contain the file phiX_color_F3_50.index:
+#
+#Your perm_color_index.loc file should include an entry per line for each
+#index set you have stored. For example:
+#
+#phiX_F3_50 /depot/data/galaxy/phiX/perm_index/phiX_color_F3_50.index
+#phiX_F4_50 /depot/data/galaxy/phiX/perm_index/phiX_color_F3_50.index
+#hg19_F3_50 /depot/data/galaxy/hg19/perm_index/hg19_color_F3_50.index
+#hg19_F4_50 /depot/data/galaxy/hg19/perm_index/hg19_color_F3_50.index
diff -r 137d93848139 -r 032aae80bbb0 tool_conf.xml.sample
--- a/tool_conf.xml.sample Tue Mar 16 18:54:23 2010 -0400
+++ b/tool_conf.xml.sample Wed Mar 17 16:40:36 2010 -0400
@@ -60,7 +60,7 @@
<tool file="filters/joiner.xml" />
<tool file="filters/compare.xml"/>
<tool file="new_operations/subtract_query.xml"/>
- <tool file="stats/grouping.xml" />
+ <tool file="stats/grouping.xml" />
</section>
<section name="Convert Formats" id="convert">
<tool file="filters/axt_to_concat_fasta.xml" />
@@ -215,6 +215,7 @@
<tool file="sr_mapping/bwa_wrapper.xml" />
<tool file="metag_tools/megablast_wrapper.xml" />
<tool file="metag_tools/megablast_xml_parser.xml" />
+ <tool file="sr_mapping/PerM.xml" />
</section>
<section name="NGS: SAM Tools" id="samtools">
<tool file="samtools/sam_bitwise_flag_filter.xml" />
diff -r 137d93848139 -r 032aae80bbb0 tools/sr_mapping/PerM.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/sr_mapping/PerM.xml Wed Mar 17 16:40:36 2010 -0400
@@ -0,0 +1,368 @@
+<tool id="PerM" name="Map with PerM" version="1.0.0">
+ <description>for SOLiD and Illumina</description>
+ <!-- works with PerM version 0.2.6 -->
+ <command>
+PerM
+#if $s.sourceOfRef.refSource == "history":
+ $s.sourceOfRef.ref
+#else:
+ $s.sourceOfRef.index.value
+#end if
+#if $s.mate.singleOrPairs == "single":
+ $s.mate.reads
+#else:
+ -1 $s.mate.reads1 -2 $s.mate.reads2
+ -U $s.mate.upperbound
+ -L $s.mate.lowerbound
+ $s.mate.excludeAmbiguousPairs
+#end if
+#if $s.space == "color":
+ --readFormat "csfastq"
+#else:
+ --readFormat "fastq"
+#end if
+#if $int($str($valAlign)) >= 0:
+ -v $valAlign
+#end if
+#if $align.options == "full":
+ --seed $align.seed
+ -$align.alignments
+ #if $str($align.delimiter) != "None":
+ --delimiter $align.delimiter
+ #end if
+ -T $align.sTrimL
+ $align.includeReadsWN
+ $align.statsOnly
+ $align.ignoreQS
+#end if
+#if $str($bUnmappedRead) == "true" and $s.space == "color":
+ -u $unmappedReadOutCS
+#elif $str($bUnmappedRead) == "true" and $s.space == "base":
+ -u $unmappedReadOut
+#end if
+-o $output --outputFormat sam --noSamHeader | tr '\r' '\n' | tr -cd "[:print:]\t\n " | grep "Reads\|Sub0\|Pairs\|single" | sed 's/.*Reads:,//' | sed 's/\/.*dat,_ Sub0/Sub0/'
+ </command>
+ <inputs>
+ <conditional name="s">
+ <param name="space" label="Is your data color space (SOLiD) or base space (Illumina)?" type="select">
+ <option value="color">Color space</option>
+ <option value="base">Base space</option>
+ </param>
+ <when value="color">
+ <conditional name="sourceOfRef">
+ <param name="refSource" label="Will you provide your own reference file from the history or use a built-in index?" type="select">
+ <option value="indexed">Built-in index</option>
+ <option value="history">Fasta file from history</option>
+ </param>
+ <when value="indexed">
+ <param name="index" type="select" label="Select a reference genome (with seed and read length)" help="if your genome of interest is not listed - contact Galaxy team">
+ <options from_file="perm_color_index.loc">
+ <column name="value" index="1" />
+ <column name="name" index="0" />
+ </options>
+ </param>
+ </when>
+ <when value="history">
+ <param name="ref" format="fasta" type="data" label="Reference" />
+ </when>
+ </conditional>
+ <conditional name="mate">
+ <param name="singleOrPairs" label="Mate-paired?" type="select">
+ <option value="single">Single-end</option>
+ <option value="paired">Mate pairs</option>
+ </param>
+ <when value="single">
+ <param format="fastqcssanger" name="reads" type="data" label="Reads" />
+ </when>
+ <when value="paired">
+ <param name="reads1" format="fastqcssanger" label="Forward FASTQ file" type="data" />
+ <param name="reads2" format="fastqcssanger" label="Reverse FASTQ file" type="data" />
+ <param label="Upperbound of pairs separation (-U)" name="upperbound" type="integer" size="8" value="100000" />
+ <param label="Lowerbound of pairs separation (-L)" name="lowerbound" type="integer" size="8" value="0" />
+ <param label="Exclude ambiguous pairs (-e)" name="excludeAmbiguousPairs" type="boolean" checked="false" truevalue="-e" falsevalue="" />
+ </when>
+ </conditional>
+ </when>
+ <when value="base">
+ <conditional name="sourceOfRef">
+ <param name="refSource" label="Will you provide your own reference file from the history or use a built-in index?" type="select">
+ <option value="indexed">Built-in index</option>
+ <option value="history">Fasta file from history</option>
+ </param>
+ <when value="indexed">
+ <param name="index" type="select" label="Select a reference genome with seed and read length" help="if your genome of interest is not listed - contact Galaxy team">
+ <options from_file="perm_base_index.loc">
+ <column name="value" index="1" />
+ <column name="name" index="0" />
+ </options>
+ </param>
+ </when>
+ <when value="history">
+ <param name="ref" format="fasta" type="data" label="Reference" />
+ </when>
+ </conditional>
+ <conditional name="mate">
+ <param name="singleOrPairs" label="Mate-paired?" type="select">
+ <option value="single">Single-end</option>
+ <option value="paired">Mate pairs</option>
+ </param>
+ <when value="single">
+ <param format="fastqsanger" name="reads" type="data" label="Reads" />
+ </when>
+ <when value="paired">
+ <param name="reads1" format="fastqsanger" label="Forward FASTQ file" type="data" />
+ <param name="reads2" format="fastqsanger" label="Reverse FASTQ file" type="data" />
+ <param label="Upperbound of pairs separation (-U)" name="upperbound" type="integer" size="8" value="100000" />
+ <param label="Lowerbound of pairs separation (-L)" name="lowerbound" type="integer" size="8" value="0" />
+ <param label="Exclude ambiguous pairs (-e)" name="excludeAmbiguousPairs" type="boolean" checked="false" truevalue="-e" falsevalue="" />
+ </when>
+ </conditional>
+ </when>
+ </conditional>
+ <param label="Maximum number of mismatches permitted in one end of full read (-v)" name="valAlign" type="integer" size="5" value="2" />
+ <conditional name="align">
+ <param help="Use default setting or specify full parameters list" label="PerM settings to use" name="options" type="select">
+ <option value="preSet">Commonly used</option>
+ <option value="full">Full parameter list</option>
+ </param>
+ <when value="preSet"/>
+ <when value="full">
+ <param label="Whether or not to report all valid alignments per read (-A/-B/-E)" name="alignments" type="select">
+ <option value="A">Report all valid alignments</option>
+ <option value="B">Report the best alignments in terms of number of mismatches</option>
+ <option value="E">Report only uniquely mapped reads</option>
+ </param>
+ <param label="Choose the seed full sensitive to different number of mismatches (--seed)" name="seed" type="select" >
+ <option value="F2">2 mismatches</option>
+ <option value="S11">1 SNP + 1 color error</option>
+ <option value="F3">3 mismatches</option>
+ <option value="F4">4 mismatches</option>
+ </param>
+ <param label="Choose the delimiter to identify read name (--delimiter)" name="delimiter" type="select">
+ <option value="None">Tab/Space/Comma</option>
+ <option value=":">Colon</option>
+ <option value="_">Underscore</option>
+ </param>
+ <param label="Use the first n bases of each read for alignment (-T)" name="sTrimL" type="integer" size="5" value="50" />
+ <param name="includeReadsWN" type="boolean" checked="true" truevalue="--includeReadsWN" falsevalue="" label="Include reads with 'N' or '.' by encoding '.' as 3, 'N' as 'A' (--includeReadsWN)" />
+ <param name="statsOnly" type="boolean" checked="false" truevalue="--statsOnly" falsevalue="" label="output mapping stats only. Don't output alignments (--statsOnly)" />
+ <param name="ignoreQS" type="boolean" checked="false" truevalue="--ignoreQS" falsevalue="" label="Ignore quality scores (--ignoreQS)" />
+ </when>
+ </conditional> <!-- options -->
+ <param name="bUnmappedRead" type="select" label="Output the unmapped reads (-u)">
+ <option value="true">Yes</option>
+ <option value="false">No</option>
+ </param>
+ </inputs>
+ <outputs>
+ <data name="output" format="sam"/>
+ <data name="unmappedReadOut" format="fastqsanger">
+ <filter>bUnmappedRead == "true" and s["space"] == "base"</filter>
+ </data>
+ <data name="unmappedReadOutCS" format="fastqcssanger">
+ <filter>bUnmappedRead == "true" and s["space"] == "color"</filter>
+ </data>
+ </outputs>
+ <tests>
+ <test>
+ <!--
+ PerM command:
+ PerM test-data/phiX.fasta 50 +seed F3 -m -s phiX_F3_50.index +readFormat .fastq
+ PerM phiX_F3_50.index -1 test-data/perm_in1.fastqsanger -2 test-data/perm_in2.fastqsanger -U 100000 -L 0 -e +readFormat .fastq -v 0 +seed F2 -A -T 50 +includeReadsWN -o perm_out1.sam +outputFormat sam +noSamHeader | tr '\r' '\n' | tr -cd "[:print:]\t\n " | grep "Reads\|Sub0\|Pairs\|single" | sed 's/.*Reads:,//' | sed 's/\/.*dat,_ Sub0/Sub0/'
+ You need to replace the + with 2 dashes.
+ -->
+ <param name="space" value="base" />
+ <param name="refSource" value="indexed" />
+ <param name="index" value="phiX_F3_50" />
+ <param name="singleOrPairs" value="paired" />
+ <param name="reads1" value="perm_in1.fastqsanger" ftype="fastqsanger" />
+ <param name="reads2" value="perm_in2.fastqsanger" ftype="fastqsanger" />
+ <param name="upperbound" value="100000" />
+ <param name="lowerbound" value="0" />
+ <param name="excludeAmbiguousPairs" value="true" />
+ <param name="valAlign" value="0" />
+ <param name="options" value="full" />
+ <param name="alignments" value="A" />
+ <param name="seed" value="F2" />
+ <param name="delimiter" value="None" />
+ <param name="sTrimL" value="50" />
+ <param name="includeReadsWN" value="true" />
+ <param name="statsOnly" value="false" />
+ <param name="ignoreQS" value="false" />
+ <param name="bUnmappedRead" value="false" />
+ <output name="output" file="perm_out1.sam" ftype="sam" />
+ </test>
+ <test>
+ <!--
+ PerM command:
+ PerM test-data/chr_m.fasta test-data/perm_in3.fastqsanger +readFormat .fastq -v 2 -u perm_out3.fastqsanger -o perm_out2.sam +outputFormat sam +noSamHeader | tr '\r' '\n' | tr -cd "[:print:]\t\n " | grep "Reads\|Sub0\|Pairs\|single" | sed 's/.*Reads:,//' | sed 's/\/.*dat,_ Sub0/Sub0/'
+ You need to replace the + with 2 dashes.
+ -->
+ <param name="space" value="base" />
+ <param name="refSource" value="history" />
+ <param name="ref" value="chr_m.fasta" ftype="fasta" />
+ <param name="singleOrPairs" value="single" />
+ <param name="reads" value="perm_in3.fastqsanger" ftype="fastqsanger" />
+ <param name="valAlign" value="2" />
+ <param name="options" value="preSet" />
+ <param name="bUnmappedRead" value="true" />
+ <output name="output" file="perm_out2.sam" ftype="sam" />
+ <output name="unmappedReadOut" file="perm_out3.fastqsanger" ftype="fastqsanger" />
+ </test>
+ <test>
+ <!--
+ PerM command:
+ PerM test-data/phiX.fasta test-data/perm_in4.fastqcssanger +readFormat .csfastq -v 1 -o perm_out4.sam +outputFormat sam +noSamHeader | tr '\r' '\n' | tr -cd "[:print:]\t\n " | grep "Reads\|Sub0\|Pairs\|single" | sed 's/.*Reads:,//' | sed 's/\/.*dat,_ Sub0/Sub0/'
+ You need to replace the + with 2 dashes.
+ -->
+ <param name="space" value="color" />
+ <param name="refSource" value="history" />
+ <param name="ref" value="phiX.fasta" ftype="fasta" />
+ <param name="singleOrPairs" value="single" />
+ <param name="reads" value="perm_in4.fastqcssanger" ftype="fastqcssanger" />
+ <param name="valAlign" value="1" />
+ <param name="options" value="preSet" />
+ <param name="bUnmappedRead" value="false" />
+ <output name="output" file="perm_out4.sam" ftype="sam" />
+ </test>
+ <test>
+ <!--
+ PerM command:
+ PerM equCab2.fasta 50 +seed F4 -m -s equCab2_F3_50.index +readFormat .csfastq
+ PerM equCab2_F3_50.index -1 test-data/perm_in5.fastqcssanger -2 test-data/perm_in6.fastqcssanger -U 90000 -L 10000 +readFormat .csfastq -v 3 -o perm_out5.sam +outputFormat sam +noSamHeader | tr '\r' '\n' | tr -cd "[:print:]\t\n " | grep "Reads\|Sub0\|Pairs\|single" | sed 's/.*Reads:,//' | sed 's/\/.*dat,_ Sub0/Sub0/'
+ You need to replace the + with 2 dashes.
+ hg19.fasta needs to be supplied.
+ -->
+ <param name="space" value="color" />
+ <param name="refSource" value="indexed" />
+ <param name="index" value="equCab2_chrM_F3_50" />
+ <param name="singleOrPairs" value="paired" />
+ <param name="reads1" value="perm_in5.fastqcssanger" ftype="fastqcssanger" />
+ <param name="reads2" value="perm_in6.fastqcssanger" ftype="fastqcssanger" />
+ <param name="upperbound" value="90000" />
+ <param name="lowerbound" value="10000" />
+ <param name="excludeAmbiguousPairs" value="false" />
+ <param name="valAlign" value="3" />
+ <param name="options" value="preSet" />
+ <param name="bUnmappedRead" value="false" />
+ <output name="output" file="perm_out5.sam" ftype="sam" />
+ </test>
+ </tests>
+ <help>
+**What it does**
+
+PerM is a short read aligner designed to be ultrafast with long SOLiD reads to the whole genome or transcriptions. PerM can be fully sensitive to alignments with up to four mismatches and highly sensitive to a higher number of mismatches.
+
+**Development team**
+
+PerM is developed by Ting Chen's group, Center of Excellence in Genomic Sciences at the University of Southern California. If you have any questions, please email yanghoch at usc.edu or check the `project page`__.
+
+ .. __: http://code.google.com/p/perm/
+
+**Citation**
+
+PerM: Efficient mapping of short sequencing reads with periodic full sensitive spaced seeds. Bioinformatics, 2009, 25 (19): 2514-2521.
+
+**Input**
+
+The input files are read files and a reference. Users can use the pre-indexed reference in Galaxy or upload their own reference.
+
+The uploaded reference file should be in the fasta format. Multiple sequences like transcriptions should be concatenated together separated by a header line that starts with the ">" character.
+
+Reads files must be in either fastqsanger or fastqcssanger format to use in PerM. However, there are several possible starting formats that can be converted to one of those two: fastq (any type), color-space fastq, fasta, csfasta, or csfasta+qualsolid.
+
+An uploaded base-space fastq file MUST be checked/transformed with FASTQGroomer tools in Galaxy to be converted to the fastqsanger format (this is true even if the original file is in Sanger format).
+
+Uploaded fasta and csfasta without quality score files can be transformed to fastqsanger by the FASTQGroomer, with pseudo quality scores added.
+
+An uploaded csfasta + qual pair can also be transformed into fastqcssanger by solid2fastq.
+
+**Outputs**
+
+The output mapping result is in SAM format, and has the following columns::
+
+ Column Description
+ -------- --------------------------------------------------------
+ 1 QNAME Query (pair) NAME
+ 2 FLAG bitwise FLAG
+ 3 RNAME Reference sequence NAME
+ 4 POS 1-based leftmost POSition/coordinate of clipped sequence
+ 5 MAPQ MAPping Quality (Phred-scaled)
+ 6 CIGAR extended CIGAR string
+ 7 MRNM Mate Reference sequence NaMe ('=' if same as RNAME)
+ 8 MPOS 1-based Mate POSition
+ 9 ISIZE Inferred insert SIZE
+ 10 SEQ query SEQuence on the same strand as the reference
+ 11 QUAL query QUALity (ASCII-33 gives the Phred base quality)
+ 12 OPT variable OPTional fields in the format TAG:VTYPE:VALUE
+ 12.1 NM Number of mismatches (SOLiD-specific)
+ 12.2 CS Reads in color space (SOLiD-specific)
+ 12.3 CQ Bases quality in color spacehidden="true" (SOLiD-specific)
+
+The flags are as follows::
+
+ Flag Description
+ ------ -------------------------------------
+ 0x0001 the read is paired in sequencing
+ 0x0002 the read is mapped in a proper pair
+ 0x0004 the query sequence itself is unmapped
+ 0x0008 the mate is unmapped
+ 0x0010 strand of the query (1 for reverse)
+ 0x0020 strand of the mate
+ 0x0040 the read is the first read in a pair
+ 0x0080 the read is the second read in a pair
+ 0x0100 the alignment is not primary
+
+Here is some sample output::
+
+ Qname FLAG Rname POS MAPQ CIAGR MRNM MPOS ISIZE SEQ QUAL NM CS CQ
+ 491_28_332_F3 16 ref-1 282734 255 35M * 0 0 AGTCAAACTCCGAATGCCAATGACTTATCCTTAGG #%%%%%%%!!%%%!!%%%%%%%%!!%%%%%%%%%% NM:i:3 CS:Z:C0230202330012130103100230121001212 CQ:Z:###################################
+ 491_28_332_F3 16 ref-1 269436 255 35M * 0 0 AGTCAAACTCCGAATGCCAATGACTTATCCTTAGG #%%%%%%%!!%%%!!%%%%%%%%!!%%%%%%%%%% NM:i:3 CS:Z:C0230202330012130103100230121001212 CQ:Z:###################################
+
+The user can check a checkbox for optional output containing the unmmaped reads in fastqsanger or fastqcssanger. The default is to produce it.
+
+**PerM parameter list**
+
+Below is a list of PerM command line options for PerM. Not all of these are relevant to Galaxy's implementation, but are included for completeness.
+
+The command for single-end::
+
+ PerM [ref_or_index] [read] [options]
+
+The command for paired-end::
+
+ PerM [ref_or_index] -1 [read1] -2 [read1] [options]
+
+The command-line options::
+
+ -A Output all alignments within the given mismatch threshold, end-to-end.
+ -B Output best alignments in terms of mismatches in the given mismatch threshold. [Default]
+ -E Output only the uniquely mapped reads in the given mismatch threshold.
+ -m Create the reference index, without reusing the saved index.
+ -s PATH Save the reference index to accelerate the mapping in the future. If PATH is not specified, the default path will be used.
+ -v INT Where INT is the number of mismatches allowed in one end. [Default=2]
+ -T INT Where INT is the length to truncate read length to, so 30 means use only first 30 bases (signals). Leave blank if the full read is meant to be used.
+ -o PATH Where PATH is for output the mapping of one read set. PerM's output are in .mapping or .sam format, determined by the ext name of PATH. Ex: -o out.sam will output in SAM format; -o out.mapping will output in .mapping format.
+ -d PATH Where PATH is the directory for multiple read sets.
+ -u PATH Print the fastq file of those unmapped reads to the file in PATH.
+ --noSamHeader Print no SAM header so it is convenient to concatenate multiple SAM output files.
+ --includeReadsWN Encodes N or "." with A or 3, respectively.
+ --statsOnly Output the mapping statistics in stdout only, without saving alignments to files.
+ --ignoreQS Ignore the quality scores in fastq or QUAL files.
+ --seed {F2 | S11 | F3 | F4} Specify the seed pattern, which has a specific full sensitivity. Check the algorithm page (link below) for seed patterns to balance the sensitivity and running time.
+ --readFormat {fasta | fastq | csfasta | csfastq} Read in reads in the specified format, instead of guessing according to the extension name.
+ --delimiter CHAR Which is a character used as the delimiter to separate the the read id, and the additional info in the line with ">" in fasta or csfasta.
+
+Paired reads options::
+
+ -e Exclude ambiguous paired.
+ -L INT Mate-paired separate lower bound.
+ -U INT Mate-paired separate upper bound.
+ -1 PATH The forward reads file path.
+ -2 PATH The reversed reads file path.
+
+See the PerM `algorithm page`__ for information on algorithms and seeds.
+
+ .. __: http://code.google.com/p/perm/wiki/Algorithms
+ </help>
+</tool>
diff -r 137d93848139 -r 032aae80bbb0 tools/sr_mapping/bwa_wrapper.xml
--- a/tools/sr_mapping/bwa_wrapper.xml Tue Mar 16 18:54:23 2010 -0400
+++ b/tools/sr_mapping/bwa_wrapper.xml Wed Mar 17 16:40:36 2010 -0400
@@ -110,8 +110,8 @@
BWA commands:
cp test-data/phiX.fasta phiX.fasta
bwa index -a is phiX.fasta
- bwa aln -n 0.04 -o 1 -e -1 -d 16 -i 5 -k 2 -t 4 -M 3 -O 11 -E 4 -R -N phiX.fasta test-data/bwa_wrapper_in1.fastq > bwa_wrapper_out1.sai
- bwa samse phiX.fasta bwa_wrapper_out1.sai test-data/bwa_wrapper_in1.fastq >> bwa_wrapper_out2.sam
+ bwa aln -n 0.04 -o 1 -e -1 -d 16 -i 5 -k 2 -t 4 -M 3 -O 11 -E 4 -R -N phiX.fasta test-data/bwa_wrapper_in1.fastq > bwa_wrapper_out2.sai
+ bwa samse phiX.fasta bwa_wrapper_out2.sai test-data/bwa_wrapper_in1.fastq >> bwa_wrapper_out2.sam
phiX.fasta is the prefix for the reference
remove the comment lines (beginning with '@') from the resulting sam file
-->
@@ -222,7 +222,6 @@
Flag Description
------ -------------------------------------
- Flag Description
0x0001 the read is paired in sequencing
0x0002 the read is mapped in a proper pair
0x0004 the query sequence itself is unmapped
1
0
details: http://www.bx.psu.edu/hg/galaxy/rev/137d93848139
changeset: 3541:137d93848139
user: Kanwei Li <kanwei(a)gmail.com>
date: Tue Mar 16 18:54:23 2010 -0400
description:
trackster:
- Use new array_tree summary structure. Feature tracks now display as intensity graphs at higher levels, and switch to detail levels when they fit the screen well
- Create array_tree indices for bed format to support the above (bam still in progress)
- Other fixes and improvements, including new icons
diffstat:
datatypes_conf.xml.sample | 2 +
lib/galaxy/datatypes/binary.py | 2 +-
lib/galaxy/datatypes/converters/bam_to_array_tree_converter.py | 45 +
lib/galaxy/datatypes/converters/bam_to_array_tree_converter.xml | 15 +
lib/galaxy/datatypes/converters/bed_to_array_tree_converter.py | 29 +
lib/galaxy/datatypes/converters/bed_to_array_tree_converter.xml | 14 +
lib/galaxy/datatypes/converters/wiggle_to_array_tree_converter.py | 12 +-
lib/galaxy/datatypes/converters/wiggle_to_array_tree_converter.xml | 2 +-
lib/galaxy/datatypes/interval.py | 4 +-
lib/galaxy/visualization/tracks/data/array_tree.py | 85 ++-
lib/galaxy/web/controllers/tracks.py | 73 +-
static/scripts/trackster.js | 242 ++++++---
static/trackster.css | 8 +-
templates/tracks/browser.mako | 27 +-
14 files changed, 401 insertions(+), 159 deletions(-)
diffs (1036 lines):
diff -r 861756e85b16 -r 137d93848139 datatypes_conf.xml.sample
--- a/datatypes_conf.xml.sample Tue Mar 16 16:03:28 2010 -0400
+++ b/datatypes_conf.xml.sample Tue Mar 16 18:54:23 2010 -0400
@@ -5,12 +5,14 @@
<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">
<converter file="bam_to_bai.xml" target_datatype="bai"/>
+ <converter file="bam_to_array_tree_converter.xml" target_datatype="array_tree"/>
<display file="ucsc/bam.xml" />
</datatype>
<datatype extension="bed" type="galaxy.datatypes.interval:Bed" display_in_upload="true">
<converter file="bed_to_gff_converter.xml" target_datatype="gff"/>
<converter file="interval_to_coverage.xml" target_datatype="coverage"/>
<converter file="bed_to_interval_index_converter.xml" target_datatype="interval_index"/>
+ <converter file="bed_to_array_tree_converter.xml" target_datatype="array_tree"/>
<converter file="bed_to_genetrack_converter.xml" target_datatype="genetrack"/>
<!-- <display file="ucsc/interval_as_bed.xml" /> -->
<display file="genetrack.xml" />
diff -r 861756e85b16 -r 137d93848139 lib/galaxy/datatypes/binary.py
--- a/lib/galaxy/datatypes/binary.py Tue Mar 16 16:03:28 2010 -0400
+++ b/lib/galaxy/datatypes/binary.py Tue Mar 16 18:54:23 2010 -0400
@@ -139,7 +139,7 @@
except:
return "Binary bam alignments file (%s)" % ( data.nice_size( dataset.get_size() ) )
def get_track_type( self ):
- return "ReadTrack", "bai"
+ return "ReadTrack", ["bai", "array_tree"]
class Binseq( Binary ):
"""Class describing a zip archive of binary sequence files"""
diff -r 861756e85b16 -r 137d93848139 lib/galaxy/datatypes/converters/bam_to_array_tree_converter.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/galaxy/datatypes/converters/bam_to_array_tree_converter.py Tue Mar 16 18:54:23 2010 -0400
@@ -0,0 +1,45 @@
+#!/usr/bin/env python
+
+from __future__ import division
+
+import sys
+from galaxy import eggs
+import pkg_resources; pkg_resources.require( "bx-python" ); pkg_resources.require( "pysam" )
+
+from pysam import csamtools
+from bx.arrays.array_tree import *
+
+BLOCK_SIZE = 1000
+
+class BamReader:
+ def __init__( self, input_fname, index_fname ):
+ self.bamfile = csamtools.Samfile( filename=input_fname, mode='rb', index_filename=index_fname )
+ self.iterator = self.bamfile.fetch()
+
+ def __iter__( self ):
+ return self
+
+ def __next__( self ):
+ while True:
+ read = self.iterator.next()
+ return read.rname, read.mpos, read.pos + read.rlen, None, mapq
+
+
+def main():
+
+ input_fname = sys.argv[1]
+ index_fname = sys.argv[2]
+ out_fname = sys.argv[3]
+
+ reader = BamReader( input_fname, index_fname )
+
+ # Fill array from reader
+ d = array_tree_dict_from_reader( reader, {}, block_size = BLOCK_SIZE )
+
+ for array_tree in d.itervalues():
+ array_tree.root.build_summary()
+
+ FileArrayTreeDict.dict_to_file( d, open( out_fname, "w" ), no_leaves=True )
+
+if __name__ == "__main__":
+ main()
\ No newline at end of file
diff -r 861756e85b16 -r 137d93848139 lib/galaxy/datatypes/converters/bam_to_array_tree_converter.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/galaxy/datatypes/converters/bam_to_array_tree_converter.xml Tue Mar 16 18:54:23 2010 -0400
@@ -0,0 +1,15 @@
+<tool id="CONVERTER_bam_to_array_tree_0" name="Convert BAM to Array Tree" version="1.0.0">
+<!-- <description>__NOT_USED_CURRENTLY_FOR_CONVERTERS__</description> -->
+ <command interpreter="python">bam_to_array_tree_converter.py $input1 $output1</command>
+ <inputs>
+ <page>
+ <param format="bam" name="input1" type="data" label="Choose BAM file"/>
+ <param format="bai" name="index" type="data" label="BAM index file"/>
+ </page>
+ </inputs>
+ <outputs>
+ <data format="array_tree" name="output1"/>
+ </outputs>
+ <help>
+ </help>
+</tool>
diff -r 861756e85b16 -r 137d93848139 lib/galaxy/datatypes/converters/bed_to_array_tree_converter.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/galaxy/datatypes/converters/bed_to_array_tree_converter.py Tue Mar 16 18:54:23 2010 -0400
@@ -0,0 +1,29 @@
+#!/usr/bin/env python
+
+from __future__ import division
+
+import sys
+from galaxy import eggs
+import pkg_resources; pkg_resources.require( "bx-python" )
+from bx.arrays.array_tree import *
+from bx.arrays.bed import BedReader
+
+BLOCK_SIZE = 1000
+
+def main():
+
+ input_fname = sys.argv[1]
+ out_fname = sys.argv[2]
+
+ reader = BedReader( open( input_fname ) )
+
+ # Fill array from reader
+ d = array_tree_dict_from_reader( reader, {}, block_size = BLOCK_SIZE )
+
+ for array_tree in d.itervalues():
+ array_tree.root.build_summary()
+
+ FileArrayTreeDict.dict_to_file( d, open( out_fname, "w" ), no_leaves=True )
+
+if __name__ == "__main__":
+ main()
\ No newline at end of file
diff -r 861756e85b16 -r 137d93848139 lib/galaxy/datatypes/converters/bed_to_array_tree_converter.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/galaxy/datatypes/converters/bed_to_array_tree_converter.xml Tue Mar 16 18:54:23 2010 -0400
@@ -0,0 +1,14 @@
+<tool id="CONVERTER_bed_to_array_tree_0" name="Convert BED to Array Tree" version="1.0.0">
+<!-- <description>__NOT_USED_CURRENTLY_FOR_CONVERTERS__</description> -->
+ <command interpreter="python">bed_to_array_tree_converter.py $input1 $output1</command>
+ <inputs>
+ <page>
+ <param format="bed" name="input1" type="data" label="Choose BED file"/>
+ </page>
+ </inputs>
+ <outputs>
+ <data format="array_tree" name="output1"/>
+ </outputs>
+ <help>
+ </help>
+</tool>
diff -r 861756e85b16 -r 137d93848139 lib/galaxy/datatypes/converters/wiggle_to_array_tree_converter.py
--- a/lib/galaxy/datatypes/converters/wiggle_to_array_tree_converter.py Tue Mar 16 16:03:28 2010 -0400
+++ b/lib/galaxy/datatypes/converters/wiggle_to_array_tree_converter.py Tue Mar 16 18:54:23 2010 -0400
@@ -6,7 +6,7 @@
from galaxy import eggs
import pkg_resources; pkg_resources.require( "bx-python" )
from bx.arrays.array_tree import *
-from bx.arrays.wiggle import IntervalReader
+from bx.arrays.wiggle import WiggleReader
BLOCK_SIZE = 100
@@ -15,17 +15,15 @@
input_fname = sys.argv[1]
out_fname = sys.argv[2]
- reader = IntervalReader( open( input_fname ) )
+ reader = WiggleReader( open( input_fname ) )
- # Fill array from wiggle
- d = array_tree_dict_from_wiggle_reader( reader, {}, block_size = BLOCK_SIZE )
+ # Fill array from reader
+ d = array_tree_dict_from_reader( reader, {}, block_size = BLOCK_SIZE )
for array_tree in d.itervalues():
array_tree.root.build_summary()
- f = open( out_fname, "w" )
- FileArrayTreeDict.dict_to_file( d, f )
- f.close()
+ FileArrayTreeDict.dict_to_file( d, open( out_fname, "w" ) )
if __name__ == "__main__":
main()
\ No newline at end of file
diff -r 861756e85b16 -r 137d93848139 lib/galaxy/datatypes/converters/wiggle_to_array_tree_converter.xml
--- a/lib/galaxy/datatypes/converters/wiggle_to_array_tree_converter.xml Tue Mar 16 16:03:28 2010 -0400
+++ b/lib/galaxy/datatypes/converters/wiggle_to_array_tree_converter.xml Tue Mar 16 18:54:23 2010 -0400
@@ -1,4 +1,4 @@
-<tool id="INDEXER_Wiggle_0" name="Index Wiggle for Track Viewer">
+<tool id="CONVERTER_Wiggle_0" name="Index Wiggle for Track Viewer">
<!-- Used internally to generate track indexes -->
<command interpreter="python">wiggle_to_array_tree_converter.py $input $output</command>
<inputs>
diff -r 861756e85b16 -r 137d93848139 lib/galaxy/datatypes/interval.py
--- a/lib/galaxy/datatypes/interval.py Tue Mar 16 16:03:28 2010 -0400
+++ b/lib/galaxy/datatypes/interval.py Tue Mar 16 18:54:23 2010 -0400
@@ -508,7 +508,7 @@
except: return False
def get_track_type( self ):
- return "FeatureTrack", "interval_index"
+ return "FeatureTrack", ["interval_index", "array_tree"]
class BedStrict( Bed ):
"""Tab delimited data in strict BED format - no non-standard columns allowed"""
@@ -959,7 +959,7 @@
resolution = max( resolution, 1 )
return resolution
def get_track_type( self ):
- return "LineTrack", "array_tree"
+ return "LineTrack", ["array_tree"]
class CustomTrack ( Tabular ):
"""UCSC CustomTrack"""
diff -r 861756e85b16 -r 137d93848139 lib/galaxy/visualization/tracks/data/array_tree.py
--- a/lib/galaxy/visualization/tracks/data/array_tree.py Tue Mar 16 16:03:28 2010 -0400
+++ b/lib/galaxy/visualization/tracks/data/array_tree.py Tue Mar 16 18:54:23 2010 -0400
@@ -7,14 +7,21 @@
from bx.arrays.array_tree import FileArrayTreeDict
except:
pass
-from math import floor, ceil, log
+from math import floor, ceil, log, pow
+import logging
+logger = logging.getLogger(__name__)
# Maybe this should be included in the datatype itself, so users can add their
# own types to the browser as long as they return the right format of data?
+SUMMARIZE_N = 200
+
class ArrayTreeDataProvider( object ):
def __init__( self, dataset, original_dataset ):
self.dataset = dataset
+
+ # def calc_resolution(self, start, end, density):
+ # return pow( 10, ceil( log( (end - start) / density , 10 ) ) )
def get_stats( self, chrom ):
f = open( self.dataset.file_name )
@@ -26,8 +33,26 @@
return "no data"
root_summary = chrom_array_tree.get_summary( 0, chrom_array_tree.levels )
+
+ level = chrom_array_tree.levels - 1
+ desired_summary = chrom_array_tree.get_summary( 0, level )
+ bs = chrom_array_tree.block_size ** level
+
+ frequencies = map(int, desired_summary.frequencies)
+ out = [ (i * bs, freq) for i, freq in enumerate(frequencies) ]
+
f.close()
- return { 'max': float( max(root_summary.maxs) ), 'min': float( min(root_summary.mins) ) }
+ return { 'max': float( max(root_summary.maxs) ), \
+ 'min': float( min(root_summary.mins) ), \
+ 'frequencies': out, \
+ 'total_frequency': sum(root_summary.frequencies) }
+
+ # Return None instead of NaN to pass jQuery 1.4's strict JSON
+ def float_nan(self, n):
+ if n != n: # NaN != NaN
+ return None
+ else:
+ return float(n)
def get_data( self, chrom, start, end, **kwargs ):
f = open( self.dataset.file_name )
@@ -44,28 +69,54 @@
start = int( start )
end = int( end )
resolution = max(1, ceil(float(kwargs['resolution'])))
-
- level = int( floor( log( resolution, block_size ) ) )
+
+ level = int( ceil( log( resolution, block_size ) ) )
level = max( level, 0 )
stepsize = block_size ** level
- step1 = stepsize * block_size
# Is the requested level valid?
assert 0 <= level <= chrom_array_tree.levels
- results = []
- for block_start in range( start, end, stepsize * block_size ):
- # print block_start
- # Return either data point or a summary depending on the level
- indexes = range( block_start, block_start + stepsize * block_size, stepsize )
- if level > 0:
- s = chrom_array_tree.get_summary( block_start, level )
- if s is not None:
- results.extend( zip( indexes, map( float, s.sums / s.counts ) ) )
+ if "frequencies" in kwargs:
+ if level <= 0:
+ # Low level enough to always display features
+ f.close()
+ return None
else:
- v = chrom_array_tree.get_leaf( block_start )
- if v is not None:
- results.extend( zip( indexes, map( float, v ) ) )
+ # Round to nearest bin
+ bin_start = start // (stepsize * block_size) * (stepsize * block_size)
+
+ indexes = range( bin_start, (bin_start + stepsize * block_size), stepsize )
+ summary = chrom_array_tree.get_summary( bin_start, level )
+ if summary:
+ results = zip( indexes, map( int, summary.frequencies ) )
+ filtered = filter(lambda tup: tup[0] >= start and tup[0] <= end, results)
+ sums = 0
+ max_f = 0
+ for tup in filtered:
+ sums += tup[1]
+ max_f = max(max_f, tup[1])
+
+ if max_f > 10000:
+ f.close()
+ return filtered, int(sums), float(sums)/len(filtered)
+ f.close()
+ return None
+
+ else:
+ results = []
+ for block_start in range( start, end, stepsize * block_size ):
+ # print block_start
+ # Return either data point or a summary depending on the level
+ indexes = range( block_start, block_start + stepsize * block_size, stepsize )
+ if level > 0:
+ s = chrom_array_tree.get_summary( block_start, level )
+ if s:
+ results.extend( zip( indexes, map( self.float_nan, s.sums / s.counts ) ) )
+ else:
+ l = chrom_array_tree.get_leaf( block_start )
+ if l:
+ results.extend( zip( indexes, map( self.float_nan, l ) ) )
f.close()
return results
diff -r 861756e85b16 -r 137d93848139 lib/galaxy/web/controllers/tracks.py
--- a/lib/galaxy/web/controllers/tracks.py Tue Mar 16 16:03:28 2010 -0400
+++ b/lib/galaxy/web/controllers/tracks.py Tue Mar 16 18:54:23 2010 -0400
@@ -98,11 +98,10 @@
hda_query = trans.sa_session.query( model.HistoryDatasetAssociation )
dataset = hda_query.get( dataset_id )
- track_type, indexer = dataset.datatype.get_track_type()
+ track_type, _ = dataset.datatype.get_track_type()
track = {
"track_type": track_type,
- "indexer": indexer,
"name": dataset.name,
"dataset_id": dataset.id,
"prefs": {},
@@ -134,10 +133,9 @@
except KeyError:
prefs = {}
dataset = hda_query.get( dataset_id )
- track_type, indexer = dataset.datatype.get_track_type()
+ track_type, _ = dataset.datatype.get_track_type()
tracks.append( {
"track_type": track_type,
- "indexer": indexer,
"name": dataset.name,
"dataset_id": dataset.id,
"prefs": simplejson.dumps(prefs),
@@ -187,41 +185,50 @@
return manifest
@web.json
- def data( self, trans, dataset_id, indexer, chrom, low, high, **kwargs ):
+ def data( self, trans, dataset_id, chrom, low, high, **kwargs ):
"""
Called by the browser to request a block of data
"""
- # Load the requested dataset
dataset = trans.sa_session.query( trans.app.model.HistoryDatasetAssociation ).get( dataset_id )
- # No dataset for that id
if not dataset or not chrom:
return messages.NO_DATA
- # Dataset is in error state, can't display
if dataset.state == trans.app.model.Job.states.ERROR:
return messages.ERROR
- # Dataset is still being generated
if dataset.state != trans.app.model.Job.states.OK:
return messages.PENDING
- # Determine what to return based on the type of track being drawn.
- converted_dataset_type = indexer
- converted_dataset = self.__dataset_as_type( trans, dataset, converted_dataset_type )
- if not converted_dataset:
- # No converter
- return messages.NO_CONVERTER
- # Need to check states again for the converted version
- if converted_dataset.state == model.Dataset.states.ERROR:
- return messages.ERROR
- if converted_dataset.state != model.Dataset.states.OK:
- return messages.PENDING
- # We have a dataset in the right format that is ready to use, wrap in
- # a data provider that knows how to access it
- data_provider = dataset_type_to_data_provider[ converted_dataset_type ]( converted_dataset, dataset )
+
+ track_type, indexes = dataset.datatype.get_track_type()
+ converted = dict([ (index, self.__dataset_as_type( trans, dataset, index )) for index in indexes ])
- # Return stats if we need them
- if 'stats' in kwargs: return data_provider.get_stats( chrom )
+ for index, converted_dataset in converted.iteritems():
+ if not converted_dataset:
+ return messages.NO_CONVERTER
- # Get the requested chunk of data
- return data_provider.get_data( chrom, low, high, **kwargs )
+ # Need to check states again for the converted version
+ if converted_dataset.state == model.Dataset.states.ERROR:
+ return messages.ERROR
+ if converted_dataset.state != model.Dataset.states.OK:
+ return messages.PENDING
+
+ if len(converted) > 1:
+ # Have to choose between array_tree and other provider
+ array_tree = ArrayTreeDataProvider( converted['array_tree'], dataset )
+ freqs = array_tree.get_data( chrom, low, high, frequencies=True, **kwargs )
+ if freqs is not None:
+ frequencies, sums, avg_f = freqs
+ return { "dataset_type": "array_tree", "data": frequencies, "sums": sums, "avg_f": avg_f }
+ dataset_type = "interval_index"
+ else:
+ dataset_type = converted.keys()[0]
+
+ data_provider = dataset_type_to_data_provider[ dataset_type ]( converted[dataset_type], dataset )
+
+ if 'stats' in kwargs:
+ data = data_provider.get_stats( chrom )
+ else:
+ data = data_provider.get_data( chrom, low, high, **kwargs )
+
+ return { "dataset_type": dataset_type, "data": data }
def __dataset_as_type( self, trans, dataset, type ):
"""
@@ -240,12 +247,11 @@
# See if converted dataset already exists
converted_datasets = [c for c in dataset.get_converted_files_by_type( type ) if c != None]
if converted_datasets:
- for d in converted_datasets:
- if d.state != 'error':
- return d
- else:
- return None
-
+ if converted_datasets[0].state != 'error':
+ return converted_datasets[0]
+ else:
+ return None
+
# Conversion is possible but hasn't been done yet, run converter here
# FIXME: this is largely duplicated from DefaultToolAction
assoc = model.ImplicitlyConvertedDatasetAssociation( parent = dataset, file_type = type, metadata_safe = False )
@@ -285,7 +291,6 @@
for track in decoded_payload:
tracks.append( { "dataset_id": str(track['dataset_id']),
"name": track['name'],
- "indexer": track['indexer'],
"track_type": track['track_type'],
"prefs": track['prefs']
} )
diff -r 861756e85b16 -r 137d93848139 static/scripts/trackster.js
--- a/static/scripts/trackster.js Tue Mar 16 16:03:28 2010 -0400
+++ b/static/scripts/trackster.js Tue Mar 16 18:54:23 2010 -0400
@@ -6,6 +6,7 @@
var DENSITY = 1000,
FEATURE_LEVELS = 10,
DATA_ERROR = "There was an error in indexing this dataset.",
+ DATA_NOCONVERTER = "A converter for this dataset is not installed. Please check your datatypes_conf.xml file.",
DATA_NONE = "No data for this chrom/contig.",
DATA_PENDING = "Currently indexing... please wait",
DATA_LOADING = "Loading data...",
@@ -77,6 +78,18 @@
}
});
+var Drawer = function() {};
+$.extend( Drawer.prototype, {
+ intensity: function(ctx, max, data) {
+
+
+ },
+
+});
+
+drawer = new Drawer();
+
+
var View = function( chrom, title, vis_id, dbkey ) {
this.vis_id = vis_id;
this.dbkey = dbkey;
@@ -124,6 +137,13 @@
}
}
},
+ reset: function() {
+ this.low = this.max_low;
+ this.high = this.max_high;
+ this.center = this.center = (this.max_high - this.max_low) / 2;
+ this.zoom_level = 0;
+ $(".yaxislabel").remove();
+ },
redraw: function(nodraw) {
this.span = this.max_high - this.max_low;
var span = this.span / Math.pow(this.zoom_factor, this.zoom_level),
@@ -156,20 +176,22 @@
$("#high").val( commatize(this.high) );
if (!nodraw) {
for ( var i = 0, len = this.tracks.length; i < len; i++ ) {
- this.tracks[i].draw();
+ if (this.tracks[i].enabled) {
+ this.tracks[i].draw();
+ }
}
for ( var i = 0, len = this.label_tracks.length; i < len; i++ ) {
this.label_tracks[i].draw();
}
}
},
- zoom_in: function ( point ) {
+ zoom_in: function ( point, container ) {
if (this.max_high === 0 || this.high - this.low < 30) {
return;
}
if ( point ) {
- this.center = point / $(document).width() * (this.high - this.low) + this.low;
+ this.center = point / container.width() * (this.high - this.low) + this.low;
}
this.zoom_level += 1;
this.redraw();
@@ -201,6 +223,7 @@
},
init_each: function(params, success_fn) {
var track = this;
+ track.enabled = false;
track.data_queue = {};
track.tile_cache.clear();
track.data_cache.clear();
@@ -209,21 +232,25 @@
track.container_div.removeClass("nodata error pending");
if (track.view.chrom) {
- $.getJSON( data_url, params, function ( data ) {
- if (!data || data == "error") {
+ $.getJSON( data_url, params, function (result) {
+ if (!result || result === "error") {
track.container_div.addClass("error");
track.content_div.text(DATA_ERROR);
- } else if (data.length === 0 || data == "no data") {
+ } else if (result === "no converter") {
+ track.container_div.addClass("error");
+ track.content_div.text(DATA_NOCONVERTER);
+ } else if ( (result.data && result.data.length === 0) || result === "no data") {
track.container_div.addClass("nodata");
track.content_div.text(DATA_NONE);
- } else if (data == "pending") {
+ } else if (result === "pending") {
track.container_div.addClass("pending");
track.content_div.text(DATA_PENDING);
setTimeout(function() { track.init(); }, 5000);
} else {
track.content_div.text("");
track.content_div.css( "height", track.height_px + "px" );
- success_fn(data);
+ track.enabled = true;
+ success_fn(result);
track.draw();
}
});
@@ -318,12 +345,11 @@
}
});
-var LineTrack = function ( name, dataset_id, indexer, prefs ) {
+var LineTrack = function ( name, dataset_id, prefs ) {
this.track_type = "LineTrack";
Track.call( this, name, $("#viewport") );
TiledTrack.call( this );
- this.indexer = indexer;
this.height_px = 100;
this.container_div.addClass( "line-track" );
this.dataset_id = dataset_id;
@@ -339,9 +365,9 @@
track_id = track.view.tracks.indexOf(track);
track.vertical_range = undefined;
- this.init_each({ stats: true, indexer: track.indexer,
- chrom: track.view.chrom, low: null, high: null,
- dataset_id: track.dataset_id }, function(data) {
+ this.init_each({ stats: true, chrom: track.view.chrom, low: null, high: null,
+ dataset_id: track.dataset_id }, function(result) {
+ data = result.data;
if ( isNaN(parseFloat(track.prefs.min_value)) || isNaN(parseFloat(track.prefs.max_value)) ) {
track.prefs.min_value = data.min;
track.prefs.max_value = data.max;
@@ -350,6 +376,7 @@
$('#track_' + track_id + '_maxval').val(track.prefs.max_value);
}
track.vertical_range = track.prefs.max_value - track.prefs.min_value;
+ track.total_frequency = data.total_frequency;
// Draw y-axis labels if necessary
$('#linetrack_' + track_id + '_minval').remove();
@@ -373,17 +400,29 @@
if (!track.data_queue[key]) {
track.data_queue[key] = true;
- $.getJSON( data_url, { "indexer": this.indexer, "chrom": this.view.chrom,
+ /*$.getJSON( data_url, { "chrom": this.view.chrom,
"low": low, "high": high, "dataset_id": this.dataset_id,
- "resolution": this.view.resolution, }, function (data) {
+ "resolution": this.view.resolution }, function (data) {
track.data_cache.set(key, data);
delete track.data_queue[key];
track.draw();
+ });*/
+ $.ajax({ 'url': data_url, 'dataType': 'json', 'data': { "chrom": this.view.chrom,
+ "low": low, "high": high, "dataset_id": this.dataset_id,
+ "resolution": this.view.resolution },
+ success: function (result) {
+ data = result.data;
+ track.data_cache.set(key, data);
+ delete track.data_queue[key];
+ track.draw();
+ }, error: function(r, t, e) {
+ console.log(r, t, e);
+ }
});
}
},
draw_tile: function( resolution, tile_index, parent_element, w_scale ) {
- if (this.vertical_range === undefined) { // We don't have the necessary information yet
+ if (this.vertical_range === undefined) {
return;
}
@@ -398,6 +437,7 @@
}
var data = this.data_cache.get(key);
+
canvas.css( {
position: "absolute",
top: 0,
@@ -411,31 +451,56 @@
min_value = this.prefs.min_value,
max_value = this.prefs.max_value,
vertical_range = this.vertical_range,
+ total_frequency = this.total_frequency,
height_px = this.height_px;
ctx.beginPath();
- for ( var i = 0; i < data.length - 1; i++ ) {
+
+ // for intensity, calculate delta x in pixels to for width of box
+ var delta_x_px = Math.ceil((data[1][0] - data[0][0]) * w_scale);
+ var mode = "line";
+
+ for ( var i = 0; i < data.length; i++ ) {
var x = data[i][0] - tile_low;
var y = data[i][1];
- // Missing data causes us to stop drawing
- if ( isNaN( y ) ) {
- in_path = false;
- } else {
- // Translate
+
+ if ( mode == "intensity" ) {
+ // DRAW INTENSITY
+ if (y === null) {
+ continue;
+ }
x = x * w_scale;
- // console.log(y, this.min_value, this.vertical_range, (y - this.min_value) / this.vertical_range * this.height_px);
if (y <= min_value) {
y = min_value;
} else if (y >= max_value) {
y = max_value;
}
- y = Math.round( height_px - (y - min_value) / vertical_range * height_px );
- // console.log(canvas.get(0).height, canvas.get(0).width);
- if ( in_path ) {
- ctx.lineTo( x, y );
+ y = Math.floor( (y - min_value) / vertical_range * 255 );
+ ctx.fillStyle = "rgb(" +y+ "," +y+ "," +y+ ")";
+ ctx.fillRect(x, 0, delta_x_px, 30);
+ }
+ else {
+ // Missing data causes us to stop drawing
+ if (y === null) {
+ in_path = false;
+ continue;
} else {
- ctx.moveTo( x, y );
- in_path = true;
+ // Translate
+ x = x * w_scale;
+ // console.log(y, this.min_value, this.vertical_range, (y - this.min_value) / this.vertical_range * this.height_px);
+ if (y <= min_value) {
+ y = min_value;
+ } else if (y >= max_value) {
+ y = max_value;
+ }
+ y = Math.round( height_px - (y - min_value) / vertical_range * height_px );
+ // console.log(canvas.get(0).height, canvas.get(0).width);
+ if ( in_path ) {
+ ctx.lineTo( x, y );
+ } else {
+ ctx.moveTo( x, y );
+ in_path = true;
+ }
}
}
}
@@ -471,12 +536,11 @@
}
});
-var FeatureTrack = function ( name, dataset_id, indexer, prefs ) {
+var FeatureTrack = function ( name, dataset_id, prefs ) {
this.track_type = "FeatureTrack";
Track.call( this, name, $("#viewport") );
TiledTrack.call( this );
- this.indexer = indexer;
this.height_px = 100;
this.container_div.addClass( "feature-track" );
this.dataset_id = dataset_id;
@@ -500,13 +564,16 @@
};
$.extend( FeatureTrack.prototype, TiledTrack.prototype, {
init: function() {
- var track = this;
- this.init_each({ indexer: track.indexer, low: track.view.max_low,
+ var track = this,
+ key = track.view.max_low + '_' + track.view.max_high;
+ this.init_each({ low: track.view.max_low,
high: track.view.max_high, dataset_id: track.dataset_id,
- chrom: track.view.chrom }, function (data) {
- track.values = data;
- track.calc_slots();
- track.slots = track.zo_slots;
+ chrom: track.view.chrom, resolution: this.view.resolution }, function (result) {
+ track.data_cache.set(key, result);
+ // track.values = result;
+ // track.calc_slots();
+ // track.slots = track.zo_slots;
+ track.draw();
});
},
get_data: function( low, high ) {
@@ -515,10 +582,10 @@
if (!track.data_queue[key]) {
track.data_queue[key] = true;
- $.getJSON( data_url, { indexer: track.indexer, chrom: track.view.chrom,
+ $.getJSON( data_url, { chrom: track.view.chrom,
low: low, high: high, dataset_id: track.dataset_id,
- include_blocks: true }, function (data) {
- track.data_cache.set(key, data);
+ include_blocks: true, resolution: this.view.resolution }, function (result) {
+ track.data_cache.set(key, result);
// console.log("datacache", track.data_cache.get(key));
delete track.data_queue[key];
track.draw();
@@ -612,52 +679,48 @@
},
draw_tile: function( resolution, tile_index, parent_element, w_scale ) {
- if (!this.values) {
- return;
- }
var tile_low = tile_index * DENSITY * resolution,
tile_high = ( tile_index + 1 ) * DENSITY * resolution,
tile_span = DENSITY * resolution;
// console.log("drawing " + tile_index);
- // Once we zoom in enough, show name labels
var data, slots, required_height;
- if (w_scale > this.show_labels_scale) {
- if (!this.showing_details) {
- this.showing_details = true;
+
+ /*for (var k in this.data_cache.obj_cache) {
+ var k_split = k.split("_"), k_low = k_split[0], k_high = k_split[1];
+ if (k_low <= tile_low && k_high >= tile_high) {
+ data = this.data_cache.get(k);
+ break;
}
- for (var k in this.data_cache.obj_cache) {
- var k_split = k.split("_"), k_low = k_split[0], k_high = k_split[1];
- if (k_low <= tile_low && k_high >= tile_high) {
- data = this.data_cache.get(k);
- break;
- }
- }
- if (!data) {
- this.data_queue[ [tile_low, tile_high] ] = true;
- this.get_data(tile_low, tile_high);
- return;
- }
- // Calculate new slots incrementally for this new chunk of data and update height if necessary
- required_height = this.incremental_slots( this.view.zoom_res, data ) * this.vertical_detail_px + 15;
+ }*/
+
+ // var k = this.view.low + '_' + this.view.high;
+ var k = tile_low + '_' + tile_high;
+ var data = this.data_cache.get(k);
+
+ if (!data) {
+ this.data_queue[ [tile_low, tile_high] ] = true;
+ this.get_data(tile_low, tile_high);
+ return;
+ }
+
+ if (data.dataset_type == "array_tree") {
+ required_height = 30;
+ // Blah
+ } else {
+ // Calculate new slots incrementally for this new chunk of data and update height if necessary
+ required_height = this.incremental_slots( this.view.zoom_res, data.data ) * this.vertical_detail_px + 15;
// console.log(required_height);
slots = this.inc_slots[this.view.zoom_res];
- } else {
- if (this.showing_details) {
- this.showing_details = false;
- }
- required_height = this.height_px;
- slots = this.zo_slots;
- data = this.values;
}
-
+
// console.log(tile_low, tile_high, tile_length, w_scale);
var width = Math.ceil( tile_span * w_scale ),
new_canvas = $("<canvas class='tile'></canvas>"),
label_color = this.prefs.label_color,
block_color = this.prefs.block_color,
left_offset = this.left_offset,
- showing_details = this.showing_details,
- y_scale = (this.showing_details ? this.vertical_detail_px : this.vertical_nodetail_px);
+ // showing_details = this.showing_details,
+ y_scale = this.vertical_detail_px;
new_canvas.css({
position: "absolute",
@@ -671,7 +734,30 @@
ctx.fillStyle = this.prefs.block_color;
ctx.font = this.default_font;
ctx.textAlign = "right";
-
+ var min_color = 150;
+
+ if (data.dataset_type == "array_tree") {
+ var points = data.data;
+ var sums = data.sums;
+ var avg_f = data.avg_f;
+ var delta_x_px = Math.ceil((points[1][0] - points[0][0]) * w_scale);
+
+ for ( var i = 0, len = points.length; i < len; i++ ) {
+ var x = Math.ceil( (points[i][0] - tile_low) * w_scale );
+ var y = points[i][1];
+
+ if (!y) {
+ continue;
+ }
+ y = Math.floor( min_color + (y - avg_f)/sums * min_color );
+ ctx.fillStyle = "rgb(" +y+ "," +y+ "," +y+ ")";
+ ctx.fillRect(x + left_offset, 0, delta_x_px, 20);
+ }
+ parent_element.append( new_canvas );
+ return new_canvas;
+ }
+
+ var data = data.data;
var j = 0;
for (var i = 0, len = data.length; i < len; i++) {
var feature = data[i];
@@ -685,10 +771,10 @@
thick_start = Math.floor( Math.max(0, (feature.thick_start - tile_low) * w_scale) );
thick_end = Math.ceil( Math.min(width, (feature.thick_end - tile_low) * w_scale) );
}
- if (!showing_details) {
+ // if (!showing_details) {
// Non-detail levels
- ctx.fillRect(f_start + left_offset, y_center + 5, f_end - f_start, 1);
- } else {
+ // ctx.fillRect(f_start + left_offset, y_center + 5, f_end - f_start, 1);
+ // } else {
// Showing labels, blocks, details
if (feature.start > tile_low) {
ctx.fillStyle = label_color;
@@ -743,7 +829,7 @@
ctx.fillStyle = prefs.block_color;
}
}
- }
+ // }
j++;
}
}
@@ -772,12 +858,12 @@
}
});
-var ReadTrack = function ( name, dataset_id, indexer, prefs ) {
+var ReadTrack = function ( name, dataset_id, prefs ) {
this.track_type = "ReadTrack";
this.tile_cache = new Cache(CACHED_TILES_FEATURE);
Track.call( this, name, $("#viewport") );
TiledTrack.call( this );
- FeatureTrack.call( this, name, dataset_id, indexer, prefs );
+ FeatureTrack.call( this, name, dataset_id, prefs );
};
$.extend( ReadTrack.prototype, TiledTrack.prototype, FeatureTrack.prototype, {
diff -r 861756e85b16 -r 137d93848139 static/trackster.css
--- a/static/trackster.css Tue Mar 16 16:03:28 2010 -0400
+++ b/static/trackster.css Tue Mar 16 18:54:23 2010 -0400
@@ -30,13 +30,7 @@
}
#nav-controls a {
- color: white;
- padding: 0.1em 0.4em;
- margin: 0 0;
- text-decoration: none;
- background: black;
- -webkit-border-radius: 1em;
- -moz-border-radius: 1em;
+ padding: 5px 0.4em;
}
#overview {
diff -r 861756e85b16 -r 137d93848139 templates/tracks/browser.mako
--- a/templates/tracks/browser.mako Tue Mar 16 16:03:28 2010 -0400
+++ b/templates/tracks/browser.mako Tue Mar 16 18:54:23 2010 -0400
@@ -51,8 +51,12 @@
</select>
<input id="low" size="12" />:<input id="high" size="12" />
<input type="hidden" name="id" value="${config.get('vis_id', '')}" />
- <a href="#" onclick="javascript:view.zoom_in();view.redraw();">+</a>
- <a href="#" onclick="javascript:view.zoom_out();view.redraw();">-</a>
+ <a href="#" onclick="javascript:view.zoom_in();view.redraw();">
+ <img src="${h.url_for('/static/images/fugue/magnifier-zoom.png')}" />
+ </a>
+ <a href="#" onclick="javascript:view.zoom_out();view.redraw();">
+ <img src="${h.url_for('/static/images/fugue/magnifier-zoom-out.png')}" />
+ </a>
</form>
<div id="debug" style="float: right"></div>
</div>
@@ -91,7 +95,7 @@
view = new View( "${config.get('chrom')}", "${config.get('title') | h}", "${config.get('vis_id')}", "${config.get('dbkey')}" );
%for track in config.get('tracks'):
view.add_track(
- new ${track["track_type"]}( "${track['name'] | h}", ${track['dataset_id']}, "${track['indexer']}", ${track['prefs']} )
+ new ${track["track_type"]}( "${track['name'] | h}", ${track['dataset_id']}, ${track['prefs']} )
);
%endfor
init();
@@ -131,7 +135,7 @@
$("#content").bind("mousewheel", function( e, delta ) {
if (delta > 0) {
- view.zoom_in(e.pageX);
+ view.zoom_in(e.pageX, $("#viewport-container"));
} else {
view.zoom_out();
}
@@ -139,7 +143,7 @@
});
$("#content").bind("dblclick", function( e ) {
- view.zoom_in(e.pageX);
+ view.zoom_in(e.pageX, $("#viewport-container"));
});
// To let the overview box be draggable
@@ -210,13 +214,13 @@
var td = track_data;
switch(track_data.track_type) {
case "LineTrack":
- new_track = new LineTrack( track_data.name, track_data.dataset_id, track_data.indexer, track_data.prefs );
+ new_track = new LineTrack( track_data.name, track_data.dataset_id, track_data.prefs );
break;
case "FeatureTrack":
- new_track = new FeatureTrack( track_data.name, track_data.dataset_id, track_data.indexer, track_data.prefs );
+ new_track = new FeatureTrack( track_data.name, track_data.dataset_id, track_data.prefs );
break;
case "ReadTrack":
- new_track = new ReadTrack( track_data.name, track_data.dataset_id, track_data.indexer, track_data.prefs );
+ new_track = new ReadTrack( track_data.name, track_data.dataset_id, track_data.prefs );
break;
}
view.add_track(new_track);
@@ -245,7 +249,6 @@
payload.push( {
"track_type": track.track_type,
- "indexer": track.indexer,
"name": track.name,
"dataset_id": track.dataset_id,
"prefs": track.prefs
@@ -286,6 +289,7 @@
return v.chrom === view.chrom;
})[0];
view.max_high = found.len;
+ view.reset();
view.redraw(true);
for (var track_id in view.tracks) {
@@ -307,13 +311,12 @@
del_icon = $('<a href="#" class="icon-button delete" />'),
edit_icon = $('<a href="#" class="icon-button edit" />'),
body = $('<div class="historyItemBody"></div>'),
- checkbox = $('<input type="checkbox" checked="checked"></input>').attr("id", "track_" + track_id + "title"),
li = $('<li class="sortable"></li>').attr("id", "track_" + track_id),
div = $('<div class="historyItemContainer historyItem"></div>'),
- editable = $('<div style="display:none"></div>');
+ editable = $('<div style="display:none"></div>').attr("id", "track_" + track_id + "_editable");
edit_icon.bind("click", function() {
- editable.toggle();
+ $("#track_" + track_id + "_editable").toggle();
});
del_icon.bind("click", function() {
1
0

18 Mar '10
details: http://www.bx.psu.edu/hg/galaxy/rev/861756e85b16
changeset: 3540:861756e85b16
user: Greg Von Kuster <greg(a)bx.psu.edu>
date: Tue Mar 16 16:03:28 2010 -0400
description:
Fix for editing library templates, add a new functional test to cover the scenario, and some code cleanup.
diffstat:
lib/galaxy/web/controllers/library_admin.py | 2 +-
lib/galaxy/web/controllers/library_common.py | 1 -
templates/library/common/browse_library.mako | 10 +-
test/base/test_db_util.py | 9 ---
test/base/twilltestcase.py | 20 +++++-
test/functional/test_library_features.py | 84 +++++++++++++++++++--------
6 files changed, 82 insertions(+), 44 deletions(-)
diffs (366 lines):
diff -r 4a670e8f4248 -r 861756e85b16 lib/galaxy/web/controllers/library_admin.py
--- a/lib/galaxy/web/controllers/library_admin.py Tue Mar 16 15:32:05 2010 -0400
+++ b/lib/galaxy/web/controllers/library_admin.py Tue Mar 16 16:03:28 2010 -0400
@@ -34,7 +34,7 @@
template='/admin/library/grid.mako'
default_sort_key = "name"
columns = [
- NameColumn( "Library Name",
+ NameColumn( "Name",
key="name",
model_class=model.Library,
link=( lambda library: dict( operation="browse", id=library.id ) ),
diff -r 4a670e8f4248 -r 861756e85b16 lib/galaxy/web/controllers/library_common.py
--- a/lib/galaxy/web/controllers/library_common.py Tue Mar 16 15:32:05 2010 -0400
+++ b/lib/galaxy/web/controllers/library_common.py Tue Mar 16 16:03:28 2010 -0400
@@ -1616,7 +1616,6 @@
response_redirect=web.url_for( controller='library_common',
action='edit_template',
cntrller=cntrller,
- use_panels=use_panels,
item_type=item_type,
library_id=library_id,
folder_id=folder_id,
diff -r 4a670e8f4248 -r 861756e85b16 templates/library/common/browse_library.mako
--- a/templates/library/common/browse_library.mako Tue Mar 16 15:32:05 2010 -0400
+++ b/templates/library/common/browse_library.mako Tue Mar 16 16:03:28 2010 -0400
@@ -445,11 +445,11 @@
%endif
%if cntrller == 'library_admin':
<a class="action-button" confirm="Click OK to delete the library named '${library.name}'." href="${h.url_for( controller='library_admin', action='delete_library_item', library_id=trans.security.encode_id( library.id ), item_id=trans.security.encode_id( library.id ), item_type='library' )}">Delete this data library</a>
- %endif
- %if show_deleted:
- <a class="action-button" href="${h.url_for( controller='library_common', action='browse_library', cntrller=cntrller, id=trans.security.encode_id( library.id ), use_panels=use_panels, show_deleted=False )}">Hide deleted items</a>
- %else:
- <a class="action-button" href="${h.url_for( controller='library_common', action='browse_library', cntrller=cntrller, id=trans.security.encode_id( library.id ), use_panels=use_panels, show_deleted=True )}">Show deleted items</a>
+ %if show_deleted:
+ <a class="action-button" href="${h.url_for( controller='library_common', action='browse_library', cntrller=cntrller, id=trans.security.encode_id( library.id ), use_panels=use_panels, show_deleted=False )}">Hide deleted items</a>
+ %else:
+ <a class="action-button" href="${h.url_for( controller='library_common', action='browse_library', cntrller=cntrller, id=trans.security.encode_id( library.id ), use_panels=use_panels, show_deleted=True )}">Show deleted items</a>
+ %endif
%endif
%elif cntrller == 'library_admin' and not library.purged:
<a class="action-button" href="${h.url_for( controller='library_admin', action='undelete_library_item', library_id=trans.security.encode_id( library.id ), item_id=trans.security.encode_id( library.id ), item_type='library', use_panels=use_panels )}">Undelete this data library</a>
diff -r 4a670e8f4248 -r 861756e85b16 test/base/test_db_util.py
--- a/test/base/test_db_util.py Tue Mar 16 15:32:05 2010 -0400
+++ b/test/base/test_db_util.py Tue Mar 16 16:03:28 2010 -0400
@@ -112,12 +112,3 @@
.all()
def refresh( obj ):
sa_session.refresh( obj )
-def set_library_permissions( in_list ):
- permissions_in = []
- permissions_out = []
- for k, v in galaxy.model.Library.permitted_actions.items():
- if k in in_list:
- permissions_in.append( k )
- else:
- permissions_out.append( k )
- return permissions_in, permissions_out
diff -r 4a670e8f4248 -r 861756e85b16 test/base/twilltestcase.py
--- a/test/base/twilltestcase.py Tue Mar 16 15:32:05 2010 -0400
+++ b/test/base/twilltestcase.py Tue Mar 16 16:03:28 2010 -0400
@@ -1630,7 +1630,6 @@
pass
def create_library( self, name='Library One', description='This is Library One', synopsis='Synopsis for Library One' ):
"""Create a new library"""
- self.home()
self.visit_url( "%s/library_admin/create_library" % self.url )
self.check_page_for_string( 'Create a new data library' )
tc.fv( "1", "name", name )
@@ -1640,10 +1639,25 @@
check_str = "The new library named '%s' has been created" % name
self.check_page_for_string( check_str )
self.home()
+ def edit_template( self, cntrller, item_type, library_id, folder_id='', ldda_id='', action='add_field',
+ field_name='', field_name_value='', field_help='', field_help_value='',
+ field_type='', field_type_value='' ):
+ """Edit the form fields defining a library template"""
+ self.visit_url( "%s/library_common/edit_template?cntrller=%s&item_type=%s&library_id=%s" % \
+ ( self.url, cntrller, item_type, library_id ) )
+ self.check_page_for_string( "Edit form definition" )
+ if action == 'add_field':
+ tc.submit( 'add_field_button' )
+ tc.fv( '1', field_name, field_name_value )
+ tc.fv( '1', field_help, field_help_value )
+ tc.fv( '1', field_type, field_type_value )
+ tc.submit( 'save_changes_button' )
+ self.check_page_for_string( "The template for this data library has been updated with your changes." )
+ if action == 'add_field':
+ self.check_page_for_string( field_name_value )
def library_info( self, cntrller, library_id, library_name, new_name='', new_description='', new_synopsis='',
ele_1_field_name='', ele_1_contents='', ele_2_field_name='', ele_2_contents='', check_str1='' ):
"""Edit information about a library, optionally using an existing template with up to 2 elements"""
- self.home()
self.visit_url( "%s/library_common/library_info?cntrller=%s&id=%s" % ( self.url, cntrller, library_id ) )
if check_str1:
self.check_page_for_string( check_str1 )
@@ -1866,7 +1880,7 @@
self.visit_url( url )
self.check_page_for_string( 'Upload a directory of files' )
if check_str1:
- self.check_page_for_strin( check_str1 )
+ self.check_page_for_string( check_str1 )
tc.fv( "1", "folder_id", folder_id )
tc.fv( "1", "file_type", file_type )
tc.fv( "1", "dbkey", dbkey )
diff -r 4a670e8f4248 -r 861756e85b16 test/functional/test_library_features.py
--- a/test/functional/test_library_features.py Tue Mar 16 15:32:05 2010 -0400
+++ b/test/functional/test_library_features.py Tue Mar 16 16:03:28 2010 -0400
@@ -9,21 +9,29 @@
global regular_user1
regular_user1 = get_user( 'test1(a)bx.psu.edu' )
assert regular_user1 is not None, 'Problem retrieving user with email "test1(a)bx.psu.edu" from the database'
+ global regular_user1_private_role
+ regular_user1_private_role = get_private_role( regular_user1 )
self.logout()
self.login( email='test2(a)bx.psu.edu' )
global regular_user2
regular_user2 = get_user( 'test2(a)bx.psu.edu' )
assert regular_user2 is not None, 'Problem retrieving user with email "test2(a)bx.psu.edu" from the database'
+ global regular_user2_private_role
+ regular_user2_private_role = get_private_role( regular_user2 )
self.logout()
self.login( email='test3(a)bx.psu.edu' )
global regular_user3
regular_user3 = get_user( 'test3(a)bx.psu.edu' )
assert regular_user3 is not None, 'Problem retrieving user with email "test3(a)bx.psu.edu" from the database'
+ global regular_user3_private_role
+ regular_user3_private_role = get_private_role( regular_user3 )
self.logout()
self.login( email='test(a)bx.psu.edu' )
global admin_user
admin_user = get_user( 'test(a)bx.psu.edu' )
assert admin_user is not None, 'Problem retrieving user with email "test(a)bx.psu.edu" from the database'
+ global admin_user_private_role
+ admin_user_private_role = get_private_role( admin_user )
def test_005_create_library( self ):
"""Testing creating a new library, then renaming it"""
# Logged in as admin_user
@@ -100,7 +108,6 @@
self.security.encode_id( library_one.id ),
library_one.name,
check_str1=contents )
- contents = '%s library contents' % form_one_field_label
contents_edited = contents + ' edited'
# Edit the contents and then save them
self.library_info( 'library_admin',
@@ -113,7 +120,25 @@
self.security.encode_id( library_one.id ),
library_one.name,
check_str1=contents_edited )
- def test_020_add_public_dataset_to_root_folder( self ):
+ def test_020_edit_template_admin_view( self ):
+ """Test editing the layout of a template from the Admin view"""
+ # Since there is only 1 field currently in the form definition, we'll add another
+ field_name = 'field_name_1'
+ field_name_value = 'Field 1'
+ field_help = 'field_helptext_1'
+ field_help_value = 'Field 1 help'
+ field_type = 'field_type_1'
+ field_type_value = 'TextArea'
+ self.edit_template( 'library_admin',
+ 'library',
+ self.security.encode_id( library_one.id ),
+ field_name=field_name,
+ field_name_value=field_name_value,
+ field_help=field_help,
+ field_help_value=field_help_value,
+ field_type=field_type,
+ field_type_value=field_type_value )
+ def test_025_add_public_dataset_to_root_folder( self ):
"""Testing adding a public dataset to the root folder, making sure library template is inherited"""
# Logged in as admin_user
message = 'Testing adding a public dataset to the root folder'
@@ -145,7 +170,7 @@
self.security.encode_id( ldda_one.id ),
ldda_one.name,
check_str1=template_contents )
- def test_025_add_new_folder_to_root_folder( self ):
+ def test_030_add_new_folder_to_root_folder( self ):
"""Testing adding a folder to a library root folder"""
# logged in as admin_user
root_folder = library_one.root_folder
@@ -177,7 +202,7 @@
self.security.encode_id( library_one.id ),
field_name=form_one_field_name,
contents=template_contents )
- def test_030_add_subfolder_to_folder( self ):
+ def test_035_add_subfolder_to_folder( self ):
"""Testing adding a folder to a library folder"""
# logged in as admin_user
name = "Folder One's Subfolder"
@@ -208,7 +233,7 @@
self.security.encode_id( library_one.id ),
field_name=form_one_field_name,
contents=template_contents )
- def test_035_add_2nd_new_folder_to_root_folder( self ):
+ def test_040_add_2nd_new_folder_to_root_folder( self ):
"""Testing adding a 2nd folder to a library root folder"""
# logged in as admin_user
root_folder = library_one.root_folder
@@ -226,7 +251,7 @@
self.security.encode_id( library_one.id ),
check_str1=name,
check_str2=description )
- def test_040_add_public_dataset_to_root_folders_2nd_subfolder( self ):
+ def test_045_add_public_dataset_to_root_folders_2nd_subfolder( self ):
"""Testing adding a public dataset to the root folder's 2nd sub-folder"""
# Logged in as admin_user
message = "Testing adding a public dataset to the folder named %s" % folder_two.name
@@ -258,7 +283,7 @@
self.security.encode_id( ldda_two.id ),
ldda_two.name,
check_str1=template_contents )
- def test_045_add_2nd_public_dataset_to_root_folders_2nd_subfolder( self ):
+ def test_050_add_2nd_public_dataset_to_root_folders_2nd_subfolder( self ):
"""Testing adding a 2nd public dataset to the root folder's 2nd sub-folder"""
# Logged in as admin_user
message = "Testing adding a 2nd public dataset to the folder named %s" % folder_two.name
@@ -290,7 +315,7 @@
self.security.encode_id( ldda_three.id ),
ldda_three.name,
check_str1=template_contents )
- def test_050_copy_dataset_from_history_to_subfolder( self ):
+ def test_055_copy_dataset_from_history_to_subfolder( self ):
"""Testing copying a dataset from the current history to a subfolder"""
# logged in as admin_user
self.new_history()
@@ -314,7 +339,7 @@
ldda_four.name,
check_str1=form_one_field_name,
not_displayed=contents )
- def test_055_editing_dataset_attribute_info( self ):
+ def test_060_editing_dataset_attribute_info( self ):
"""Testing editing a library dataset's attribute information"""
# logged in as admin_user
new_ldda_name = '4.bed ( version 1 )'
@@ -335,7 +360,7 @@
ldda_four.name,
check_str1=form_one_field_name,
not_displayed=contents )
- def test_060_uploading_new_dataset_version( self ):
+ def test_065_uploading_new_dataset_version( self ):
"""Testing uploading a new version of a library dataset"""
# logged in as admin_user
message = 'Testing uploading a new version of a dataset'
@@ -384,22 +409,32 @@
self.browse_library( 'library_admin',
self.security.encode_id( library_one.id ),
not_displayed=ldda_four.name )
- def test_065_upload_directory_of_files_from_libraries_view( self ):
+ def test_070_upload_directory_of_files_from_libraries_view( self ):
"""Testing uploading a directory of files to a root folder from the Data Libraries view"""
# logged in as admin_user
# admin_user will not have the option to upload a directory of files from the
# Libraries view since a sub-directory named the same as their email is not contained
- # in the configured user_library_import_dir. However, since members of role_one have
- # the LIBRARY_ADD permission, we can test this feature as regular_user1 or regular_user3
+ # in the configured user_library_import_dir ( in the test_data directory, only regular_user1
+ # and regular_user3 have directories ). We'll need to give these 2 user LIBRARY_ADD permission
+ # on library_one to test this feature.
+ permissions_in = [ 'LIBRARY_ADD' ]
+ permissions_out = [ 'LIBRARY_ACCESS', 'LIBRARY_MODIFY', 'LIBRARY_MANAGE' ]
+ role_ids = '%s,%s' % ( str( regular_user1_private_role.id ), str( regular_user3_private_role.id ) )
+ # Role one members are: admin_user, regular_user1, regular_user3. Each of these users will be permitted for
+ # LIBRARY_ACCESS, LIBRARY_ADD, LIBRARY_MODIFY, LIBRARY_MANAGE on this library and it's contents.
+ self.library_permissions( self.security.encode_id( library_one.id ),
+ library_one.name,
+ role_ids,
+ permissions_in,
+ permissions_out )
self.logout()
+ # Now that we have permissions set on the library, we can proceed to test uploading files
self.login( email=regular_user1.email )
message = 'Uploaded all files in test-data/users/test1...'
# Since regular_user1 does not have any sub-directories contained within her configured
# user_library_import_dir, the only option in her server_dir select list will be the
# directory named the same as her email
check_str_after_submit = "Added 1 datasets to the library '%s' (each is selected)." % library_one.root_folder.name
- # TODO: gvk( 3/12/10 )this is broken, so commenting until I have time to discover why...
- """
self.upload_directory_of_files( 'library',
self.security.encode_id( library_one.id ),
self.security.encode_id( library_one.root_folder.id ),
@@ -426,8 +461,7 @@
self.security.encode_id( library_one.id ),
check_str1=regular_user3.email,
check_str2=message )
- """
- def test_070_download_archive_of_library_files( self ):
+ def test_075_download_archive_of_library_files( self ):
"""Testing downloading an archive of files from the library"""
# logged in as regular_user3
self.logout()
@@ -439,7 +473,7 @@
format=format )
self.check_archive_contents( archive, ( ldda_one, ldda_two ) )
os.remove( archive )
- def test_075_mark_dataset_deleted( self ):
+ def test_080_mark_dataset_deleted( self ):
"""Testing marking a library dataset as deleted"""
# Logged in as admin_user
self.delete_library_item( self.security.encode_id( library_one.id ),
@@ -449,7 +483,7 @@
self.browse_library( 'library_admin',
self.security.encode_id( library_one.id ),
not_displayed=ldda_two.name )
- def test_080_display_and_hide_deleted_dataset( self ):
+ def test_085_display_and_hide_deleted_dataset( self ):
"""Testing displaying and hiding a deleted library dataset"""
# Logged in as admin_user
self.browse_library( 'library_admin',
@@ -459,7 +493,7 @@
self.browse_library( 'library_admin',
self.security.encode_id( library_one.id ),
not_displayed=ldda_two.name )
- def test_085_mark_folder_deleted( self ):
+ def test_090_mark_folder_deleted( self ):
"""Testing marking a library folder as deleted"""
# Logged in as admin_user
self.delete_library_item( self.security.encode_id( library_one.id ),
@@ -469,7 +503,7 @@
self.browse_library( 'library_admin',
self.security.encode_id( library_one.id ),
not_displayed=folder_two.name )
- def test_090_mark_folder_undeleted( self ):
+ def test_095_mark_folder_undeleted( self ):
"""Testing marking a library folder as undeleted"""
# Logged in as admin_user
self.undelete_library_item( self.security.encode_id( library_one.id ),
@@ -482,7 +516,7 @@
self.security.encode_id( library_one.id ),
check_str1=folder_two.name,
not_displayed=ldda_two.name )
- def test_095_mark_library_deleted( self ):
+ def test_100_mark_library_deleted( self ):
"""Testing marking a library as deleted"""
# Logged in as admin_user
# First mark folder_two as deleted to further test state saving when we undelete the library
@@ -496,7 +530,7 @@
item_type='library' )
self.browse_libraries_admin( not_displayed1=library_one.name )
self.browse_libraries_admin( deleted=True, check_str1=library_one.name )
- def test_100_mark_library_undeleted( self ):
+ def test_105_mark_library_undeleted( self ):
"""Testing marking a library as undeleted"""
# Logged in as admin_user
self.undelete_library_item( self.security.encode_id( library_one.id ),
@@ -508,7 +542,7 @@
self.security.encode_id( library_one.id ),
check_str1=library_one.name,
not_displayed=folder_two.name )
- def test_105_purge_library( self ):
+ def test_110_purge_library( self ):
"""Testing purging a library"""
# Logged in as admin_user
self.delete_library_item( self.security.encode_id( library_one.id ),
@@ -547,7 +581,7 @@
raise AssertionError( 'The library_dataset id %s named "%s" has not been marked as deleted.' % \
( str( library_dataset.id ), library_dataset.name ) )
check_folder( library_one.root_folder )
- def test_110_no_library_template( self ):
+ def test_115_no_library_template( self ):
"""Test library features when library has no template"""
# Logged in as admin_user
name = "library features Library Two"
1
0

18 Mar '10
details: http://www.bx.psu.edu/hg/galaxy/rev/4a670e8f4248
changeset: 3539:4a670e8f4248
user: fubar: ross Lazarus at gmail period com
date: Tue Mar 16 15:32:05 2010 -0400
description:
Fix for 'add' action in act_on_multiple_datasets - and a warning message if any bogus action supplied - fixes issue #297
diffstat:
lib/galaxy/web/controllers/library_common.py | 7 +++++--
1 files changed, 5 insertions(+), 2 deletions(-)
diffs (31 lines):
diff -r aad7b294ffca -r 4a670e8f4248 lib/galaxy/web/controllers/library_common.py
--- a/lib/galaxy/web/controllers/library_common.py Tue Mar 16 15:09:22 2010 -0400
+++ b/lib/galaxy/web/controllers/library_common.py Tue Mar 16 15:32:05 2010 -0400
@@ -1257,7 +1257,7 @@
messagetype = 'error'
else:
ldda_ids = util.listify( ldda_ids )
- if action == 'import_to_history':
+ if action == 'import_to_history' or action == 'add':
history = trans.get_history()
if history is None:
# Must be a bot sending a request without having a history.
@@ -1308,7 +1308,7 @@
trans.sa_session.add( ld )
trans.sa_session.flush()
msg = "The selected datasets have been removed from this data library"
- else:
+ elif action in ['zip','tgz','tbz']:
error = False
killme = string.punctuation + string.whitespace
trantab = string.maketrans(killme,'_'*len(killme))
@@ -1416,6 +1416,9 @@
archive.wsgi_status = trans.response.wsgi_status()
archive.wsgi_headeritems = trans.response.wsgi_headeritems()
return archive.stream
+ else: # unknown action
+ msg = '### unknown action = %s in act_on_multiple_datasets' % action
+
return trans.response.send_redirect( web.url_for( controller='library_common',
action='browse_library',
cntrller=cntrller,
1
0
details: http://www.bx.psu.edu/hg/galaxy/rev/aad7b294ffca
changeset: 3538:aad7b294ffca
user: Kanwei Li <kanwei(a)gmail.com>
date: Tue Mar 16 15:09:22 2010 -0400
description:
Add magnifier icons for trackster
diffstat:
static/images/fugue/magnifier-zoom-out.png | 0
static/images/fugue/magnifier-zoom.png | 0
2 files changed, 0 insertions(+), 0 deletions(-)
diffs (4 lines):
diff -r 2fa5488a9b3e -r aad7b294ffca static/images/fugue/magnifier-zoom-out.png
Binary file static/images/fugue/magnifier-zoom-out.png has changed
diff -r 2fa5488a9b3e -r aad7b294ffca static/images/fugue/magnifier-zoom.png
Binary file static/images/fugue/magnifier-zoom.png has changed
1
0

18 Mar '10
details: http://www.bx.psu.edu/hg/galaxy/rev/2fa5488a9b3e
changeset: 3537:2fa5488a9b3e
user: Nate Coraor <nate(a)bx.psu.edu>
date: Tue Mar 16 14:07:42 2010 -0400
description:
Monkeypatch pkg_resources to put eggs at the beginning of the path instead of the end
diffstat:
lib/galaxy/__init__.py | 31 +++++++++++++++++++++++++++++++
1 files changed, 31 insertions(+), 0 deletions(-)
diffs (38 lines):
diff -r d776beca95f8 -r 2fa5488a9b3e lib/galaxy/__init__.py
--- a/lib/galaxy/__init__.py Tue Mar 16 12:00:10 2010 -0400
+++ b/lib/galaxy/__init__.py Tue Mar 16 14:07:42 2010 -0400
@@ -61,3 +61,34 @@
except:
pkg_resources._compatible_platforms = pkg_resources.compatible_platforms
pkg_resources.compatible_platforms = _compatible_platforms
+
+# patch to insert eggs at the beginning of sys.path instead of at the end
+def _insert_on(self, path, loc = None):
+ """Insert self.location in path before its nearest parent directory"""
+
+ loc = loc or self.location
+ if not loc:
+ return
+
+ nloc = pkg_resources._normalize_cached(loc)
+ npath= [(p and pkg_resources._normalize_cached(p) or p) for p in path]
+
+ if path is sys.path:
+ self.check_version_conflict()
+ path.insert(0, loc)
+
+ # remove dups
+ while 1:
+ try:
+ np = npath.index(nloc, 1)
+ except ValueError:
+ break
+ else:
+ del npath[np], path[np]
+
+ return
+try:
+ assert pkg_resources.Distribution._insert_on
+except:
+ pkg_resources.Distribution._insert_on = pkg_resources.Distribution.insert_on
+ pkg_resources.Distribution.insert_on = _insert_on
1
0

18 Mar '10
details: http://www.bx.psu.edu/hg/galaxy/rev/15fd40238cef
changeset: 3535:15fd40238cef
user: rc
date: Tue Mar 16 09:50:13 2010 -0400
description:
Fixes user info functional tests broken in changeset 3529:96ec861b4b6e
diffstat:
test/base/twilltestcase.py | 23 ++++++++++++-----------
1 files changed, 12 insertions(+), 11 deletions(-)
diffs (48 lines):
diff -r 447c059a096a -r 15fd40238cef test/base/twilltestcase.py
--- a/test/base/twilltestcase.py Mon Mar 15 15:06:14 2010 -0400
+++ b/test/base/twilltestcase.py Tue Mar 16 09:50:13 2010 -0400
@@ -806,17 +806,18 @@
self.visit_page( "user/create?user_info_select=%i&admin_view=False" % user_info_form_id )
else:
self.visit_page( "user/create?admin_view=False" )
+ print self.write_temp_file( self.last_page() )
self.check_page_for_string( "Create account" )
- tc.fv( "1", "email", email )
- tc.fv( "1", "password", password )
- tc.fv( "1", "confirm", password )
- tc.fv( "1", "username", username )
+ tc.fv( "2", "email", email )
+ tc.fv( "2", "password", password )
+ tc.fv( "2", "confirm", password )
+ tc.fv( "2", "username", username )
if user_info_forms == 'multiple':
self.check_page_for_string( "User type" )
for index, info_value in enumerate(user_info_values):
- tc.fv( "1", "field_%i" % index, info_value )
+ tc.fv( "2", "field_%i" % index, info_value )
tc.submit( "create_user_button" )
- self.check_page_for_string( "now logged in as %s" % email )
+ self.check_page_for_string( "ogged in as %s" % email )
def create_user_with_info_as_admin( self, email, password, username, user_info_forms, user_info_form_id, user_info_values ):
'''
This method registers a new user and also provides use info as an admin
@@ -827,14 +828,14 @@
else:
self.visit_page( "admin/users?operation=create" )
self.check_page_for_string( "Create account" )
- tc.fv( "1", "email", email )
- tc.fv( "1", "password", password )
- tc.fv( "1", "confirm", password )
- tc.fv( "1", "username", username )
+ tc.fv( "2", "email", email )
+ tc.fv( "2", "password", password )
+ tc.fv( "2", "confirm", password )
+ tc.fv( "2", "username", username )
if user_info_forms == 'multiple':
self.check_page_for_string( "User type" )
for index, info_value in enumerate(user_info_values):
- tc.fv( "1", "field_%i" % index, info_value )
+ tc.fv( "2", "field_%i" % index, info_value )
tc.submit( "create_user_button" )
self.check_page_for_string( "Created new user account (%s)" % email )
def edit_login_info( self, new_email, new_username ):
1
0