galaxy-dev
Threads by month
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
March 2010
- 36 participants
- 171 discussions
Hello Emeric,
Please send your questions to the galaxy mailing lists ( galaxy-bugs(a)bx.psu.ed, galaxy-dev(a)bx.psu.edu, galaxy-user(a)bx.psu.edu ) instead of private email addresses as you will be much more likely to get answers in a timely fashion.
Given the context of your question, I assume you want to point another UCSC-like "get data" tool to your mirror. If that is the case, simply copy the ~/tools/data_source/ucsc_tablebrowser.xml file to a different file name (e.g., my_mirror.xml) , and edit the following line in it to point to your mirror:
<inputs action="http://genome.ucsc.edu/cgi-bin/hgTables" check_values="false" method="get">
Next, add an entry for it in your tool_conf.xml file and restart your Galaxy instance.
That's all you should need.
On Mar 23, 2010, at 10:22 AM, Emeric Dubois wrote:
> Hello Greg
>
> I have installed a partial mirror of UCSC and Galaxy on my server.
> I want use my UCSC mirror to get data and display in my gallaxy installation.
> Is it possible to do that ? How ?
> Please, can you help me ?
>
> Thanks
>
> Emeric
>
> --
> *****************************************
>
> Emeric Dubois
> Plateforme MGX
> Institut de Génomique Fonctionnelle
> UMR 5203 CNRS – U 661 INSERM – Universite de Montpellier
> 141 rue de la cardonille
> 34094 Montpellier Cedex 05, France
> Tel: 04 67 14 29 32
>
> Emeric.Dubois(a)igf.cnrs.fr
>
> *****************************************
>
>
> --
> Ce message a été vérifié par MailScanner
> pour des virus ou des polluriels et rien de
> suspect n'a été trouvé.
>
Greg Von Kuster
Galaxy Development Team
greg(a)bx.psu.edu
1
0
Hi,
I know that I have had the data transfer functionality working in the
past but it's currently failing ending with the following:
127.0.0.1 - - [23/Mar/2010:08:37:50 -0400] "GET
/user/create?username=nsfox1%40example.org&confirm=testuser&messagetype=error&msg=User+with+that+email+already+exists&password=testuser&email=nsfox1%40example.org HTTP/1.1" 200 - "-"
"Python-urllib/2.5"
ERROR:root:Traceback (most recent call last):
File "scripts/galaxy_messaging/server/data_transfer.py", line 166,
in add_to_library
raise DataTransferException("The "+self.datatx_email+" user could
not login to Galaxy")
DataTransferException: 'The nsfox1(a)example.org user could not login to Galaxy'
ERROR:root:FATAL ERROR.The nsfox1(a)example.org user could not login to Galaxy
DEBUG:root:[[u'data/ATC_AA', u'Error'], [u'data/ATC_AB', u'Error'],
[u'data/CRA_AC', u'Error'], [u'data/CRA_AE', u'In progress']]
DEBUG:root:######################
[u'data/CRA_AE', u'Error.The nsfox1(a)example.org user could not login
to Galaxy']
I re-downloaded the Galaxy instance again but I'm still having this
issue. The user I'm using here is an admin user with permission to add
to the data library and when I go and login galaxy it works.
Any suggestions as to what I might be wrong would be great.
Thanks,
Natalie
2
1
Hi,
the following path:
database/reports/compiled_templates
can be added to ".hgignore" file to remove non-relevant compiled python files from "hg st".
-gordon
1
0
Hello,
A small feature requested by our users:
The ability to set the axis ranges in the plotting tool (xy_plot.xml).
The attached patch adds this ability as an optional parameter in the tool.
Note1: if the input data goes beyond the user's suggest range, the range is extended.
Note2: the patch contains CR/LF because it appears the 'xy_plot.xml' tool has windows-style newlines.
-gordon
1
0
Hi,
I'm getting an error "AttributeError: 'StateColumn' object has no
attribute 'get_filter'" if I search anything on the sequencing request
page. Searching specifically within the Name search or Description
search does work though. Is this a known bug or did I possibly miss
setting up something in my Galaxy Instance?
Also, that search, which is currently not working for me, it only
searches the information the sequencing requests page, right? I'd like
to request being able to search the requests for something within the
request or have some where of quickly determining the information of
the sample with the requests without browsing to each one.
Any information is appreciated.
Thanks,
Natalie
2
1
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