changeset 0:a809505b78af draft default tip

Imported from capsule None
author devteam
date Mon, 19 May 2014 11:00:13 -0400
parents
children
files short_reads_boxplot.png short_reads_figure_score.py short_reads_figure_score.xml test-data/454.qual test-data/454Score.png test-data/solexa.qual test-data/solexaScore.png tool_dependencies.xml
diffstat 8 files changed, 429 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
Binary file short_reads_boxplot.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/short_reads_figure_score.py	Mon May 19 11:00:13 2014 -0400
@@ -0,0 +1,248 @@
+#!/usr/bin/env python
+"""
+boxplot:
+- box: first quartile and third quartile
+- line inside the box: median
+- outlier: 1.5 IQR higher than the third quartile or 1.5 IQR lower than the first quartile
+           IQR = third quartile - first quartile
+- The smallest/largest value that is not an outlier is connected to the box by with a horizontal line.
+"""
+
+import os, sys, math, tempfile, re
+from rpy import *
+
+assert sys.version_info[:2] >= ( 2, 4 )
+
+def stop_err( msg ):
+    sys.stderr.write( "%s\n" % msg )
+    sys.exit()
+
+def merge_to_20_datapoints( score ):
+    number_of_points = 20
+    read_length = len( score )
+    step = int( math.floor( ( read_length - 1 ) * 1.0 / number_of_points ) )
+    scores = []
+    point = 1
+    point_sum = 0
+    step_average = 0
+    score_points = 0
+    
+    for i in xrange( 1, read_length ):
+        if i < ( point * step ):
+            point_sum += int( score[i] )
+            step_average += 1
+        else:
+            point_avg = point_sum * 1.0 / step_average
+            scores.append( point_avg )
+            point += 1
+            point_sum = 0
+            step_average = 0                       
+    if step_average > 0:
+        point_avg = point_sum * 1.0 / step_average
+        scores.append( point_avg )
+    if len( scores ) > number_of_points:
+        last_avg = 0
+        for j in xrange( number_of_points - 1, len( scores ) ):
+            last_avg += scores[j]
+        last_avg = last_avg / ( len(scores) - number_of_points + 1 )
+    else:    
+        last_avg = scores[-1]
+    score_points = []
+    for k in range( number_of_points - 1 ):
+        score_points.append( scores[k] )
+    score_points.append( last_avg )
+    return score_points
+
+def __main__():
+
+    invalid_lines = 0
+
+    infile_score_name = sys.argv[1].strip()
+    outfile_R_name = sys.argv[2].strip()
+
+    infile_name = infile_score_name
+
+    # Determine tabular or fasta format within the first 100 lines
+    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.')
+
+    # Determine fixed length or variable length within the first 100 lines
+    read_length = 0
+    variable_length = False
+    if seq_method == 'solexa':
+        for i, line in enumerate( file( infile_name ) ):
+            line = line.rstrip( '\r\n' )
+            if not line or line.startswith( '#' ):
+                continue
+            scores = line.split('\t')
+            if read_length == 0:
+                read_length = len( scores )
+            if read_length != len( scores ):
+                variable_length = True
+                break
+            if i == 100:
+                break
+    elif seq_method == '454':
+        score = ''
+        for i, line in enumerate( file( infile_name ) ):
+            line = line.rstrip( '\r\n' )
+            if not line or line.startswith( '#' ):
+                continue
+            if line.startswith( '>' ):
+                if len( score ) > 0:
+                    score = score.split()
+                    if read_length == 0:
+                        read_length = len( score )
+                    if read_length != len( score ):
+                        variable_length = True
+                        break
+                score = ''
+            else:
+                score = score + ' ' + line
+            if i == 100:
+                break
+
+    if variable_length:
+        number_of_points = 20
+    else:
+        number_of_points = read_length
+    read_length_threshold = 100 # minimal read length for 454 file
+    score_points = []   
+    score_matrix = []
+    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
+            tmp_array = []
+            scores = line.split( '\t' )
+            for bases in scores:
+                nuc_errors = bases.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:
+                    #print 'Invalid numbers in the file. Skipped.'
+                    invalid_scores += 1
+                    big = 0
+                tmp_array.append( big )                        
+            score_points.append( tmp_array )
+    elif seq_method == '454':
+        # skip the last fasta sequence
+        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( score ) > 0:
+                    score = ['0'] + score.split()
+                    read_length = len( score )
+                    tmp_array = []
+                    if not variable_length:
+                        score.pop(0)
+                        score_points.append( score )
+                        tmp_array = score
+                    elif read_length > read_length_threshold:
+                        score_points_tmp = merge_to_20_datapoints( score )
+                        score_points.append( score_points_tmp )
+                        tmp_array = score_points_tmp
+                score = ''
+            else:
+                score = "%s %s" % ( score, line )
+        if len( score ) > 0:
+            score = ['0'] + score.split()
+            read_length = len( score )
+            if not variable_length:
+                score.pop(0)
+                score_points.append( score )
+            elif read_length > read_length_threshold:
+                score_points_tmp = merge_to_20_datapoints( score )
+                score_points.append( score_points_tmp )
+                tmp_array = score_points_tmp
+
+    # reverse the matrix, for R
+    for i in range( number_of_points - 1 ):
+        tmp_array = []
+        for j in range( len( score_points ) ):
+            try:
+                tmp_array.append( int( score_points[j][i] ) )
+            except:
+                invalid_lines += 1
+        score_matrix.append( tmp_array )
+
+    # generate pdf figures
+    #outfile_R_pdf = outfile_R_name 
+    #r.pdf( outfile_R_pdf )
+    outfile_R_png = outfile_R_name
+    r.bitmap( outfile_R_png )
+    
+    title = "boxplot of quality scores"
+    empty_score_matrix_columns = 0
+    for i, subset in enumerate( score_matrix ):
+        if not subset:
+            empty_score_matrix_columns += 1
+            score_matrix[i] = [0]
+            
+    if not variable_length:
+        r.boxplot( score_matrix, xlab="location in read length", main=title )
+    else:
+        r.boxplot( score_matrix, xlab="position within read (% of total length)", xaxt="n", main=title )
+        x_old_range = []
+        x_new_range = []
+        step = read_length_threshold / number_of_points 
+        for i in xrange( 0, read_length_threshold, step ):
+            x_old_range.append( ( i / step ) )
+            x_new_range.append( i )
+        r.axis( 1, x_old_range, x_new_range )
+    r.dev_off()
+
+    if invalid_scores > 0:
+        print 'Skipped %d invalid scores. ' % invalid_scores
+    if invalid_lines > 0:
+        print 'Skipped %d invalid lines. ' % invalid_lines
+    if empty_score_matrix_columns > 0:
+        print '%d missing scores in score_matrix. ' % empty_score_matrix_columns
+
+    r.quit(save = "no")
+
+if __name__=="__main__":__main__()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/short_reads_figure_score.xml	Mon May 19 11:00:13 2014 -0400
@@ -0,0 +1,87 @@
+<tool id="quality_score_distribution" name="Build base quality distribution" version="1.0.2">
+<description></description>
+<requirements>
+    <requirement type="package" version="2.11.1">fontconfig</requirement>
+    <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_score.py $input1 $output1 </command>
+<inputs>
+<page>
+    <param name="input1" type="data" format="qualsolexa, qual454" label="Quality score file" help="No dataset? Read tip below"/>
+</page>
+</inputs>
+
+<outputs>
+  	<data name="output1" format="png" />
+</outputs> 
+<tests>
+	<test>
+		<param name="input1" value="solexa.qual" ftype="qualsolexa" />
+  		<output name="output1" file="solexaScore.png" ftype="png" />
+	</test>
+	<test>
+		<param name="input1" value="454.qual" ftype="qual454" />
+		<output name="output1" file="454Score.png" ftype="png" />
+	</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 graph showing score distribution like the one below. Such graph allows you to perform initial evaluation of data quality in a single pass.
+
+-----
+
+**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	 
+ 
+-----
+
+**Output example**
+
+Quality scores are summarized as boxplot (Roche 454 FLX data):
+
+.. image:: short_reads_boxplot.png
+
+where the **X-axis** is coordinate along the read and the **Y-axis** is quality score adjusted to comply with the Phred score metric. Units on the X-axis depend on whether your data comes from Roche (454) or Illumina (Solexa) and ABI SOLiD machines:
+
+  - For Roche (454) X-axis (shown above) indicates **relative** position (in %) within reads as this technology produces reads of different lengths;
+  - For Illumina (Solexa) and ABI SOLiD X-axis shows **absolute** position in nucleotides within reads.
+  
+Every box on the plot shows the following values::
+
+       o     &lt;---- Outliers
+       o
+      -+-    &lt;---- Upper Extreme Value that is no more 
+       |           than box length away from the box   
+       |
+    +--+--+  &lt;---- Upper Quartile
+    |     |
+    +-----+  &lt;---- Median
+    |     |
+    +--+--+  &lt;---- Lower Quartile 
+       |
+       |
+      -+-    &lt;---- Lower Extreme Value that is no more
+                   than box length away from the box
+       o     &lt;---- Outlier
+ 
+ 
+     
+</help>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/454.qual	Mon May 19 11:00:13 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
Binary file test-data/454Score.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/solexa.qual	Mon May 19 11:00:13 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
Binary file test-data/solexaScore.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tool_dependencies.xml	Mon May 19 11:00:13 2014 -0400
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<tool_dependency>
+  <package name="fontconfig" version="2.11.1">
+      <repository changeset_revision="36d9971ad7bd" name="package_fontconfig_2_11_1" owner="devteam" toolshed="http://testtoolshed.g2.bx.psu.edu" />
+    </package>
+    <package name="rpy" version="1.0.3">
+      <repository changeset_revision="c0eb80864491" name="package_rpy_1_0_3" owner="devteam" toolshed="http://testtoolshed.g2.bx.psu.edu" />
+    </package>
+    <package name="R" version="2.11.0">
+      <repository changeset_revision="497dd02b0fe2" name="package_r_2_11_0" owner="devteam" toolshed="http://testtoolshed.g2.bx.psu.edu" />
+    </package>
+</tool_dependency>