Next changeset 1:25e6fe525306 (2015-11-11) |
Commit message:
Imported from capsule None |
added:
short_reads_trim_seq.py short_reads_trim_seq.xml test-data/454.fasta test-data/454.qual test-data/short_reads_trim_seq_out1.fasta test-data/short_reads_trim_seq_out2.fasta test-data/solexa.fasta test-data/solexa.qual |
b |
diff -r 000000000000 -r f17a1585733b short_reads_trim_seq.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/short_reads_trim_seq.py Mon May 19 12:34:17 2014 -0400 |
[ |
b'@@ -0,0 +1,234 @@\n+#!/usr/bin/env python\n+"""\n+trim reads based on the quality scores\n+input: read file and quality score file\n+output: trimmed read file\n+"""\n+\n+import os, sys, math, tempfile, re\n+\n+assert sys.version_info[:2] >= ( 2, 4 )\n+\n+def stop_err( msg ):\n+ sys.stderr.write( "%s\\n" % msg )\n+ sys.exit()\n+\n+def append_to_outfile( outfile_name, seq_title, segments ):\n+ segments = segments.split( \',\' )\n+ if len( segments ) > 1:\n+ outfile = open( outfile_name, \'a\' )\n+ for i in range( len( segments ) ):\n+ outfile.write( "%s_%d\\n%s\\n" % ( seq_title, i, segments[i] ) )\n+ outfile.close()\n+ elif segments[0]:\n+ outfile = open( outfile_name, \'a\' )\n+ outfile.write( "%s\\n%s\\n" % ( seq_title, segments[0] ) )\n+ outfile.close()\n+\n+def trim_seq( seq, score, arg, trim_score, threshold ):\n+ seq_method = \'454\'\n+ trim_pos = 0\n+ # trim after a certain position\n+ if arg.isdigit():\n+ keep_homopolymers = False\n+ trim_pos = int( arg ) \n+ if trim_pos > 0 and trim_pos < len( seq ):\n+ seq = seq[0:trim_pos]\n+ else:\n+ keep_homopolymers = arg==\'yes\'\n+ \n+ new_trim_seq = \'\'\n+ max_segment = 0\n+\n+ for i in range( len( seq ) ):\n+ if i >= len( score ):\n+ score.append(-1) \n+ if int( score[i] ) >= trim_score:\n+ pass_nuc = seq[ i:( i + 1 ) ]\n+ else:\n+ if keep_homopolymers and ( (i == 0 ) or ( seq[ i:( i + 1 ) ].lower() == seq[ ( i - 1 ):i ].lower() ) ):\n+ pass_nuc = seq[ i:( i + 1 ) ]\n+ else:\n+ pass_nuc = \' \' \n+ new_trim_seq = \'%s%s\' % ( new_trim_seq, pass_nuc )\n+ # find the max substrings\n+ segments = new_trim_seq.split()\n+ max_segment = \'\'\n+ len_max_segment = 0\n+ if threshold == 0:\n+ for seg in segments:\n+ if len_max_segment < len( seg ):\n+ max_segment = \'%s,\' % seg\n+ len_max_segment = len( seg )\n+ elif len_max_segment == len( seg ):\n+ max_segment = \'%s%s,\' % ( max_segment, seg )\n+ else:\n+ for seg in segments:\n+ if len( seg ) >= threshold:\n+ max_segment = \'%s%s,\' % ( max_segment, seg )\n+ return max_segment[ 0:-1 ]\n+\n+def __main__():\n+ \n+ try:\n+ threshold_trim = int( sys.argv[1].strip() )\n+ except:\n+ stop_err( "Minimal quality score must be numeric." )\n+ try:\n+ threshold_report = int( sys.argv[2].strip() )\n+ except:\n+ stop_err( "Minimal length of trimmed reads must be numeric." )\n+ outfile_seq_name = sys.argv[3].strip()\n+ infile_seq_name = sys.argv[4].strip()\n+ infile_score_name = sys.argv[5].strip()\n+ arg = sys.argv[6].strip()\n+\n+ seq_infile_name = infile_seq_name\n+ score_infile_name = infile_score_name\n+ \n+\n+ # Determine quailty score format: tabular or fasta format within the first 100 lines\n+ seq_method = None\n+ data_type = None\n+ for i, line in enumerate( file( score_infile_name ) ):\n+ line = line.rstrip( \'\\r\\n\' )\n+ if not line or line.startswith( \'#\' ):\n+ continue\n+ if data_type == None:\n+ if line.startswith( \'>\' ):\n+ data_type = \'fasta\'\n+ continue\n+ elif len( line.split( \'\\t\' ) ) > 0:\n+ fields = line.split()\n+ for score in fields:\n+ try:\n+ int( score )\n+ data_type = \'tabular\'\n+ seq_method = \'solexa\'\n+ break\n+ except:\n+ break\n+ elif data_type == \'fasta\':\n+ fields = line.split()\n+ for score in fields:\n+ try: \n+ int( score )\n+ seq_method = \'454\'\n+ break\n+ except:\n+ '..b'al in score_line.split():\n+ try:\n+ int( val ) \n+ except:\n+ score_file.close()\n+ stop_err( "Non-numerical value \'%s\' in score file." % val )\n+ if not score:\n+ score = score_line\n+ else:\n+ score = \'%s %s\' % ( score, score_line ) \n+ elif data_type == \'tabular\':\n+ score = score_file.readline().rstrip(\'\\r\\n\')\n+ loc = score.split( \'\\t\' )\n+ for base in loc:\n+ nuc_error = base.split()\n+ try:\n+ nuc_error[0] = int( nuc_error[0] )\n+ nuc_error[1] = int( nuc_error[1] )\n+ nuc_error[2] = int( nuc_error[2] )\n+ nuc_error[3] = int( nuc_error[3] )\n+ big = max( nuc_error )\n+ except:\n+ score_file.close()\n+ stop_err( "Invalid characters in line %d: \'%s\'" % ( i, line ) )\n+ scores.append( big )\n+ if scores:\n+ new_trim_seq_segments = trim_seq( seq, scores, arg, threshold_trim, threshold_report )\n+ append_to_outfile( outfile_seq_name, seq_title, new_trim_seq_segments ) \n+ \n+ seq_title = line\n+ seq = None\n+ else:\n+ if not seq:\n+ seq = line\n+ else:\n+ seq = "%s%s" % ( seq, line )\n+ if seq:\n+ scores = []\n+ if data_type == \'fasta\':\n+ score = None\n+ while score_line:\n+ score_line = score_file.readline().rstrip( \'\\r\\n\' )\n+ if not score_line or score_line.startswith( \'#\' ) or score_line.startswith( \'>\' ):\n+ continue\n+ for val in score_line.split():\n+ try:\n+ int( val )\n+ except:\n+ score_file.close()\n+ stop_err( "Non-numerical value \'%s\' in score file." % val )\n+ if not score:\n+ score = score_line\n+ else:\n+ score = "%s %s" % ( score, score_line ) \n+ if score: \n+ scores = score.split()\n+ elif data_type == \'tabular\':\n+ score = score_file.readline().rstrip(\'\\r\\n\')\n+ loc = score.split( \'\\t\' )\n+ for base in loc:\n+ nuc_error = base.split()\n+ try:\n+ nuc_error[0] = int( nuc_error[0] )\n+ nuc_error[1] = int( nuc_error[1] )\n+ nuc_error[2] = int( nuc_error[2] )\n+ nuc_error[3] = int( nuc_error[3] )\n+ big = max( nuc_error )\n+ except:\n+ score_file.close()\n+ stop_err( "Invalid characters in line %d: \'%s\'" % ( i, line ) )\n+ scores.append( big )\n+ if scores:\n+ new_trim_seq_segments = trim_seq( seq, scores, arg, threshold_trim, threshold_report )\n+ append_to_outfile( outfile_seq_name, seq_title, new_trim_seq_segments ) \n+ score_file.close()\n+ else:\n+ stop_err( "Cannot locate sequence file \'%s\'or score file \'%s\'." % ( seq_infile_name, score_infile_name ) ) \n+\n+if __name__ == "__main__": __main__()\n' |
b |
diff -r 000000000000 -r f17a1585733b short_reads_trim_seq.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/short_reads_trim_seq.xml Mon May 19 12:34:17 2014 -0400 |
b |
@@ -0,0 +1,93 @@ +<tool id="trim_reads" name="Select high quality segments" version="1.0.0"> +<description></description> + +<command interpreter="python"> + short_reads_trim_seq.py $trim $length $output1 $input1 $input2 $sequencing_method_choice.input3 +</command> +<inputs> +<page> + <param name="input1" type="data" format="fasta" label="Reads" /> + <param name="input2" type="data" format="qualsolexa,qual454" label="Quality scores" /> + <param name="trim" type="integer" size="5" value="20" label="Minimal quality score" help="bases scoring below this value will trigger splitting"/> + <param name="length" type="integer" size="5" value="100" label="Minimal length of contiguous segment" help="report all high quality segments above this length. Setting this option to '0' will cause the program to return a single longest run of high quality bases per read" /> + <conditional name="sequencing_method_choice"> + <param name="sequencer" type="select" label="Select technology"> + <option value="454">Roche (454) or ABI SOLiD</option> + <option value="Solexa">Illumina (Solexa)</option> + </param> + <when value="454"> + <param name="input3" type="select" label="Low quality bases in homopolymers" help="if set to 'DO NOT trigger splitting' the program will not count low quality bases that are within or adjacent to homonucleotide runs. This will significantly reduce fragmentation of 454 data"> + <option value="yes">DO NOT trigger splitting </option> + <option value="no">trigger splitting</option> + </param> + </when> + <when value="Solexa"> + <param name="input3" type="integer" size="5" value="0" label="Restrict length of each read to" help="('0' = do not trim) The quality of Solexa reads drops towards the end. This option allows selecting the specified number of nucleotides from the beginning and then running the tool." /> + </when> + </conditional> +</page> +</inputs> + +<outputs> + <data name="output1" format="fasta" /> +</outputs> + +<tests> + <test> + <param name="sequencer" value="454" /> + <param name="input1" value="454.fasta" ftype="fasta" /> + <param name="input2" value="454.qual" ftype="qual454" /> + <param name="input3" value="no" /> + <param name="trim" value="20" /> + <param name="length" value="0" /> + <output name="output1" file="short_reads_trim_seq_out1.fasta" /> + </test> + <test> + <param name="sequencer" value="Solexa" /> + <param name="input1" value="solexa.fasta" ftype="fasta" /> + <param name="input2" value="solexa.qual" ftype="qualsolexa" /> + <param name="input3" value="0" /> + <param name="trim" value="20" /> + <param name="length" value="0" /> + <output name="output1" file="short_reads_trim_seq_out2.fasta" /> + </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 finds high quality segments within sequencing reads generated by by Roche (454), Illumina (Solexa), or ABI SOLiD machines. + +----- + +**Example** + + +Suppose this is your sequencing read:: + + 5'---------*-------------*------**----3' + +where **dashes** (-) are HIGH quality bases (above 20) and **asterisks** (*) are LOW quality bases (below 20). If the **Minimal length of contiguous segment** is set to **5** (of course, only for the purposes of this example), the tool will return:: + + 5'--------- + ------------- + ------- + +you can see that the tool simply splits the read on low quality bases and then returns all segments longer than 5. **Note**, that the output of this tool will likely contain higher number of shorter sequences compared to the original input. If we set the **Minimal length of contiguous segment** to **0**, the tool will only return the single longest segment:: + + ------------- + + + + + + +</help> +</tool> |
b |
diff -r 000000000000 -r f17a1585733b test-data/454.fasta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/454.fasta Mon May 19 12:34:17 2014 -0400 |
b |
@@ -0,0 +1,52 @@ +>EYKX4VC01B65GS length=54 xy=0784_1754 region=1 run=R_2007_11_07_16_15_57_ +CCGGTATCCGGGTGCCGTGATGAGCGCCACCGGAACGAATTCGACTATGCCGAA +>EYKX4VC01BNCSP length=187 xy=0558_3831 region=1 run=R_2007_11_07_16_15_57_ +CTTACCGGTCACCACCGTGCCTTCAGGATTGATCGCCAGATCGGTCGGTGCGTCAGGCGG +GGTGACATCGCCCACCACGGTACTCACTGGCTGGCTCTGGTTCCCGGCGGCATCGGAGGC +CACCACGTTGAGGGTATTCCCCTCGGTTTGTGGCTCGGTGAGAACCACGTTGTAGTCGCC +ATTGGTC +>EYKX4VC01CD9FT length=115 xy=0865_1719 region=1 run=R_2007_11_07_16_15_57_ +GGGGGCTTTGGCCTGTCGTCCGGCACCTCGCAAGAGCTACAGCAGGCGCGGCTGGCGATC +ATCGGCGGCACGCCGGCCTATATGTCGCCGGAACACACCACCCGCACCCAACGCG +>EYKX4VC01B8FW0 length=95 xy=0799_0514 region=1 run=R_2007_11_07_16_15_57_ +TAAATTTCAAGGAATGCAAATCAGGGTCGTGTGTTTAGACTTCGGCTTTAGAGACCTGAA +TACGTCAAAAACATAACTTCATGATATCTTGCAGT +>EYKX4VC01BCGYW length=115 xy=0434_3926 region=1 run=R_2007_11_07_16_15_57_ +GGCCAGCCGGGACAGCGTTGTTGGGCTGCATGGCGACGAGCTAAAAGTCGCCATCACCGC +CCCGCCGGTTGATGGGCAGGCTAATGCCCATCTGGTAAAAACTTTCTCGCCAAAC +>EYKX4VC01AZXC6 length=116 xy=0292_0280 region=1 run=R_2007_11_07_16_15_57_ +GGGGGCGTTTGGCCTGTCGTCCGGCACCTCGCAAGAGCTACAGCAGGCGCGGCTGGCGAT +CATCGGCGGCACGCCGGCCTATATGTCGCCGGAACACACCACCCGCACCCAACGCG +>EYKX4VC01CATH5 length=82 xy=0826_0843 region=1 run=R_2007_11_07_16_15_57_ +CGAAATTGCACATTCTCGGCCATATCTCTGGACCTACATGACCGATTTGATCATCTTCGA +ACTTAGCCTTCCTTTNTTAACG +>EYKX4VC01BCEIV length=47 xy=0434_0757 region=1 run=R_2007_11_07_16_15_57_ +TGACGTCGTGCCGAGCTACGACAATGCCGACATGGTGATCGTTAACA +>EYKX4VC01BWERM length=83 xy=0662_0304 region=1 run=R_2007_11_07_16_15_57_ +CGGTCGGCCTCACCATGGAGAAGATCCCGCCCCGGCCGAGGTCATGGTGGATCTCGGCCA +GGGCGTGCTGATGAAGTTCAAAT +>EYKX4VC01BT2O7 length=69 xy=0635_1945 region=1 run=R_2007_11_07_16_15_57_ +AGCGTTTCTCCAGCCGGTCGGCTACGCCGTTTGCCCCTGAAAGACGCTGTTCAGACCGAA +CGCGGTAAA +>EYKX4VC01BO0UO length=222 xy=0577_3838 region=1 run=R_2007_11_07_16_15_57_ +AGACCTGGGACAGCGGCGGGCTGCTGAAGCCGCAGGCGATAGAGGACAAACTGCAGTACC +GCTTCTGGCTGCACTATGCCGAAGGCTCGCTGATGCCGCTGCTGTTAATGAAGCTGGTGT +TCGCCAGCCTGGGTAAACCCCCTGTGCCCTTTGGCGTCCGCTCGCTGGGCGCCCTGCTGG +GCAAGGGCATTCAGAAAGCGTGGCTGGATCCCCAGCTGGCCA +>EYKX4VC01CBCPK length=83 xy=0832_1158 region=1 run=R_2007_11_07_16_15_57_ +CGGTCGGCCTCACCATGGAGAAGATCCCGCCCCGGCCGAGGTCATGGTGGATCTCGGCCA +GGGCGTGCTGATGAAGTTCAAAT +>EYKX4VC01B474S length=54 xy=0762_2010 region=1 run=R_2007_11_07_16_15_57_ +AGCAGTTTTCCAGCGCTTTCGAAGAGCGCTGGCGCGCGCGGGCTTCCAGCATAT +>EYKX4VC01BB4QL length=57 xy=0431_0363 region=1 run=R_2007_11_07_16_15_57_ +GGGGAGGAGCTAATAATATGCTCTTGGGGAGGAGCTAATTATATGCTCTTGGGGAGG +>EYKX4VC01BJ37M length=64 xy=0522_0192 region=1 run=R_2007_11_07_16_15_57_ +TCGAGTATGTATCAAGGACTACATACAAATTTGCCAAAAGAGATTATGCACTATCCCGAC +TTCC +>EYKX4VC01BV9R8 length=54 xy=0660_2038 region=1 run=R_2007_11_07_16_15_57_ +AAAACTCGGAGAAACTATTCAGCAGCACTGCGTTTCGCTGAATTTTAGACCGTT +>EYKX4VC01CEPP8 length=60 xy=0870_2350 region=1 run=R_2007_11_07_16_15_57_ +CTGGGTGGGTGCACTACAGGAACGTCATTTGTTCAATCCTCACGTTGTTGTTAGTGTCAG +>EYKX4VC01BTLME length=78 xy=0630_0292 region=1 run=R_2007_11_07_16_15_57_ +TTATCCACACGCTGTCCGGATCCAGCGCCAGGCGCCGACGCTGGACTTCCGCCGCCTGCG +CCCAGTTGCCCTGACTTC |
b |
diff -r 000000000000 -r f17a1585733b test-data/454.qual --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/454.qual Mon May 19 12:34:17 2014 -0400 |
b |
@@ -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 |
b |
diff -r 000000000000 -r f17a1585733b test-data/short_reads_trim_seq_out1.fasta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/short_reads_trim_seq_out1.fasta Mon May 19 12:34:17 2014 -0400 |
b |
@@ -0,0 +1,36 @@ +>EYKX4VC01B65GS length=54 xy=0784_1754 region=1 run=R_2007_11_07_16_15_57_ +TGCCGTGATGAGCGCCACCGGAACGAATTCGACTATGCCGAA +>EYKX4VC01BNCSP length=187 xy=0558_3831 region=1 run=R_2007_11_07_16_15_57_ +CAGGATTGATCGCCAGATCGGTCGGTGCGTCAGGCGGG +>EYKX4VC01CD9FT length=115 xy=0865_1719 region=1 run=R_2007_11_07_16_15_57_ +GGCCTGTCGTCCGGCACCTCGCAAGAGCTACAGCAGGCGCGGCTGGCGATCATCGGCGGCACGCCGGCCTATATGTCGCCGGAACACACCACC +>EYKX4VC01B8FW0 length=95 xy=0799_0514 region=1 run=R_2007_11_07_16_15_57_ +AGAGACCTGAATACGTCAAA +>EYKX4VC01BCGYW length=115 xy=0434_3926 region=1 run=R_2007_11_07_16_15_57_ +CTGCATGGCGACGAGCTAAA +>EYKX4VC01AZXC6 length=116 xy=0292_0280 region=1 run=R_2007_11_07_16_15_57_ +GGCCTGTCGTCCGGCACCTCGCAAGAGCTACAGCAGGCGCGGCTGGCGATCATCGGCGGCACGCCGGCCTATATGTCGCCGGAACACACCACC +>EYKX4VC01CATH5 length=82 xy=0826_0843 region=1 run=R_2007_11_07_16_15_57_ +TTGCACATTCTCGGCCATATCTCTGGACCTACATGACCGATT +>EYKX4VC01BCEIV length=47 xy=0434_0757 region=1 run=R_2007_11_07_16_15_57_ +TGACGTCGTGCCGAGCTACGACAATGCCGACATG +>EYKX4VC01BWERM length=83 xy=0662_0304 region=1 run=R_2007_11_07_16_15_57_ +GGCCGAGGTCATGGTGGATCTCGGCCAGG +>EYKX4VC01BT2O7 length=69 xy=0635_1945 region=1 run=R_2007_11_07_16_15_57_ +GACGCTGTTCAGACCGAACGCGGTAA +>EYKX4VC01BO0UO length=222 xy=0577_3838 region=1 run=R_2007_11_07_16_15_57_ +CTGCAGTACCGCTTCTGGCTGCACTATGCCGAAGGCTCGCTGATGCCGCTGCTGTTAATGAAGCTGGTGTTCGCCAGCCTGG +>EYKX4VC01CBCPK length=83 xy=0832_1158 region=1 run=R_2007_11_07_16_15_57_ +GGCCGAGGTCATGGTGGATCTCGGCCAGG +>EYKX4VC01B474S length=54 xy=0762_2010 region=1 run=R_2007_11_07_16_15_57_ +GAGCGCTGGCGCGCGCGG +>EYKX4VC01BB4QL length=57 xy=0431_0363 region=1 run=R_2007_11_07_16_15_57_ +AGGAGCTAATTATATGCTCTTGG +>EYKX4VC01BJ37M length=64 xy=0522_0192 region=1 run=R_2007_11_07_16_15_57_ +TCGAGTATGTATCAAGGACTACATACAA +>EYKX4VC01BV9R8 length=54 xy=0660_2038 region=1 run=R_2007_11_07_16_15_57_ +CTATTCAGCAGCACTGCGTT +>EYKX4VC01CEPP8 length=60 xy=0870_2350 region=1 run=R_2007_11_07_16_15_57_ +TCCTCACGTTGTTGTTAGTGTCAG +>EYKX4VC01BTLME length=78 xy=0630_0292 region=1 run=R_2007_11_07_16_15_57_ +TTATCCACACGCTGTCCGGATCCAGCGCCAGGCGCCGACGCTGGACTTCCGCCGCCTGCGCC |
b |
diff -r 000000000000 -r f17a1585733b test-data/short_reads_trim_seq_out2.fasta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/short_reads_trim_seq_out2.fasta Mon May 19 12:34:17 2014 -0400 |
b |
@@ -0,0 +1,62 @@ +>0 +GACTCATGATTTCTTACCTATTAGTGGTTGAACA +>1 +GTGATATGTATGTTGA +>2 +GTTGTCGATAGAACTTCATGTG +>3 +ACCAACCAGAACGTGAAAAAG +>4 +GTTTATGTTGGTTTCATGGTTT +>5 +GCTTTACCGTCTTTCCAGAAATTGTTCCAAGTATCG +>6 +GCTTGTTTACGAATTAAATCGAAGTGGACTGCTG +>7 +GTTATAACGCCGAAGCGGTAAAAATTTTTATTTTTT +>8 +GTTCTCACTTCTGTTACTCCAGCTTCTTCGGCACCT +>9 +GTGGCCTGTTGAT +>10_0 +GTGACCG +>10_1 +ATAAAGT +>11 +TCGCTACACGCAGGA +>12 +GCTCGTTATGGTTTCCGTTGCTGCCATCTCAAAAAC +>13 +GTTGACGGCCATAAGGCTG +>14 +GTCAAGGACTGGTTTAGATATGAGTCACATTTTGTT +>15 +GTGCTGAGTTTTTTTCTGTTACTGTG +>16 +GACCTTGCTGCTAAAGGTCTAGGAGCTAAAGAATGG +>17 +GGAAAATGAGAAAATTCGACCTATCCTTGCGCAGCT +>18 +GAGTCTCATTTTGCATCTCGGCAATCTCTTTCTGAT +>19 +GTCATAAGAGGTTTTACCTCCAAATGAAGAAATAAC +>20 +GCTGGTAATGGTGGTTTTTTTTTTTTTTTTTTT +>21 +GTTGAGGCTTGCGTTTATGGTACGCTGGACTTT +>22 +CAAGGT +>23 +GGCGACTTCACGCCAGAATACGAAA +>24 +GCTCATTCAGGCTTCTGCCGTTTTGGATTTAACCGA +>25 +GGGATGAACATAATAAGCAATGACG +>26 +GTATTTTACCAATGACCAAATCAAAGAAATGACTCG +>27 +GTTTTTAGTGAGTTGTTCCATTCTTTAGCTCCTAGA +>28 +AAGCTGTTGCCGA +>29 +GCGTACTTATTCGCCACCATGATTATTAC |
b |
diff -r 000000000000 -r f17a1585733b test-data/solexa.fasta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/solexa.fasta Mon May 19 12:34:17 2014 -0400 |
b |
@@ -0,0 +1,60 @@ +>0 +GACTCATGATTTCTTACCTATTAGTGGTTGAACATC +>1 +GTGATATGTATGTTGACGGCCATAAGGCTGCTTCTT +>2 +GTTGTCGATAGAACTTCATGTGCCTGTAAAACAAGT +>3 +ACCAACCAGAACGTGAAAAAGCGTCCTGCGTGTAGC +>4 +GTTTATGTTGGTTTCATGGTTTTGTCTAACTTTATC +>5 +GCTTTACCGTCTTTCCAGAAATTGTTCCAAGTATCG +>6 +GCTTGTTTACGAATTAAATCGAAGTGGACTGCTGGC +>7 +GTTATAACGCCGAAGCGGTAAAAATTTTTATTTTTT +>8 +GTTCTCACTTCTGTTACTCCAGCTTCTTCGGCACCT +>9 +GTGGCCTGTTGATTCTAAAGGTTAGTTTCTTCACGC +>10 +GTGACCGCATAAAGTGCACAACATGGAAATGAGGAC +>11 +GCAGATCGCTACACGCAGGACGCTTTTTCACGTTCT +>12 +GCTCGTTATGGTTTCCGTTGCTGCCATCTCAAAAAC +>13 +GTTGACGGCCATAAGGCTGCTTCTGACGTTCGTGAT +>14 +GTCAAGGACTGGTTTAGATATGAGTCACATTTTGTT +>15 +GTGCTGAGTTTTTTTCTGTTACTGTGACATTAATTT +>16 +GACCTTGCTGCTAAAGGTCTAGGAGCTAAAGAATGG +>17 +GGAAAATGAGAAAATTCGACCTATCCTTGCGCAGCT +>18 +GAGTCTCATTTTGCATCTCGGCAATCTCTTTCTGAT +>19 +GTCATAAGAGGTTTTACCTCCAAATGAAGAAATAAC +>20 +GCTGGTAATGGTGGTTTTTTTTTTTTTTTTTTTTTT +>21 +GTTGAGGCTTGCGTTTATGGTACGCTGGACTTTGTA +>22 +GAGGAGAGTGCAGGTATTAATATCAAGGTTTGTGAG +>23 +GGCGACTTCACGCCAGAATACGAAATACCAGGTATT +>24 +GCTCATTCAGGCTTCTGCCGTTTTGGATTTAACCGA +>25 +GGGATGAACATAATAAGCAATGACGGCAGCAATAAA +>26 +GTATTTTACCAATGACCAAATCAAAGAAATGACTCG +>27 +GTTTTTAGTGAGTTGTTCCATTCTTTAGCTCCTAGA +>28 +GTATTGATAAAGCTGTTGCCGATACTTAGCACTATT +>29 +GCGTACTTATTCGCCACCATGATTATTACCAGTGTT |
b |
diff -r 000000000000 -r f17a1585733b test-data/solexa.qual --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/solexa.qual Mon May 19 12:34:17 2014 -0400 |
b |
b'@@ -0,0 +1,30 @@\n+ -40 -40 40 -40\t 40 -40 -40 -40\t -40 40 -40 -40\t -40 -40 -40 40\t -40 40 -40 -40\t 40 -40 -40 -40\t -40 -40 -40 40\t -40 -40 40 -40\t 40 -40 -40 -40\t -40 -40 -40 40\t -40 -40 -40 40\t -40 -40 -40 40\t -40 40 -40 -40\t -40 -40 -40 40\t -40 -40 -40 40\t 40 -40 -40 -40\t -40 40 -40 -40\t -40 40 -40 -40\t -40 -40 -40 40\t 40 -40 -40 -40\t -40 -40 -40 40\t -40 -40 -40 40\t 40 -40 -40 -40\t -40 -40 40 -40\t -40 -40 -40 40\t -40 -40 40 -40\t -40 -40 40 -40\t -40 -40 -40 40\t -40 -40 -40 40\t -40 -40 40 -40\t 40 -40 -40 -40\t 40 -40 -40 -40\t -40 40 -40 -40\t 40 -40 -40 -40\t -40 -40 -15 15\t -40 40 -40 -40\n+ -40 -40 40 -40\t -40 -40 -40 40\t -40 -40 40 -40\t 40 -40 -40 -40\t -40 -40 -40 40\t 40 -40 -40 -40\t -40 -40 -40 40\t -40 -40 40 -40\t -40 -40 -40 40\t 40 -40 -40 -40\t -40 -40 -40 40\t -40 -40 40 -40\t -40 -40 -40 40\t -40 -40 -40 40\t -40 -40 40 -40\t 40 -40 -40 -40\t -5 5 -40 -40\t -40 -40 40 -40\t -40 -40 40 -40\t -40 21 -40 -21\t -40 40 -40 -40\t 40 -40 -40 -40\t -40 -40 -40 40\t 40 -40 -40 -40\t 12 -40 -40 -12\t -36 -40 36 -40\t -40 -40 40 -40\t -4 4 -40 -40\t -40 -40 -40 40\t -40 -40 14 -14\t -40 40 -40 -40\t -40 -40 -40 40\t -40 -40 -40 40\t -40 40 -40 -40\t -40 -40 -40 40\t -40 -40 -25 25\n+ -40 -40 40 -40\t -40 -40 -40 40\t -40 -40 -40 40\t -40 -40 40 -40\t -40 -40 -40 40\t -40 40 -40 -40\t -40 -40 40 -40\t 40 -40 -40 -40\t -40 -40 -40 40\t 40 -40 -40 -40\t -40 -40 40 -40\t 40 -40 -40 -40\t 40 -40 -40 -40\t -40 40 -40 -40\t -40 -40 -40 40\t -40 -40 -40 40\t -40 34 -40 -34\t 40 -40 -40 -40\t -40 -40 -40 40\t -40 -25 25 -40\t -40 -40 -40 40\t -37 -40 37 -40\t -40 7 -40 -7\t -40 40 -40 -40\t -40 -40 -40 40\t -40 -40 40 -40\t -40 -40 -40 40\t 40 -40 -40 -40\t 38 -40 -40 -38\t 40 -40 -40 -40\t 40 -40 -40 -40\t -40 40 -40 -40\t 40 -40 -40 -40\t 11 -16 -13 -22\t -40 -40 40 -40\t -40 -40 -40 40\n+ 40 -40 -40 -40\t -40 40 -40 -40\t -40 40 -40 -40\t 40 -40 -40 -40\t 40 -40 -40 -40\t -33 33 -40 -40\t -40 40 -40 -40\t 40 -40 -40 -40\t -40 -40 40 -40\t 40 -40 -40 -40\t 40 -40 -40 -40\t -40 40 -40 -40\t -40 -40 40 -40\t -40 -40 -25 25\t -40 -40 40 -40\t 40 -40 -40 -40\t 40 -40 -40 -40\t 40 -40 -40 -40\t 40 -40 -40 -40\t 40 -40 -40 -40\t -40 -40 27 -27\t -5 5 -40 -40\t -40 -40 40 -40\t -40 -40 -40 40\t -40 40 -40 -40\t -40 40 -40 -40\t -40 -40 -40 40\t -40 -40 40 -40\t -40 40 -40 -40\t -40 -37 37 -40\t -40 -40 -40 40\t -40 -40 40 -40\t -40 -40 -25 25\t 40 -40 -40 -40\t -40 -40 34 -34\t -40 40 -40 -40\n+ -40 -40 40 -40\t -40 -40 -40 40\t -40 -40 -40 40\t -40 -40 -40 40\t 40 -40 -40 -40\t -40 -40 -40 40\t -40 -40 40 -40\t -40 -40 -40 40\t -40 -40 -40 40\t -40 -40 40 -40\t -40 -40 40 -40\t -40 -40 -40 40\t -40 -40 -40 40\t -40 -40 -40 40\t -40 40 -40 -40\t 40 -40 -40 -40\t -40 -40 -40 40\t -40 -40 40 -40\t -40 -40 40 -40\t -40 -40 -40 40\t -40 -40 -40 40\t -40 -40 -40 40\t -40 -40 -2 2\t -40 -40 35 -35\t -40 -40 -40 40\t -40 40 -40 -40\t -40 -40 -40 40\t 40 -40 -40 -40\t 40 -40 -40 -40\t -40 36 -40 -36\t -40 -40 -40 40\t -40 -40 -40 40\t -40 -40 -40 40\t 5 -5 -40 -28\t -40 -16 -40 16\t -40 40 -40 -40\n+ -40 -40 40 -40\t -40 40 -40 -40\t -40 -40 -40 40\t -40 -40 -40 40\t -40 -40 -40 40\t 40 -40 -40 -40\t -40 40 -40 -40\t -40 40 -40 -40\t -40 -40 40 -40\t -40 -40 -40 40\t -40 40 -40 -40\t -40 -40 -40 40\t -40 -40 -40 40\t -40 -40 -40 40\t -40 40 -40 -40\t -40 40 -40 -40\t 40 -40 -40 -40\t -40 -40 40 -40\t 40 -40 -40 '..b'-40 40 -40\t -40 40 -40 -40\t -40 40 -40 -40\t -40 -40 40 -40\t -40 -40 -40 40\t -40 -40 -40 40\t -40 -40 -40 40\t -40 -40 -40 40\t -40 -40 40 -40\t -40 -40 40 -40\t 40 -40 -40 -40\t -40 -40 -40 40\t -40 -40 -40 40\t -40 -40 -40 40\t 40 -40 -40 -40\t 40 -40 -40 -40\t -40 40 -40 -40\t -40 40 -40 -40\t -40 -40 40 -40\t 40 -40 -40 -40\n+ -40 -40 40 -40\t -40 -40 40 -40\t -40 -40 40 -40\t 40 -40 -40 -40\t -40 -40 -40 40\t -40 -40 40 -40\t 40 -40 -40 -40\t 40 -40 -40 -40\t -40 40 -40 -40\t 40 -40 -40 -40\t -40 -40 -40 40\t 40 -40 -40 -40\t 40 -40 -40 -40\t -40 -40 -40 40\t 40 -40 -40 -40\t 40 -40 -40 -40\t -40 -40 40 -40\t -40 40 -40 -40\t 40 -40 -40 -40\t 40 -40 -40 -40\t -40 -40 -40 40\t -40 -40 40 -40\t 40 -40 -40 -40\t -40 40 -40 -40\t -40 -40 40 -40\t -40 -1 1 -40\t -40 40 -40 -40\t 40 -40 -40 -40\t -40 -31 31 -40\t -40 40 -40 -40\t 40 -40 -40 -40\t 40 -40 -40 -40\t -40 -40 -40 40\t 40 -40 -40 -40\t 40 -40 -40 -40\t 40 -40 -40 -40\n+ -40 -40 40 -40\t -40 -40 -40 40\t 40 -40 -40 -40\t -40 -40 -40 40\t -40 -40 -40 40\t -40 -40 -40 40\t -40 -40 -40 40\t 40 -40 -40 -40\t -40 40 -40 -40\t -40 40 -40 -40\t 40 -40 -40 -40\t 40 -40 -40 -40\t -40 -40 -40 40\t -40 -40 40 -40\t 40 -40 -40 -40\t -40 40 -40 -40\t -40 40 -40 -40\t 40 -40 -40 -40\t 40 -40 -40 -40\t 40 -40 -40 -40\t -40 -40 -40 40\t -40 40 -40 -40\t 40 -40 -40 -40\t 40 -40 -40 -40\t 40 -40 -40 -40\t -40 -40 40 -40\t 40 -40 -40 -40\t 40 -40 -40 -40\t 40 -40 -40 -40\t -40 -40 -40 40\t -40 -40 40 -40\t 40 -40 -40 -40\t -40 40 -40 -40\t -40 -40 -40 40\t -40 40 -40 -40\t -40 -40 40 -40\n+ -40 -40 40 -40\t -40 -40 -40 40\t -40 -40 -40 40\t -40 -40 -40 40\t -40 -40 -40 40\t -40 -40 -40 40\t 40 -40 -40 -40\t -40 -40 40 -40\t -40 -40 -40 40\t -40 -40 40 -40\t 40 -40 -40 -40\t -40 -40 40 -40\t -40 -40 -40 40\t -40 -40 -40 40\t -40 -40 40 -40\t -40 -40 -40 40\t -40 -40 -40 40\t -40 40 -40 -40\t -40 40 -40 -40\t 40 -40 -40 -40\t -40 -40 -40 40\t -40 -40 -40 40\t -40 40 -40 -40\t -40 -40 -40 40\t -40 -40 -40 40\t -40 -40 -40 40\t 40 -40 -40 -40\t -40 -40 40 -40\t -40 40 -40 -40\t -40 -40 -40 40\t -40 40 -40 -40\t -29 29 -40 -40\t -40 -40 -40 40\t 40 -40 -40 -40\t -40 -40 36 -36\t 40 -40 -40 -40\n+ -40 -40 40 -40\t -40 -40 -40 40\t 40 -40 -40 -40\t -40 -40 -40 40\t -40 -40 -40 40\t -40 -40 40 -40\t 20 -20 -40 -40\t -40 -40 -40 40\t 3 -40 -40 -3\t 40 -40 -40 -40\t 40 -40 -40 -40\t -40 -40 40 -40\t -40 40 -40 -40\t -40 -40 -40 40\t -40 -40 40 -40\t -40 -40 -40 40\t -40 -40 -40 40\t -40 -40 40 -40\t -40 40 -40 -40\t -40 40 -40 -40\t -40 -40 33 -33\t 40 -40 -40 -40\t -13 -40 -40 13\t 8 -8 -40 -40\t -40 28 -28 -40\t -29 -40 -40 29\t -40 -40 -40 40\t 2 -40 -2 -26\t -40 -28 27 -33\t -1 0 -40 -35\t 31 -31 -40 -40\t -40 40 -40 -40\t -11 -40 -40 11\t 40 -40 -40 -40\t -40 -40 -40 40\t -40 -40 -40 40\n+ -40 -40 40 -40\t -40 40 -40 -40\t -40 -40 40 -40\t -40 -40 -40 40\t 40 -40 -40 -40\t -40 40 -40 -40\t -40 -40 -40 40\t -40 -40 -40 40\t 38 -38 -40 -40\t -40 -40 -40 40\t -40 -40 -40 40\t -40 40 -40 -40\t -40 -40 40 -40\t -40 40 -40 -40\t -40 40 -40 -40\t 40 -40 -40 -40\t -40 40 -40 -40\t -40 40 -40 -40\t 40 -40 -40 -40\t -40 -40 -40 40\t -40 -40 40 -40\t 40 -40 -40 -40\t -40 -40 -40 40\t -40 -40 -40 40\t 40 -40 -40 -40\t -40 -40 -40 40\t -40 -40 -40 40\t 29 -40 -40 -29\t -40 40 -40 -40\t -40 10 -40 -10\t 40 -40 -40 -40\t -40 -40 2 -2\t -13 -40 -40 13\t -40 -40 40 -40\t -40 -40 -40 40\t -40 -40 -40 40\n' |