# HG changeset patch
# User devteam
# Date 1400517277 14400
# Node ID 556ceed246997dfaba4724a14bfe14da441cee54
Imported from capsule None
diff -r 000000000000 -r 556ceed24699 short_reads_figure_high_quality_length.py
--- /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
diff -r 000000000000 -r 556ceed24699 short_reads_figure_high_quality_length.xml
--- /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 @@
+
+ of high quality score reads
+
+ rpy
+ R
+
+short_reads_figure_high_quality_length.py $input1 $output1 $input2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+.. 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::
+
+ >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::
+
+ >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.
+
+
+
+
diff -r 000000000000 -r 556ceed24699 test-data/454.qual
--- /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
diff -r 000000000000 -r 556ceed24699 test-data/454_high_quality_hist.pdf
--- /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
diff -r 000000000000 -r 556ceed24699 test-data/solexa.qual
--- /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
diff -r 000000000000 -r 556ceed24699 test-data/solexa_high_quality_hist.pdf
--- /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
diff -r 000000000000 -r 556ceed24699 tool_dependencies.xml
--- /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 @@
+
+
+
+
+
+
+
+
+