changeset 0:556ceed24699 draft

Imported from capsule None
author devteam
date Mon, 19 May 2014 12:34:37 -0400
parents
children 76c4a4ed8e74
files short_reads_figure_high_quality_length.py short_reads_figure_high_quality_length.xml test-data/454.qual test-data/454_high_quality_hist.pdf test-data/solexa.qual test-data/solexa_high_quality_hist.pdf tool_dependencies.xml
diffstat 7 files changed, 827 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/short_reads_figure_high_quality_length.py	Mon May 19 12:34:37 2014 -0400
@@ -0,0 +1,165 @@
+#!/usr/bin/env python
+
+import os, sys, math, tempfile, zipfile, re
+from rpy import *
+
+assert sys.version_info[:2] >= ( 2, 4 )
+
+def stop_err( msg ):
+    sys.stderr.write( "%s\n" % msg )
+    sys.exit()
+
+def unzip( filename ):
+    zip_file = zipfile.ZipFile( filename, 'r' )
+    tmpfilename = tempfile.NamedTemporaryFile().name
+    for name in zip_file.namelist():
+        file( tmpfilename, 'a' ).write( zip_file.read( name ) )
+    zip_file.close()
+    return tmpfilename
+
+def __main__():
+    infile_score_name = sys.argv[1].strip()
+    outfile_R_name = sys.argv[2].strip()
+    
+    try:
+        score_threshold = int( sys.argv[3].strip() )
+    except:
+        stop_err( 'Threshold for quality score must be numerical.' )
+
+    infile_is_zipped = False
+    if zipfile.is_zipfile( infile_score_name ):
+        infile_is_zipped = True
+        infile_name = unzip( infile_score_name )
+    else:
+        infile_name = infile_score_name
+
+    # detect whether it's tabular or fasta format
+    seq_method = None
+    data_type = None
+    for i, line in enumerate( file( infile_name ) ):
+        line = line.rstrip( '\r\n' )
+        if not line or line.startswith( '#' ):
+            continue
+        if data_type == None:
+            if line.startswith( '>' ):
+                data_type = 'fasta'
+                continue
+            elif len( line.split( '\t' ) ) > 0:
+                fields = line.split()
+                for score in fields:
+                    try:
+                        int( score )
+                        data_type = 'tabular'
+                        seq_method = 'solexa'
+                        break
+                    except:
+                        break
+        elif data_type == 'fasta':
+            fields = line.split()
+            for score in fields:
+                try: 
+                    int( score )
+                    seq_method = '454'
+                    break
+                except:
+                    break
+        if i == 100:
+            break
+
+    if data_type is None:
+        stop_err( 'This tool can only use fasta data or tabular data.' ) 
+    if seq_method is None:
+        stop_err( 'Invalid data for fasta format.')
+ 
+    cont_high_quality = []
+    invalid_lines = 0
+    invalid_scores = 0                       
+    if seq_method == 'solexa':
+        for i, line in enumerate( open( infile_name ) ):
+            line = line.rstrip( '\r\n' )
+            if not line or line.startswith( '#' ):
+                continue
+            locs = line.split( '\t' )
+            for j, base in enumerate( locs ):
+                nuc_errors = base.split()
+                try:
+                    nuc_errors[0] = int( nuc_errors[0] )
+                    nuc_errors[1] = int( nuc_errors[1] )
+                    nuc_errors[2] = int( nuc_errors[2] )
+                    nuc_errors[3] = int( nuc_errors[3] )
+                    big = max( nuc_errors )
+                except:
+                    invalid_scores += 1
+                    big = 0
+                if j == 0:
+                    cont_high_quality.append(1)
+                else:
+                    if big >= score_threshold:
+                        cont_high_quality[ len( cont_high_quality ) - 1 ] += 1
+                    else:
+                        cont_high_quality.append(1)
+    else: # seq_method == '454'
+        tmp_score = ''
+        for i, line in enumerate( open( infile_name ) ):
+            line = line.rstrip( '\r\n' )
+            if not line or line.startswith( '#' ):
+                continue
+            if line.startswith( '>' ):
+                if len( tmp_score ) > 0:
+                    locs = tmp_score.split()
+                    for j, base in enumerate( locs ):
+                        try:
+                            base = int( base )
+                        except:
+                            invalid_scores += 1
+                            base = 0
+                        if j == 0:
+                            cont_high_quality.append(1)
+                        else:
+                            if base >= score_threshold:
+                                cont_high_quality[ len( cont_high_quality ) - 1 ] += 1
+                            else:
+                                cont_high_quality.append(1)
+                tmp_score = ''
+            else:
+                tmp_score = "%s %s" % ( tmp_score, line )
+        if len( tmp_score ) > 0:
+            locs = tmp_score.split()
+            for j, base in enumerate( locs ):
+                try:
+                    base = int( base )
+                except:
+                    invalid_scores += 1
+                    base = 0
+                if j == 0:
+                    cont_high_quality.append(1)
+                else:
+                    if base >= score_threshold:
+                        cont_high_quality[ len( cont_high_quality ) - 1 ] += 1
+                    else:
+                        cont_high_quality.append(1)
+
+    # generate pdf figures
+    cont_high_quality = array ( cont_high_quality )
+    outfile_R_pdf = outfile_R_name 
+    r.pdf( outfile_R_pdf )
+    title = "Histogram of continuous high quality scores"
+    xlim_range = [ 1, max( cont_high_quality ) ]
+    nclass = max( cont_high_quality )
+    if nclass > 100:
+        nclass = 100
+    r.hist( cont_high_quality, probability=True, xlab="Continuous High Quality Score length (bp)", ylab="Frequency (%)", xlim=xlim_range, main=title, nclass=nclass)
+    r.dev_off()    
+
+    if infile_is_zipped and os.path.exists( infile_name ):
+        # Need to delete temporary file created when we unzipped the infile archive
+        os.remove( infile_name )
+
+    if invalid_lines > 0: 
+        print 'Skipped %d invalid lines. ' % invalid_lines
+    if invalid_scores > 0:
+        print 'Skipped %d invalid scores. ' % invalid_scores
+
+    r.quit( save="no" )
+
+if __name__=="__main__":__main__()
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/short_reads_figure_high_quality_length.xml	Mon May 19 12:34:37 2014 -0400
@@ -0,0 +1,74 @@
+<tool id="hist_high_quality_score" name="Histogram" version="1.0.0">
+<description> of high quality score reads </description>
+<requirements>
+    <requirement type="package" version="1.0.3">rpy</requirement>
+    <requirement type="package" version="2.11.0">R</requirement>
+</requirements>
+<command interpreter="python">short_reads_figure_high_quality_length.py $input1 $output1 $input2</command>
+<inputs>
+<page>
+    <param name="input1" type="data" format="qualsolexa,qual454,txtseq.zip" label="Quality score file" help="No dataset? Read tip below"/>
+    <param name="input2" type="integer" size="5" value="20" label="Quality score threshold" />
+</page>
+</inputs>
+<outputs>
+  	<data name="output1" format="pdf" />
+</outputs>
+<tests>
+	<test>
+		<param name="input1" value="solexa.qual" ftype="qualsolexa" />
+		<param name="input2" value="5" />
+  		<output name="output1" file="solexa_high_quality_hist.pdf" ftype="pdf"/>
+	</test>
+	<test>
+		<param name="input1" value="454.qual" ftype="qual454" />
+		<param name="input2" value="5" />
+		<output name="output1" file="454_high_quality_hist.pdf" ftype="pdf"/>
+	</test>
+</tests>
+
+<help>
+
+.. class:: warningmark
+
+To use this tool, your dataset needs to be in the *Quality Score* format. Click the pencil icon next to your dataset to set the datatype to *Quality Score* (see below for examples).
+
+-----
+
+**What it does**
+
+This tool takes Quality Files generated by Roche (454), Illumina (Solexa), or ABI SOLiD machines and builds a histogram of lengths of high quality reads.
+
+-----
+
+**Examples of Quality Data**
+
+Roche (454) or ABI SOLiD data::
+
+	&gt;seq1
+	23 33 34 25 28 28 28 32 23 34 27 4 28 28 31 21 28
+
+Illumina (Solexa) data::
+
+ 	-40 -40 40 -40	 -40 -40 -40 40	 
+ 
+-----
+
+**Note**
+
+- Quality score data::
+
+	&gt;seq1
+	23 33 34 25 28 28 28 32 23 34 27 4 28 28 31 21 28
+
+- If the threshold is set to 20:
+
+  - a low quality score 4 in the middle separated two segments of lengths 11 and 5.
+
+  - The histogram will be built based on the numbers (11, 5).
+	 	
+- For Illumina (Solexa) data, only the maximal of the 4 values will be used.
+
+
+</help>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/454.qual	Mon May 19 12:34:37 2014 -0400
@@ -0,0 +1,52 @@
+>EYKX4VC01B65GS length=54 xy=0784_1754 region=1 run=R_2007_11_07_16_15_57_
+33 23 34 25 28 28 28 32 23 34 27 4 28 28 31 21 28 27 27 28 28 28 28 28 28 28 33 23 28 33 24 36 27 31 21 28 28 33 26 33 24 27 28 28 28 28 28 28 28 32 23 28 34 25
+>EYKX4VC01BNCSP length=187 xy=0558_3831 region=1 run=R_2007_11_07_16_15_57_
+27 35 26 25 37 28 37 28 25 28 27 36 27 28 36 27 28 28 27 36 27 30 19 27 28 36 28 23 36 27 27 28 27 27 28 37 29 27 26 27 24 24 36 27 26 28 36 28 24 25 21 28 24 28 26 34 25 26 43 36
+22 9 23 19 28 28 28 28 26 28 39 32 12 27 36 28 28 26 37 28 28 26 28 28 28 27 28 26 36 27 27 27 36 28 27 27 28 28 36 27 36 28 39 32 12 35 28 26 37 29 28 28 28 28 37 29 28 36 28 35
+26 27 37 29 28 26 28 36 28 26 24 38 32 11 28 26 32 24 36 32 18 2 27 25 33 26 32 28 6 18 22 26 17 15 14 28 20 8 22 21 14 22 26 16 26 16 28 20 22 27 18 27 18 27 28 27 20 25 34 27
+27 33 25 34 28 8 26
+>EYKX4VC01CD9FT length=115 xy=0865_1719 region=1 run=R_2007_11_07_16_15_57_
+35 24 16 9 2 27 39 33 13 36 27 36 27 28 28 28 27 28 28 33 23 37 28 28 28 36 27 28 28 28 28 36 27 28 28 28 27 28 28 28 28 28 28 28 37 28 28 28 28 37 28 26 28 36 27 28 28 28 28 28
+28 28 28 37 28 28 35 26 27 28 28 27 36 27 35 25 32 22 28 28 28 28 28 28 28 28 28 34 25 36 27 34 25 28 27 28 28 36 27 28 35 29 6 28 28 28 37 30 8 33 24 28 27 27 27
+>EYKX4VC01B8FW0 length=95 xy=0799_0514 region=1 run=R_2007_11_07_16_15_57_
+28 40 34 15 35 28 6 27 33 23 34 24 32 22 28 28 28 41 34 17 28 28 28 37 30 9 28 28 28 28 28 27 28 37 30 8 28 28 27 28 35 26 27 35 26 28 37 30 9 28 27 28 28 28 34 25 28 28 32 22
+26 28 28 28 28 27 43 36 23 12 1 28 21 28 27 16 28 32 23 27 28 27 28 28 27 28 28 28 32 22 28 26 26 27 28
+>EYKX4VC01BCGYW length=115 xy=0434_3926 region=1 run=R_2007_11_07_16_15_57_
+28 6 26 15 27 28 37 28 41 35 17 28 21 28 23 21 27 36 27 24 36 28 40 34 14 22 25 28 24 27 28 37 28 26 28 27 27 28 28 28 28 27 43 36 22 8 28 26 28 27 26 14 28 25 20 28 34 24 25 40
+33 18 1 19 27 16 36 28 36 28 21 27 25 41 34 16 22 28 37 29 26 26 35 27 28 26 41 34 16 28 28 27 28 37 29 25 43 36 23 12 1 11 39 32 12 28 17 20 28 28 17 36 29 7 24
+>EYKX4VC01AZXC6 length=116 xy=0292_0280 region=1 run=R_2007_11_07_16_15_57_
+35 24 17 11 5 26 24 40 33 14 34 25 33 24 28 27 27 26 28 28 33 24 36 27 28 27 36 27 27 28 27 28 35 26 27 27 28 27 28 28 28 28 28 27 28 36 27 28 28 28 37 28 27 26 35 26 27 28 28 28
+27 28 28 28 37 29 28 35 26 28 27 28 28 35 26 35 26 31 21 28 28 28 28 28 28 28 28 28 34 25 35 26 35 26 28 28 28 28 37 28 27 37 30 9 28 28 28 37 30 9 33 23 28 28 28 27
+>EYKX4VC01CATH5 length=82 xy=0826_0843 region=1 run=R_2007_11_07_16_15_57_
+28 28 41 35 17 33 24 28 27 28 28 28 36 27 28 28 28 36 27 34 25 27 28 28 28 28 28 28 28 37 28 27 35 25 28 26 28 27 28 28 24 36 27 26 26 37 30 9 28 28 28 28 28 25 25 35 26 26 27 35
+25 28 36 28 28 28 31 21 25 13 32 22 41 34 17 0 22 10 32 23 24 28
+>EYKX4VC01BCEIV length=47 xy=0434_0757 region=1 run=R_2007_11_07_16_15_57_
+28 28 26 26 28 26 28 27 28 25 32 22 27 26 25 27 28 28 27 26 27 28 32 23 28 28 34 25 27 22 26 26 27 28 17 28 28 28 28 28 28 34 24 35 25 28 28
+>EYKX4VC01BWERM length=83 xy=0662_0304 region=1 run=R_2007_11_07_16_15_57_
+28 36 27 28 28 35 26 34 24 28 28 28 32 22 28 28 32 23 28 28 32 23 27 28 27 34 27 3 27 43 36 22 9 35 26 37 29 26 27 32 23 28 28 27 28 36 27 28 36 27 28 28 28 28 28 35 26 34 25 28
+36 30 8 28 28 28 28 27 27 28 28 28 28 37 28 28 36 27 28 39 33 13 27
+>EYKX4VC01BT2O7 length=69 xy=0635_1945 region=1 run=R_2007_11_07_16_15_57_
+28 28 28 28 41 34 17 27 28 31 21 28 27 32 23 36 27 28 28 33 24 28 27 28 28 27 32 22 28 34 27 3 27 43 36 22 8 27 28 34 27 3 28 28 28 28 28 28 28 33 23 28 28 28 28 34 24 28 34 24
+28 28 27 36 27 28 37 30 9
+>EYKX4VC01BO0UO length=222 xy=0577_3838 region=1 run=R_2007_11_07_16_15_57_
+27 27 28 36 27 28 39 33 13 28 28 28 27 28 37 28 28 41 35 17 28 28 28 27 28 26 36 27 28 36 27 27 28 27 35 26 27 26 28 28 28 28 28 36 27 28 28 38 31 10 24 27 27 27 27 27 28 28 37 28
+27 28 35 26 28 28 36 27 28 28 27 28 28 28 28 28 28 27 36 28 27 36 27 37 28 27 28 27 28 28 28 27 28 28 27 36 27 26 27 28 28 28 28 28 37 28 37 29 25 28 36 27 28 27 28 34 27 26 24 34
+28 28 28 31 23 27 28 34 27 28 37 33 14 23 37 33 15 38 34 23 13 2 26 24 28 26 35 31 12 36 32 14 31 22 24 28 27 33 26 26 27 27 27 27 28 27 35 30 11 26 27 35 31 12 28 27 26 27 36 32
+14 27 34 27 37 33 15 27 27 34 28 27 23 27 35 31 11 27 28 28 26 34 26 27 28 34 28 28 28 39 35 22 9 27 27 23 27 35 28 34 27 27
+>EYKX4VC01CBCPK length=83 xy=0832_1158 region=1 run=R_2007_11_07_16_15_57_
+28 35 26 28 28 35 26 35 26 28 28 28 34 24 28 28 35 25 28 28 34 25 28 28 27 35 28 5 28 43 36 22 9 35 26 37 28 28 27 32 23 27 28 28 28 36 27 28 36 27 28 28 28 28 28 36 27 35 25 28
+37 30 9 28 28 28 28 28 28 28 28 28 28 36 27 28 35 26 28 38 31 10 28
+>EYKX4VC01B474S length=54 xy=0762_2010 region=1 run=R_2007_11_07_16_15_57_
+28 28 28 28 27 43 36 23 11 33 23 27 25 26 28 28 39 33 13 28 27 29 18 28 26 27 26 28 27 28 36 27 26 28 28 28 28 25 28 41 34 17 24 36 28 37 28 28 26 28 17 27 28 26
+>EYKX4VC01BB4QL length=57 xy=0431_0363 region=1 run=R_2007_11_07_16_15_57_
+36 24 15 7 28 33 26 28 27 27 26 29 18 28 35 26 28 26 28 25 27 27 28 36 27 41 34 20 5 27 36 28 28 28 27 28 32 22 34 25 28 28 28 28 26 28 27 28 36 27 40 34 18 3 28 37 28
+>EYKX4VC01BJ37M length=64 xy=0522_0192 region=1 run=R_2007_11_07_16_15_57_
+28 26 28 28 28 28 28 28 27 28 28 27 27 36 27 37 28 28 28 28 28 28 28 28 28 27 36 29 8 39 33 13 28 36 27 41 34 20 5 28 28 28 27 36 28 28 28 28 27 28 28 28 28 27 37 30 8 27 28 26
+33 26 35 26
+>EYKX4VC01BV9R8 length=54 xy=0660_2038 region=1 run=R_2007_11_07_16_15_57_
+41 34 19 4 27 28 28 30 20 28 28 34 27 4 28 28 27 34 25 27 28 28 28 28 28 28 28 28 28 28 28 28 38 31 11 27 28 28 28 28 37 28 40 33 18 2 24 15 25 24 12 26 34 27
+>EYKX4VC01CEPP8 length=60 xy=0870_2350 region=1 run=R_2007_11_07_16_15_57_
+26 21 40 34 17 26 36 29 8 26 28 22 26 28 28 20 24 28 34 26 23 11 28 28 26 27 26 40 33 14 27 35 26 26 23 10 28 31 21 28 23 27 23 28 36 27 26 36 28 27 36 28 28 27 25 27 27 27 26 28
+>EYKX4VC01BTLME length=78 xy=0630_0292 region=1 run=R_2007_11_07_16_15_57_
+36 27 25 24 33 23 28 26 28 28 28 28 27 27 26 36 27 36 28 28 28 36 27 28 28 27 27 36 28 28 37 29 28 26 36 27 27 28 27 27 28 27 36 28 28 28 36 27 36 27 28 36 28 25 36 28 28 28 27 28
+39 33 13 28 28 37 28 28 41 34 16 28 28 28 26 36 28 24
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/454_high_quality_hist.pdf	Mon May 19 12:34:37 2014 -0400
@@ -0,0 +1,300 @@
+%PDF-1.1
+%ρ\r
+1 0 obj
+<<
+/CreationDate (D:20080414133855)
+/ModDate (D:20080414133855)
+/Title (R Graphics Output)
+/Producer (R 2.6.2)
+/Creator (R)
+>>
+endobj
+2 0 obj
+<<
+/Type /Catalog
+/Pages 3 0 R
+>>
+endobj
+5 0 obj
+<<
+/Type /Font
+/Subtype /Type1
+/Name /F1
+/BaseFont /ZapfDingbats
+>>
+endobj
+6 0 obj
+<<
+/Type /Page
+/Parent 3 0 R
+/Contents 7 0 R
+/Resources 4 0 R
+>>
+endobj
+7 0 obj
+<<
+/Length 8 0 R
+>>
+stream
+q
+Q q
+BT
+0.000 0.000 0.000 rg
+/F3 1 Tf 14.00 0.00 -0.00 14.00 81.89 397.45 Tm (Histogram of continuous high quality scores) Tj
+/F2 1 Tf 12.00 0.00 -0.00 12.00 118.08 18.72 Tm (Continuous High Quality Score length \(bp\)) Tj
+/F2 1 Tf 0.00 12.00 -12.00 0.00 12.96 183.86 Tm (Frequency \(%\)) Tj
+ET
+Q q
+0.000 0.000 0.000 RG
+0.75 w
+[] 0 d
+1 J
+1 j
+10.00 M
+69.47 73.44 m 386.80 73.44 l S
+69.47 73.44 m 69.47 66.24 l S
+114.80 73.44 m 114.80 66.24 l S
+160.13 73.44 m 160.13 66.24 l S
+205.47 73.44 m 205.47 66.24 l S
+250.80 73.44 m 250.80 66.24 l S
+296.13 73.44 m 296.13 66.24 l S
+341.47 73.44 m 341.47 66.24 l S
+386.80 73.44 m 386.80 66.24 l S
+BT
+0.000 0.000 0.000 rg
+/F2 1 Tf 12.00 0.00 -0.00 12.00 66.13 47.52 Tm (0) Tj
+/F2 1 Tf 12.00 0.00 -0.00 12.00 108.13 47.52 Tm (20) Tj
+/F2 1 Tf 12.00 0.00 -0.00 12.00 153.46 47.52 Tm (40) Tj
+/F2 1 Tf 12.00 0.00 -0.00 12.00 198.79 47.52 Tm (60) Tj
+/F2 1 Tf 12.00 0.00 -0.00 12.00 244.13 47.52 Tm (80) Tj
+/F2 1 Tf 12.00 0.00 -0.00 12.00 286.13 47.52 Tm (100) Tj
+/F2 1 Tf 12.00 0.00 -0.00 12.00 331.46 47.52 Tm (120) Tj
+/F2 1 Tf 12.00 0.00 -0.00 12.00 376.79 47.52 Tm (140) Tj
+ET
+59.04 84.53 m 59.04 328.59 l S
+59.04 84.53 m 51.84 84.53 l S
+59.04 145.55 m 51.84 145.55 l S
+59.04 206.56 m 51.84 206.56 l S
+59.04 267.57 m 51.84 267.57 l S
+59.04 328.59 m 51.84 328.59 l S
+BT
+/F2 1 Tf 0.00 12.00 -12.00 0.00 41.76 72.86 Tm (0.00) Tj
+/F2 1 Tf 0.00 12.00 -12.00 0.00 41.76 133.87 Tm (0.02) Tj
+/F2 1 Tf 0.00 12.00 -12.00 0.00 41.76 194.88 Tm (0.04) Tj
+/F2 1 Tf 0.00 12.00 -12.00 0.00 41.76 255.90 Tm (0.06) Tj
+/F2 1 Tf 0.00 12.00 -12.00 0.00 41.76 316.91 Tm (0.08) Tj
+ET
+Q q 59.04 73.44 342.72 299.52 re W n
+0.000 0.000 0.000 RG
+0.75 w
+[] 0 d
+1 J
+1 j
+10.00 M
+76.27 84.53 2.27 277.33 re S
+78.53 84.53 2.27 0.00 re S
+80.80 84.53 2.27 0.00 re S
+83.07 84.53 2.27 92.44 re S
+85.33 84.53 2.27 0.00 re S
+87.60 84.53 2.27 92.44 re S
+89.87 84.53 2.27 184.89 re S
+92.13 84.53 2.27 92.44 re S
+94.40 84.53 2.27 0.00 re S
+96.67 84.53 2.27 0.00 re S
+98.93 84.53 2.27 0.00 re S
+101.20 84.53 2.27 92.44 re S
+103.47 84.53 2.27 0.00 re S
+105.73 84.53 2.27 0.00 re S
+108.00 84.53 2.27 0.00 re S
+110.27 84.53 2.27 0.00 re S
+112.53 84.53 2.27 0.00 re S
+114.80 84.53 2.27 0.00 re S
+117.07 84.53 2.27 0.00 re S
+119.33 84.53 2.27 0.00 re S
+121.60 84.53 2.27 0.00 re S
+123.87 84.53 2.27 92.44 re S
+126.13 84.53 2.27 0.00 re S
+128.40 84.53 2.27 92.44 re S
+130.67 84.53 2.27 92.44 re S
+132.93 84.53 2.27 0.00 re S
+135.20 84.53 2.27 0.00 re S
+137.47 84.53 2.27 92.44 re S
+139.73 84.53 2.27 92.44 re S
+142.00 84.53 2.27 0.00 re S
+144.27 84.53 2.27 0.00 re S
+146.53 84.53 2.27 0.00 re S
+148.80 84.53 2.27 0.00 re S
+151.07 84.53 2.27 0.00 re S
+153.33 84.53 2.27 92.44 re S
+155.60 84.53 2.27 0.00 re S
+157.87 84.53 2.27 0.00 re S
+160.13 84.53 2.27 0.00 re S
+162.40 84.53 2.27 0.00 re S
+164.67 84.53 2.27 92.44 re S
+166.93 84.53 2.27 0.00 re S
+169.20 84.53 2.27 0.00 re S
+171.47 84.53 2.27 92.44 re S
+173.73 84.53 2.27 92.44 re S
+176.00 84.53 2.27 0.00 re S
+178.27 84.53 2.27 0.00 re S
+180.53 84.53 2.27 0.00 re S
+182.80 84.53 2.27 0.00 re S
+185.07 84.53 2.27 0.00 re S
+187.33 84.53 2.27 92.44 re S
+189.60 84.53 2.27 92.44 re S
+191.87 84.53 2.27 0.00 re S
+194.13 84.53 2.27 92.44 re S
+196.40 84.53 2.27 0.00 re S
+198.67 84.53 2.27 0.00 re S
+200.93 84.53 2.27 0.00 re S
+203.20 84.53 2.27 92.44 re S
+205.47 84.53 2.27 0.00 re S
+207.73 84.53 2.27 92.44 re S
+210.00 84.53 2.27 0.00 re S
+212.27 84.53 2.27 92.44 re S
+214.53 84.53 2.27 0.00 re S
+216.80 84.53 2.27 0.00 re S
+219.07 84.53 2.27 0.00 re S
+221.33 84.53 2.27 0.00 re S
+223.60 84.53 2.27 0.00 re S
+225.87 84.53 2.27 92.44 re S
+228.13 84.53 2.27 0.00 re S
+230.40 84.53 2.27 0.00 re S
+232.67 84.53 2.27 0.00 re S
+234.93 84.53 2.27 0.00 re S
+237.20 84.53 2.27 92.44 re S
+239.47 84.53 2.27 0.00 re S
+241.73 84.53 2.27 0.00 re S
+244.00 84.53 2.27 92.44 re S
+246.27 84.53 2.27 0.00 re S
+248.53 84.53 2.27 0.00 re S
+250.80 84.53 2.27 92.44 re S
+253.07 84.53 2.27 0.00 re S
+255.33 84.53 2.27 92.44 re S
+257.60 84.53 2.27 0.00 re S
+259.87 84.53 2.27 0.00 re S
+262.13 84.53 2.27 0.00 re S
+264.40 84.53 2.27 0.00 re S
+266.67 84.53 2.27 0.00 re S
+268.93 84.53 2.27 0.00 re S
+271.20 84.53 2.27 0.00 re S
+273.47 84.53 2.27 0.00 re S
+275.73 84.53 2.27 0.00 re S
+278.00 84.53 2.27 0.00 re S
+280.27 84.53 2.27 0.00 re S
+282.53 84.53 2.27 0.00 re S
+284.80 84.53 2.27 0.00 re S
+287.07 84.53 2.27 0.00 re S
+289.33 84.53 2.27 0.00 re S
+291.60 84.53 2.27 0.00 re S
+293.87 84.53 2.27 0.00 re S
+296.13 84.53 2.27 0.00 re S
+298.40 84.53 2.27 0.00 re S
+300.67 84.53 2.27 0.00 re S
+302.93 84.53 2.27 0.00 re S
+305.20 84.53 2.27 0.00 re S
+307.47 84.53 2.27 0.00 re S
+309.73 84.53 2.27 0.00 re S
+312.00 84.53 2.27 0.00 re S
+314.27 84.53 2.27 0.00 re S
+316.53 84.53 2.27 0.00 re S
+318.80 84.53 2.27 92.44 re S
+321.07 84.53 2.27 0.00 re S
+323.33 84.53 2.27 0.00 re S
+325.60 84.53 2.27 0.00 re S
+327.87 84.53 2.27 0.00 re S
+330.13 84.53 2.27 92.44 re S
+332.40 84.53 2.27 0.00 re S
+334.67 84.53 2.27 0.00 re S
+336.93 84.53 2.27 0.00 re S
+339.20 84.53 2.27 0.00 re S
+341.47 84.53 2.27 0.00 re S
+343.73 84.53 2.27 0.00 re S
+346.00 84.53 2.27 0.00 re S
+348.27 84.53 2.27 0.00 re S
+350.53 84.53 2.27 0.00 re S
+352.80 84.53 2.27 0.00 re S
+355.07 84.53 2.27 0.00 re S
+357.33 84.53 2.27 0.00 re S
+359.60 84.53 2.27 0.00 re S
+361.87 84.53 2.27 0.00 re S
+364.13 84.53 2.27 0.00 re S
+366.40 84.53 2.27 0.00 re S
+368.67 84.53 2.27 0.00 re S
+370.93 84.53 2.27 0.00 re S
+373.20 84.53 2.27 0.00 re S
+375.47 84.53 2.27 0.00 re S
+377.73 84.53 2.27 0.00 re S
+380.00 84.53 2.27 0.00 re S
+382.27 84.53 2.27 0.00 re S
+384.53 84.53 2.27 0.00 re S
+386.80 84.53 2.27 184.89 re S
+Q
+endstream
+endobj
+8 0 obj
+5571
+endobj
+3 0 obj
+<<
+/Type /Pages
+/Kids [
+6 0 R
+]
+/Count 1
+/MediaBox [0 0 432 432]
+>>
+endobj
+4 0 obj
+<<
+/ProcSet [/PDF /Text]
+/Font << /F1 5 0 R /F2 10 0 R /F3 11 0 R >>
+/ExtGState << >>
+>>
+endobj
+9 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 45/minus 96/quoteleft
+144/dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent
+/dieresis /.notdef /ring /cedilla /.notdef /hungarumlaut /ogonek /caron /space]
+>>
+endobj
+10 0 obj <<
+/Type /Font
+/Subtype /Type1
+/Name /F2
+/BaseFont /Helvetica
+/Encoding 9 0 R
+>> endobj
+11 0 obj <<
+/Type /Font
+/Subtype /Type1
+/Name /F3
+/BaseFont /Helvetica-Bold
+/Encoding 9 0 R
+>> endobj
+xref
+0 12
+0000000000 65535 f 
+0000000021 00000 n 
+0000000163 00000 n 
+0000006019 00000 n 
+0000006102 00000 n 
+0000000212 00000 n 
+0000000295 00000 n 
+0000000375 00000 n 
+0000005999 00000 n 
+0000006206 00000 n 
+0000006463 00000 n 
+0000006560 00000 n 
+trailer
+<<
+/Size 12
+/Info 1 0 R
+/Root 2 0 R
+>>
+startxref
+6662
+%%EOF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/solexa.qual	Mon May 19 12:34:37 2014 -0400
@@ -0,0 +1,30 @@
+ -40  -40   40  -40	  40  -40  -40  -40	 -40   40  -40  -40	 -40  -40  -40   40	 -40   40  -40  -40	  40  -40  -40  -40	 -40  -40  -40   40	 -40  -40   40  -40	  40  -40  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -40   40  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40	  40  -40  -40  -40	 -40   40  -40  -40	 -40   40  -40  -40	 -40  -40  -40   40	  40  -40  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40	  40  -40  -40  -40	 -40  -40   40  -40	 -40  -40  -40   40	 -40  -40   40  -40	 -40  -40   40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40   40  -40	  40  -40  -40  -40	  40  -40  -40  -40	 -40   40  -40  -40	  40  -40  -40  -40	 -40  -40  -15   15	 -40   40  -40  -40
+ -40  -40   40  -40	 -40  -40  -40   40	 -40  -40   40  -40	  40  -40  -40  -40	 -40  -40  -40   40	  40  -40  -40  -40	 -40  -40  -40   40	 -40  -40   40  -40	 -40  -40  -40   40	  40  -40  -40  -40	 -40  -40  -40   40	 -40  -40   40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40   40  -40	  40  -40  -40  -40	  -5    5  -40  -40	 -40  -40   40  -40	 -40  -40   40  -40	 -40   21  -40  -21	 -40   40  -40  -40	  40  -40  -40  -40	 -40  -40  -40   40	  40  -40  -40  -40	  12  -40  -40  -12	 -36  -40   36  -40	 -40  -40   40  -40	  -4    4  -40  -40	 -40  -40  -40   40	 -40  -40   14  -14	 -40   40  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40   40  -40  -40	 -40  -40  -40   40	 -40  -40  -25   25
+ -40  -40   40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40   40  -40	 -40  -40  -40   40	 -40   40  -40  -40	 -40  -40   40  -40	  40  -40  -40  -40	 -40  -40  -40   40	  40  -40  -40  -40	 -40  -40   40  -40	  40  -40  -40  -40	  40  -40  -40  -40	 -40   40  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40   34  -40  -34	  40  -40  -40  -40	 -40  -40  -40   40	 -40  -25   25  -40	 -40  -40  -40   40	 -37  -40   37  -40	 -40    7  -40   -7	 -40   40  -40  -40	 -40  -40  -40   40	 -40  -40   40  -40	 -40  -40  -40   40	  40  -40  -40  -40	  38  -40  -40  -38	  40  -40  -40  -40	  40  -40  -40  -40	 -40   40  -40  -40	  40  -40  -40  -40	  11  -16  -13  -22	 -40  -40   40  -40	 -40  -40  -40   40
+  40  -40  -40  -40	 -40   40  -40  -40	 -40   40  -40  -40	  40  -40  -40  -40	  40  -40  -40  -40	 -33   33  -40  -40	 -40   40  -40  -40	  40  -40  -40  -40	 -40  -40   40  -40	  40  -40  -40  -40	  40  -40  -40  -40	 -40   40  -40  -40	 -40  -40   40  -40	 -40  -40  -25   25	 -40  -40   40  -40	  40  -40  -40  -40	  40  -40  -40  -40	  40  -40  -40  -40	  40  -40  -40  -40	  40  -40  -40  -40	 -40  -40   27  -27	  -5    5  -40  -40	 -40  -40   40  -40	 -40  -40  -40   40	 -40   40  -40  -40	 -40   40  -40  -40	 -40  -40  -40   40	 -40  -40   40  -40	 -40   40  -40  -40	 -40  -37   37  -40	 -40  -40  -40   40	 -40  -40   40  -40	 -40  -40  -25   25	  40  -40  -40  -40	 -40  -40   34  -34	 -40   40  -40  -40
+ -40  -40   40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	  40  -40  -40  -40	 -40  -40  -40   40	 -40  -40   40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40   40  -40	 -40  -40   40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -40   40  -40  -40	  40  -40  -40  -40	 -40  -40  -40   40	 -40  -40   40  -40	 -40  -40   40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40   -2    2	 -40  -40   35  -35	 -40  -40  -40   40	 -40   40  -40  -40	 -40  -40  -40   40	  40  -40  -40  -40	  40  -40  -40  -40	 -40   36  -40  -36	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	   5   -5  -40  -28	 -40  -16  -40   16	 -40   40  -40  -40
+ -40  -40   40  -40	 -40   40  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	  40  -40  -40  -40	 -40   40  -40  -40	 -40   40  -40  -40	 -40  -40   40  -40	 -40  -40  -40   40	 -40   40  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -40   40  -40  -40	 -40   40  -40  -40	  40  -40  -40  -40	 -40  -40   40  -40	  40  -40  -40  -40	  40  -40  -40  -40	  40  -40  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40   40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40   40  -40  -40	 -40   40  -40  -40	  40  -40  -40  -40	  40  -40  -40  -40	 -40  -40   28  -28	 -40  -40  -40   40	  40  -40  -40  -40	 -40  -40  -40   40	 -40   40  -40  -40	 -40  -40   40  -40
+ -40  -40   40  -40	 -40   40  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40   40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	  40  -40  -40  -40	 -40   40  -40  -40	 -40  -40   40  -40	  40  -40  -40  -40	  40  -40  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40	  40  -40  -40  -40	  40  -40  -40  -40	  40  -40  -40  -40	 -40  -40  -40   40	 -40   40  -40  -40	 -40  -40   40  -40	  40  -40  -40  -40	  40  -40  -40  -40	 -40  -40   40  -40	 -40  -40  -40   40	 -40  -40   40  -40	 -40  -40   40  -40	  40  -40  -40  -40	 -40   40  -40  -40	 -40  -40  -40   40	 -40  -40   27  -27	 -40   40  -40  -40	 -40  -40  -40   40	 -40  -40   40  -40	 -40  -40   14  -14	 -40   40  -40  -40
+ -40  -40   40  -40	 -40  -40  -40   40	 -40  -40  -40   40	  40  -40  -40  -40	 -40  -40  -40   40	  40  -40  -40  -40	  40  -40  -40  -40	 -40   40  -40  -40	 -40  -40   40  -40	 -40   40  -40  -40	 -40   40  -40  -40	 -40  -40   40  -40	  40  -40  -40  -40	  40  -40  -40  -40	 -40  -40   40  -40	 -40   40  -40  -40	 -40  -40   40  -40	 -40  -40   40  -40	 -40  -40  -40   40	  40  -40  -40  -40	  40  -40  -40  -40	  40  -40  -40  -40	  40  -40  -40  -40	  40  -40  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -36  -40  -40   36	  40  -40  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40
+ -40  -40   40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40   40  -40  -40	 -40  -40  -40   40	 -40   40  -40  -40	  40  -40  -40  -40	 -40   40  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40   40  -40  -40	 -40  -40  -40   40	 -40  -40   40  -40	 -40  -40  -40   40	 -40  -40  -40   40	  40  -40  -40  -40	 -40   40  -40  -40	 -40  -40  -40   40	 -40   40  -40  -40	 -40   40  -40  -40	  40  -40  -40  -40	 -40  -40   40  -40	 -40   40  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40   40  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40   40  -40  -40	 -40  -40   40  -40	 -40  -40   22  -22	 -40   40  -40  -40	  40  -40  -40  -40	 -40   40  -40  -40	 -40   40  -40  -40	 -40  -40  -40   40
+ -40  -40   40  -40	 -40  -40  -40   40	 -40  -40   40  -40	 -40  -40   40  -40	 -40   40  -40  -40	 -40   40  -40  -40	 -40  -40  -40   40	 -40  -40   40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40   40  -40	  40  -40  -40  -40	 -40  -40  -40   40	 -40  -40   -6    6	 -40   40  -40  -40	 -40  -40  -40   40	   3  -40  -40   -3	  40  -40  -40  -40	  40  -40  -40  -40	 -40  -40   40  -40	 -40  -40   40  -40	  -0  -40  -40    0	 -40  -40  -40   40	  40  -40  -40  -40	 -40  -40   40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -20   20  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40   40  -40  -40	   8  -40  -40   -8	 -40   40  -40  -40	 -40  -40   40  -40	  -4    4  -40  -40
+ -40  -40   40  -40	 -40  -40  -40   40	 -40  -40   40  -40	  40  -40  -40  -40	 -40   40  -40  -40	 -40   40  -40  -40	 -40  -40   40  -40	  -1    1  -40  -40	  40  -40  -40  -40	 -40  -40  -40   40	  40  -40  -40  -40	  40  -40  -40  -40	  40  -40  -40  -40	 -40  -40   28  -28	 -40  -40  -40   40	 -10  -40   10  -40	 -40   40  -40  -40	  40  -40  -40  -40	 -40    2   -2  -40	  40  -40  -40  -40	  17  -40  -17  -40	 -40   40  -40  -40	   3   -3  -40  -40	 -40  -40  -40   40	 -28  -40   28  -40	 -40  -40   40  -40	  13  -26  -13  -40	  40  -40  -40  -40	  40  -40  -40  -40	 -40  -40  -40   40	 -40  -40   18  -18	  40  -40  -40  -40	 -10  -40   10  -40	 -40  -40   40  -40	  17  -40  -17  -40	 -28   28  -40  -40
+ -40  -40   40  -40	 -40   40  -40  -40	  40  -40  -40  -40	 -40  -40   40  -40	   5  -40  -40   -5	 -40  -40  -40   40	 -40   40  -40  -40	 -40  -40   40  -40	 -40   40  -40  -40	 -40  -40  -40   40	  40  -40  -40  -40	 -40   40  -40  -40	  40  -40  -40  -40	 -40   40  -40  -40	 -40  -40   40  -40	 -40   40  -40  -40	  40  -40  -40  -40	 -40  -40   40  -40	 -40  -40   40  -40	  40  -40  -40  -40	 -10   10  -40  -40	 -40  -40   40  -40	 -40   28  -28  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -40   40  -40  -40	  32  -32  -40  -40	 -40    4  -40   -4	 -40  -40   40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40   40  -40  -40	 -40  -40  -40   40
+ -40  -40   40  -40	 -40   40  -40  -40	 -40  -40  -40   40	 -40   40  -40  -40	 -40  -40   40  -40	 -40  -40  -40   40	 -40  -40  -40   40	  40  -40  -40  -40	 -40  -40  -40   40	 -40  -40   40  -40	 -40  -40   40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -40   40  -40  -40	 -40   40  -40  -40	 -40  -40   40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40   40  -40	 -40   40  -40  -40	 -40  -40  -40   40	 -40  -40   40  -40	 -40   40  -40  -40	 -40   40  -40  -40	  27  -27  -40  -40	 -40  -40  -40   40	 -40   40  -40  -40	 -40  -40  -40   40	 -40   40  -40  -40	  40  -40  -40  -40	  40  -40  -40  -40	  40  -40  -40  -40	  40  -40  -40  -40	  40  -40  -40  -40	 -40   40  -40  -40
+ -40  -40   40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40   40  -40	  40  -40  -40  -40	 -40   40  -40  -40	 -40  -40   40  -40	 -40  -40   40  -40	 -40   40  -40  -40	 -40   40  -40  -40	  40  -40  -40  -40	 -40  -40  -40   40	  40  -40  -40  -40	  40  -40  -40  -40	 -40  -40   40  -40	 -40  -40   40  -40	 -40   40  -40  -40	 -40  -40  -40   40	 -40  -40   40  -40	 -15   15  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40   40  -40  -40	 -40  -40  -40   40	 -40  -40   40  -40	  40  -40  -40  -40	 -40   40  -40  -40	 -40  -40   40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40   40  -40  -40	 -40  -40   40  -40	 -40  -40  -40   40	 -40  -40   40  -40	  32  -40  -40  -32	 -40  -40  -40   40
+ -40  -40   40  -40	 -40  -40  -40   40	 -40   40  -40  -40	  40  -40  -40  -40	  40  -40  -40  -40	 -40  -40   40  -40	 -40  -40   40  -40	  40  -40  -40  -40	 -40   40  -40  -40	 -40  -40  -40   40	 -40  -40   40  -40	 -40  -40   40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	  40  -40  -40  -40	 -40  -40   40  -40	  40  -40  -40  -40	 -40  -40  -40   40	  40  -40  -40  -40	 -40  -40  -40   40	 -40  -40   40  -40	  40  -40  -40  -40	 -40  -40   40  -40	 -40  -40  -40   40	 -40   40  -40  -40	  40  -40  -40  -40	 -40   40  -40  -40	  40  -40  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40   40  -40	 -40  -40  -40   40	 -40  -40  -40   40
+ -40  -40   40  -40	 -40  -40  -40   40	 -40  -40   40  -40	 -40   40  -40  -40	 -40  -40  -40   40	 -40  -40   40  -40	  25  -40  -40  -25	 -40  -40   40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -20   20	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -40   40  -40  -40	 -40  -40  -40   40	 -40  -40   40  -40	 -40  -40  -40   40	 -40  -40  -40   40	  40  -40  -40  -40	 -31   31  -40  -40	 -40  -40  -40   40	 -40  -23   23  -40	 -40  -40  -40   40	 -40  -40   40  -40	  15  -15  -40  -40	 -40   40  -40  -40	  25  -40  -25  -40	 -40  -40  -40   40	 -40  -40  -40   40	  40  -40  -40  -40	  39  -40  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40
+ -40  -40   40  -40	  40  -40  -40  -40	 -40   40  -40  -40	 -40   40  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40   40  -40	 -40   40  -40  -40	 -40  -40  -40   40	 -40  -40   40  -40	 -40   40  -40  -40	 -40  -40  -40   40	  40  -40  -40  -40	  40  -40  -40  -40	  40  -40  -40  -40	 -40  -40   40  -40	 -40  -40   40  -40	 -40  -40  -40   40	 -40   40  -40  -40	 -40  -40  -40   40	  40  -40  -40  -40	 -40  -40   40  -40	 -40  -40   40  -40	  40  -40  -40  -40	 -40  -40   40  -40	 -40   40  -40  -40	 -40  -40  -40   40	  40  -40  -40  -40	  40  -40  -40  -40	  40  -40  -40  -40	 -40  -40   40  -40	  40  -40  -40  -40	  40  -40  -40  -40	 -40  -40  -40   40	 -40  -40   40  -40	 -40  -40   40  -40
+ -40  -40   40  -40	 -40  -40   40  -40	  40  -40  -40  -40	  40  -40  -40  -40	  40  -40  -40  -40	  40  -40  -40  -40	 -40  -40  -40   40	 -40  -40   40  -40	  40  -40  -40  -40	 -40  -40   40  -40	  40  -40  -40  -40	  40  -40  -40  -40	  40  -40  -40  -40	  40  -40  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40   40  -40  -40	 -40  -40   40  -40	  40  -40  -40  -40	 -40   40  -40  -40	 -40   40  -40  -40	 -40  -40  -40   40	  40  -40  -40  -40	 -40  -40  -40   40	 -40   40  -40  -40	 -40   40  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40   40  -40	 -40   40  -40  -40	 -40  -40   40  -40	 -40   40  -40  -40	  40  -40  -40  -40	 -40  -40   40  -40	 -40   40  -40  -40	 -40  -40  -40   40
+ -40  -40   40  -40	  40  -40  -40  -40	 -40  -40   40  -40	 -40  -40  -40   40	 -40   40  -40  -40	 -40  -40  -40   40	 -40   40  -40  -40	  40  -40  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40   40  -40	 -40   40  -40  -40	  40  -40  -40  -40	 -40  -40  -40   40	 -40   40  -40  -40	 -40  -40  -40   40	 -40   40  -40  -40	 -40  -40   40  -40	 -40  -40   40  -40	 -40   40  -40  -40	  40  -40  -40  -40	  40  -40  -40  -40	 -40  -40  -40   40	 -40   40  -40  -40	 -40  -40  -40   40	 -40   40  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -40   40  -40  -40	 -40  -40  -40   40	 -40  -40   40  -40	  40  -40  -40  -40	 -40  -40  -40   40
+ -40  -40   40  -40	 -40  -40  -40   40	 -40   40  -40  -40	  40  -40  -40  -40	 -40  -40  -40   40	  40  -40  -40  -40	  40  -40  -40  -40	 -40  -40   40  -40	  40  -40  -40  -40	 -40  -40   40  -40	 -40  -40   40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	  40  -40  -40  -40	 -40   40  -40  -40	 -40   40  -40  -40	 -40  -40  -40   40	 -40   40  -40  -40	 -40   40  -40  -40	  40  -40  -40  -40	  40  -40  -40  -40	  40  -40  -40  -40	 -40  -40  -40   40	 -40  -40   40  -40	  40  -40  -40  -40	  40  -40  -40  -40	 -40  -40   40  -40	  40  -40  -40  -40	  40  -40  -40  -40	  40  -40  -40  -40	 -40  -40  -40   40	  40  -40  -40  -40	  40  -40  -40  -40	 -40   40  -40  -40
+ -40  -40   40  -40	 -40   40  -40  -40	 -40  -40  -40   40	 -40  -40   40  -40	 -40  -40   40  -40	 -40  -40  -40   40	  40  -40  -40  -40	  40  -40  -40  -40	 -40  -40  -40   40	 -40  -40   40  -40	 -40  -40   40  -40	 -40  -40  -40   40	 -40  -40   40  -40	 -40  -40   40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -36  -40   36	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -24  -40  -40   24	 -40  -40  -40   40	 -14  -40  -40   14	 -40  -40  -40   40	 -40  -40  -40   40
+ -40  -40   40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40   40  -40	  40  -40  -40  -40	 -40  -40   40  -40	 -40  -40   40  -40	 -40   40  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40   40  -40	 -40   40  -40  -40	 -40  -40   40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	  40  -40  -40  -40	 -40  -40  -40   40	 -40  -40   40  -40	 -40  -40   40  -40	 -40  -40  -40   40	  40  -40  -40  -40	 -40   40  -40  -40	 -40  -40   40  -40	 -40   40  -40  -40	 -40  -40  -40   40	 -40  -40   40  -40	 -40  -40   40  -40	  40  -40  -40  -40	 -40   40  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40    9   -9	 -40  -40  -40   40	  23  -40  -40  -23
+ -40  -40   40  -40	  40  -40  -40  -40	 -40  -40   40  -40	 -40  -40   20  -20	  40  -40  -40  -40	 -40  -10   10  -40	  14  -40  -40  -14	 -40  -40   40  -40	 -40  -40  -40   40	 -35  -40   35  -40	 -40   38  -38  -40	  40  -40  -40  -40	 -40  -40   13  -13	 -40  -40   40  -40	 -40  -40  -40   40	  29  -29  -40  -40	 -40  -40  -40   40	 -15  -40  -40   15	  40  -40  -40  -40	  40  -40  -40  -40	 -23  -40  -40   23	  40  -40  -40  -40	  -1  -40  -40    1	 -40   38  -38  -40	  40  -40  -40  -40	  40  -40  -40  -40	 -40  -40   40  -40	 -40  -40   40  -40	 -40  -40  -40   40	 -40  -40   -9    9	 -40  -40  -21   21	 -40  -40   21  -21	 -40  -40  -29   29	 -40  -13   13  -40	  40  -40  -40  -40	 -40  -40   40  -40
+ -40  -40   40  -40	 -40  -40   40  -40	 -40   40  -40  -40	 -40  -40   40  -40	  40  -40  -40  -40	 -40   40  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40   40  -40  -40	  40  -40  -40  -40	 -40   40  -40  -40	 -40  -40   40  -40	 -40   40  -40  -40	 -40   40  -40  -40	  40  -40  -40  -40	 -40  -40   40  -40	  40  -40  -40  -40	  40  -40  -40  -40	 -40  -40  -40   40	  40  -40  -40  -40	 -40   40  -40  -40	 -40  -40   40  -40	  40  -40  -40  -40	  40  -40  -40  -40	  40  -40  -40  -40	 -40  -40   -3    3	  40  -40  -40  -40	 -40   40  -40  -40	 -40   40  -40  -40	  12  -40  -40  -12	 -10  -40   10  -40	 -40  -40   40  -40	 -40  -40  -40   40	  40  -40  -40  -40	 -40  -40  -40   40	 -21  -40  -40   21
+ -40  -40   40  -40	 -40   40  -40  -40	 -40  -40  -40   40	 -40   40  -40  -40	  40  -40  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40   40  -40  -40	  40  -40  -40  -40	 -40  -40   40  -40	 -40  -40   40  -40	 -40   40  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40   40  -40  -40	 -40  -40  -40   40	 -40  -40   40  -40	 -40   40  -40  -40	 -40   40  -40  -40	 -40  -40   40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40   40  -40	 -40  -40   40  -40	  40  -40  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	  40  -40  -40  -40	  40  -40  -40  -40	 -40   40  -40  -40	 -40   40  -40  -40	 -40  -40   40  -40	  40  -40  -40  -40
+ -40  -40   40  -40	 -40  -40   40  -40	 -40  -40   40  -40	  40  -40  -40  -40	 -40  -40  -40   40	 -40  -40   40  -40	  40  -40  -40  -40	  40  -40  -40  -40	 -40   40  -40  -40	  40  -40  -40  -40	 -40  -40  -40   40	  40  -40  -40  -40	  40  -40  -40  -40	 -40  -40  -40   40	  40  -40  -40  -40	  40  -40  -40  -40	 -40  -40   40  -40	 -40   40  -40  -40	  40  -40  -40  -40	  40  -40  -40  -40	 -40  -40  -40   40	 -40  -40   40  -40	  40  -40  -40  -40	 -40   40  -40  -40	 -40  -40   40  -40	 -40   -1    1  -40	 -40   40  -40  -40	  40  -40  -40  -40	 -40  -31   31  -40	 -40   40  -40  -40	  40  -40  -40  -40	  40  -40  -40  -40	 -40  -40  -40   40	  40  -40  -40  -40	  40  -40  -40  -40	  40  -40  -40  -40
+ -40  -40   40  -40	 -40  -40  -40   40	  40  -40  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	  40  -40  -40  -40	 -40   40  -40  -40	 -40   40  -40  -40	  40  -40  -40  -40	  40  -40  -40  -40	 -40  -40  -40   40	 -40  -40   40  -40	  40  -40  -40  -40	 -40   40  -40  -40	 -40   40  -40  -40	  40  -40  -40  -40	  40  -40  -40  -40	  40  -40  -40  -40	 -40  -40  -40   40	 -40   40  -40  -40	  40  -40  -40  -40	  40  -40  -40  -40	  40  -40  -40  -40	 -40  -40   40  -40	  40  -40  -40  -40	  40  -40  -40  -40	  40  -40  -40  -40	 -40  -40  -40   40	 -40  -40   40  -40	  40  -40  -40  -40	 -40   40  -40  -40	 -40  -40  -40   40	 -40   40  -40  -40	 -40  -40   40  -40
+ -40  -40   40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	  40  -40  -40  -40	 -40  -40   40  -40	 -40  -40  -40   40	 -40  -40   40  -40	  40  -40  -40  -40	 -40  -40   40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40   40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40   40  -40  -40	 -40   40  -40  -40	  40  -40  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40   40  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40  -40   40	  40  -40  -40  -40	 -40  -40   40  -40	 -40   40  -40  -40	 -40  -40  -40   40	 -40   40  -40  -40	 -29   29  -40  -40	 -40  -40  -40   40	  40  -40  -40  -40	 -40  -40   36  -36	  40  -40  -40  -40
+ -40  -40   40  -40	 -40  -40  -40   40	  40  -40  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40   40  -40	  20  -20  -40  -40	 -40  -40  -40   40	   3  -40  -40   -3	  40  -40  -40  -40	  40  -40  -40  -40	 -40  -40   40  -40	 -40   40  -40  -40	 -40  -40  -40   40	 -40  -40   40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40  -40   40  -40	 -40   40  -40  -40	 -40   40  -40  -40	 -40  -40   33  -33	  40  -40  -40  -40	 -13  -40  -40   13	   8   -8  -40  -40	 -40   28  -28  -40	 -29  -40  -40   29	 -40  -40  -40   40	   2  -40   -2  -26	 -40  -28   27  -33	  -1    0  -40  -35	  31  -31  -40  -40	 -40   40  -40  -40	 -11  -40  -40   11	  40  -40  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40
+ -40  -40   40  -40	 -40   40  -40  -40	 -40  -40   40  -40	 -40  -40  -40   40	  40  -40  -40  -40	 -40   40  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40	  38  -38  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40	 -40   40  -40  -40	 -40  -40   40  -40	 -40   40  -40  -40	 -40   40  -40  -40	  40  -40  -40  -40	 -40   40  -40  -40	 -40   40  -40  -40	  40  -40  -40  -40	 -40  -40  -40   40	 -40  -40   40  -40	  40  -40  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40	  40  -40  -40  -40	 -40  -40  -40   40	 -40  -40  -40   40	  29  -40  -40  -29	 -40   40  -40  -40	 -40   10  -40  -10	  40  -40  -40  -40	 -40  -40    2   -2	 -13  -40  -40   13	 -40  -40   40  -40	 -40  -40  -40   40	 -40  -40  -40   40
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/solexa_high_quality_hist.pdf	Mon May 19 12:34:37 2014 -0400
@@ -0,0 +1,197 @@
+%PDF-1.1
+%ρ\r
+1 0 obj
+<<
+/CreationDate (D:20080414133351)
+/ModDate (D:20080414133351)
+/Title (R Graphics Output)
+/Producer (R 2.6.2)
+/Creator (R)
+>>
+endobj
+2 0 obj
+<<
+/Type /Catalog
+/Pages 3 0 R
+>>
+endobj
+5 0 obj
+<<
+/Type /Font
+/Subtype /Type1
+/Name /F1
+/BaseFont /ZapfDingbats
+>>
+endobj
+6 0 obj
+<<
+/Type /Page
+/Parent 3 0 R
+/Contents 7 0 R
+/Resources 4 0 R
+>>
+endobj
+7 0 obj
+<<
+/Length 8 0 R
+>>
+stream
+q
+Q q
+BT
+0.000 0.000 0.000 rg
+/F3 1 Tf 14.00 0.00 -0.00 14.00 81.89 397.45 Tm (Histogram of continuous high quality scores) Tj
+/F2 1 Tf 12.00 0.00 -0.00 12.00 118.08 18.72 Tm (Continuous High Quality Score length \(bp\)) Tj
+/F2 1 Tf 0.00 12.00 -12.00 0.00 12.96 183.86 Tm (Frequency \(%\)) Tj
+ET
+Q q
+0.000 0.000 0.000 RG
+0.75 w
+[] 0 d
+1 J
+1 j
+10.00 M
+62.67 73.44 m 380.00 73.44 l S
+62.67 73.44 m 62.67 66.24 l S
+108.00 73.44 m 108.00 66.24 l S
+153.33 73.44 m 153.33 66.24 l S
+198.67 73.44 m 198.67 66.24 l S
+244.00 73.44 m 244.00 66.24 l S
+289.33 73.44 m 289.33 66.24 l S
+334.67 73.44 m 334.67 66.24 l S
+380.00 73.44 m 380.00 66.24 l S
+BT
+0.000 0.000 0.000 rg
+/F2 1 Tf 12.00 0.00 -0.00 12.00 59.33 47.52 Tm (0) Tj
+/F2 1 Tf 12.00 0.00 -0.00 12.00 104.66 47.52 Tm (5) Tj
+/F2 1 Tf 12.00 0.00 -0.00 12.00 146.66 47.52 Tm (10) Tj
+/F2 1 Tf 12.00 0.00 -0.00 12.00 191.99 47.52 Tm (15) Tj
+/F2 1 Tf 12.00 0.00 -0.00 12.00 237.33 47.52 Tm (20) Tj
+/F2 1 Tf 12.00 0.00 -0.00 12.00 282.66 47.52 Tm (25) Tj
+/F2 1 Tf 12.00 0.00 -0.00 12.00 327.99 47.52 Tm (30) Tj
+/F2 1 Tf 12.00 0.00 -0.00 12.00 373.33 47.52 Tm (35) Tj
+ET
+59.04 84.53 m 59.04 339.68 l S
+59.04 84.53 m 51.84 84.53 l S
+59.04 148.32 m 51.84 148.32 l S
+59.04 212.11 m 51.84 212.11 l S
+59.04 275.89 m 51.84 275.89 l S
+59.04 339.68 m 51.84 339.68 l S
+BT
+/F2 1 Tf 0.00 12.00 -12.00 0.00 41.76 76.19 Tm (0.0) Tj
+/F2 1 Tf 0.00 12.00 -12.00 0.00 41.76 139.98 Tm (0.1) Tj
+/F2 1 Tf 0.00 12.00 -12.00 0.00 41.76 203.77 Tm (0.2) Tj
+/F2 1 Tf 0.00 12.00 -12.00 0.00 41.76 267.55 Tm (0.3) Tj
+/F2 1 Tf 0.00 12.00 -12.00 0.00 41.76 331.34 Tm (0.4) Tj
+ET
+Q q 59.04 73.44 342.72 299.52 re W n
+0.000 0.000 0.000 RG
+0.75 w
+[] 0 d
+1 J
+1 j
+10.00 M
+71.73 84.53 9.07 27.73 re S
+80.80 84.53 9.07 0.00 re S
+89.87 84.53 9.07 13.87 re S
+98.93 84.53 9.07 27.73 re S
+108.00 84.53 9.07 13.87 re S
+117.07 84.53 9.07 27.73 re S
+126.13 84.53 9.07 13.87 re S
+135.20 84.53 9.07 13.87 re S
+144.27 84.53 9.07 0.00 re S
+153.33 84.53 9.07 41.60 re S
+162.40 84.53 9.07 0.00 re S
+171.47 84.53 9.07 0.00 re S
+180.53 84.53 9.07 55.47 re S
+189.60 84.53 9.07 0.00 re S
+198.67 84.53 9.07 13.87 re S
+207.73 84.53 9.07 0.00 re S
+216.80 84.53 9.07 0.00 re S
+225.87 84.53 9.07 13.87 re S
+234.93 84.53 9.07 0.00 re S
+244.00 84.53 9.07 0.00 re S
+253.07 84.53 9.07 27.73 re S
+262.13 84.53 9.07 0.00 re S
+271.20 84.53 9.07 0.00 re S
+280.27 84.53 9.07 27.73 re S
+289.33 84.53 9.07 0.00 re S
+298.40 84.53 9.07 13.87 re S
+307.47 84.53 9.07 0.00 re S
+316.53 84.53 9.07 0.00 re S
+325.60 84.53 9.07 13.87 re S
+334.67 84.53 9.07 13.87 re S
+343.73 84.53 9.07 0.00 re S
+352.80 84.53 9.07 0.00 re S
+361.87 84.53 9.07 0.00 re S
+370.93 84.53 9.07 0.00 re S
+380.00 84.53 9.07 277.33 re S
+Q
+endstream
+endobj
+8 0 obj
+2671
+endobj
+3 0 obj
+<<
+/Type /Pages
+/Kids [
+6 0 R
+]
+/Count 1
+/MediaBox [0 0 432 432]
+>>
+endobj
+4 0 obj
+<<
+/ProcSet [/PDF /Text]
+/Font << /F1 5 0 R /F2 10 0 R /F3 11 0 R >>
+/ExtGState << >>
+>>
+endobj
+9 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 45/minus 96/quoteleft
+144/dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent
+/dieresis /.notdef /ring /cedilla /.notdef /hungarumlaut /ogonek /caron /space]
+>>
+endobj
+10 0 obj <<
+/Type /Font
+/Subtype /Type1
+/Name /F2
+/BaseFont /Helvetica
+/Encoding 9 0 R
+>> endobj
+11 0 obj <<
+/Type /Font
+/Subtype /Type1
+/Name /F3
+/BaseFont /Helvetica-Bold
+/Encoding 9 0 R
+>> endobj
+xref
+0 12
+0000000000 65535 f 
+0000000021 00000 n 
+0000000163 00000 n 
+0000003119 00000 n 
+0000003202 00000 n 
+0000000212 00000 n 
+0000000295 00000 n 
+0000000375 00000 n 
+0000003099 00000 n 
+0000003306 00000 n 
+0000003563 00000 n 
+0000003660 00000 n 
+trailer
+<<
+/Size 12
+/Info 1 0 R
+/Root 2 0 R
+>>
+startxref
+3762
+%%EOF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tool_dependencies.xml	Mon May 19 12:34:37 2014 -0400
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<tool_dependency>
+  <package name="rpy" version="1.0.3">
+    <repository changeset_revision="82170c94ca7c" name="package_rpy_1_0_3" owner="devteam" toolshed="http://toolshed.g2.bx.psu.edu" />
+  </package>
+  <package name="R" version="2.11.0">
+    <repository changeset_revision="5824d2b3bc8b" name="package_r_2_11_0" owner="devteam" toolshed="http://toolshed.g2.bx.psu.edu" />
+  </package>
+</tool_dependency>