changeset 0:4926b3e1e2fe draft

planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/bowtie_wrappers commit 5a4e0ca9992af3a6e5ed2b533f04bb82ce761e0b
author devteam
date Mon, 09 Nov 2015 11:18:30 -0500
parents
children 867a8c8e870e
files bowtie_wrapper.py bowtie_wrapper.xml test-data/bowtie_in2.fastqsanger test-data/bowtie_in5.fastqillumina test-data/bowtie_in5.fastqsanger test-data/bowtie_in5.fastqsolexa test-data/bowtie_in6.fastqillumina test-data/bowtie_in6.fastqsanger test-data/bowtie_in6.fastqsolexa test-data/bowtie_out10.sam test-data/bowtie_out6.sam test-data/bowtie_out7.sam test-data/bowtie_out8_1.fastq test-data/bowtie_out8_1.fastqillumina.sorted test-data/bowtie_out8_1.fastqsolexa.sorted test-data/bowtie_out8_2.fastq test-data/bowtie_out8_2.fastqillumina.sorted test-data/bowtie_out8_2.fastqsolexa.sorted test-data/bowtie_out9.sam test-data/phiX.fasta tool-data/bowtie_indices.loc.sample tool_data_table_conf.xml.sample tool_dependencies.xml
diffstat 23 files changed, 2303 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bowtie_wrapper.py	Mon Nov 09 11:18:30 2015 -0500
@@ -0,0 +1,467 @@
+#!/usr/bin/env python
+
+"""
+Runs Bowtie on single-end or paired-end data.
+For use with Bowtie v. 0.12.7
+
+usage: bowtie_wrapper.py [options]
+    -t, --threads=t: The number of threads to run
+    -o, --output=o: The output file
+    --output_unmapped_reads=: File name for unmapped reads (single-end)
+    --output_unmapped_reads_l=: File name for unmapped reads (left, paired-end)
+    --output_unmapped_reads_r=: File name for unmapped reads (right, paired-end)
+    --output_suppressed_reads=: File name for suppressed reads because of max setting (single-end)
+    --output_suppressed_reads_l=: File name for suppressed reads because of max setting (left, paired-end)
+    --output_suppressed_reads_r=: File name for suppressed reads because of max setting (right, paired-end)
+    -i, --input1=i: The (forward or single-end) reads file in Sanger FASTQ format
+    -I, --input2=I: The reverse reads file in Sanger FASTQ format
+    -4, --dataType=4: The type of data (SOLiD or Solexa)
+    -2, --paired=2: Whether the data is single- or paired-end
+    -g, --genomeSource=g: The type of reference provided
+    -r, --ref=r: The reference genome to use or index
+    -s, --skip=s: Skip the first n reads
+    -a, --alignLimit=a: Only align the first n reads
+    -T, --trimH=T: Trim n bases from high-quality (left) end of each read before alignment
+    -L, --trimL=L: Trim n bases from low-quality (right) end of each read before alignment
+    -m, --mismatchSeed=m: Maximum number of mismatches permitted in the seed
+    -M, --mismatchQual=M: Maximum permitted total of quality values at mismatched read positions
+    -l, --seedLen=l: Seed length
+    -n, --rounding=n: Whether or not to round to the nearest 10 and saturating at 30
+    -P, --maxMismatches=P: Maximum number of mismatches for -v alignment mode
+    -w, --tryHard=: Whether or not to try as hard as possible to find valid alignments when they exist
+    -V, --allValAligns=V: Whether or not to report all valid alignments per read or pair
+    -v, --valAlign=v: Report up to n valid alignments per read or pair
+    -G, --suppressAlign=G: Suppress all alignments for a read if more than n reportable alignments exist
+    -b, --best=b: Whether or not to make Bowtie guarantee that reported singleton alignments are 'best' in terms of stratum and in terms of the quality values at the mismatched positions
+    -B, --maxBacktracks=B: Maximum number of backtracks permitted when aligning a read
+    -R, --strata=R: Whether or not to report only those alignments that fall in the best stratum if many valid alignments exist and are reportable
+    -j, --minInsert=j: Minimum insert size for valid paired-end alignments
+    -J, --maxInsert=J: Maximum insert size for valid paired-end alignments
+    -O, --mateOrient=O: The upstream/downstream mate orientation for valid paired-end alignment against the forward reference strand
+    -A, --maxAlignAttempt=A: Maximum number of attempts Bowtie will make to match an alignment for one mate with an alignment for the opposite mate
+    -f, --forwardAlign=f: Whether or not to attempt to align the forward reference strand
+    -E, --reverseAlign=E: Whether or not to attempt to align the reverse-complement reference strand
+    -F, --offrate=F: Override the offrate of the index to n
+    -8, --snpphred=8: SNP penalty on Phred scale
+    -6, --snpfrac=6: Fraction of sites expected to be SNP sites
+    -7, --keepends=7: Keep extreme-end nucleotides and qualities
+    -S, --seed=S: Seed for pseudo-random number generator
+    -C, --params=C: Whether to use default or specified parameters
+    -u, --iautoB=u: Automatic or specified behavior
+    -K, --ipacked=K: Whether or not to use a packed representation for DNA strings
+    -Q, --ibmax=Q: Maximum number of suffixes allowed in a block
+    -Y, --ibmaxdivn=Y: Maximum number of suffixes allowed in a block as a fraction of the length of the reference
+    -D, --idcv=D: The period for the difference-cover sample
+    -U, --inodc=U: Whether or not to disable the use of the difference-cover sample
+    -y, --inoref=y: Whether or not to build the part of the reference index used only in paired-end alignment
+    -z, --ioffrate=z: How many rows get marked during annotation of some or all of the Burrows-Wheeler rows
+    -W, --iftab=W: The size of the lookup table used to calculate an initial Burrows-Wheeler range with respect to the first n characters of the query
+    -X, --intoa=X: Whether or not to convert Ns in the reference sequence to As
+    -N, --iendian=N: Endianness to use when serializing integers to the index file
+    -Z, --iseed=Z: Seed for the pseudorandom number generator
+    -x, --indexSettings=x: Whether or not indexing options are to be set
+    -H, --suppressHeader=H: Suppress header
+    --do_not_build_index: Flag to specify that provided file is already indexed and to just use 'as is'
+"""
+
+import optparse, os, shutil, subprocess, sys, tempfile
+
+#Allow more than Sanger encoded variants
+DEFAULT_ASCII_ENCODING = '--phred33-quals'
+GALAXY_FORMAT_TO_QUALITY_SCORE_ENCODING_ARG = { 'fastqsanger':'--phred33-quals', 'fastqillumina':'--phred64-quals', 'fastqsolexa':'--solexa-quals' }
+#FIXME: Integer quality scores are supported only when the '--integer-quals' argument is specified to bowtie; this is not currently able to be set in the tool/wrapper/config
+
+def stop_err( msg ):
+    sys.stderr.write( '%s\n' % msg )
+    sys.exit()
+
+def __main__():
+    #Parse Command Line
+    parser = optparse.OptionParser()
+    parser.add_option( '-t', '--threads', dest='threads', help='The number of threads to run' )
+    parser.add_option( '-o', '--output', dest='output', help='The output file' )
+    parser.add_option( '', '--output_unmapped_reads', dest='output_unmapped_reads', help='File name for unmapped reads (single-end)' )
+    parser.add_option( '', '--output_unmapped_reads_l', dest='output_unmapped_reads_l', help='File name for unmapped reads (left, paired-end)' )
+    parser.add_option( '', '--output_unmapped_reads_r', dest='output_unmapped_reads_r', help='File name for unmapped reads (right, paired-end)' )
+    parser.add_option( '', '--output_suppressed_reads', dest='output_suppressed_reads', help='File name for suppressed reads because of max setting (single-end)' )
+    parser.add_option( '', '--output_suppressed_reads_l', dest='output_suppressed_reads_l', help='File name for suppressed reads because of max setting (left, paired-end)' )
+    parser.add_option( '', '--output_suppressed_reads_r', dest='output_suppressed_reads_r', help='File name for suppressed reads because of max setting (right, paired-end)' )
+    parser.add_option( '-4', '--dataType', dest='dataType', help='The type of data (SOLiD or Solexa)' )
+    parser.add_option( '-i', '--input1', dest='input1', help='The (forward or single-end) reads file in Sanger FASTQ format' )
+    parser.add_option( '-I', '--input2', dest='input2', help='The reverse reads file in Sanger FASTQ format' )
+    parser.add_option( '-2', '--paired', dest='paired', help='Whether the data is single- or paired-end' )
+    parser.add_option( '-g', '--genomeSource', dest='genomeSource', help='The type of reference provided' )
+    parser.add_option( '-r', '--ref', dest='ref', help='The reference genome to use or index' )
+    parser.add_option( '-s', '--skip', dest='skip', help='Skip the first n reads' )
+    parser.add_option( '-a', '--alignLimit', dest='alignLimit', help='Only align the first n reads' )
+    parser.add_option( '-T', '--trimH', dest='trimH', help='Trim n bases from high-quality (left) end of each read before alignment' )
+    parser.add_option( '-L', '--trimL', dest='trimL', help='Trim n bases from low-quality (right) end of each read before alignment' )
+    parser.add_option( '-m', '--mismatchSeed', dest='mismatchSeed', help='Maximum number of mismatches permitted in the seed' )
+    parser.add_option( '-M', '--mismatchQual', dest='mismatchQual', help='Maximum permitted total of quality values at mismatched read positions' )
+    parser.add_option( '-l', '--seedLen', dest='seedLen', help='Seed length' )
+    parser.add_option( '-n', '--rounding', dest='rounding', help='Whether or not to round to the nearest 10 and saturating at 30' )
+    parser.add_option( '-P', '--maxMismatches', dest='maxMismatches', help='Maximum number of mismatches for -v alignment mode' )
+    parser.add_option( '-w', '--tryHard', dest='tryHard', help='Whether or not to try as hard as possible to find valid alignments when they exist' )
+    parser.add_option( '-V', '--allValAligns', dest='allValAligns', help='Whether or not to report all valid alignments per read or pair' )
+    parser.add_option( '-v', '--valAlign', dest='valAlign', help='Report up to n valid alignments per read or pair' )
+    parser.add_option( '-G', '--suppressAlign', dest='suppressAlign', help='Suppress all alignments for a read if more than n reportable alignments exist' )
+    parser.add_option( '-b', '--best', dest='best', help="Whether or not to make Bowtie guarantee that reported singleton alignments are 'best' in terms of stratum and in terms of the quality values at the mismatched positions" )
+    parser.add_option( '-B', '--maxBacktracks', dest='maxBacktracks', help='Maximum number of backtracks permitted when aligning a read' )
+    parser.add_option( '-R', '--strata', dest='strata', help='Whether or not to report only those alignments that fall in the best stratum if many valid alignments exist and are reportable' )
+    parser.add_option( '-j', '--minInsert', dest='minInsert', help='Minimum insert size for valid paired-end alignments' )
+    parser.add_option( '-J', '--maxInsert', dest='maxInsert', help='Maximum insert size for valid paired-end alignments' )
+    parser.add_option( '-O', '--mateOrient', dest='mateOrient', help='The upstream/downstream mate orientation for valid paired-end alignment against the forward reference strand' )
+    parser.add_option( '-A', '--maxAlignAttempt', dest='maxAlignAttempt', help='Maximum number of attempts Bowtie will make to match an alignment for one mate with an alignment for the opposite mate' )
+    parser.add_option( '-f', '--forwardAlign', dest='forwardAlign', help='Whether or not to attempt to align the forward reference strand' )
+    parser.add_option( '-E', '--reverseAlign', dest='reverseAlign', help='Whether or not to attempt to align the reverse-complement reference strand' )
+    parser.add_option( '-F', '--offrate', dest='offrate', help='Override the offrate of the index to n' )
+    parser.add_option( '-S', '--seed', dest='seed', help='Seed for pseudo-random number generator' )
+    parser.add_option( '-8', '--snpphred', dest='snpphred', help='SNP penalty on Phred scale' )
+    parser.add_option( '-6', '--snpfrac', dest='snpfrac', help='Fraction of sites expected to be SNP sites' )
+    parser.add_option( '-7', '--keepends', dest='keepends', help='Keep extreme-end nucleotides and qualities' )
+    parser.add_option( '-C', '--params', dest='params', help='Whether to use default or specified parameters' )
+    parser.add_option( '-u', '--iautoB', dest='iautoB', help='Automatic or specified behavior' )
+    parser.add_option( '-K', '--ipacked', dest='ipacked', help='Whether or not to use a packed representation for DNA strings' )
+    parser.add_option( '-Q', '--ibmax', dest='ibmax', help='Maximum number of suffixes allowed in a block' )
+    parser.add_option( '-Y', '--ibmaxdivn', dest='ibmaxdivn', help='Maximum number of suffixes allowed in a block as a fraction of the length of the reference' )
+    parser.add_option( '-D', '--idcv', dest='idcv', help='The period for the difference-cover sample' )
+    parser.add_option( '-U', '--inodc', dest='inodc', help='Whether or not to disable the use of the difference-cover sample' )
+    parser.add_option( '-y', '--inoref', dest='inoref', help='Whether or not to build the part of the reference index used only in paired-end alignment' )
+    parser.add_option( '-z', '--ioffrate', dest='ioffrate', help='How many rows get marked during annotation of some or all of the Burrows-Wheeler rows' )
+    parser.add_option( '-W', '--iftab', dest='iftab', help='The size of the lookup table used to calculate an initial Burrows-Wheeler range with respect to the first n characters of the query' )
+    parser.add_option( '-X', '--intoa', dest='intoa', help='Whether or not to convert Ns in the reference sequence to As' )
+    parser.add_option( '-N', '--iendian', dest='iendian', help='Endianness to use when serializing integers to the index file' )
+    parser.add_option( '-Z', '--iseed', dest='iseed', help='Seed for the pseudorandom number generator' )
+    parser.add_option( '-x', '--indexSettings', dest='index_settings', help='Whether or not indexing options are to be set' )
+    parser.add_option( '-H', '--suppressHeader', dest='suppressHeader', help='Suppress header' )
+    parser.add_option( '--galaxy_input_format', dest='galaxy_input_format', default="fastqsanger", help='galaxy input format' )
+    parser.add_option( '--do_not_build_index', dest='do_not_build_index', action="store_true", default=False, help='Flag to specify that provided file is already indexed, use as is' )
+    (options, args) = parser.parse_args()
+    if options.mismatchSeed and options.maxMismatches:
+        parser.error("options --mismatchSeed and --maxMismatches are mutually exclusive")
+    stdout = ''
+
+    # make temp directory for placement of indices and copy reference file there if necessary
+    tmp_index_dir = tempfile.mkdtemp()
+    # get type of data (solid or solexa)
+    if options.dataType == 'solid':
+        colorspace = '-C'
+    else:
+        colorspace = ''
+    # index if necessary
+    if options.genomeSource == 'history' and not options.do_not_build_index:
+        # set up commands
+        if options.index_settings =='indexPreSet':
+            indexing_cmds = '%s' % colorspace
+        else:
+            try:
+                if options.iautoB and options.iautoB == 'set':
+                    iautoB = '--noauto'
+                else:
+                    iautoB = ''
+                if options.ipacked and options.ipacked == 'packed':
+                    ipacked = '--packed'
+                else:
+                    ipacked = ''
+                if options.ibmax and int( options.ibmax ) >= 1:
+                    ibmax = '--bmax %s' % options.ibmax
+                else:
+                    ibmax = ''
+                if options.ibmaxdivn and int( options.ibmaxdivn ) >= 0:
+                    ibmaxdivn = '--bmaxdivn %s' % options.ibmaxdivn
+                else:
+                    ibmaxdivn = ''
+                if options.idcv and int( options.idcv ) >= 3:
+                    idcv = '--dcv %s' % options.idcv
+                else:
+                    idcv = ''
+                if options.inodc and options.inodc == 'nodc':
+                    inodc = '--nodc'
+                else:
+                    inodc = ''
+                if options.inoref and options.inoref == 'noref':
+                    inoref = '--noref'
+                else:
+                    inoref = ''
+                if options.iftab and int( options.iftab ) >= 1:
+                    iftab = '--ftabchars %s' % options.iftab
+                else:
+                    iftab = ''
+                if options.intoa and options.intoa == 'yes':
+                    intoa = '--ntoa'
+                else:
+                    intoa = ''
+                if options.iendian and options.iendian == 'big':
+                    iendian = '--big'
+                else:
+                    iendian = '--little'
+                if options.iseed and int( options.iseed ) > 0:
+                    iseed = '--seed %s' % options.iseed
+                else:
+                    iseed = ''
+                indexing_cmds = '%s %s %s %s %s %s %s --offrate %s %s %s %s %s %s' % \
+                                ( iautoB, ipacked, ibmax, ibmaxdivn, idcv, inodc,
+                                  inoref, options.ioffrate, iftab, intoa, iendian,
+                                  iseed, colorspace )
+            except ValueError, e:
+                # clean up temp dir
+                if os.path.exists( tmp_index_dir ):
+                    shutil.rmtree( tmp_index_dir )
+                stop_err( "Something is wrong with the indexing parameters and the indexing and alignment could not be run. Make sure you don't have any non-numeric values where they should be numeric.\n" + str( e ) )
+        ref_file = tempfile.NamedTemporaryFile( dir=tmp_index_dir )
+        ref_file_name = ref_file.name
+        ref_file.close()
+        os.symlink( options.ref, ref_file_name )
+        cmd1 = 'bowtie-build %s -f %s %s' % ( indexing_cmds, ref_file_name, ref_file_name )
+        try:
+            tmp = tempfile.NamedTemporaryFile( dir=tmp_index_dir ).name
+            tmp_stderr = open( tmp, 'wb' )
+            proc = subprocess.Popen( args=cmd1, shell=True, cwd=tmp_index_dir, stderr=tmp_stderr.fileno() )
+            returncode = proc.wait()
+            tmp_stderr.close()
+            # get stderr, allowing for case where it's very large
+            tmp_stderr = open( tmp, 'rb' )
+            stderr = ''
+            buffsize = 1048576
+            try:
+                while True:
+                    stderr += tmp_stderr.read( buffsize )
+                    if not stderr or len( stderr ) % buffsize != 0:
+                        break
+            except OverflowError:
+                pass
+            tmp_stderr.close()
+            if returncode != 0:
+                raise Exception, stderr
+        except Exception, e:
+            # clean up temp dir
+            if os.path.exists( tmp_index_dir ):
+                shutil.rmtree( tmp_index_dir )
+            stop_err( 'Error indexing reference sequence\n' + str( e ) )
+        stdout += 'File indexed. '
+    else:
+        ref_file_name = options.ref
+    # set up aligning and generate aligning command options
+    # automatically set threads in both cases
+    tmp_suppressed_file_name = None
+    tmp_unmapped_file_name = None
+    if options.suppressHeader == 'true':
+        suppressHeader = '--sam-nohead'
+    else:
+        suppressHeader = ''
+    if options.maxInsert and int( options.maxInsert ) > 0:
+        maxInsert = '-X %s' % options.maxInsert
+    else:
+        maxInsert = ''
+    if options.mateOrient:
+        mateOrient = '--%s' % options.mateOrient
+    else:
+        mateOrient = ''
+    quality_score_encoding = GALAXY_FORMAT_TO_QUALITY_SCORE_ENCODING_ARG.get( options.galaxy_input_format, DEFAULT_ASCII_ENCODING )
+    if options.params == 'preSet':
+        aligning_cmds = '-q %s %s -p %s -S %s %s %s ' % \
+                ( maxInsert, mateOrient, options.threads, suppressHeader, colorspace, quality_score_encoding )
+    else:
+        try:
+            if options.skip and int( options.skip ) > 0:
+                skip = '-s %s' % options.skip
+            else:
+                skip = ''
+            if options.alignLimit and int( options.alignLimit ) >= 0:
+                alignLimit = '-u %s' % options.alignLimit
+            else:
+                alignLimit = ''
+            if options.trimH and int( options.trimH ) > 0:
+                trimH = '-5 %s' % options.trimH
+            else:
+                trimH = ''
+            if options.trimL and int( options.trimL ) > 0:
+                trimL = '-3 %s' % options.trimL
+            else:
+                trimL = ''
+            if options.maxMismatches and (options.maxMismatches == '0' or options.maxMismatches == '1' \
+                        or options.maxMismatches == '2' or options.maxMismatches == '3'):
+                maxMismatches = '-v %s' % options.maxMismatches
+            else:
+                maxMismatches = ''
+            if options.mismatchSeed and (options.mismatchSeed == '0' or options.mismatchSeed == '1' \
+                        or options.mismatchSeed == '2' or options.mismatchSeed == '3'):
+                mismatchSeed = '-n %s' % options.mismatchSeed
+            else:
+                mismatchSeed = ''
+            if options.mismatchQual and int( options.mismatchQual ) >= 1:
+                mismatchQual = '-e %s' % options.mismatchQual
+            else:
+                mismatchQual = ''
+            if options.seedLen and int( options.seedLen ) >= 5:
+                seedLen = '-l %s' % options.seedLen
+            else:
+                seedLen = ''
+            if options.rounding == 'noRound':
+                rounding = '--nomaqround'
+            else:
+                rounding = ''
+            if options.minInsert and int( options.minInsert ) > 0:
+                minInsert = '-I %s' % options.minInsert
+            else:
+                minInsert = ''
+            if options.maxAlignAttempt and int( options.maxAlignAttempt ) >= 0:
+                maxAlignAttempt = '--pairtries %s' % options.maxAlignAttempt
+            else:
+                maxAlignAttempt = ''
+            if options.forwardAlign == 'noForward':
+                forwardAlign = '--nofw'
+            else:
+                forwardAlign = ''
+            if options.reverseAlign == 'noReverse':
+                reverseAlign = '--norc'
+            else:
+                reverseAlign = ''
+            if options.maxBacktracks and int( options.maxBacktracks ) > 0 and \
+                    ( options.mismatchSeed == '2' or options.mismatchSeed == '3' ):
+                maxBacktracks = '--maxbts %s' % options.maxBacktracks
+            else:
+                maxBacktracks = ''
+            if options.tryHard == 'doTryHard':
+                tryHard = '-y'
+            else:
+                tryHard = ''
+            if options.valAlign and int( options.valAlign ) >= 0:
+                valAlign = '-k %s' % options.valAlign
+            else:
+                valAlign = ''
+            if options.allValAligns == 'doAllValAligns':
+                allValAligns = '-a'
+            else:
+                allValAligns = ''
+            if options.suppressAlign and int( options.suppressAlign ) >= 0:
+                suppressAlign = '-m %s' % options.suppressAlign
+            else:
+                suppressAlign = ''
+            if options.best == 'doBest':
+                best = '--best'
+            else:
+                best = ''
+            if options.strata == 'doStrata':
+                strata = '--strata'
+            else:
+                strata = ''
+            if options.offrate and int( options.offrate ) >= 0:
+                offrate = '-o %s' % options.offrate
+            else:
+                offrate = ''
+            if options.seed and int( options.seed ) >= 0:
+                seed = '--seed %s' % options.seed
+            else:
+                seed = ''
+            if options.paired == 'paired':
+                if options.output_unmapped_reads_l and options.output_unmapped_reads_r:
+                    tmp_unmapped_file = tempfile.NamedTemporaryFile( dir=tmp_index_dir, suffix='.fastq' )
+                    tmp_unmapped_file_name = tmp_unmapped_file.name
+                    tmp_unmapped_file.close()
+                    output_unmapped_reads = '--un %s' % tmp_unmapped_file_name
+                else:
+                    output_unmapped_reads = ''
+                if options.output_suppressed_reads:
+                    tmp_suppressed_file = tempfile.NamedTemporaryFile( dir=tmp_index_dir, suffix='.fastq' )
+                    tmp_suppressed_file_name = tmp_suppressed_file.name
+                    tmp_suppressed_file.close()
+                    output_suppressed_reads = '--max %s' % tmp_suppressed_file_name
+                else:
+                    output_suppressed_reads = ''
+            else:
+                if options.output_unmapped_reads:
+                    output_unmapped_reads = '--un %s' % options.output_unmapped_reads
+                else:
+                    output_unmapped_reads = ''
+                if options.output_suppressed_reads:
+                    output_suppressed_reads = '--max %s' % options.output_suppressed_reads
+                else:
+                    output_suppressed_reads = ''
+            snpfrac = ''
+            if options.snpphred and int( options.snpphred ) >= 0:
+                snpphred = '--snpphred %s' % options.snpphred
+            else:
+                snpphred = ''
+                if options.snpfrac and float( options.snpfrac ) >= 0:
+                    snpfrac = '--snpfrac %s' % options.snpfrac
+            if options.keepends and options.keepends == 'doKeepends':
+                keepends = '--col-keepends'
+            else:
+                keepends = ''
+            aligning_cmds = '-q %s %s -p %s -S %s %s %s %s %s %s %s %s %s %s %s %s ' \
+                            '%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s ' % \
+                            ( maxInsert, mateOrient, options.threads, suppressHeader,
+                              colorspace, skip, alignLimit, trimH, trimL, maxMismatches,
+                              mismatchSeed, mismatchQual, seedLen, rounding, minInsert,
+                              maxAlignAttempt, forwardAlign, reverseAlign, maxBacktracks,
+                              tryHard, valAlign, allValAligns, suppressAlign, best,
+                              strata, offrate, seed, snpphred, snpfrac, keepends,
+                              output_unmapped_reads, output_suppressed_reads,
+                              quality_score_encoding )
+        except ValueError, e:
+            # clean up temp dir
+            if os.path.exists( tmp_index_dir ):
+                shutil.rmtree( tmp_index_dir )
+            stop_err( 'Something is wrong with the alignment parameters and the alignment could not be run\n' + str( e ) )
+    try:
+        # have to nest try-except in try-finally to handle 2.4
+        try:
+            # prepare actual mapping commands
+            if options.paired == 'paired':
+                cmd2 = 'bowtie %s %s -1 %s -2 %s > %s' % ( aligning_cmds, ref_file_name, options.input1, options.input2, options.output )
+            else:
+                cmd2 = 'bowtie %s %s %s > %s' % ( aligning_cmds, ref_file_name, options.input1, options.output )
+            # align
+            tmp = tempfile.NamedTemporaryFile( dir=tmp_index_dir ).name
+            tmp_stderr = open( tmp, 'wb' )
+            proc = subprocess.Popen( args=cmd2, shell=True, cwd=tmp_index_dir, stderr=tmp_stderr.fileno() )
+            returncode = proc.wait()
+            tmp_stderr.close()
+            # get stderr, allowing for case where it's very large
+            tmp_stderr = open( tmp, 'rb' )
+            stderr = ''
+            buffsize = 1048576
+            try:
+                while True:
+                    stderr += tmp_stderr.read( buffsize )
+                    if not stderr or len( stderr ) % buffsize != 0:
+                        break
+            except OverflowError:
+                pass
+            tmp_stderr.close()
+            if returncode != 0:
+                raise Exception, stderr
+            # get suppressed and unmapped reads output files in place if appropriate
+            if options.paired == 'paired' and tmp_suppressed_file_name and \
+                               options.output_suppressed_reads_l and options.output_suppressed_reads_r:
+                try:
+                    left = tmp_suppressed_file_name.replace( '.fastq', '_1.fastq' )
+                    right = tmp_suppressed_file_name.replace( '.fastq', '_1.fastq' )
+                    shutil.move( left, options.output_suppressed_reads_l )
+                    shutil.move( right, options.output_suppressed_reads_r )
+                except Exception, e:
+                    sys.stdout.write( 'Error producing the suppressed output file.\n' )
+            if options.paired == 'paired' and tmp_unmapped_file_name and \
+                               options.output_unmapped_reads_l and options.output_unmapped_reads_r:
+                try:
+                    left = tmp_unmapped_file_name.replace( '.fastq', '_1.fastq' )
+                    right = tmp_unmapped_file_name.replace( '.fastq', '_2.fastq' )
+                    shutil.move( left, options.output_unmapped_reads_l )
+                    shutil.move( right, options.output_unmapped_reads_r )
+                except Exception, e:
+                    sys.stdout.write( 'Error producing the unmapped output file.\n' )
+            # check that there are results in the output file
+            if os.path.getsize( options.output ) == 0:
+                raise Exception, 'The output file is empty, there may be an error with your input file or settings.'
+        except Exception, e:
+            stop_err( 'Error aligning sequence. ' + str( e ) )
+    finally:
+        # clean up temp dir
+        if os.path.exists( tmp_index_dir ):
+            shutil.rmtree( tmp_index_dir )
+    stdout += 'Sequence file aligned.\n'
+    sys.stdout.write( stdout )
+
+if __name__ == "__main__":
+    __main__()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bowtie_wrapper.xml	Mon Nov 09 11:18:30 2015 -0500
@@ -0,0 +1,926 @@
+<tool id="bowtie_wrapper" name="Map with Bowtie for Illumina" version="1.1.3">
+  <requirements>
+    <requirement type="package" version="0.12.7">bowtie</requirement>
+  </requirements>
+  <description></description>
+  <version_command>bowtie --version</version_command>
+  <command interpreter="python">
+    bowtie_wrapper.py
+      ## Set number of threads
+      --threads="\${GALAXY_SLOTS:-4}"
+      ## Outputs
+      --output="${output}"
+      #if str( $singlePaired.sPaired ) == "single"
+        #if $output_unmapped_reads_l
+          --output_unmapped_reads="${output_unmapped_reads_l}"
+        #end if
+        #if $output_suppressed_reads_l
+          --output_suppressed_reads="${output_suppressed_reads_l}"
+        #end if
+        --galaxy_input_format="${singlePaired.sInput1.ext}"
+      #else
+        #if $output_unmapped_reads_l and $output_unmapped_reads_r
+          --output_unmapped_reads_l="${output_unmapped_reads_l}"
+          --output_unmapped_reads_r="${output_unmapped_reads_r}"
+        #end if
+        #if $output_suppressed_reads_l and $output_suppressed_reads_l
+          --output_suppressed_reads_l="${output_suppressed_reads_l}"
+          --output_suppressed_reads_r="${output_suppressed_reads_r}"
+        #end if
+        --galaxy_input_format="${singlePaired.pInput1.ext}"
+      #end if
+      ## Inputs
+      --dataType="solexa" ##this indicates that nucleotide base space is used in the wrapper
+      --suppressHeader="${suppressHeader}"
+      --genomeSource="${refGenomeSource.genomeSource}"
+      #if $refGenomeSource.genomeSource == "history":
+        ##index already exists
+        #if $refGenomeSource.ownFile.extension.startswith( 'bowtie_' ):
+          ##user previously built
+          --ref="${refGenomeSource.ownFile.extra_files_path}/${refGenomeSource.ownFile.metadata.base_name}"
+          --do_not_build_index
+        #else:
+          ##build index on the fly
+          --ref="${refGenomeSource.ownFile}"
+          --indexSettings="${refGenomeSource.indexParams.indexSettings}"
+          #if $refGenomeSource.indexParams.indexSettings == "indexFull":
+            --iautoB="${refGenomeSource.indexParams.autoBehavior.autoB}"
+            #if $refGenomeSource.indexParams.autoBehavior.autoB == "set":
+              --ipacked="${refGenomeSource.indexParams.autoBehavior.packed}"
+              --ibmax="${refGenomeSource.indexParams.autoBehavior.bmax}"
+              --ibmaxdivn="${refGenomeSource.indexParams.autoBehavior.bmaxdivn}"
+              --idcv="${refGenomeSource.indexParams.autoBehavior.dcv}"
+            #end if
+            --inodc="${refGenomeSource.indexParams.nodc}"
+            --inoref="${refGenomeSource.indexParams.noref}"
+            --ioffrate="${refGenomeSource.indexParams.offrate}"
+            --iftab="${refGenomeSource.indexParams.ftab}"
+            --intoa="${refGenomeSource.indexParams.ntoa}"
+            --iendian="${refGenomeSource.indexParams.endian}"
+            --iseed="${refGenomeSource.indexParams.seed}"
+          #end if
+        #end if
+      #else
+        ##use pre-built index
+        --ref="${refGenomeSource.index.fields.path}"
+      #end if
+      --paired="${singlePaired.sPaired}"
+      #if $singlePaired.sPaired == "single":
+        --input1="${singlePaired.sInput1}"
+        --params="${singlePaired.sParams.sSettingsType}"
+        #if $singlePaired.sParams.sSettingsType == "full":
+          --skip="${singlePaired.sParams.sSkip}"
+          --alignLimit="${singlePaired.sParams.sAlignLimit}"
+          --trimH="${singlePaired.sParams.sTrimH}"
+          --trimL="${singlePaired.sParams.sTrimL}"
+          #if $singlePaired.sParams.alignModeOption.alignMode == 'nMode'
+            --mismatchSeed="${singlePaired.sParams.alignModeOption.sMismatchSeed}"
+            --mismatchQual="${singlePaired.sParams.alignModeOption.sMismatchQual}"
+            --seedLen="${singlePaired.sParams.alignModeOption.sSeedLen}"
+            --rounding="${singlePaired.sParams.alignModeOption.sRounding}"
+          #else
+            --maxMismatches="${singlePaired.sParams.alignModeOption.maxMismatches}"
+          #end if
+          --forwardAlign="${singlePaired.sParams.sForwardAlign}"
+          --reverseAlign="${singlePaired.sParams.sReverseAlign}"
+          --tryHard="${singlePaired.sParams.sBestOption.sTryHardOption.sTryHard}"
+          --allValAligns="${singlePaired.sParams.sAllValAlignsOption.sAllValAligns}"
+          #if $singlePaired.sParams.sAllValAlignsOption.sAllValAligns == "noAllValAligns"
+            --valAlign="${singlePaired.sParams.sAllValAlignsOption.sValAlign}"
+          #end if
+          --suppressAlign="${singlePaired.sParams.sSuppressAlign}"
+          --best="${singlePaired.sParams.sBestOption.sBest}"
+          #if $singlePaired.sParams.sBestOption.sBest == "doBest":
+            --strata="${singlePaired.sParams.sBestOption.sdStrata}"
+            #if $singlePaired.sParams.sBestOption.sTryHardOption.sTryHard == "noTryHard"
+              --maxBacktracks="${singlePaired.sParams.sBestOption.sTryHardOption.sdMaxBacktracks}"
+            #end if
+          #else:
+            #if $singlePaired.sParams.sBestOption.sTryHardOption.sTryHard == "noTryHard"
+              --maxBacktracks="${singlePaired.sParams.sBestOption.sTryHardOption.snMaxBacktracks}"
+            #end if
+          #end if
+          --offrate="${singlePaired.sParams.sOffrate}"
+          --seed="${singlePaired.sParams.sSeed}"
+        #end if
+      #else:
+        --input1="${singlePaired.pInput1}"
+        --input2="${singlePaired.pInput2}"
+        --maxInsert="${singlePaired.pMaxInsert}"
+        --mateOrient="${singlePaired.pMateOrient}"
+        --params="${singlePaired.pParams.pSettingsType}"
+        #if $singlePaired.pParams.pSettingsType == "full":
+          --skip="${singlePaired.pParams.pSkip}"
+          --alignLimit="${singlePaired.pParams.pAlignLimit}"
+          --trimH="${singlePaired.pParams.pTrimH}"
+          --trimL="${singlePaired.pParams.pTrimL}"
+          #if $singlePaired.pParams.alignModeOption.alignMode == 'nMode'
+            --mismatchSeed="${singlePaired.pParams.alignModeOption.pMismatchSeed}"
+            --mismatchQual="${singlePaired.pParams.alignModeOption.pMismatchQual}"
+            --seedLen="${singlePaired.pParams.alignModeOption.pSeedLen}"
+            --rounding="${singlePaired.pParams.alignModeOption.pRounding}"
+          #else
+            --maxMismatches="${singlePaired.pParams.alignModeOption.maxMismatches}"
+          #end if
+          --minInsert="${singlePaired.pParams.pMinInsert}"
+          --forwardAlign="${singlePaired.pParams.pForwardAlign}"
+          --reverseAlign="${singlePaired.pParams.pReverseAlign}"
+          --tryHard="${singlePaired.pParams.pBestOption.pTryHardOption.pTryHard}"
+          --allValAligns="${singlePaired.pParams.pAllValAlignsOption.pAllValAligns}"
+          #if $singlePaired.pParams.pAllValAlignsOption.pAllValAligns == "noAllValAligns"
+            --valAlign="${singlePaired.pParams.pAllValAlignsOption.pValAlign}"
+          #end if
+          --suppressAlign="${singlePaired.pParams.pSuppressAlign}"
+          --best="${singlePaired.pParams.pBestOption.pBest}"
+          #if $singlePaired.pParams.pBestOption.pBest == "doBest":
+            --strata="${singlePaired.pParams.pBestOption.pdStrata}"
+            #if $singlePaired.pParams.pBestOption.pTryHardOption.pTryHard == "noTryHard"
+              --maxAlignAttempt="${singlePaired.pParams.pBestOption.pTryHardOption.pMaxAlignAttempt}"
+              --maxBacktracks="${singlePaired.pParams.pBestOption.pTryHardOption.pdMaxBacktracks}"
+            #end if
+          #else:
+            #if $singlePaired.pParams.pBestOption.pTryHardOption.pTryHard == "noTryHard"
+              --maxAlignAttempt="${singlePaired.pParams.pBestOption.pTryHardOption.pMaxAlignAttempt}"
+              --maxBacktracks="${singlePaired.pParams.pBestOption.pTryHardOption.pnMaxBacktracks}"
+            #end if
+          #end if
+          --offrate="${singlePaired.pParams.pOffrate}"
+          --seed="${singlePaired.pParams.pSeed}"
+        #end if
+      #end if
+  </command>
+  <inputs>
+    <conditional name="refGenomeSource">
+      <param name="genomeSource" type="select" label="Will you select a reference genome from your history or use a built-in index?" help="Built-ins were indexed using default options">
+        <option value="indexed">Use a built-in index</option>
+        <option value="history">Use one from the history</option>
+      </param>
+      <when value="indexed">
+        <param name="index" type="select" label="Select a reference genome" help="if your genome of interest is not listed - contact Galaxy team">
+          <options from_data_table="bowtie_indexes">
+            <filter type="sort_by" column="2" />
+            <validator type="no_options" message="No indexes are available" />
+          </options>
+        </param>
+      </when>
+      <when value="history">
+        <param name="ownFile" type="data" format="bowtie_base_index,fasta" metadata_name="dbkey" label="Select the reference genome" />
+        <conditional name="indexParams">
+          <param name="indexSettings" type="select" label="Choose whether to use Default options for building indices or to Set your own" help="These settings are ignored when using a prebuilt index">
+            <option value="indexPreSet">Default</option>
+            <option value="indexFull">Set your own</option>
+          </param>
+          <when value="indexPreSet" />
+          <when value="indexFull">
+            <conditional name="autoBehavior">
+              <param name="autoB" type="select" label="Choose to use automatic or specified behavior for some parameters (-a)" help="Allows you to set --packed, --bmax, --bmaxdivn, and --dcv">
+                <option value="auto">Automatic behavior</option>
+                <option value="set">Set values (sets --noauto and allows others to be set)</option>
+              </param>
+              <when value="auto" />
+              <when value="set">
+                <param name="packed" type="select" label="Whether or not to use a packed representation for DNA strings (--packed)" help="Packed representation saves memory but makes indexing 2-3 times slower">
+                  <option value="unpacked">Use regular representation</option>
+                  <option value="packed">Use packed representation</option>
+                </param>
+                <param name="bmax" type="integer" value="-1" label="Maximum number of suffixes allowed in a block (--bmax)" help="-1 for not specified. Must be at least 1" />
+                <param name="bmaxdivn" type="integer" value="4" label="Maximum number of suffixes allowed in a block as a fraction of the length of the reference (--bmaxdivn)" />
+                <param name="dcv" type="integer" value="1024" min="3" label="The period for the difference-cover sample (--dcv)" help="A larger period yields less memory overhead, but may make suffix sorting slower, especially if repeats are present" />
+              </when>
+            </conditional>
+            <param name="nodc" type="select" label="Whether or not to disable the use of the difference-cover sample (--nodc)" help="Suffix sorting becomes quadratic-time in the worst case (with a very repetitive reference)">
+              <option value="dc">Use difference-cover sample</option>
+              <option value="nodc">Disable difference-cover sample</option>
+            </param>
+            <param name="noref" type="select" label="Whether or not to build the part of the reference index used only in paired-end alignment (-r)">
+              <option value="ref">Build all index files</option>
+              <option value="noref">Do not build paired-end alignment index files</option>
+            </param>
+            <param name="offrate" type="integer" value="5" min="0" label="The indexer will mark every 2^n Burrows-Wheeler rows with their corresponding location on the genome (-o)" help="Marking more rows makes reference-position lookups faster, but requires more memory to hold the annotations at runtime" />
+            <param name="ftab" type="integer" value="10" min="1" label="The size of the ftab lookup table used to calculate an initial Burrows-Wheeler range with respect to the first n characters of the query (-t)" help="ftab size is 4^(n+1) bytes" />
+            <param name="ntoa" type="select" label="Whether or not to convert Ns in the reference sequence to As (--ntoa)">
+              <option value="no">Do not convert Ns</option>
+              <option value="yes">Convert Ns to As</option>
+            </param>
+            <param name="endian" type="select" label="Endianness to use when serializing integers to the index file (--big/--little)" help="Little is most appropriate for Intel- and AMD-based architecture">
+              <option value="little">Little</option>
+              <option value="big">Big</option>
+            </param>
+            <param name="seed" type="integer" value="-1" label="Seed for the pseudorandom number generator (--seed)" help="Use -1 to use default" />
+          </when>  <!-- indexFull -->
+        </conditional>  <!-- indexParams -->
+      </when>  <!-- history -->
+    </conditional>  <!-- refGenomeSource -->
+    <conditional name="singlePaired">
+      <param name="sPaired" type="select" label="Is this library mate-paired?">
+        <option value="single">Single-end</option>
+        <option value="paired">Paired-end</option>
+      </param>
+      <when value="single">
+        <param name="sInput1" type="data" format="fastqsanger,fastqillumina,fastqsolexa" label="FASTQ file" help="Must have ASCII encoded quality scores"/>
+        <conditional name="sParams">
+          <param name="sSettingsType" type="select" label="Bowtie settings to use" help="For most mapping needs use Commonly used settings. If you want full control use Full parameter list">
+            <option value="preSet">Commonly used</option>
+            <option value="full">Full parameter list</option>
+          </param>
+          <when value="preSet" />
+          <when value="full">
+            <param name="sSkip" type="integer" value="0" label="Skip the first n reads (-s)" />
+            <param name="sAlignLimit" type="integer" value="-1" label="Only align the first n reads (-u)" help="-1 for off" />
+            <param name="sTrimH" type="integer" value="0" label="Trim n bases from high-quality (left) end of each read before alignment (-5)" />
+            <param name="sTrimL" type="integer" value="0" label="Trim n bases from low-quality (right) end of each read before alignment (-3)" />
+            <conditional name="alignModeOption">
+              <param name="alignMode" type="select" label="Alignment mode">
+                <option value="nMode">Maq-like: quality-aware, limit mismatches in seed (-n)</option>
+                <option value="vMode">ignore qualities, limit end-to-end mismatches (-v)</option>
+              </param>
+              <when value="nMode">
+                <param name="sMismatchSeed" type="integer" value="2" min="0" max="3" label="Maximum number of mismatches permitted in the seed (-n)" help="May be 0, 1, 2, or 3" />
+                <param name="sMismatchQual" type="integer" value="70" min="1" label="Maximum permitted total of quality values at all mismatched read positions (-e)" />
+                <param name="sSeedLen" type="integer" value="28" min="5" label="Seed length (-l)" help="Minimum value is 5" />
+                <param name="sRounding" type="select" label="Whether or not to round to the nearest 10 and saturating at 30 (--nomaqround)" help="Maq accepts quality values in the Phred quality scale, but internally rounds values to the nearest 10, with a maximum of 30. By default, bowtie also rounds this way">
+                  <option value="round">Round to nearest 10</option>
+                  <option value="noRound">Do not round to nearest 10</option>
+                </param>
+              </when>
+              <when value="vMode">
+                <param name="maxMismatches" type="integer" value="" min="0" max="3" label="Maximum number of mismatches (-v)" help="May be 0, 1, 2, or 3" />
+              </when>
+            </conditional>
+            <param name="sForwardAlign" type="select" label="Choose whether or not to attempt to align against the forward reference strand (--nofw)">
+              <option value="forward">Align against the forward reference strand</option>
+              <option value="noForward">Do not align against the forward reference strand</option>
+            </param>
+            <param name="sReverseAlign" type="select" label="Choose whether or not to attempt to align against the reverse-complement reference strand (--norc)">
+              <option value="reverse">Align against the reverse-complement reference strand</option>
+              <option value="noReverse">Do not align against the reverse-complement reference strand</option>
+            </param>
+            <conditional name="sBestOption">
+              <param name="sBest" type="select" label="Whether or not to make Bowtie guarantee that reported singleton alignments are 'best' in terms of stratum and in terms of the quality values at the mismatched positions (--best)" help="Removes all strand bias. Only affects which alignments are reported by Bowtie. Runs slower with best option">
+                <option value="noBest">Do not use best</option>
+                <option value="doBest">Use best</option>
+              </param>
+              <when value="noBest">
+                <conditional name="sTryHardOption">
+                  <param name="sTryHard" type="select" label="Whether or not to try as hard as possible to find valid alignments when they exist (-y)" help="Tryhard mode is much slower than regular mode">
+                    <option value="noTryHard">Do not try hard</option>
+                    <option value="doTryHard">Try hard</option>
+                  </param>
+                  <when value="noTryHard">
+                    <param name="snMaxBacktracks" type="integer" value="125" min="0" label="Maximum number of backtracks permitted when aligning a read (--maxbts)" />
+                  </when>
+                  <when value="doTryHard" />
+                </conditional>
+              </when>
+              <when value="doBest">
+                <param name="sdStrata" type="select" label="Whether or not to report only those alignments that fall in the best stratum if many valid alignments exist and are reportable (--strata)">
+                  <option value="noStrata">Do not use strata option</option>
+                  <option value="doStrata">Use strata option</option>
+                </param>
+                <conditional name="sTryHardOption">
+                  <param name="sTryHard" type="select" label="Whether or not to try as hard as possible to find valid alignments when they exist (-y)" help="Tryhard mode is much slower than regular mode">
+                    <option value="noTryHard">Do not try hard</option>
+                    <option value="doTryHard">Try hard</option>
+                  </param>
+                  <when value="noTryHard">
+                    <param name="sdMaxBacktracks" type="integer" value="800" min="0" label="Maximum number of backtracks permitted when aligning a read (--maxbts)" />
+                  </when>
+                  <when value="doTryHard" />
+                </conditional>
+              </when>
+            </conditional> <!-- bestOption -->
+            <conditional name="sAllValAlignsOption">
+              <param name="sAllValAligns" type="select" label="Whether or not to report all valid alignments per read (-a)">
+                <option value="noAllValAligns">Do not report all valid alignments</option>
+                <option value="doAllValAligns">Report all valid alignments</option>
+              </param>
+              <when value="noAllValAligns">
+                <param name="sValAlign" type="integer" value="1" min="1" label="Report up to n valid alignments per read (-k)" />
+              </when>
+              <when value="doAllValAligns" />
+            </conditional>
+            <param name="sSuppressAlign" type="integer" value="-1" label="Suppress all alignments for a read if more than n reportable alignments exist (-m)" help="-1 for no limit" />
+            <param name="sMaxFile" type="boolean" truevalue="true" falsevalue="false" checked="False" label="Write all reads with a number of valid alignments exceeding the limit set with the -m option to a file (--max)" />
+            <param name="sUnmappedFile" type="boolean" truevalue="true" falsevalue="false" checked="False" label="Write all reads that could not be aligned to a file (--un)" />
+            <param name="sOffrate" type="integer" value="-1" label="Override the offrate of the index to n (-o)" help="-1 for default" />
+            <param name="sSeed" type="integer" value="-1" label="Seed for pseudo-random number generator (--seed)" help="-1 for default" />
+          </when> <!-- full -->
+        </conditional> <!-- sParams -->
+      </when> <!-- single -->
+      <when value="paired">
+        <param name="pInput1" type="data" format="fastqsanger,fastqillumina,fastqsolexa" label="Forward FASTQ file" help="Must have ASCII encoded quality scores"/>
+        <param name="pInput2" type="data" format="fastqsanger,fastqillumina,fastqsolexa" label="Reverse FASTQ file" help="File format must match the Forward FASTQ file">
+            <options options_filter_attribute="ext" from_parameter="tool.app.datatypes_registry.datatypes_by_extension" transform_lines="obj.keys()">>
+               <column name="name" index="0"/>
+               <column name="value" index="0"/>
+               <filter type="param_value" ref="pInput1" ref_attribute="ext" column="0"/>
+           </options>
+        </param>
+        <param name="pMaxInsert" type="integer" value="1000" label="Maximum insert size for valid paired-end alignments (-X)" />
+        <param name="pMateOrient" type="select" label="The upstream/downstream mate orientation for valid paired-end alignment against the forward reference strand (--fr/--rf/--ff)">
+          <option value="fr">FR (for Illumina)</option>
+          <option value="rf">RF</option>
+          <option value="ff">FF (for SOLiD)</option>
+        </param>
+        <conditional name="pParams">
+          <param name="pSettingsType" type="select" label="Bowtie settings to use" help="For most mapping needs use Commonly used settings. If you want full control use Full parameter list">
+            <option value="preSet">Commonly used</option>
+            <option value="full">Full parameter list</option>
+          </param>
+          <when value="preSet" />
+          <when value="full">
+            <param name="pSkip" type="integer" value="0" label="Skip the first n pairs (-s)" />
+            <param name="pAlignLimit" type="integer" value="-1" label="Only align the first n pairs (-u)" help="-1 for off" />
+            <param name="pTrimH" type="integer" value="0" label="Trim n bases from high-quality (left) end of each read before alignment (-5)" />
+            <param name="pTrimL" type="integer" value="0" label="Trim n bases from low-quality (right) end of each read before alignment (-3)" />
+            <conditional name="alignModeOption">
+              <param name="alignMode" type="select" label="Alignment mode">
+                <option value="nMode">Maq-like: quality-aware, limit mismatches in seed (-n)</option>
+                <option value="vMode">ignore qualities, limit end-to-end mismatches (-v)</option>
+              </param>
+              <when value="nMode">
+                <param name="pMismatchSeed" type="integer" value="2" min="0" max="3" label="Maximum number of mismatches permitted in the seed (-n)" help="May be 0, 1, 2, or 3" />
+                <param name="pMismatchQual" type="integer" value="70" min="1" label="Maximum permitted total of quality values at all mismatched read positions (-e)" />
+                <param name="pSeedLen" type="integer" value="28" min="5" label="Seed length (-l)" help="Minimum value is 5" />
+                <param name="pRounding" type="select" label="Whether or not to round to the nearest 10 and saturating at 30 (--nomaqround)" help="Maq accepts quality values in the Phred quality scale, but internally rounds values to the nearest 10, with a maximum of 30. By default, bowtie also rounds this way">
+                  <option value="round">Round to nearest 10</option>
+                  <option value="noRound">Do not round to nearest 10</option>
+                </param>
+              </when>
+              <when value="vMode">
+                <param name="maxMismatches" type="integer" value="" min="0" max="3" label="Maximum number of mismatches (-v)" help="May be 0, 1, 2, or 3" />
+              </when>
+            </conditional>
+            <param name="pMinInsert" type="integer" value="0" label="Minimum insert size for valid paired-end alignments (-I)" />
+            <param name="pForwardAlign" type="select" label="Choose whether or not to attempt to align against the forward reference strand (--nofw)">
+              <option value="forward">Align against the forward reference strand</option>
+              <option value="noForward">Do not align against the forward reference strand</option>
+            </param>
+            <param name="pReverseAlign" type="select" label="Choose whether or not to attempt to align against the reverse-complement reference strand (--norc)">
+              <option value="reverse">Align against the reverse-complement reference strand</option>
+              <option value="noReverse">Do not align against the reverse-complement reference strand</option>
+            </param>
+            <conditional name="pBestOption">
+              <param name="pBest" type="select" label="Whether or not to make Bowtie guarantee that reported singleton alignments are 'best' in terms of stratum and in terms of the quality values at the mismatched positions (--best)" help="Removes all strand bias. Only affects which alignments are reported by Bowtie. Runs slower with best option">
+                <option value="noBest">Do not use best</option>
+                <option value="doBest">Use best</option>
+              </param>
+              <when value="noBest">
+                <conditional name="pTryHardOption">
+                  <param name="pTryHard" type="select" label="Whether or not to try as hard as possible to find valid alignments when they exist (-y)" help="Tryhard mode is much slower than regular mode">
+                    <option value="noTryHard">Do not try hard</option>
+                    <option value="doTryHard">Try hard</option>
+                  </param>
+                  <when value="noTryHard">
+                    <param name="pMaxAlignAttempt" type="integer" value="100" min="1" label="Maximum number of attempts Bowtie will make to match an alignment for one mate with an alignment for the opposite mate (--pairtries)" />
+                    <param name="pnMaxBacktracks" type="integer" value="125" min="0" label="Maximum number of backtracks permitted when aligning a read (--maxbts)" />
+                  </when>
+                  <when value="doTryHard" />
+                </conditional>
+              </when>
+              <when value="doBest">
+                <param name="pdStrata" type="select" label="Whether or not to report only those alignments that fall in the best stratum if many valid alignments exist and are reportable (--strata)">
+                  <option value="noStrata">Do not use strata option</option>
+                  <option value="doStrata">Use strata option</option>
+                </param>
+                <conditional name="pTryHardOption">
+                  <param name="pTryHard" type="select" label="Whether or not to try as hard as possible to find valid alignments when they exist (-y)" help="Tryhard mode is much slower than regular mode">
+                    <option value="noTryHard">Do not try hard</option>
+                    <option value="doTryHard">Try hard</option>
+                  </param>
+                  <when value="noTryHard">
+                    <param name="pMaxAlignAttempt" type="integer" value="100" min="1" label="Maximum number of attempts Bowtie will make to match an alignment for one mate with an alignment for the opposite mate (--pairtries)" />
+                    <param name="pdMaxBacktracks" type="integer" value="800" min="0" label="Maximum number of backtracks permitted when aligning a read (--maxbts)" />
+                  </when>
+                  <when value="doTryHard" />
+                </conditional>
+              </when>
+            </conditional>
+            <conditional name="pAllValAlignsOption">
+              <param name="pAllValAligns" type="select" label="Whether or not to report all valid alignments per pair (-a)">
+                <option value="noAllValAligns">Do not report all valid alignments</option>
+                <option value="doAllValAligns">Report all valid alignments</option>
+              </param>
+              <when value="noAllValAligns">
+                <param name="pValAlign" type="integer" value="1" min="1" label="Report up to n valid alignments per pair (-k)" />
+              </when>
+              <when value="doAllValAligns" />
+            </conditional>
+            <param name="pSuppressAlign" type="integer" value="-1" label="Suppress all alignments for a pair if more than n reportable alignments exist (-m)" help="-1 for no limit" />
+            <param name="pMaxFile" type="boolean" truevalue="true" falsevalue="false" checked="False" label="Write all reads with a number of valid alignments exceeding the limit set with the -m option to a file (--max)" />
+            <param name="pUnmappedFile" type="boolean" truevalue="true" falsevalue="false" checked="False" label="Write all reads that could not be aligned to a file (--un)" />
+            <param name="pOffrate" type="integer" value="-1" label="Override the offrate of the index to n (-o)" help="-1 for default" />
+            <param name="pSeed" type="integer" value="-1" label="Seed for pseudo-random number generator (--seed)" help="-1 for default" />
+          </when> <!-- full -->
+        </conditional> <!-- pParams -->
+      </when> <!-- paired -->
+    </conditional> <!-- singlePaired -->
+    <param name="suppressHeader" type="boolean" truevalue="true" falsevalue="false" checked="False" label="Suppress the header in the output SAM file (--sam-nohead)" help="Bowtie produces SAM with several lines of header information by default" />
+  </inputs>
+  <outputs>
+    <data format="sam" name="output" label="${tool.name} on ${on_string}: mapped reads">
+      <actions>
+        <conditional name="refGenomeSource.genomeSource">
+          <when value="indexed">
+            <action type="metadata" name="dbkey">
+              <option type="from_data_table" name="bowtie_indexes" column="1" offset="0">
+                <filter type="param_value" column="0" value="#" compare="startswith" keep="False"/>
+                <filter type="param_value" ref="refGenomeSource.index" column="0"/>
+              </option>
+            </action>
+          </when>
+          <when value="history">
+            <action type="metadata" name="dbkey">
+              <option type="from_param" name="refGenomeSource.ownFile" param_attribute="dbkey" />
+            </action>
+          </when>
+        </conditional>
+      </actions>
+    </data>
+    <data format="fastq" name="output_suppressed_reads_l" label="${tool.name} on ${on_string}: suppressed reads (L)">
+      <filter>((
+          singlePaired['sPaired'] == "single" and
+          singlePaired['sParams']['sSettingsType'] == "full" and
+          singlePaired['sParams']['sMaxFile'] is True
+        ) or (
+          singlePaired['sPaired'] == "paired" and
+          singlePaired['pParams']['pSettingsType'] == "full" and
+          singlePaired['pParams']['pMaxFile'] is True
+        ))
+      </filter>
+      <actions>
+        <conditional name="singlePaired.sPaired">
+          <when value="single">
+            <action type="format">
+              <option type="from_param" name="singlePaired.sInput1" param_attribute="ext" />
+            </action>
+          </when>
+          <when value="paired">
+            <action type="format">
+              <option type="from_param" name="singlePaired.pInput1" param_attribute="ext" />
+            </action>
+          </when>
+        </conditional>
+      </actions>
+    </data>
+    <data format="fastq" name="output_suppressed_reads_r" label="${tool.name} on ${on_string}: suppressed reads (R)">
+      <filter>singlePaired['sPaired'] == "paired"</filter>
+      <filter>singlePaired['pParams']['pSettingsType'] == "full"</filter>
+      <filter>singlePaired['pParams']['pMaxFile'] is True</filter>
+      <actions>
+        <conditional name="singlePaired.sPaired">
+          <when value="single">
+            <action type="format">
+              <option type="from_param" name="singlePaired.sInput1" param_attribute="ext" />
+            </action>
+          </when>
+          <when value="paired">
+            <action type="format">
+              <option type="from_param" name="singlePaired.pInput1" param_attribute="ext" />
+            </action>
+          </when>
+        </conditional>
+      </actions>
+    </data>
+    <data format="fastq" name="output_unmapped_reads_l" label="${tool.name} on ${on_string}: unmapped reads (L)">
+      <filter>
+        ((
+          singlePaired['sPaired'] == "single" and
+          singlePaired['sParams']['sSettingsType'] == "full" and
+          singlePaired['sParams']['sUnmappedFile'] is True
+        ) or (
+          singlePaired['sPaired'] == "paired" and
+          singlePaired['pParams']['pSettingsType'] == "full" and
+          singlePaired['pParams']['pUnmappedFile'] is True
+        ))
+      </filter>
+      <actions>
+        <conditional name="singlePaired.sPaired">
+          <when value="single">
+            <action type="format">
+              <option type="from_param" name="singlePaired.sInput1" param_attribute="ext" />
+            </action>
+          </when>
+          <when value="paired">
+            <action type="format">
+              <option type="from_param" name="singlePaired.pInput1" param_attribute="ext" />
+            </action>
+          </when>
+        </conditional>
+      </actions>
+    </data>
+    <data format="fastq" name="output_unmapped_reads_r" label="${tool.name} on ${on_string}: unmapped reads (R)">
+      <filter>singlePaired['sPaired'] == "paired"</filter>
+      <filter>singlePaired['pParams']['pSettingsType'] == "full"</filter>
+      <filter>singlePaired['pParams']['pUnmappedFile'] is True</filter>
+      <actions>
+        <conditional name="singlePaired.sPaired">
+          <when value="single">
+            <action type="format">
+              <option type="from_param" name="singlePaired.sInput1" param_attribute="ext" />
+            </action>
+          </when>
+          <when value="paired">
+            <action type="format">
+              <option type="from_param" name="singlePaired.pInput1" param_attribute="ext" />
+            </action>
+          </when>
+        </conditional>
+      </actions>
+    </data>
+  </outputs>
+  <tests>
+    <test>
+      <!--
+      Bowtie command:
+      bowtie -q -p 4 -S +sam-nohead chrM_base test-data/bowtie_in2.fastqsanger > bowtie_out6_u.sam
+      sort bowtie_out6_u.sam > bowtie_out6.sam
+      -p is the number of threads. You need to replace the + with 2 dashes.
+      chrM_base needs to be the base location/name of the index files.
+      -->
+      <param name="genomeSource" value="indexed" />
+      <!-- this is the backwards-compatible "unique value" for this index, not an actual path -->
+      <param name="index" value="equCab2chrM" />
+      <param name="sPaired" value="single" />
+      <param name="sInput1" ftype="fastqsanger" value="bowtie_in2.fastqsanger" />
+      <param name="sSettingsType" value="preSet" />
+      <param name="suppressHeader" value="true" />
+      <output name="output" ftype="sam" file="bowtie_out6.sam" sort="True" />
+    </test>
+    <test>
+      <!--
+      Bowtie command:
+      bowtie-build -f test-data/phiX.fasta phiX_base
+      bowtie -q -X 1000 +ff -p 4 -S +sam-nohead -n 2 -e 70 -l 28 +pairtries 100 +maxbts 800 +best +un bowtie_out8_u.fastq phiX_base -1 test-data/bowtie_in5.fastqsanger -2 test-data/bowtie_in6.fastqsanger > bowtie_out7_u.sam
+      sort bowtie_out7_u.sam > bowtie_out7.sam
+      sort bowtie_out8_u_1.sam > bowtie_out8_1.sam
+      sort bowtie_out8_u_2.sam > bowtie_out8_2.sam
+      Then also need to modify bowtie_out8_1.sam and bowtie_out8_2.sam so that all @ lines come before sequence lines.
+      -p is the number of threads. You need to replace the + with 2 dashes.
+      The two unmapped output files will be named bowtie_out8_1.fastq and bowtie_out8_2.fastq.
+      chrM_base is the index files' location/base name.
+      -->
+      <param name="genomeSource" value="history" />
+      <param name="ownFile" value="phiX.fasta" />
+      <param name="indexSettings" value="indexPreSet" />
+      <param name="sPaired" value="paired" />
+      <param name="pInput1" ftype="fastqsanger" value="bowtie_in5.fastqsanger" />
+      <param name="pInput2" ftype="fastqsanger" value="bowtie_in6.fastqsanger" />
+      <param name="pMaxInsert" value="1000" />
+      <param name="pMateOrient" value="ff" />
+      <param name="pSettingsType" value="full" />
+      <param name="pSkip" value="0" />
+      <param name="pAlignLimit" value="-1" />
+      <param name="pTrimH" value="0" />
+      <param name="pTrimL" value="0" />
+      <param name="alignMode" value="nMode" />
+      <param name="pMismatchSeed" value="2" />
+      <param name="pMismatchQual" value="70" />
+      <param name="pSeedLen" value="28" />
+      <param name="pRounding" value="round" />
+      <param name="pMinInsert" value="0" />
+      <param name="pMaxAlignAttempt" value="100" />
+      <param name="pForwardAlign" value="forward" />
+      <param name="pReverseAlign" value="reverse" />
+      <param name="pTryHard" value="noTryHard" />
+      <param name="pValAlign" value="1" />
+      <param name="pAllValAligns" value="noAllValAligns" />
+      <param name="pSuppressAlign" value="-1" />
+      <param name="pUnmappedFile" value="true" />
+      <param name="pMaxFile" value="false" />
+      <param name="pBest" value="doBest" />
+      <param name="pdMaxBacktracks" value="800" />
+      <param name="pdStrata" value="noStrata" />
+      <param name="pOffrate" value="-1" />
+      <param name="pSeed" value="-1" />
+      <param name="suppressHeader" value="true" />
+      <output name="output" ftype="sam" file="bowtie_out7.sam" sort="True" />
+      <output name="output_unmapped_reads_l" ftype="fastqsanger" file="bowtie_out8_1.fastq" sort="True" />
+      <output name="output_unmapped_reads_r" ftype="fastqsanger" file="bowtie_out8_2.fastq" sort="True" />
+    </test>
+    <!-- start testing of non-sanger variant fastq reads -->
+    <test>
+      <param name="genomeSource" value="history" />
+      <param name="ownFile" value="phiX.fasta" />
+      <param name="indexSettings" value="indexPreSet" />
+      <param name="sPaired" value="paired" />
+      <param name="pInput1" ftype="fastqillumina" value="bowtie_in5.fastqillumina" />
+      <param name="pInput2" ftype="fastqillumina" value="bowtie_in6.fastqillumina" />
+      <param name="pMaxInsert" value="1000" />
+      <param name="pMateOrient" value="ff" />
+      <param name="pSettingsType" value="full" />
+      <param name="pSkip" value="0" />
+      <param name="pAlignLimit" value="-1" />
+      <param name="pTrimH" value="0" />
+      <param name="pTrimL" value="0" />
+      <param name="alignMode" value="nMode" />
+      <param name="pMismatchSeed" value="2" />
+      <param name="pMismatchQual" value="70" />
+      <param name="pSeedLen" value="28" />
+      <param name="pRounding" value="round" />
+      <param name="pMinInsert" value="0" />
+      <param name="pMaxAlignAttempt" value="100" />
+      <param name="pForwardAlign" value="forward" />
+      <param name="pReverseAlign" value="reverse" />
+      <param name="pTryHard" value="noTryHard" />
+      <param name="pValAlign" value="1" />
+      <param name="pAllValAligns" value="noAllValAligns" />
+      <param name="pSuppressAlign" value="-1" />
+      <param name="pUnmappedFile" value="true" />
+      <param name="pMaxFile" value="false" />
+      <param name="pBest" value="doBest" />
+      <param name="pdMaxBacktracks" value="800" />
+      <param name="pdStrata" value="noStrata" />
+      <param name="pOffrate" value="-1" />
+      <param name="pSeed" value="-1" />
+      <param name="suppressHeader" value="true" />
+      <output name="output" ftype="sam" file="bowtie_out7.sam" sort="True" />
+      <output name="output_unmapped_reads_l" ftype="fastqillumina" file="bowtie_out8_1.fastqillumina.sorted" sort="True" />
+      <output name="output_unmapped_reads_r" ftype="fastqillumina" file="bowtie_out8_2.fastqillumina.sorted" sort="True" />
+    </test>
+    <test>
+      <param name="genomeSource" value="history" />
+      <param name="ownFile" value="phiX.fasta" />
+      <param name="indexSettings" value="indexPreSet" />
+      <param name="sPaired" value="paired" />
+      <param name="pInput1" ftype="fastqsolexa" value="bowtie_in5.fastqsolexa" />
+      <param name="pInput2" ftype="fastqsolexa" value="bowtie_in6.fastqsolexa" />
+      <param name="pMaxInsert" value="1000" />
+      <param name="pMateOrient" value="ff" />
+      <param name="pSettingsType" value="full" />
+      <param name="pSkip" value="0" />
+      <param name="pAlignLimit" value="-1" />
+      <param name="pTrimH" value="0" />
+      <param name="pTrimL" value="0" />
+      <param name="alignMode" value="nMode" />
+      <param name="pMismatchSeed" value="2" />
+      <param name="pMismatchQual" value="70" />
+      <param name="pSeedLen" value="28" />
+      <param name="pRounding" value="round" />
+      <param name="pMinInsert" value="0" />
+      <param name="pMaxAlignAttempt" value="100" />
+      <param name="pForwardAlign" value="forward" />
+      <param name="pReverseAlign" value="reverse" />
+      <param name="pTryHard" value="noTryHard" />
+      <param name="pValAlign" value="1" />
+      <param name="pAllValAligns" value="noAllValAligns" />
+      <param name="pSuppressAlign" value="-1" />
+      <param name="pUnmappedFile" value="true" />
+      <param name="pMaxFile" value="false" />
+      <param name="pBest" value="doBest" />
+      <param name="pdMaxBacktracks" value="800" />
+      <param name="pdStrata" value="noStrata" />
+      <param name="pOffrate" value="-1" />
+      <param name="pSeed" value="-1" />
+      <param name="suppressHeader" value="true" />
+      <output name="output" ftype="sam" file="bowtie_out7.sam" sort="True" />
+      <output name="output_unmapped_reads_l" ftype="fastqsolexa" file="bowtie_out8_1.fastqsolexa.sorted" sort="True" />
+      <output name="output_unmapped_reads_r" ftype="fastqsolexa" file="bowtie_out8_2.fastqsolexa.sorted" sort="True" />
+    </test>
+    <!-- end testing of non-sanger variant fastq reads -->
+    <test>
+      <!--
+      Bowtie command:
+      bowtie -q -p 4 -S +sam-nohead -n 2 -e 70 -l 28 -y -k 1 chrM_base test-data/bowtie_in2.fastqsanger > bowtie_out9_u.sam
+      sort bowtie_out9_u.sam > bowtie_out9.sam
+      -p is the number of threads. You need to replace the + with 2 dashes.
+      chrM_base is the index files' location/base name.
+      -->
+      <param name="genomeSource" value="indexed" />
+      <!-- this is the backwards-compatible "unique value" for this index, not an actual path -->
+      <param name="index" value="equCab2chrM" />
+      <param name="sPaired" value="single" />
+      <param name="sInput1" ftype="fastqsanger" value="bowtie_in2.fastqsanger" />
+      <param name="sSettingsType" value="full" />
+      <param name="sSkip" value="0" />
+      <param name="sAlignLimit" value="-1" />
+      <param name="sTrimH" value="0" />
+      <param name="sTrimL" value="0" />
+      <param name="alignMode" value="nMode" />
+      <param name="sMismatchSeed" value="2" />
+      <param name="sMismatchQual" value="70" />
+      <param name="sSeedLen" value="28" />
+      <param name="sRounding" value="round" />
+      <param name="sForwardAlign" value="forward" />
+      <param name="sReverseAlign" value="reverse" />
+      <param name="sTryHard" value="doTryHard" />
+      <param name="sValAlign" value="1" />
+      <param name="sAllValAligns" value="noAllValAligns" />
+      <param name="sSuppressAlign" value="-1" />
+      <param name="sUnmappedFile" value="false" />
+      <param name="sMaxFile" value="false" />
+      <param name="sBest" value="noBest" />
+      <param name="sOffrate" value="-1" />
+      <param name="sSeed" value="-1" />
+      <param name="suppressHeader" value="true" />
+      <output name="output" ftype="sam" file="bowtie_out9.sam" sort="True" />
+    </test>
+    <test>
+      <!--
+      Bowtie command:
+      bowtie-build +offrate 5 +ftabchars 10 +little -f test-data/phiX.fasta phiX_base
+      bowtie -q -X 1000 +ff -p 4 -S +sam-nohead phiX_base -1 test-data/bowtie_in5.fastqsanger -2 test-data/bowtie_in6.fastqsanger > bowtie_out10_u.sam
+      sort bowtie_out10_u.sam > bowtie_out10.sam
+      -p is the number of threads. You need to replace the + with 2 dashes.
+      chrM_base is the index files' location/base name.
+      -->
+      <param name="genomeSource" value="history" />
+      <param name="ownFile" value="phiX.fasta" />
+      <param name="indexSettings" value="indexFull" />
+      <param name="autoB" value="auto" />
+      <param name="nodc" value="dc" />
+      <param name="noref" value="ref" />
+      <param name="offrate" value="5" />
+      <param name="ftab" value="10" />
+      <param name="ntoa" value="no" />
+      <param name="endian" value="little" />
+      <param name="seed" value="-1" />
+      <param name="sPaired" value="paired" />
+      <param name="pInput1" ftype="fastqsanger" value="bowtie_in5.fastqsanger" />
+      <param name="pInput2" ftype="fastqsanger" value="bowtie_in6.fastqsanger" />
+      <param name="pMaxInsert" value="1000" />
+      <param name="pMateOrient" value="ff" />
+      <param name="pSettingsType" value="preSet" />
+      <param name="suppressHeader" value="true" />
+      <output name="output" ftype="sam" file="bowtie_out10.sam" sort="True" />
+    </test>
+  </tests>
+
+  <help>
+
+**What it does**
+
+Bowtie_ is a short read aligner designed to be ultrafast and memory-efficient. It is developed by Ben Langmead and Cole Trapnell. Please cite: Langmead B, Trapnell C, Pop M, Salzberg SL. Ultrafast and memory-efficient alignment of short DNA sequences to the human genome. Genome Biology 10:R25.
+
+.. _Bowtie: http://bowtie-bio.sourceforge.net/index.shtml
+
+------
+
+**Know what you are doing**
+
+.. class:: warningmark
+
+There is no such thing (yet) as an automated gearshift in short read mapping. It is all like stick-shift driving in San Francisco. In other words = running this tool with default parameters will probably not give you meaningful results. A way to deal with this is to **understand** the parameters by carefully reading the `documentation`__ and experimenting. Fortunately, Galaxy makes experimenting easy.
+
+ .. __: http://bowtie-bio.sourceforge.net/index.shtml
+
+------
+
+**Input formats**
+
+Bowtie accepts files in Sanger FASTQ format. Use the FASTQ Groomer to prepare your files.
+
+------
+
+**A Note on Built-in Reference Genomes**
+
+The default variant for all genomes is "Full", defined as all primary chromosomes (or scaffolds/contigs) including mitochondrial plus associated unmapped, plasmid, and other segments. When only one version of a genome is available in this tool, it represents the default "Full" variant. Some genomes will have more than one variant available. The "Canonical Male" or sometimes simply "Canonical" variant contains the primary chromosomes for a genome. For example a human "Canonical" variant contains chr1-chr22, chrX, chrY, and chrM. The "Canonical Female" variant contains the primary chromosomes excluding chrY.
+
+------
+
+**Outputs**
+
+The output is in SAM format, and has the following columns::
+
+    Column  Description
+  --------  --------------------------------------------------------
+   1 QNAME  Query (pair) NAME
+   2 FLAG   bitwise FLAG
+   3 RNAME  Reference sequence NAME
+   4 POS    1-based leftmost POSition/coordinate of clipped sequence
+   5 MAPQ   MAPping Quality (Phred-scaled)
+   6 CIGAR  extended CIGAR string
+   7 MRNM   Mate Reference sequence NaMe ('=' if same as RNAME)
+   8 MPOS   1-based Mate POSition
+   9 ISIZE  Inferred insert SIZE
+  10 SEQ    query SEQuence on the same strand as the reference
+  11 QUAL   query QUALity (ASCII-33 gives the Phred base quality)
+  12 OPT    variable OPTional fields in the format TAG:VTYPE:VALUE
+
+The flags are as follows::
+
+    Flag  Description
+  ------  -------------------------------------
+  0x0001  the read is paired in sequencing
+  0x0002  the read is mapped in a proper pair
+  0x0004  the query sequence itself is unmapped
+  0x0008  the mate is unmapped
+  0x0010  strand of the query (1 for reverse)
+  0x0020  strand of the mate
+  0x0040  the read is the first read in a pair
+  0x0080  the read is the second read in a pair
+  0x0100  the alignment is not primary
+
+It looks like this (scroll sideways to see the entire example)::
+
+  QNAME	FLAG	RNAME	POS	MAPQ	CIAGR	MRNM	MPOS	ISIZE	SEQ	QUAL	OPT
+  HWI-EAS91_1_30788AAXX:1:1:1761:343	4	*	0	0	*	*	0	0	AAAAAAANNAAAAAAAAAAAAAAAAAAAAAAAAAAACNNANNGAGTNGNNNNNNNGCTTCCCACAGNNCTGG	hhhhhhh;;hhhhhhhhhhh^hOhhhhghhhfhhhgh;;h;;hhhh;h;;;;;;;hhhhhhghhhh;;Phhh
+  HWI-EAS91_1_30788AAXX:1:1:1578:331	4	*	0	0	*	*	0	0	GTATAGANNAATAAGAAAAAAAAAAATGAAGACTTTCNNANNTCTGNANNNNNNNTCTTTTTTCAGNNGTAG	hhhhhhh;;hhhhhhhhhhhhhhhhhhhhhhhhhhhh;;h;;hhhh;h;;;;;;;hhhhhhhhhhh;;hhVh
+
+-------
+
+**Bowtie settings**
+
+All of the options have a default value. You can change any of them. Most of the options in Bowtie have been implemented here.
+
+------
+
+**Bowtie parameter list**
+
+This is an exhaustive list of Bowtie options:
+
+For indexing (bowtie-build)::
+
+  -a                 No auto behavior. Disable the default behavior where bowtie automatically 
+                     selects values for --bmax/--bmaxdivn/--dcv/--packed parameters according 
+                     to the memory available. [off]
+  --packed           Packing. Use a packed representation for DNA strings. [auto] 
+  --bmax INT         Suffix maximum. The maximum number of suffixes allowed in a block. [auto]
+  --bmaxdivn INT     Suffix maximum fraction. The maximum number of suffixes allowed in a block 
+                     expressed as a fraction of the length of the reference. [4]
+  --dcv INT          Difference-cover sample. Use INT as the period for the difference-cover 
+                     sample. [1024]
+  --nodc INT         No difference-cover sample. Disable the difference-cover sample. [off]
+  -r                 No reference indexes. Do not build the NAME.3.ebwt and NAME.4.ebwt portions 
+                     of the index. Used only for paired-end alignment. [off]
+  -o                 Offrate. How many Burrows-Wheeler rows get marked by the indexer. The 
+                     indexer will mark every 2^INT rows. The marked rows correspond to rows on 
+                     the genome. [5]
+  -t INT             The ftab lookup table used to calculate an initial Burrows-Wheeler range 
+                     with respect to the first INT characters of the query. Ftab size is 4^(INT+1) 
+                     bytes. [10]
+  --ntoa             N conversion. Convert Ns to As before building the index. Otherwise, Ns are 
+                     simply excluded from the index and Bowtie will not find alignments that 
+                     overlap them. [off]
+  --big              Endianness. Endianness to use when serializing integers to the index file. [off]
+  --little           Endianness. [--little]
+  --seed INT         Random seed. Use INT as the seed for the pseudo-random number generator. [off]
+
+For aligning (bowtie)::
+
+  -s INT             Skip. Do not align the first INT reads or pairs in the input. [off]
+  -u INT             Align limit. Only align the first INT reads/pairs from the input. [no limit]
+  -5 INT             High-quality trim. Trim INT bases from the high-quality (left) end of each 
+                     read before alignment. [0]
+  -3 INT             Low-quality trim. Trim INT bases from the low-quality (right) end of each 
+                     read before alignment. [0]
+  -n INT             Mismatch seed. Maximum number of mismatches permitted in the seed (defined 
+                     with seed length option). Can be 0, 1, 2, or 3. [2]
+  -e INT             Mismatch quality. Maximum permitted total of quality values at mismatched 
+                     read positions. Bowtie rounds quality values to the nearest 10 and saturates 
+                     at 30. [70]
+  -l INT             Seed length. The number of bases on the high-quality end of the read to 
+                     which the -n ceiling applies. Must be at least 5. [28]
+  --nomaqround       Suppress Maq rounding. Values are internally rounded to the nearest 10 and 
+                     saturate at 30. This options turns off that rounding. [off] 
+  -v INT             Maq- or SOAP-like alignment policy. This option turns off the default 
+                     Maq-like alignment policy in favor of a SOAP-like one. End-to-end alignments 
+                     with at most INT mismatches. [off]
+  -I INT             Minimum insert. The minimum insert size for valid paired-end alignments. 
+                     Does checking on untrimmed reads if -5 or -3 is used. [0]
+  -X INT             Maximum insert. The maximum insert size for valid paired-end alignments. 
+                     Does checking on untrimmed reads if -5 or -3 is used. [250]
+  --fr               Mate orientation. The upstream/downstream mate orientations for a valid 
+                     paired-end alignment against the forward reference strand. [--fr]
+  --rf               Mate orientation. [off]
+  --ff               Mate orientation. [off]
+  --pairtries INT    Maximum alignment attempts for paired-end data. [100] 
+  --nofw             No forward aligning. Choosing this option means that Bowtie will not attempt 
+                     to align against the forward reference strand. [off]
+  --norc             No reverse-complement aligning. Setting this will mean that Bowtie will not 
+                     attempt to align against the reverse-complement reference strand. [off]
+  --un FILENAME      Write all reads that could not be aligned to file [off]
+  --max FILENAME     Write all reads with a number of valid alignments exceeding the limit
+                     set with the -m option to file [off]
+  --maxbts INT       Maximum backtracks. The maximum number of backtracks permitted when aligning 
+                     a read in -n 2 or -n 3 mode. [125 without --best] [800 with --best]
+  -y                 Try hard. Try as hard as possible to find valid alignments when they exist, 
+                     including paired-end alignments. [off]
+  --chunkmbs INT     Thread memory. The number of megabytes of memory a given thread is given to 
+                     store path descriptors in --best mode. [32]
+  -k INT             Valid alignments. The number of valid alignments per read or pair. [off] 
+  -a                 All valid alignments. Choosing this means that all valid alignments per read 
+                     or pair will be reported. [off]
+  -m INT             Suppress alignments. Suppress all alignments for a particular read or pair 
+                     if more than INT reportable alignments exist for it. [no limit]
+  --best             Best mode. Make Bowtie guarantee that reported singleton alignments are 
+                     "best" in terms of stratum (the number of mismatches) and quality values at 
+                     mismatched position. [off]
+  --strata           Best strata. When running in best mode, report alignments that fall into the 
+                     best stratum if there are ones falling into more than one. [off]
+  -o INT             Offrate override. Override the offrate of the index with INT. Some row 
+                     markings are discarded when index read into memory. INT must be greater than 
+                     the value used to build the index (default: 5). [off]
+  --seed INT         Random seed. Use INT as the seed for the pseudo-random number generator. [off]
+  --snpphred INT     Use INT as the SNP penalty for decoding colorspace alignments. True ratio of 
+                     SNPs per base in the subject genome. [see --snpfrac]
+  --snpfrac DEC      Use DEC as the estimated ratio of SNPs per base when decoding colorspace 
+                     alignments. [0.001]
+  --col-keepends     Keep the extreme-end nucleotides and qualities when decoding colorspace 
+                     alignments. [off]
+
+    </help>
+    <citations>
+        <citation type="doi">10.1186/gb-2009-10-3-r25</citation>
+    </citations>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bowtie_in2.fastqsanger	Mon Nov 09 11:18:30 2015 -0500
@@ -0,0 +1,104 @@
+@HWI-EAS91_1_30788AAXX:1:1:1513:715/1
+GTTTTTTGGGCATAGATGTTTAGTTGTGGTAGTCAG
++
+IIIIIII""IIIIIIIIIIIIIIIIIIIDI?II-+I
+@HWI-EAS91_1_30788AAXX:1:1:1698:516/1
+GTTGTTAGGGAGAGGAGTTGAACCTCTGAGTGTAAA
++
+IIIIIII""IIIIIIIIIIIIIIIIIII5IIIII9I
+@HWI-EAS91_1_30788AAXX:1:1:1491:637/1
+GCTAGCAGGATGGATCCGGCAATTGGGGCTTCTACA
++
+IIIIIII""IIIIIIIIIIIIFIIIIIIIIIIIABD
+@HWI-EAS91_1_30788AAXX:1:1:1711:249/1
+GGAAGTAGGGGCCTGCGTTCAGGCGTTCTGTTTGGT
++
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIIII
+@HWI-EAS91_1_30788AAXX:1:1:1634:211/1
+GAAGCAGGGGCTTGATACTGACACTTCGTCGACGTA
++
+IIIIIII""IIIIIIIIIIIIIIIIIIIIII9IIDF
+@HWI-EAS91_1_30788AAXX:1:1:1218:141/1
+GTTAAATATTGGGAGTGGGGGGGGGGGGGAGTTTTG
++
+IIIIIII""IIIIIIIIIIIIIIIIIIII1IIII+I
+@HWI-EAS91_1_30788AAXX:1:1:1398:854/1
+GTGAAGAGGAGGGGATTTATTAGTACGGGAAGGGTG
++
+IIIIIII""IIIIIBIIIIIIIIIIIIIIA=IIIII
+@HWI-EAS91_1_30788AAXX:1:1:1310:991/1
+GAATAGTGGTAGTATTATTCCTTCTAGGCATAGGAG
++
+IIIIIII""IIIIIIIIII4IIIIIIDII:IEI2:I
+@HWI-EAS91_1_30788AAXX:1:1:1716:413/1
+GATCCAAGGCTTTATCAACACCTATTCTGATTCTTC
++
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIIII
+@HWI-EAS91_1_30788AAXX:1:1:1630:59/1
+GGAGCGGGGGGTTGGTAAGGTTGGGGTCGAGTATGA
++
+IIIIIII""IIIIIIIIIIIIIIIIIIII;IIHIIF
+@HWI-EAS91_1_30788AAXX:1:1:1601:805/1
+GAAAACAGGAAAACAATCCAGTCACTTACCCTATGC
++
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIII@III
+@HWI-EAS91_1_30788AAXX:1:1:1663:724/1
+GTTTGCCGGCGCCATCCTACGCTCCATTCCCAACAA
++
+IIIIIII""IIII8IIIIIIHIIII6IIIII1CI=3
+@HWI-EAS91_1_30788AAXX:1:1:1454:975/1
+GCTAGGCGGGAGTGGTAAAAGGCTCAGAAGAAGCCA
++
+IIIIIII""IIIIIIIIIIIIIIIIEIG;IIIIIII
+@HWI-EAS91_1_30788AAXX:1:1:1461:255/1
+GTACACCGGCGCCTGAGCCCTACTAATAACTCTCAT
++
+IIIIIII""IIIIII9IIIIIIEI(II9.I4III,I
+@HWI-EAS91_1_30788AAXX:1:1:1775:764/1
+GCATCCCGGTAGATCTAATTTTCTAAATCTGTCAAC
++
+IIIIIII""III@IIII+IIIIII8H8IIIIIIICI
+@HWI-EAS91_1_30788AAXX:1:1:1269:520/1
+GGAGTATGGAATAAGTGATTTTAGATCGGTTTGTCG
++
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIIII
+@HWI-EAS91_1_30788AAXX:1:1:1303:1162/1
+GAGCAAGGGCAGGAGGAGGAGTCCTAGGATGTCTTT
++
+IIIIIII""IIIIFII4*IGIAI(IAII49',3I6I
+@HWI-EAS91_1_30788AAXX:1:1:1090:409/1
+GTTTGTTGGGAATGGAGCGTAGGATGGCGTAGGCAA
++
+IIIIIII""IIIIIIIIIIIIIIIIIIIII:IIA8I
+@HWI-EAS91_1_30788AAXX:1:1:1336:1000/1
+GGTAAATGGGAAATATTAAGTTTCTGTTTCTAGATC
++
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIII9II
+@HWI-EAS91_1_30788AAXX:1:1:1199:1376/1
+GTTTTCTGGAAAACCTTCACCTATTTATGGGGGTTT
++
+IIIIIII""IIIIIIIIIIIII;III3IIG&:/III
+@HWI-EAS91_1_30788AAXX:1:1:1598:1148/1
+GATCAATGGTTTGGATCAATAAGTGATTATATATTT
++
+IIIIIII""IIIIIDIIIIII?IIICII=IHIIIII
+@HWI-EAS91_1_30788AAXX:1:1:1723:1459/1
+GAAACCCGGACGTTTGGATGGGCCCGGAGCGAGGAT
++
+IIIIIII""IIIIIIIIDIIIIIIIII9HII-II=I
+@HWI-EAS91_1_30788AAXX:1:1:1442:1346/1
+TATCAAGGGGCTGCTTCGAATCCGAAGTGGTGGCTG
++
+IIIIIII""IIIIIDIIIII1I(I4II<?<-II*,&
+@HWI-EAS91_1_30788AAXX:1:1:850:117/1
+GTATGACGGTAAAGAAAATTATTACGAATGCATGGG
++
+IIIIIII""IIIIIIEIEIIIIIIIIEBIDD9I;:?
+@HWI-EAS91_1_30788AAXX:1:1:795:325/1
+GGGTACTGGGAAGTGGAATGGTGTGAGTCCAAGTTT
++
+IIIIIII""IIIIIIIIIIIIIIIIIIIII65IIII
+@HWI-EAS91_1_30788AAXX:1:1:873:453/1
+GAGTAGGGGGATTGCTAGAGTTACTTCGTATGAGAT
++
+IIIIIII""IIIIIIIIIIIIIIIII@IIIIIII=I
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bowtie_in5.fastqillumina	Mon Nov 09 11:18:30 2015 -0500
@@ -0,0 +1,72 @@
+@Dummy:1:1:1761:343/1
+TTTATCGCTTCCATGACGCAGAAGTTAACACTTTCGGATATTTCTGATGA
++
+hhhhhhhAAhhhhhhhhhhh^hOhhhhghhhfhhhhhOhh^hAAhhhhhh
+@Dummy:1:1:1578:331/1
+TGTCAAAAACTGACGCGTTGGATGAGGAGAAGTGGCTTAATATGCTTGGC
++
+hhhhhhhAAhhhhhhhhhhhhhhhhhhhhhhhhhhAhhhhhhhOOOhhhh
+@Dummy:1:1:1647:512/1
+TACTGAACAATCCGTACGTTTCCAGACCGCTTTGGCCTCTATTAAGCTCA
++
+hhhhhhhAAhhhhhhhhhhhhhhhhhhhhhhhhhhAhhhhhhhOOOhhhh
+@Dummy:1:1:1570:620/1
+GAGTAACAAAGTaaaGTTTGGAccGTTTTTGTCTCGTGCTCGTCGCTGCG
++
+hhhhhhhAAhhhhhhhhhhhhhahhhhhhhhhhhhAhhhhhhhOOOhhhh
+@Dummy:1:1:1599:330/1
+AGAAGAAAACGTGCGTCAAAAATTACGTGCaGAAGGAGTGATGTAATGTC
++
+hhhhhhhAAhhhhhhhhhhhhhhhhhhh[hhh_hhAhhhhhhhOOOhhhh
+@Dummy:1:1:1652:270/1
+AGCGTAAAGGCGCTCGTCTTTGGTATGTAGGacTTTGCATTGTTTAATTG
++
+hhhhhhhAAhhhhhhhhhhhhhhhhhhhhhhhUhhAhhhhhhhOOOhhhh
+@Dummy:1:1:1746:351/1
+CTCATCGTCACGTTTATGGTGAACAGTGGATTAAGTTCATGAAGGATGGT
++
+hhhhhhhAAhhhhhhhhhhhhhhhhhhhhhhhhhhAhhhhhhhOOOhhhh
+@Dummy:1:1:1582:633/1
+CCGCTTCCTCCTGAGACTGAGCTTTCTCGCCAAATGACGACTTCTACCAC
++
+hhhhhhhAAhhhhhhhhhhhhhhhhhhhhhhhhhhAhhhhhhhOOOhhhh
+@Dummy:1:1:1598:534/1
+GCGCTCTAATCTCTGGGCATCTGGCTATGATGTTGATGGAACTGACCAAA
++
+hhhhhhhAAhhhhhhhhhhhhhhhhhhhhhhhhhhAhhhhhhhOOOhhhh
+@Dummy:1:1:1572:324/1
+AAGGTGCTTaaaTTCgtGGGTCCTGAGCTGGCGACCCTGTTTTGTATGGC
++
+hhhhhhhAAhhhhhhhhhhhhhhhhhhhhJVhOThAhhhhhhhOOOhhhh
+@Dummy:1:1:1749:466/1
+TTGCAGTGGAATAGTCAGGTTAAATTTAATGTGACCGTTTATCGCAATCT
++
+hhhhhhhAAhhhhhhhhhhhhhhhhhhhhhhhhhhAhhhhhhhOOOhhhh
+@Dummy:1:1:1629:446/1
+AGGTTATAACGCCGAAGCGGTAAAAATTTTAATTTTTGCCGCTGAGGGGT
++
+hhhhhhhAAhhhhhhhhhhhhhhhhhhhhhhhhhhAhhhhhhhOOOhhhh
+@Dummy:1:1:1763:587/1
+AAGCTACATCGTCAACGTTATATTTTGATAGTTTGACGGTTAATGCTGGT
++
+hhhhhhhAAhhhhhhhhhhhhhhhhhhhhhhhhhhAhhhhhhhOOOhhhh
+@Dummy:1:1:1616:363/1
+TGTTTATCCTTTGAATGGTCGCCATGATGGTGGTTATTATACCGTCAAGG
++
+hhhhhhhAAhhhhhhhhhhhhhhhhhhhhhhchhhAhhhhhhhOOOhhhh
+@Dummy:1:1:1768:715/1
+ACCCTGATGAGGCCGCCCCTAGTTTTGTTTCTGGTGCTATGGCTAAAGCT
++
+hhhhhhhAAhhhhhhhhhhhhhchhhhhhhhhhhhAhhhhhhhOOOhhhh
+@Dummy:1:1:1572:270/1
+TGAGATGCTTGCTTATCAACAGAAGGAGTCTACTGCTCGCGTTGCGTCTA
++
+hhhhhhhAAhhhhhhhhhhhhhhhhhhhhhhhhhhAhhhhhhhOOOhhhh
+@Dummy:1:1:1673:514/1
+ATTATTTTGACTTTGAGCGTATCGAGGCTCTTAAACCTGCTATTGAGGCT
++
+hhhhhhhAAhhhhhhhhhhhhhhhhhhhhhhhhhPAhhhhhhhOOOhhhh
+@Dummy:1:1:1634:330/1
+GGATATTCGCGATGAGTATAATTACCCCAAAAAGAAAGGTATTAAGGATG
++
+hhhhhhhAAhhhhhhhhhhhhhhhhhhhhhhhWhhAhhhhhhhOOOhhhh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bowtie_in5.fastqsanger	Mon Nov 09 11:18:30 2015 -0500
@@ -0,0 +1,72 @@
+@Dummy:1:1:1761:343/1
+TTTATCGCTTCCATGACGCAGAAGTTAACACTTTCGGATATTTCTGATGA
++
+IIIIIII""IIIIIIIIIII?I0IIIIHIIIGIIIII0II?I""IIIIII
+@Dummy:1:1:1578:331/1
+TGTCAAAAACTGACGCGTTGGATGAGGAGAAGTGGCTTAATATGCTTGGC
++
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII
+@Dummy:1:1:1647:512/1
+TACTGAACAATCCGTACGTTTCCAGACCGCTTTGGCCTCTATTAAGCTCA
++
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII
+@Dummy:1:1:1570:620/1
+GAGTAACAAAGTaaaGTTTGGAccGTTTTTGTCTCGTGCTCGTCGCTGCG
++
+IIIIIII""IIIIIIIIIIIIIBIIIIIIIIIIII"IIIIIII000IIII
+@Dummy:1:1:1599:330/1
+AGAAGAAAACGTGCGTCAAAAATTACGTGCaGAAGGAGTGATGTAATGTC
++
+IIIIIII""IIIIIIIIIIIIIIIIIII<III@II"IIIIIII000IIII
+@Dummy:1:1:1652:270/1
+AGCGTAAAGGCGCTCGTCTTTGGTATGTAGGacTTTGCATTGTTTAATTG
++
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIII6II"IIIIIII000IIII
+@Dummy:1:1:1746:351/1
+CTCATCGTCACGTTTATGGTGAACAGTGGATTAAGTTCATGAAGGATGGT
++
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII
+@Dummy:1:1:1582:633/1
+CCGCTTCCTCCTGAGACTGAGCTTTCTCGCCAAATGACGACTTCTACCAC
++
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII
+@Dummy:1:1:1598:534/1
+GCGCTCTAATCTCTGGGCATCTGGCTATGATGTTGATGGAACTGACCAAA
++
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII
+@Dummy:1:1:1572:324/1
+AAGGTGCTTaaaTTCgtGGGTCCTGAGCTGGCGACCCTGTTTTGTATGGC
++
+IIIIIII""IIIIIIIIIIIIIIIIIIII+7I05I"IIIIIII000IIII
+@Dummy:1:1:1749:466/1
+TTGCAGTGGAATAGTCAGGTTAAATTTAATGTGACCGTTTATCGCAATCT
++
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII
+@Dummy:1:1:1629:446/1
+AGGTTATAACGCCGAAGCGGTAAAAATTTTAATTTTTGCCGCTGAGGGGT
++
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII
+@Dummy:1:1:1763:587/1
+AAGCTACATCGTCAACGTTATATTTTGATAGTTTGACGGTTAATGCTGGT
++
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII
+@Dummy:1:1:1616:363/1
+TGTTTATCCTTTGAATGGTCGCCATGATGGTGGTTATTATACCGTCAAGG
++
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIDIII"IIIIIII000IIII
+@Dummy:1:1:1768:715/1
+ACCCTGATGAGGCCGCCCCTAGTTTTGTTTCTGGTGCTATGGCTAAAGCT
++
+IIIIIII""IIIIIIIIIIIIIDIIIIIIIIIIII"IIIIIII000IIII
+@Dummy:1:1:1572:270/1
+TGAGATGCTTGCTTATCAACAGAAGGAGTCTACTGCTCGCGTTGCGTCTA
++
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII
+@Dummy:1:1:1673:514/1
+ATTATTTTGACTTTGAGCGTATCGAGGCTCTTAAACCTGCTATTGAGGCT
++
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIII1"IIIIIII000IIII
+@Dummy:1:1:1634:330/1
+GGATATTCGCGATGAGTATAATTACCCCAAAAAGAAAGGTATTAAGGATG
++
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIII8II"IIIIIII000IIII
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bowtie_in5.fastqsolexa	Mon Nov 09 11:18:30 2015 -0500
@@ -0,0 +1,72 @@
+@Dummy:1:1:1761:343/1
+TTTATCGCTTCCATGACGCAGAAGTTAACACTTTCGGATATTTCTGATGA
++
+hhhhhhh;;hhhhhhhhhhh^hOhhhhghhhfhhhhhOhh^h;;hhhhhh
+@Dummy:1:1:1578:331/1
+TGTCAAAAACTGACGCGTTGGATGAGGAGAAGTGGCTTAATATGCTTGGC
++
+hhhhhhh;;hhhhhhhhhhhhhhhhhhhhhhhhhh;hhhhhhhOOOhhhh
+@Dummy:1:1:1647:512/1
+TACTGAACAATCCGTACGTTTCCAGACCGCTTTGGCCTCTATTAAGCTCA
++
+hhhhhhh;;hhhhhhhhhhhhhhhhhhhhhhhhhh;hhhhhhhOOOhhhh
+@Dummy:1:1:1570:620/1
+GAGTAACAAAGTaaaGTTTGGAccGTTTTTGTCTCGTGCTCGTCGCTGCG
++
+hhhhhhh;;hhhhhhhhhhhhhahhhhhhhhhhhh;hhhhhhhOOOhhhh
+@Dummy:1:1:1599:330/1
+AGAAGAAAACGTGCGTCAAAAATTACGTGCaGAAGGAGTGATGTAATGTC
++
+hhhhhhh;;hhhhhhhhhhhhhhhhhhh[hhh_hh;hhhhhhhOOOhhhh
+@Dummy:1:1:1652:270/1
+AGCGTAAAGGCGCTCGTCTTTGGTATGTAGGacTTTGCATTGTTTAATTG
++
+hhhhhhh;;hhhhhhhhhhhhhhhhhhhhhhhUhh;hhhhhhhOOOhhhh
+@Dummy:1:1:1746:351/1
+CTCATCGTCACGTTTATGGTGAACAGTGGATTAAGTTCATGAAGGATGGT
++
+hhhhhhh;;hhhhhhhhhhhhhhhhhhhhhhhhhh;hhhhhhhOOOhhhh
+@Dummy:1:1:1582:633/1
+CCGCTTCCTCCTGAGACTGAGCTTTCTCGCCAAATGACGACTTCTACCAC
++
+hhhhhhh;;hhhhhhhhhhhhhhhhhhhhhhhhhh;hhhhhhhOOOhhhh
+@Dummy:1:1:1598:534/1
+GCGCTCTAATCTCTGGGCATCTGGCTATGATGTTGATGGAACTGACCAAA
++
+hhhhhhh;;hhhhhhhhhhhhhhhhhhhhhhhhhh;hhhhhhhOOOhhhh
+@Dummy:1:1:1572:324/1
+AAGGTGCTTaaaTTCgtGGGTCCTGAGCTGGCGACCCTGTTTTGTATGGC
++
+hhhhhhh;;hhhhhhhhhhhhhhhhhhhhJVhOTh;hhhhhhhOOOhhhh
+@Dummy:1:1:1749:466/1
+TTGCAGTGGAATAGTCAGGTTAAATTTAATGTGACCGTTTATCGCAATCT
++
+hhhhhhh;;hhhhhhhhhhhhhhhhhhhhhhhhhh;hhhhhhhOOOhhhh
+@Dummy:1:1:1629:446/1
+AGGTTATAACGCCGAAGCGGTAAAAATTTTAATTTTTGCCGCTGAGGGGT
++
+hhhhhhh;;hhhhhhhhhhhhhhhhhhhhhhhhhh;hhhhhhhOOOhhhh
+@Dummy:1:1:1763:587/1
+AAGCTACATCGTCAACGTTATATTTTGATAGTTTGACGGTTAATGCTGGT
++
+hhhhhhh;;hhhhhhhhhhhhhhhhhhhhhhhhhh;hhhhhhhOOOhhhh
+@Dummy:1:1:1616:363/1
+TGTTTATCCTTTGAATGGTCGCCATGATGGTGGTTATTATACCGTCAAGG
++
+hhhhhhh;;hhhhhhhhhhhhhhhhhhhhhhchhh;hhhhhhhOOOhhhh
+@Dummy:1:1:1768:715/1
+ACCCTGATGAGGCCGCCCCTAGTTTTGTTTCTGGTGCTATGGCTAAAGCT
++
+hhhhhhh;;hhhhhhhhhhhhhchhhhhhhhhhhh;hhhhhhhOOOhhhh
+@Dummy:1:1:1572:270/1
+TGAGATGCTTGCTTATCAACAGAAGGAGTCTACTGCTCGCGTTGCGTCTA
++
+hhhhhhh;;hhhhhhhhhhhhhhhhhhhhhhhhhh;hhhhhhhOOOhhhh
+@Dummy:1:1:1673:514/1
+ATTATTTTGACTTTGAGCGTATCGAGGCTCTTAAACCTGCTATTGAGGCT
++
+hhhhhhh;;hhhhhhhhhhhhhhhhhhhhhhhhhP;hhhhhhhOOOhhhh
+@Dummy:1:1:1634:330/1
+GGATATTCGCGATGAGTATAATTACCCCAAAAAGAAAGGTATTAAGGATG
++
+hhhhhhh;;hhhhhhhhhhhhhhhhhhhhhhhWhh;hhhhhhhOOOhhhh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bowtie_in6.fastqillumina	Mon Nov 09 11:18:30 2015 -0500
@@ -0,0 +1,72 @@
+@Dummy:1:1:1761:343/2
+TTGATAAAGCAGGAATTACTACTGCTTGTTTACGAATTAAATCGAAGTGG
++
+hhhhhhhAAhhhhhhhOhh^hAAhhhhhhhhhhhh^hOhhhhghhhfhhh
+@Dummy:1:1:1578:331/2
+AAGGACTGGTTTAGATATGAGTCACATTTTGTTCATGGTAGAGATTCTCT
++
+hhhhhhhAAhhhhhhhhhhhhhhhhhhhhhhhhhh^hOhhhhghhhfhhh
+@Dummy:1:1:1647:512/2
+TTCAGGCTTCTGCCGTTTTGGATTTAACCGAAGATGATTTCGATTTTCTG
++
+hhhhhhhAAhhhhhhhhhhhhhhhhhhhhhhhhhh^hOhhhhghhhfhhh
+@Dummy:1:1:1570:620/2
+CTTGCGTTTATGGTACGCTGGACTTTGTGGGATACCCTCGCTTTCCTGCT
++
+hhhhhhhAAhhhhhhhhhhhhhahhhhhhhhhhhh^hOhhhhghhhfhhh
+@Dummy:1:1:1599:330/2
+TTCTGGCGCTCGCCCTGGTCGTCCGCAGCCGTTGCGAGGTACTAAAGGCA
++
+hhhhhhhAAhhhhhhhhhhhhhhhhhhh[hhh_hh^hOhhhhghhhfhhh
+@Dummy:1:1:1652:270/2
+GCTTCGGCCCCTTACTTGAGGATAAATTATGTCTAATATTCAAACTGGCG
++
+hhhhhhhAAhhhhhhhhhhhhhhhhhhhhhhhUhh^hOhhhhghhhfhhh
+@Dummy:1:1:1746:351/2
+CCACTCCTCTCCCGACTGTGTGTGTGTGTGTTTATATTGACCATGCCGCT
++
+hhhhhhhAAhhhhhhhhhhhhhhhhhh^hOhhhhghhhfhhhhhhhhhhh
+@Dummy:1:1:1582:633/2
+TCTATTGACATTATGGGTCTGCAAGCTGCTTTTTTTTTTTTTTTTTTTTT
++
+hhhhhhhAAhhhhhhhhhhhhhhhhhhhhhhhhhh^hOhhhhghhhfhhh
+@Dummy:1:1:1598:534/2
+TTAGGCCAGTTTTCTGGTCGTGTTCAACAGACCTATAAACATTCTGTGCC
++
+hhhhhhhAAhhhhhhhhhhhhhhhhhhhhhhhhhh^hOhhhhghhhfhhh
+@Dummy:1:1:1572:324/2
+GCCGCCGCGTGAAATTTCTATGAAGGATGTTTTCCGTTCTGGTGATTCGT
++
+hhhhhhhAAhhhhhhhhhhhhhhhhhhhhJVhOTh^hOhhhhghhhfhhh
+@Dummy:1:1:1749:466/2
+GCCGACCACTCGCGATTCAATCATGACTTCGTGATAAAAGATTGAGTGTG
++
+hhhhhhhAAhhhhhhhhhhhhhhhhhhhhhhhhhh^hOhhhhghhhfhhh
+@Dummy:1:1:1629:446/2
+CAAGCGAAGCGCGGTAGGTTTTCTGCTTAGGAGTTTAATCATGTTTCAGA
++
+hhhhhhhAAhhhhhhhhhhhhhhhhhhhhhhhhhh^hOhhhhghhhfhhh
+@Dummy:1:1:1763:587/2
+CATTGCATTCAGATGGATACATCTGTCAACGCCGCTAATCAGGTTGTTTC
++
+hhhhhhhAAhhhhhhhhhhhhhhhhhhhhhhhhhh^hOhhhhghhhfhhh
+@Dummy:1:1:1616:363/2
+GTGACTATTGACGTCCTTCCCCGTACGCCGGGCAATAAtGTTTATGTTGG
++
+hhhhhhhAAhhhhhhhhhhhhhhhhhhhhhhchhh^hOhhhhghhhfhhh
+@Dummy:1:1:1768:715/2
+AGGACTTCTTGAAGGTACGTTGCAGGCTGGCACTTCTGCCGTTTCTGATA
++
+hhhhhhhAAhhhhhhhhhhhhhchhhhhhhhhhhh^hOhhhhghhhfhhh
+@Dummy:1:1:1572:270/2
+ACACCAATCTTTCCAAGCAACAGCAGGTTTCCGAGATTATGCGCCAAATG
++
+hhhhhhhAAhhhhhhhhhhhhhhhhhhhhhhhhhh^hOhhhhghhhfhhh
+@Dummy:1:1:1673:514/2
+GCATTTCTACTCTTTCTCAATCCCCAATGCTTGGCTTCCATAAGCAGATG
++
+hhhhhhhAAhhhhhhhhhhhhhhhhhhhhhhhhhP^hOhhhhghhhfhhh
+@Dummy:1:1:1634:330/2
+TCAAGATTGCTGGAGGCCTCCACTATGAAATCGCGTAGAGGCTTTaCTAT
++
+hhhhhhhAAhhhhhhhhhhhhhhhhhhhhhhhWhh^hOhhhhghhhfhhh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bowtie_in6.fastqsanger	Mon Nov 09 11:18:30 2015 -0500
@@ -0,0 +1,72 @@
+@Dummy:1:1:1761:343/2
+TTGATAAAGCAGGAATTACTACTGCTTGTTTACGAATTAAATCGAAGTGG
++
+IIIIIII""IIIIIII0II?I""IIIIIIIIIIII?I0IIIIHIIIGIII
+@Dummy:1:1:1578:331/2
+AAGGACTGGTTTAGATATGAGTCACATTTTGTTCATGGTAGAGATTCTCT
++
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII
+@Dummy:1:1:1647:512/2
+TTCAGGCTTCTGCCGTTTTGGATTTAACCGAAGATGATTTCGATTTTCTG
++
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII
+@Dummy:1:1:1570:620/2
+CTTGCGTTTATGGTACGCTGGACTTTGTGGGATACCCTCGCTTTCCTGCT
++
+IIIIIII""IIIIIIIIIIIIIBIIIIIIIIIIII?I0IIIIHIIIGIII
+@Dummy:1:1:1599:330/2
+TTCTGGCGCTCGCCCTGGTCGTCCGCAGCCGTTGCGAGGTACTAAAGGCA
++
+IIIIIII""IIIIIIIIIIIIIIIIIII<III@II?I0IIIIHIIIGIII
+@Dummy:1:1:1652:270/2
+GCTTCGGCCCCTTACTTGAGGATAAATTATGTCTAATATTCAAACTGGCG
++
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIII6II?I0IIIIHIIIGIII
+@Dummy:1:1:1746:351/2
+CCACTCCTCTCCCGACTGTGTGTGTGTGTGTTTATATTGACCATGCCGCT
++
+IIIIIII""IIIIIIIIIIIIIIIIII?I0IIIIHIIIGIIIIIIIIIII
+@Dummy:1:1:1582:633/2
+TCTATTGACATTATGGGTCTGCAAGCTGCTTTTTTTTTTTTTTTTTTTTT
++
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII
+@Dummy:1:1:1598:534/2
+TTAGGCCAGTTTTCTGGTCGTGTTCAACAGACCTATAAACATTCTGTGCC
++
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII
+@Dummy:1:1:1572:324/2
+GCCGCCGCGTGAAATTTCTATGAAGGATGTTTTCCGTTCTGGTGATTCGT
++
+IIIIIII""IIIIIIIIIIIIIIIIIIII+7I05I?I0IIIIHIIIGIII
+@Dummy:1:1:1749:466/2
+GCCGACCACTCGCGATTCAATCATGACTTCGTGATAAAAGATTGAGTGTG
++
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII
+@Dummy:1:1:1629:446/2
+CAAGCGAAGCGCGGTAGGTTTTCTGCTTAGGAGTTTAATCATGTTTCAGA
++
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII
+@Dummy:1:1:1763:587/2
+CATTGCATTCAGATGGATACATCTGTCAACGCCGCTAATCAGGTTGTTTC
++
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII
+@Dummy:1:1:1616:363/2
+GTGACTATTGACGTCCTTCCCCGTACGCCGGGCAATAAtGTTTATGTTGG
++
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIDIII?I0IIIIHIIIGIII
+@Dummy:1:1:1768:715/2
+AGGACTTCTTGAAGGTACGTTGCAGGCTGGCACTTCTGCCGTTTCTGATA
++
+IIIIIII""IIIIIIIIIIIIIDIIIIIIIIIIII?I0IIIIHIIIGIII
+@Dummy:1:1:1572:270/2
+ACACCAATCTTTCCAAGCAACAGCAGGTTTCCGAGATTATGCGCCAAATG
++
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII
+@Dummy:1:1:1673:514/2
+GCATTTCTACTCTTTCTCAATCCCCAATGCTTGGCTTCCATAAGCAGATG
++
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIII1?I0IIIIHIIIGIII
+@Dummy:1:1:1634:330/2
+TCAAGATTGCTGGAGGCCTCCACTATGAAATCGCGTAGAGGCTTTaCTAT
++
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIII8II?I0IIIIHIIIGIII
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bowtie_in6.fastqsolexa	Mon Nov 09 11:18:30 2015 -0500
@@ -0,0 +1,72 @@
+@Dummy:1:1:1761:343/2
+TTGATAAAGCAGGAATTACTACTGCTTGTTTACGAATTAAATCGAAGTGG
++
+hhhhhhh;;hhhhhhhOhh^h;;hhhhhhhhhhhh^hOhhhhghhhfhhh
+@Dummy:1:1:1578:331/2
+AAGGACTGGTTTAGATATGAGTCACATTTTGTTCATGGTAGAGATTCTCT
++
+hhhhhhh;;hhhhhhhhhhhhhhhhhhhhhhhhhh^hOhhhhghhhfhhh
+@Dummy:1:1:1647:512/2
+TTCAGGCTTCTGCCGTTTTGGATTTAACCGAAGATGATTTCGATTTTCTG
++
+hhhhhhh;;hhhhhhhhhhhhhhhhhhhhhhhhhh^hOhhhhghhhfhhh
+@Dummy:1:1:1570:620/2
+CTTGCGTTTATGGTACGCTGGACTTTGTGGGATACCCTCGCTTTCCTGCT
++
+hhhhhhh;;hhhhhhhhhhhhhahhhhhhhhhhhh^hOhhhhghhhfhhh
+@Dummy:1:1:1599:330/2
+TTCTGGCGCTCGCCCTGGTCGTCCGCAGCCGTTGCGAGGTACTAAAGGCA
++
+hhhhhhh;;hhhhhhhhhhhhhhhhhhh[hhh_hh^hOhhhhghhhfhhh
+@Dummy:1:1:1652:270/2
+GCTTCGGCCCCTTACTTGAGGATAAATTATGTCTAATATTCAAACTGGCG
++
+hhhhhhh;;hhhhhhhhhhhhhhhhhhhhhhhUhh^hOhhhhghhhfhhh
+@Dummy:1:1:1746:351/2
+CCACTCCTCTCCCGACTGTGTGTGTGTGTGTTTATATTGACCATGCCGCT
++
+hhhhhhh;;hhhhhhhhhhhhhhhhhh^hOhhhhghhhfhhhhhhhhhhh
+@Dummy:1:1:1582:633/2
+TCTATTGACATTATGGGTCTGCAAGCTGCTTTTTTTTTTTTTTTTTTTTT
++
+hhhhhhh;;hhhhhhhhhhhhhhhhhhhhhhhhhh^hOhhhhghhhfhhh
+@Dummy:1:1:1598:534/2
+TTAGGCCAGTTTTCTGGTCGTGTTCAACAGACCTATAAACATTCTGTGCC
++
+hhhhhhh;;hhhhhhhhhhhhhhhhhhhhhhhhhh^hOhhhhghhhfhhh
+@Dummy:1:1:1572:324/2
+GCCGCCGCGTGAAATTTCTATGAAGGATGTTTTCCGTTCTGGTGATTCGT
++
+hhhhhhh;;hhhhhhhhhhhhhhhhhhhhJVhOTh^hOhhhhghhhfhhh
+@Dummy:1:1:1749:466/2
+GCCGACCACTCGCGATTCAATCATGACTTCGTGATAAAAGATTGAGTGTG
++
+hhhhhhh;;hhhhhhhhhhhhhhhhhhhhhhhhhh^hOhhhhghhhfhhh
+@Dummy:1:1:1629:446/2
+CAAGCGAAGCGCGGTAGGTTTTCTGCTTAGGAGTTTAATCATGTTTCAGA
++
+hhhhhhh;;hhhhhhhhhhhhhhhhhhhhhhhhhh^hOhhhhghhhfhhh
+@Dummy:1:1:1763:587/2
+CATTGCATTCAGATGGATACATCTGTCAACGCCGCTAATCAGGTTGTTTC
++
+hhhhhhh;;hhhhhhhhhhhhhhhhhhhhhhhhhh^hOhhhhghhhfhhh
+@Dummy:1:1:1616:363/2
+GTGACTATTGACGTCCTTCCCCGTACGCCGGGCAATAAtGTTTATGTTGG
++
+hhhhhhh;;hhhhhhhhhhhhhhhhhhhhhhchhh^hOhhhhghhhfhhh
+@Dummy:1:1:1768:715/2
+AGGACTTCTTGAAGGTACGTTGCAGGCTGGCACTTCTGCCGTTTCTGATA
++
+hhhhhhh;;hhhhhhhhhhhhhchhhhhhhhhhhh^hOhhhhghhhfhhh
+@Dummy:1:1:1572:270/2
+ACACCAATCTTTCCAAGCAACAGCAGGTTTCCGAGATTATGCGCCAAATG
++
+hhhhhhh;;hhhhhhhhhhhhhhhhhhhhhhhhhh^hOhhhhghhhfhhh
+@Dummy:1:1:1673:514/2
+GCATTTCTACTCTTTCTCAATCCCCAATGCTTGGCTTCCATAAGCAGATG
++
+hhhhhhh;;hhhhhhhhhhhhhhhhhhhhhhhhhP^hOhhhhghhhfhhh
+@Dummy:1:1:1634:330/2
+TCAAGATTGCTGGAGGCCTCCACTATGAAATCGCGTAGAGGCTTTaCTAT
++
+hhhhhhh;;hhhhhhhhhhhhhhhhhhhhhhhWhh^hOhhhhghhhfhhh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bowtie_out10.sam	Mon Nov 09 11:18:30 2015 -0500
@@ -0,0 +1,36 @@
+Dummy:1:1:1570:620	141	*	0	0	*	*	0	0	CTTGCGTTTATGGTACGCTGGACTTTGTGGGATACCCTCGCTTTCCTGCT	IIIIIII""IIIIIIIIIIIIIBIIIIIIIIIIII?I0IIIIHIIIGIII	XM:i:0
+Dummy:1:1:1570:620	77	*	0	0	*	*	0	0	GAGTAACAAAGTAAAGTTTGGACCGTTTTTGTCTCGTGCTCGTCGCTGCG	IIIIIII""IIIIIIIIIIIIIBIIIIIIIIIIII"IIIIIII000IIII	XM:i:0
+Dummy:1:1:1572:270	131	phiX174	3577	255	50M	=	3518	-109	ACACCAATCTTTCCAAGCAACAGCAGGTTTCCGAGATTATGCGCCAAATG	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1572:270	67	phiX174	3518	255	50M	=	3577	109	TGAGATGCTTGCTTATCAACAGAAGGAGTCTACTGCTCGCGTTGCGTCTA	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1572:324	141	*	0	0	*	*	0	0	GCCGCCGCGTGAAATTTCTATGAAGGATGTTTTCCGTTCTGGTGATTCGT	IIIIIII""IIIIIIIIIIIIIIIIIIII+7I05I?I0IIIIHIIIGIII	XM:i:0
+Dummy:1:1:1572:324	77	*	0	0	*	*	0	0	AAGGTGCTTAAATTCGTGGGTCCTGAGCTGGCGACCCTGTTTTGTATGGC	IIIIIII""IIIIIIIIIIIIIIIIIIII+7I05I"IIIIIII000IIII	XM:i:0
+Dummy:1:1:1578:331	131	phiX174	268	255	50M	=	209	-109	AAGGACTGGTTTAGATATGAGTCACATTTTGTTCATGGTAGAGATTCTCT	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1578:331	67	phiX174	209	255	50M	=	268	109	TGTCAAAAACTGACGCGTTGGATGAGGAGAAGTGGCTTAATATGCTTGGC	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1582:633	141	*	0	0	*	*	0	0	TCTATTGACATTATGGGTCTGCAAGCTGCTTTTTTTTTTTTTTTTTTTTT	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII	XM:i:0
+Dummy:1:1:1582:633	77	*	0	0	*	*	0	0	CCGCTTCCTCCTGAGACTGAGCTTTCTCGCCAAATGACGACTTCTACCAC	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII	XM:i:0
+Dummy:1:1:1598:534	131	phiX174	1772	255	50M	=	1717	-105	TTAGGCCAGTTTTCTGGTCGTGTTCAACAGACCTATAAACATTCTGTGCC	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1598:534	67	phiX174	1717	255	50M	=	1772	105	GCGCTCTAATCTCTGGGCATCTGGCTATGATGTTGATGGAACTGACCAAA	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1599:330	131	phiX174	868	255	50M	=	803	-115	TTCTGGCGCTCGCCCTGGTCGTCCGCAGCCGTTGCGAGGTACTAAAGGCA	IIIIIII""IIIIIIIIIIIIIIIIIII<III@II?I0IIIIHIIIGIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1599:330	67	phiX174	803	255	50M	=	868	115	AGAAGAAAACGTGCGTCAAAAATTACGTGCAGAAGGAGTGATGTAATGTC	IIIIIII""IIIIIIIIIIIIIIIIIII<III@II"IIIIIII000IIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1616:363	131	phiX174	2773	255	50M	=	2718	-105	GTGACTATTGACGTCCTTCCCCGTACGCCGGGCAATAATGTTTATGTTGG	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIDIII?I0IIIIHIIIGIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1616:363	67	phiX174	2718	255	50M	=	2773	105	TGTTTATCCTTTGAATGGTCGCCATGATGGTGGTTATTATACCGTCAAGG	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIDIII"IIIIIII000IIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1629:446	131	phiX174	2355	255	50M	=	2301	-104	CAAGCGAAGCGCGGTAGGTTTTCTGCTTAGGAGTTTAATCATGTTTCAGA	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1629:446	67	phiX174	2301	255	50M	=	2355	104	AGGTTATAACGCCGAAGCGGTAAAAATTTTAATTTTTGCCGCTGAGGGGT	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1634:330	131	phiX174	4473	255	50M	=	4418	-105	TCAAGATTGCTGGAGGCCTCCACTATGAAATCGCGTAGAGGCTTTACTAT	IIIIIII""IIIIIIIIIIIIIIIIIIIIIII8II?I0IIIIHIIIGIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1634:330	67	phiX174	4418	255	50M	=	4473	105	GGATATTCGCGATGAGTATAATTACCCCAAAAAGAAAGGTATTAAGGATG	IIIIIII""IIIIIIIIIIIIIIIIIIIIIII8II"IIIIIII000IIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1647:512	131	phiX174	451	255	50M	=	401	-100	TTCAGGCTTCTGCCGTTTTGGATTTAACCGAAGATGATTTCGATTTTCTG	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1647:512	67	phiX174	401	255	50M	=	451	100	TACTGAACAATCCGTACGTTTCCAGACCGCTTTGGCCTCTATTAAGCTCA	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1652:270	141	*	0	0	*	*	0	0	GCTTCGGCCCCTTACTTGAGGATAAATTATGTCTAATATTCAAACTGGCG	IIIIIII""IIIIIIIIIIIIIIIIIIIIIII6II?I0IIIIHIIIGIII	XM:i:0
+Dummy:1:1:1652:270	77	*	0	0	*	*	0	0	AGCGTAAAGGCGCTCGTCTTTGGTATGTAGGACTTTGCATTGTTTAATTG	IIIIIII""IIIIIIIIIIIIIIIIIIIIIII6II"IIIIIII000IIII	XM:i:0
+Dummy:1:1:1673:514	131	phiX174	4072	255	50M	=	4018	-104	GCATTTCTACTCTTTCTCAATCCCCAATGCTTGGCTTCCATAAGCAGATG	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIII1?I0IIIIHIIIGIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1673:514	67	phiX174	4018	255	50M	=	4072	104	ATTATTTTGACTTTGAGCGTATCGAGGCTCTTAAACCTGCTATTGAGGCT	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIII1"IIIIIII000IIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1746:351	141	*	0	0	*	*	0	0	CCACTCCTCTCCCGACTGTGTGTGTGTGTGTTTATATTGACCATGCCGCT	IIIIIII""IIIIIIIIIIIIIIIIII?I0IIIIHIIIGIIIIIIIIIII	XM:i:0
+Dummy:1:1:1746:351	77	*	0	0	*	*	0	0	CTCATCGTCACGTTTATGGTGAACAGTGGATTAAGTTCATGAAGGATGGT	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII	XM:i:0
+Dummy:1:1:1749:466	131	phiX174	2251	255	50M	=	2201	-100	GCCGACCACTCGCGATTCAATCATGACTTCGTGATAAAAGATTGAGTGTG	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1749:466	67	phiX174	2201	255	50M	=	2251	100	TTGCAGTGGAATAGTCAGGTTAAATTTAATGTGACCGTTTATCGCAATCT	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1761:343	131	phiX174	69	255	50M	=	5	-114	TTGATAAAGCAGGAATTACTACTGCTTGTTTACGAATTAAATCGAAGTGG	IIIIIII""IIIIIII0II?I""IIIIIIIIIIII?I0IIIIHIIIGIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1761:343	67	phiX174	5	255	50M	=	69	114	TTTATCGCTTCCATGACGCAGAAGTTAACACTTTCGGATATTTCTGATGA	IIIIIII""IIIIIIIIIII?I0IIIIHIIIGIIIII0II?I""IIIIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1763:587	131	phiX174	2566	255	50M	=	2501	-115	CATTGCATTCAGATGGATACATCTGTCAACGCCGCTAATCAGGTTGTTTC	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1763:587	67	phiX174	2501	255	50M	=	2566	115	AAGCTACATCGTCAACGTTATATTTTGATAGTTTGACGGTTAATGCTGGT	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1768:715	131	phiX174	3173	255	50M	=	3118	-105	AGGACTTCTTGAAGGTACGTTGCAGGCTGGCACTTCTGCCGTTTCTGATA	IIIIIII""IIIIIIIIIIIIIDIIIIIIIIIIII?I0IIIIHIIIGIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1768:715	67	phiX174	3118	255	50M	=	3173	105	ACCCTGATGAGGCCGCCCCTAGTTTTGTTTCTGGTGCTATGGCTAAAGCT	IIIIIII""IIIIIIIIIIIIIDIIIIIIIIIIII"IIIIIII000IIII	XA:i:0	MD:Z:50	NM:i:0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bowtie_out6.sam	Mon Nov 09 11:18:30 2015 -0500
@@ -0,0 +1,26 @@
+HWI-EAS91_1_30788AAXX:1:1:1090:409/1	16	chrM	15014	255	36M	*	0	0	TTGCCTACGCCATCCTACGCTCCATTCCCAACAAAC	I8AII:IIIIIIIIIIIIIIIIIIIII""IIIIIII	XA:i:0	MD:Z:36	NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1199:1376/1	16	chrM	14023	255	36M	*	0	0	AAACCCCCATAAATAGGTGAAGGTTTTCCAGAAAAC	III/:&GII3III;IIIIIIIIIIIII""IIIIIII	XA:i:2	MD:Z:27G0A7	NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1218:141/1	4	*	0	0	*	*	0	0	GTTAAATATTGGGAGTGGGGGGGGGGGGGAGTTTTG	IIIIIII""IIIIIIIIIIIIIIIIIIII1IIII+I	XM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1269:520/1	16	chrM	11036	255	36M	*	0	0	CGACAAACCGATCTAAAATCACTTATTCCATACTCC	IIIIIIIIIIIIIIIIIIIIIIIIIII""IIIIIII	XA:i:1	MD:Z:27G8	NM:i:1
+HWI-EAS91_1_30788AAXX:1:1:1303:1162/1	16	chrM	14866	255	36M	*	0	0	AAAGACATCCTAGGACTCCTCCTCCTGCCCTTGCTC	I6I3,'94IIAI(IAIGI*4IIFIIII""IIIIIII	XA:i:2	MD:Z:27A0T7	NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1310:991/1	16	chrM	10002	255	36M	*	0	0	CTCCTATGCCTAGAAGGAATAATACTACCACTATTC	I:2IEI:IIDIIIIII4IIIIIIIIII""IIIIIII	XA:i:1	MD:Z:27T8	NM:i:1
+HWI-EAS91_1_30788AAXX:1:1:1336:1000/1	16	chrM	11616	255	36M	*	0	0	GATCTAGAAACAGAAACTTAATATTTCCCATTTACC	II9IIIIIIIIIIIIIIIIIIIIIIII""IIIIIII	XA:i:2	MD:Z:27T0T7	NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1398:854/1	16	chrM	3921	255	36M	*	0	0	CACCCTTCCCGTACTAATAAATCCCCTCCTCTTCAC	IIIII=AIIIIIIIIIIIIIIBIIIII""IIIIIII	XA:i:2	MD:Z:27T0A7	NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1442:1346/1	16	chrM	9331	255	36M	*	0	0	CAGCCACCACTTCGGATTCGAAGCAGCCCCTTGATA	&,*II-<?<II4I(I1IIIIIDIIIII""IIIIIII	XA:i:1	MD:Z:28G7	NM:i:1
+HWI-EAS91_1_30788AAXX:1:1:1454:975/1	16	chrM	8929	255	36M	*	0	0	TGGCTTCTTCTGAGCCTTTTACCACTCCCGCCTAGC	IIIIIII;GIEIIIIIIIIIIIIIIII""IIIIIII	XA:i:2	MD:Z:27A0A7	NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1461:255/1	0	chrM	12988	255	36M	*	0	0	GTACACCGGCGCCTGAGCCCTACTAATAACTCTCAT	IIIIIII""IIIIII9IIIIIIEI(II9.I4III,I	XA:i:2	MD:Z:7A0A27	NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1491:637/1	16	chrM	10864	255	36M	*	0	0	TGTAGAAGCCCCAATTGCCGGATCCATCCTGCTAGC	DBAIIIIIIIIIIIFIIIIIIIIIIII""IIIIIII	XA:i:2	MD:Z:27A0G7	NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1513:715/1	16	chrM	9563	255	36M	*	0	0	CTGACTACCACAACTAAACATCTATGCCCAAAAAAC	I+-II?IDIIIIIIIIIIIIIIIIIII""IIIIIII	XA:i:2	MD:Z:27A0G7	NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1598:1148/1	16	chrM	2334	255	36M	*	0	0	AAATATATAATCACTTATTGATCCAAACCATTGATC	IIIIIHI=IICIII?IIIIIIDIIIII""IIIIIII	XA:i:0	MD:Z:36	NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1601:805/1	0	chrM	12584	255	36M	*	0	0	GAAAACAGGAAAACAATCCAGTCACTTACCCTATGC	IIIIIII""IIIIIIIIIIIIIIIIIIIIIII@III	XA:i:2	MD:Z:7A0C27	NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1630:59/1	16	chrM	12387	255	36M	*	0	0	TCATACTCGACCCCAACCTTACCAACCCCCCGCTCC	FIIHII;IIIIIIIIIIIIIIIIIIII""IIIIIII	XA:i:1	MD:Z:27T8	NM:i:1
+HWI-EAS91_1_30788AAXX:1:1:1634:211/1	0	chrM	9350	255	36M	*	0	0	GAAGCAGGGGCTTGATACTGACACTTCGTCGACGTA	IIIIIII""IIIIIIIIIIIIIIIIIIIIII9IIDF	XA:i:2	MD:Z:7C0C27	NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1663:724/1	0	chrM	15012	255	36M	*	0	0	GTTTGCCGGCGCCATCCTACGCTCCATTCCCAACAA	IIIIIII""IIII8IIIIIIHIIII6IIIII1CI=3	XA:i:2	MD:Z:7T0A27	NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1698:516/1	16	chrM	2735	255	36M	*	0	0	TTTACACTCAGAGGTTCAACTCCTCTCCCTAACAAC	I9IIIII5IIIIIIIIIIIIIIIIIII""IIIIIII	XA:i:0	MD:Z:36	NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1711:249/1	16	chrM	10617	255	36M	*	0	0	ACCAAACAGAACGCCTGAACGCAGGCCCCTACTTCC	IIIIIIIIIIIIIIIIIIIIIIIIIII""IIIIIII	XA:i:1	MD:Z:27T8	NM:i:1
+HWI-EAS91_1_30788AAXX:1:1:1716:413/1	0	chrM	6040	255	36M	*	0	0	GATCCAAGGCTTTATCAACACCTATTCTGATTCTTC	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIIII	XA:i:2	MD:Z:7T0C27	NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1723:1459/1	16	chrM	15787	255	36M	*	0	0	ATCCTCGCTCCGGGCCCATCCAAACGTCCGGGTTTC	I=II-IIH9IIIIIIIIIDIIIIIIII""IIIIIII	XA:i:2	MD:Z:27G0G7	NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1775:764/1	0	chrM	16613	255	36M	*	0	0	GCATCCCGGTAGATCTAATTTTCTAAATCTGTCAAC	IIIIIII""III@IIII+IIIIII8H8IIIIIIICI	XA:i:2	MD:Z:7C0C27	NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:795:325/1	16	chrM	4249	255	36M	*	0	0	AAACTTGGACTCACACCATTCCACTTCCCAGTACCC	IIII56IIIIIIIIIIIIIIIIIIIII""IIIIIII	XA:i:2	MD:Z:27T0G7	NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:850:117/1	16	chrM	5540	255	36M	*	0	0	CCCATGCATTCGTAATAATTTTCTTTACCGTCATAC	?:;I9DDIBEIIIIIIIIEIEIIIIII""IIIIIII	XA:i:2	MD:Z:27T0G7	NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:873:453/1	16	chrM	3188	255	36M	*	0	0	ATCTCATACGAAGTAACTCTAGCAATCCCCCTACTC	I=IIIIIII@IIIIIIIIIIIIIIIII""IIIIIII	XA:i:2	MD:Z:27A0T7	NM:i:2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bowtie_out7.sam	Mon Nov 09 11:18:30 2015 -0500
@@ -0,0 +1,36 @@
+Dummy:1:1:1570:620	141	*	0	0	*	*	0	0	CTTGCGTTTATGGTACGCTGGACTTTGTGGGATACCCTCGCTTTCCTGCT	IIIIIII""IIIIIIIIIIIIIBIIIIIIIIIIII?I0IIIIHIIIGIII	XM:i:0
+Dummy:1:1:1570:620	77	*	0	0	*	*	0	0	GAGTAACAAAGTAAAGTTTGGACCGTTTTTGTCTCGTGCTCGTCGCTGCG	IIIIIII""IIIIIIIIIIIIIBIIIIIIIIIIII"IIIIIII000IIII	XM:i:0
+Dummy:1:1:1572:270	131	phiX174	3577	255	50M	=	3518	-109	ACACCAATCTTTCCAAGCAACAGCAGGTTTCCGAGATTATGCGCCAAATG	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1572:270	67	phiX174	3518	255	50M	=	3577	109	TGAGATGCTTGCTTATCAACAGAAGGAGTCTACTGCTCGCGTTGCGTCTA	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1572:324	141	*	0	0	*	*	0	0	GCCGCCGCGTGAAATTTCTATGAAGGATGTTTTCCGTTCTGGTGATTCGT	IIIIIII""IIIIIIIIIIIIIIIIIIII+7I05I?I0IIIIHIIIGIII	XM:i:0
+Dummy:1:1:1572:324	77	*	0	0	*	*	0	0	AAGGTGCTTAAATTCGTGGGTCCTGAGCTGGCGACCCTGTTTTGTATGGC	IIIIIII""IIIIIIIIIIIIIIIIIIII+7I05I"IIIIIII000IIII	XM:i:0
+Dummy:1:1:1578:331	131	phiX174	268	255	50M	=	209	-109	AAGGACTGGTTTAGATATGAGTCACATTTTGTTCATGGTAGAGATTCTCT	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1578:331	67	phiX174	209	255	50M	=	268	109	TGTCAAAAACTGACGCGTTGGATGAGGAGAAGTGGCTTAATATGCTTGGC	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1582:633	141	*	0	0	*	*	0	0	TCTATTGACATTATGGGTCTGCAAGCTGCTTTTTTTTTTTTTTTTTTTTT	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII	XM:i:0
+Dummy:1:1:1582:633	77	*	0	0	*	*	0	0	CCGCTTCCTCCTGAGACTGAGCTTTCTCGCCAAATGACGACTTCTACCAC	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII	XM:i:0
+Dummy:1:1:1598:534	131	phiX174	1772	255	50M	=	1717	-105	TTAGGCCAGTTTTCTGGTCGTGTTCAACAGACCTATAAACATTCTGTGCC	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1598:534	67	phiX174	1717	255	50M	=	1772	105	GCGCTCTAATCTCTGGGCATCTGGCTATGATGTTGATGGAACTGACCAAA	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1599:330	131	phiX174	868	255	50M	=	803	-115	TTCTGGCGCTCGCCCTGGTCGTCCGCAGCCGTTGCGAGGTACTAAAGGCA	IIIIIII""IIIIIIIIIIIIIIIIIII<III@II?I0IIIIHIIIGIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1599:330	67	phiX174	803	255	50M	=	868	115	AGAAGAAAACGTGCGTCAAAAATTACGTGCAGAAGGAGTGATGTAATGTC	IIIIIII""IIIIIIIIIIIIIIIIIII<III@II"IIIIIII000IIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1616:363	131	phiX174	2773	255	50M	=	2718	-105	GTGACTATTGACGTCCTTCCCCGTACGCCGGGCAATAATGTTTATGTTGG	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIDIII?I0IIIIHIIIGIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1616:363	67	phiX174	2718	255	50M	=	2773	105	TGTTTATCCTTTGAATGGTCGCCATGATGGTGGTTATTATACCGTCAAGG	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIDIII"IIIIIII000IIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1629:446	131	phiX174	2355	255	50M	=	2301	-104	CAAGCGAAGCGCGGTAGGTTTTCTGCTTAGGAGTTTAATCATGTTTCAGA	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1629:446	67	phiX174	2301	255	50M	=	2355	104	AGGTTATAACGCCGAAGCGGTAAAAATTTTAATTTTTGCCGCTGAGGGGT	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1634:330	131	phiX174	4473	255	50M	=	4418	-105	TCAAGATTGCTGGAGGCCTCCACTATGAAATCGCGTAGAGGCTTTACTAT	IIIIIII""IIIIIIIIIIIIIIIIIIIIIII8II?I0IIIIHIIIGIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1634:330	67	phiX174	4418	255	50M	=	4473	105	GGATATTCGCGATGAGTATAATTACCCCAAAAAGAAAGGTATTAAGGATG	IIIIIII""IIIIIIIIIIIIIIIIIIIIIII8II"IIIIIII000IIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1647:512	131	phiX174	451	255	50M	=	401	-100	TTCAGGCTTCTGCCGTTTTGGATTTAACCGAAGATGATTTCGATTTTCTG	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1647:512	67	phiX174	401	255	50M	=	451	100	TACTGAACAATCCGTACGTTTCCAGACCGCTTTGGCCTCTATTAAGCTCA	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1652:270	141	*	0	0	*	*	0	0	GCTTCGGCCCCTTACTTGAGGATAAATTATGTCTAATATTCAAACTGGCG	IIIIIII""IIIIIIIIIIIIIIIIIIIIIII6II?I0IIIIHIIIGIII	XM:i:0
+Dummy:1:1:1652:270	77	*	0	0	*	*	0	0	AGCGTAAAGGCGCTCGTCTTTGGTATGTAGGACTTTGCATTGTTTAATTG	IIIIIII""IIIIIIIIIIIIIIIIIIIIIII6II"IIIIIII000IIII	XM:i:0
+Dummy:1:1:1673:514	131	phiX174	4072	255	50M	=	4018	-104	GCATTTCTACTCTTTCTCAATCCCCAATGCTTGGCTTCCATAAGCAGATG	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIII1?I0IIIIHIIIGIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1673:514	67	phiX174	4018	255	50M	=	4072	104	ATTATTTTGACTTTGAGCGTATCGAGGCTCTTAAACCTGCTATTGAGGCT	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIII1"IIIIIII000IIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1746:351	141	*	0	0	*	*	0	0	CCACTCCTCTCCCGACTGTGTGTGTGTGTGTTTATATTGACCATGCCGCT	IIIIIII""IIIIIIIIIIIIIIIIII?I0IIIIHIIIGIIIIIIIIIII	XM:i:0
+Dummy:1:1:1746:351	77	*	0	0	*	*	0	0	CTCATCGTCACGTTTATGGTGAACAGTGGATTAAGTTCATGAAGGATGGT	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII	XM:i:0
+Dummy:1:1:1749:466	131	phiX174	2251	255	50M	=	2201	-100	GCCGACCACTCGCGATTCAATCATGACTTCGTGATAAAAGATTGAGTGTG	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1749:466	67	phiX174	2201	255	50M	=	2251	100	TTGCAGTGGAATAGTCAGGTTAAATTTAATGTGACCGTTTATCGCAATCT	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1761:343	131	phiX174	69	255	50M	=	5	-114	TTGATAAAGCAGGAATTACTACTGCTTGTTTACGAATTAAATCGAAGTGG	IIIIIII""IIIIIII0II?I""IIIIIIIIIIII?I0IIIIHIIIGIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1761:343	67	phiX174	5	255	50M	=	69	114	TTTATCGCTTCCATGACGCAGAAGTTAACACTTTCGGATATTTCTGATGA	IIIIIII""IIIIIIIIIII?I0IIIIHIIIGIIIII0II?I""IIIIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1763:587	131	phiX174	2566	255	50M	=	2501	-115	CATTGCATTCAGATGGATACATCTGTCAACGCCGCTAATCAGGTTGTTTC	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1763:587	67	phiX174	2501	255	50M	=	2566	115	AAGCTACATCGTCAACGTTATATTTTGATAGTTTGACGGTTAATGCTGGT	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1768:715	131	phiX174	3173	255	50M	=	3118	-105	AGGACTTCTTGAAGGTACGTTGCAGGCTGGCACTTCTGCCGTTTCTGATA	IIIIIII""IIIIIIIIIIIIIDIIIIIIIIIIII?I0IIIIHIIIGIII	XA:i:0	MD:Z:50	NM:i:0
+Dummy:1:1:1768:715	67	phiX174	3118	255	50M	=	3173	105	ACCCTGATGAGGCCGCCCCTAGTTTTGTTTCTGGTGCTATGGCTAAAGCT	IIIIIII""IIIIIIIIIIIIIDIIIIIIIIIIII"IIIIIII000IIII	XA:i:0	MD:Z:50	NM:i:0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bowtie_out8_1.fastq	Mon Nov 09 11:18:30 2015 -0500
@@ -0,0 +1,20 @@
++
++
++
++
++
+@Dummy:1:1:1570:620/1
+@Dummy:1:1:1572:324/1
+@Dummy:1:1:1582:633/1
+@Dummy:1:1:1652:270/1
+@Dummy:1:1:1746:351/1
+AAGGTGCTTaaaTTCgtGGGTCCTGAGCTGGCGACCCTGTTTTGTATGGC
+AGCGTAAAGGCGCTCGTCTTTGGTATGTAGGacTTTGCATTGTTTAATTG
+CCGCTTCCTCCTGAGACTGAGCTTTCTCGCCAAATGACGACTTCTACCAC
+CTCATCGTCACGTTTATGGTGAACAGTGGATTAAGTTCATGAAGGATGGT
+GAGTAACAAAGTaaaGTTTGGAccGTTTTTGTCTCGTGCTCGTCGCTGCG
+IIIIIII""IIIIIIIIIIIIIBIIIIIIIIIIII"IIIIIII000IIII
+IIIIIII""IIIIIIIIIIIIIIIIIIII+7I05I"IIIIIII000IIII
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIII6II"IIIIIII000IIII
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bowtie_out8_1.fastqillumina.sorted	Mon Nov 09 11:18:30 2015 -0500
@@ -0,0 +1,20 @@
++
++
++
++
++
+@Dummy:1:1:1570:620/1
+@Dummy:1:1:1572:324/1
+@Dummy:1:1:1582:633/1
+@Dummy:1:1:1652:270/1
+@Dummy:1:1:1746:351/1
+AAGGTGCTTaaaTTCgtGGGTCCTGAGCTGGCGACCCTGTTTTGTATGGC
+AGCGTAAAGGCGCTCGTCTTTGGTATGTAGGacTTTGCATTGTTTAATTG
+CCGCTTCCTCCTGAGACTGAGCTTTCTCGCCAAATGACGACTTCTACCAC
+CTCATCGTCACGTTTATGGTGAACAGTGGATTAAGTTCATGAAGGATGGT
+GAGTAACAAAGTaaaGTTTGGAccGTTTTTGTCTCGTGCTCGTCGCTGCG
+hhhhhhhAAhhhhhhhhhhhhhahhhhhhhhhhhhAhhhhhhhOOOhhhh
+hhhhhhhAAhhhhhhhhhhhhhhhhhhhhJVhOThAhhhhhhhOOOhhhh
+hhhhhhhAAhhhhhhhhhhhhhhhhhhhhhhhUhhAhhhhhhhOOOhhhh
+hhhhhhhAAhhhhhhhhhhhhhhhhhhhhhhhhhhAhhhhhhhOOOhhhh
+hhhhhhhAAhhhhhhhhhhhhhhhhhhhhhhhhhhAhhhhhhhOOOhhhh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bowtie_out8_1.fastqsolexa.sorted	Mon Nov 09 11:18:30 2015 -0500
@@ -0,0 +1,20 @@
++
++
++
++
++
+@Dummy:1:1:1570:620/1
+@Dummy:1:1:1572:324/1
+@Dummy:1:1:1582:633/1
+@Dummy:1:1:1652:270/1
+@Dummy:1:1:1746:351/1
+AAGGTGCTTaaaTTCgtGGGTCCTGAGCTGGCGACCCTGTTTTGTATGGC
+AGCGTAAAGGCGCTCGTCTTTGGTATGTAGGacTTTGCATTGTTTAATTG
+CCGCTTCCTCCTGAGACTGAGCTTTCTCGCCAAATGACGACTTCTACCAC
+CTCATCGTCACGTTTATGGTGAACAGTGGATTAAGTTCATGAAGGATGGT
+GAGTAACAAAGTaaaGTTTGGAccGTTTTTGTCTCGTGCTCGTCGCTGCG
+hhhhhhh;;hhhhhhhhhhhhhahhhhhhhhhhhh;hhhhhhhOOOhhhh
+hhhhhhh;;hhhhhhhhhhhhhhhhhhhhJVhOTh;hhhhhhhOOOhhhh
+hhhhhhh;;hhhhhhhhhhhhhhhhhhhhhhhUhh;hhhhhhhOOOhhhh
+hhhhhhh;;hhhhhhhhhhhhhhhhhhhhhhhhhh;hhhhhhhOOOhhhh
+hhhhhhh;;hhhhhhhhhhhhhhhhhhhhhhhhhh;hhhhhhhOOOhhhh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bowtie_out8_2.fastq	Mon Nov 09 11:18:30 2015 -0500
@@ -0,0 +1,20 @@
++
++
++
++
++
+@Dummy:1:1:1570:620/2
+@Dummy:1:1:1572:324/2
+@Dummy:1:1:1582:633/2
+@Dummy:1:1:1652:270/2
+@Dummy:1:1:1746:351/2
+CCACTCCTCTCCCGACTGTGTGTGTGTGTGTTTATATTGACCATGCCGCT
+CTTGCGTTTATGGTACGCTGGACTTTGTGGGATACCCTCGCTTTCCTGCT
+GCCGCCGCGTGAAATTTCTATGAAGGATGTTTTCCGTTCTGGTGATTCGT
+GCTTCGGCCCCTTACTTGAGGATAAATTATGTCTAATATTCAAACTGGCG
+IIIIIII""IIIIIIIIIIIIIBIIIIIIIIIIII?I0IIIIHIIIGIII
+IIIIIII""IIIIIIIIIIIIIIIIII?I0IIIIHIIIGIIIIIIIIIII
+IIIIIII""IIIIIIIIIIIIIIIIIIII+7I05I?I0IIIIHIIIGIII
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIII6II?I0IIIIHIIIGIII
+IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII?I0IIIIHIIIGIII
+TCTATTGACATTATGGGTCTGCAAGCTGCTTTTTTTTTTTTTTTTTTTTT
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bowtie_out8_2.fastqillumina.sorted	Mon Nov 09 11:18:30 2015 -0500
@@ -0,0 +1,20 @@
++
++
++
++
++
+@Dummy:1:1:1570:620/2
+@Dummy:1:1:1572:324/2
+@Dummy:1:1:1582:633/2
+@Dummy:1:1:1652:270/2
+@Dummy:1:1:1746:351/2
+CCACTCCTCTCCCGACTGTGTGTGTGTGTGTTTATATTGACCATGCCGCT
+CTTGCGTTTATGGTACGCTGGACTTTGTGGGATACCCTCGCTTTCCTGCT
+GCCGCCGCGTGAAATTTCTATGAAGGATGTTTTCCGTTCTGGTGATTCGT
+GCTTCGGCCCCTTACTTGAGGATAAATTATGTCTAATATTCAAACTGGCG
+TCTATTGACATTATGGGTCTGCAAGCTGCTTTTTTTTTTTTTTTTTTTTT
+hhhhhhhAAhhhhhhhhhhhhhahhhhhhhhhhhh^hOhhhhghhhfhhh
+hhhhhhhAAhhhhhhhhhhhhhhhhhh^hOhhhhghhhfhhhhhhhhhhh
+hhhhhhhAAhhhhhhhhhhhhhhhhhhhhJVhOTh^hOhhhhghhhfhhh
+hhhhhhhAAhhhhhhhhhhhhhhhhhhhhhhhUhh^hOhhhhghhhfhhh
+hhhhhhhAAhhhhhhhhhhhhhhhhhhhhhhhhhh^hOhhhhghhhfhhh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bowtie_out8_2.fastqsolexa.sorted	Mon Nov 09 11:18:30 2015 -0500
@@ -0,0 +1,20 @@
++
++
++
++
++
+@Dummy:1:1:1570:620/2
+@Dummy:1:1:1572:324/2
+@Dummy:1:1:1582:633/2
+@Dummy:1:1:1652:270/2
+@Dummy:1:1:1746:351/2
+CCACTCCTCTCCCGACTGTGTGTGTGTGTGTTTATATTGACCATGCCGCT
+CTTGCGTTTATGGTACGCTGGACTTTGTGGGATACCCTCGCTTTCCTGCT
+GCCGCCGCGTGAAATTTCTATGAAGGATGTTTTCCGTTCTGGTGATTCGT
+GCTTCGGCCCCTTACTTGAGGATAAATTATGTCTAATATTCAAACTGGCG
+TCTATTGACATTATGGGTCTGCAAGCTGCTTTTTTTTTTTTTTTTTTTTT
+hhhhhhh;;hhhhhhhhhhhhhahhhhhhhhhhhh^hOhhhhghhhfhhh
+hhhhhhh;;hhhhhhhhhhhhhhhhhh^hOhhhhghhhfhhhhhhhhhhh
+hhhhhhh;;hhhhhhhhhhhhhhhhhhhhJVhOTh^hOhhhhghhhfhhh
+hhhhhhh;;hhhhhhhhhhhhhhhhhhhhhhhUhh^hOhhhhghhhfhhh
+hhhhhhh;;hhhhhhhhhhhhhhhhhhhhhhhhhh^hOhhhhghhhfhhh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bowtie_out9.sam	Mon Nov 09 11:18:30 2015 -0500
@@ -0,0 +1,26 @@
+HWI-EAS91_1_30788AAXX:1:1:1090:409/1	16	chrM	15014	255	36M	*	0	0	TTGCCTACGCCATCCTACGCTCCATTCCCAACAAAC	I8AII:IIIIIIIIIIIIIIIIIIIII""IIIIIII	XA:i:0	MD:Z:36	NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1199:1376/1	16	chrM	14023	255	36M	*	0	0	AAACCCCCATAAATAGGTGAAGGTTTTCCAGAAAAC	III/:&GII3III;IIIIIIIIIIIII""IIIIIII	XA:i:2	MD:Z:27G0A7	NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1218:141/1	4	*	0	0	*	*	0	0	GTTAAATATTGGGAGTGGGGGGGGGGGGGAGTTTTG	IIIIIII""IIIIIIIIIIIIIIIIIIII1IIII+I	XM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1269:520/1	16	chrM	11036	255	36M	*	0	0	CGACAAACCGATCTAAAATCACTTATTCCATACTCC	IIIIIIIIIIIIIIIIIIIIIIIIIII""IIIIIII	XA:i:1	MD:Z:27G8	NM:i:1
+HWI-EAS91_1_30788AAXX:1:1:1303:1162/1	16	chrM	14866	255	36M	*	0	0	AAAGACATCCTAGGACTCCTCCTCCTGCCCTTGCTC	I6I3,'94IIAI(IAIGI*4IIFIIII""IIIIIII	XA:i:2	MD:Z:27A0T7	NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1310:991/1	16	chrM	10002	255	36M	*	0	0	CTCCTATGCCTAGAAGGAATAATACTACCACTATTC	I:2IEI:IIDIIIIII4IIIIIIIIII""IIIIIII	XA:i:1	MD:Z:27T8	NM:i:1
+HWI-EAS91_1_30788AAXX:1:1:1336:1000/1	16	chrM	11616	255	36M	*	0	0	GATCTAGAAACAGAAACTTAATATTTCCCATTTACC	II9IIIIIIIIIIIIIIIIIIIIIIII""IIIIIII	XA:i:2	MD:Z:27T0T7	NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1398:854/1	16	chrM	3921	255	36M	*	0	0	CACCCTTCCCGTACTAATAAATCCCCTCCTCTTCAC	IIIII=AIIIIIIIIIIIIIIBIIIII""IIIIIII	XA:i:2	MD:Z:27T0A7	NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1442:1346/1	16	chrM	9331	255	36M	*	0	0	CAGCCACCACTTCGGATTCGAAGCAGCCCCTTGATA	&,*II-<?<II4I(I1IIIIIDIIIII""IIIIIII	XA:i:1	MD:Z:28G7	NM:i:1
+HWI-EAS91_1_30788AAXX:1:1:1454:975/1	16	chrM	8929	255	36M	*	0	0	TGGCTTCTTCTGAGCCTTTTACCACTCCCGCCTAGC	IIIIIII;GIEIIIIIIIIIIIIIIII""IIIIIII	XA:i:2	MD:Z:27A0A7	NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1461:255/1	0	chrM	12988	255	36M	*	0	0	GTACACCGGCGCCTGAGCCCTACTAATAACTCTCAT	IIIIIII""IIIIII9IIIIIIEI(II9.I4III,I	XA:i:2	MD:Z:7A0A27	NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1491:637/1	16	chrM	10864	255	36M	*	0	0	TGTAGAAGCCCCAATTGCCGGATCCATCCTGCTAGC	DBAIIIIIIIIIIIFIIIIIIIIIIII""IIIIIII	XA:i:2	MD:Z:27A0G7	NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1513:715/1	16	chrM	9563	255	36M	*	0	0	CTGACTACCACAACTAAACATCTATGCCCAAAAAAC	I+-II?IDIIIIIIIIIIIIIIIIIII""IIIIIII	XA:i:2	MD:Z:27A0G7	NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1598:1148/1	16	chrM	2334	255	36M	*	0	0	AAATATATAATCACTTATTGATCCAAACCATTGATC	IIIIIHI=IICIII?IIIIIIDIIIII""IIIIIII	XA:i:0	MD:Z:36	NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1601:805/1	0	chrM	12584	255	36M	*	0	0	GAAAACAGGAAAACAATCCAGTCACTTACCCTATGC	IIIIIII""IIIIIIIIIIIIIIIIIIIIIII@III	XA:i:2	MD:Z:7A0C27	NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1630:59/1	16	chrM	12387	255	36M	*	0	0	TCATACTCGACCCCAACCTTACCAACCCCCCGCTCC	FIIHII;IIIIIIIIIIIIIIIIIIII""IIIIIII	XA:i:1	MD:Z:27T8	NM:i:1
+HWI-EAS91_1_30788AAXX:1:1:1634:211/1	0	chrM	9350	255	36M	*	0	0	GAAGCAGGGGCTTGATACTGACACTTCGTCGACGTA	IIIIIII""IIIIIIIIIIIIIIIIIIIIII9IIDF	XA:i:2	MD:Z:7C0C27	NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1663:724/1	0	chrM	15012	255	36M	*	0	0	GTTTGCCGGCGCCATCCTACGCTCCATTCCCAACAA	IIIIIII""IIII8IIIIIIHIIII6IIIII1CI=3	XA:i:2	MD:Z:7T0A27	NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1698:516/1	16	chrM	2735	255	36M	*	0	0	TTTACACTCAGAGGTTCAACTCCTCTCCCTAACAAC	I9IIIII5IIIIIIIIIIIIIIIIIII""IIIIIII	XA:i:0	MD:Z:36	NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1711:249/1	16	chrM	10617	255	36M	*	0	0	ACCAAACAGAACGCCTGAACGCAGGCCCCTACTTCC	IIIIIIIIIIIIIIIIIIIIIIIIIII""IIIIIII	XA:i:1	MD:Z:27T8	NM:i:1
+HWI-EAS91_1_30788AAXX:1:1:1716:413/1	0	chrM	6040	255	36M	*	0	0	GATCCAAGGCTTTATCAACACCTATTCTGATTCTTC	IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIIII	XA:i:2	MD:Z:7T0C27	NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1723:1459/1	16	chrM	15787	255	36M	*	0	0	ATCCTCGCTCCGGGCCCATCCAAACGTCCGGGTTTC	I=II-IIH9IIIIIIIIIDIIIIIIII""IIIIIII	XA:i:2	MD:Z:27G0G7	NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:1775:764/1	0	chrM	16613	255	36M	*	0	0	GCATCCCGGTAGATCTAATTTTCTAAATCTGTCAAC	IIIIIII""III@IIII+IIIIII8H8IIIIIIICI	XA:i:2	MD:Z:7C0C27	NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:795:325/1	16	chrM	4249	255	36M	*	0	0	AAACTTGGACTCACACCATTCCACTTCCCAGTACCC	IIII56IIIIIIIIIIIIIIIIIIIII""IIIIIII	XA:i:2	MD:Z:27T0G7	NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:850:117/1	16	chrM	5540	255	36M	*	0	0	CCCATGCATTCGTAATAATTTTCTTTACCGTCATAC	?:;I9DDIBEIIIIIIIIEIEIIIIII""IIIIIII	XA:i:2	MD:Z:27T0G7	NM:i:2
+HWI-EAS91_1_30788AAXX:1:1:873:453/1	16	chrM	3188	255	36M	*	0	0	ATCTCATACGAAGTAACTCTAGCAATCCCCCTACTC	I=IIIIIII@IIIIIIIIIIIIIIIII""IIIIIII	XA:i:2	MD:Z:27A0T7	NM:i:2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/phiX.fasta	Mon Nov 09 11:18:30 2015 -0500
@@ -0,0 +1,79 @@
+>phiX174
+GAGTTTTATCGCTTCCATGACGCAGAAGTTAACACTTTCGGATATTTCTGATGAGTCGAAAAATTATCTT
+GATAAAGCAGGAATTACTACTGCTTGTTTACGAATTAAATCGAAGTGGACTGCTGGCGGAAAATGAGAAA
+ATTCGACCTATCCTTGCGCAGCTCGAGAAGCTCTTACTTTGCGACCTTTCGCCATCAACTAACGATTCTG
+TCAAAAACTGACGCGTTGGATGAGGAGAAGTGGCTTAATATGCTTGGCACGTTCGTCAAGGACTGGTTTA
+GATATGAGTCACATTTTGTTCATGGTAGAGATTCTCTTGTTGACATTTTAAAAGAGCGTGGATTACTATC
+TGAGTCCGATGCTGTTCAACCACTAATAGGTAAGAAATCATGAGTCAAGTTACTGAACAATCCGTACGTT
+TCCAGACCGCTTTGGCCTCTATTAAGCTCATTCAGGCTTCTGCCGTTTTGGATTTAACCGAAGATGATTT
+CGATTTTCTGACGAGTAACAAAGTTTGGATTGCTACTGACCGCTCTCGTGCTCGTCGCTGCGTTGAGGCT
+TGCGTTTATGGTACGCTGGACTTTGTGGGATACCCTCGCTTTCCTGCTCCTGTTGAGTTTATTGCTGCCG
+TCATTGCTTATTATGTTCATCCCGTCAACATTCAAACGGCCTGTCTCATCATGGAAGGCGCTGAATTTAC
+GGAAAACATTATTAATGGCGTCGAGCGTCCGGTTAAAGCCGCTGAATTGTTCGCGTTTACCTTGCGTGTA
+CGCGCAGGAAACACTGACGTTCTTACTGACGCAGAAGAAAACGTGCGTCAAAAATTACGTGCAGAAGGAG
+TGATGTAATGTCTAAAGGTAAAAAACGTTCTGGCGCTCGCCCTGGTCGTCCGCAGCCGTTGCGAGGTACT
+AAAGGCAAGCGTAAAGGCGCTCGTCTTTGGTATGTAGGTGGTCAACAATTTTAATTGCAGGGGCTTCGGC
+CCCTTACTTGAGGATAAATTATGTCTAATATTCAAACTGGCGCCGAGCGTATGCCGCATGACCTTTCCCA
+TCTTGGCTTCCTTGCTGGTCAGATTGGTCGTCTTATTACCATTTCAACTACTCCGGTTATCGCTGGCGAC
+TCCTTCGAGATGGACGCCGTTGGCGCTCTCCGTCTTTCTCCATTGCGTCGTGGCCTTGCTATTGACTCTA
+CTGTAGACATTTTTACTTTTTATGTCCCTCATCGTCACGTTTATGGTGAACAGTGGATTAAGTTCATGAA
+GGATGGTGTTAATGCCACTCCTCTCCCGACTGTTAACACTACTGGTTATATTGACCATGCCGCTTTTCTT
+GGCACGATTAACCCTGATACCAATAAAATCCCTAAGCATTTGTTTCAGGGTTATTTGAATATCTATAACA
+ACTATTTTAAAGCGCCGTGGATGCCTGACCGTACCGAGGCTAACCCTAATGAGCTTAATCAAGATGATGC
+TCGTTATGGTTTCCGTTGCTGCCATCTCAAAAACATTTGGACTGCTCCGCTTCCTCCTGAGACTGAGCTT
+TCTCGCCAAATGACGACTTCTACCACATCTATTGACATTATGGGTCTGCAAGCTGCTTATGCTAATTTGC
+ATACTGACCAAGAACGTGATTACTTCATGCAGCGTTACCGTGATGTTATTTCTTCATTTGGAGGTAAAAC
+CTCTTATGACGCTGACAACCGTCCTTTACTTGTCATGCGCTCTAATCTCTGGGCATCTGGCTATGATGTT
+GATGGAACTGACCAAACGTCGTTAGGCCAGTTTTCTGGTCGTGTTCAACAGACCTATAAACATTCTGTGC
+CGCGTTTCTTTGTTCCTGAGCATGGCACTATGTTTACTCTTGCGCTTGTTCGTTTTCCGCCTACTGCGAC
+TAAAGAGATTCAGTACCTTAACGCTAAAGGTGCTTTGACTTATACCGATATTGCTGGCGACCCTGTTTTG
+TATGGCAACTTGCCGCCGCGTGAAATTTCTATGAAGGATGTTTTCCGTTCTGGTGATTCGTCTAAGAAGT
+TTAAGATTGCTGAGGGTCAGTGGTATCGTTATGCGCCTTCGTATGTTTCTCCTGCTTATCACCTTCTTGA
+AGGCTTCCCATTCATTCAGGAACCGCCTTCTGGTGATTTGCAAGAACGCGTACTTATTCGCCACCATGAT
+TATGACCAGTGTTTCCAGTCCGTTCAGTTGTTGCAGTGGAATAGTCAGGTTAAATTTAATGTGACCGTTT
+ATCGCAATCTGCCGACCACTCGCGATTCAATCATGACTTCGTGATAAAAGATTGAGTGTGAGGTTATAAC
+GCCGAAGCGGTAAAAATTTTAATTTTTGCCGCTGAGGGGTTGACCAAGCGAAGCGCGGTAGGTTTTCTGC
+TTAGGAGTTTAATCATGTTTCAGACTTTTATTTCTCGCCATAATTCAAACTTTTTTTCTGATAAGCTGGT
+TCTCACTTCTGTTACTCCAGCTTCTTCGGCACCTGTTTTACAGACACCTAAAGCTACATCGTCAACGTTA
+TATTTTGATAGTTTGACGGTTAATGCTGGTAATGGTGGTTTTCTTCATTGCATTCAGATGGATACATCTG
+TCAACGCCGCTAATCAGGTTGTTTCTGTTGGTGCTGATATTGCTTTTGATGCCGACCCTAAATTTTTTGC
+CTGTTTGGTTCGCTTTGAGTCTTCTTCGGTTCCGACTACCCTCCCGACTGCCTATGATGTTTATCCTTTG
+AATGGTCGCCATGATGGTGGTTATTATACCGTCAAGGACTGTGTGACTATTGACGTCCTTCCCCGTACGC
+CGGGCAATAATGTTTATGTTGGTTTCATGGTTTGGTCTAACTTTACCGCTACTAAATGCCGCGGATTGGT
+TTCGCTGAATCAGGTTATTAAAGAGATTATTTGTCTCCAGCCACTTAAGTGAGGTGATTTATGTTTGGTG
+CTATTGCTGGCGGTATTGCTTCTGCTCTTGCTGGTGGCGCCATGTCTAAATTGTTTGGAGGCGGTCAAAA
+AGCCGCCTCCGGTGGCATTCAAGGTGATGTGCTTGCTACCGATAACAATACTGTAGGCATGGGTGATGCT
+GGTATTAAATCTGCCATTCAAGGCTCTAATGTTCCTAACCCTGATGAGGCCGCCCCTAGTTTTGTTTCTG
+GTGCTATGGCTAAAGCTGGTAAAGGACTTCTTGAAGGTACGTTGCAGGCTGGCACTTCTGCCGTTTCTGA
+TAAGTTGCTTGATTTGGTTGGACTTGGTGGCAAGTCTGCCGCTGATAAAGGAAAGGATACTCGTGATTAT
+CTTGCTGCTGCATTTCCTGAGCTTAATGCTTGGGAGCGTGCTGGTGCTGATGCTTCCTCTGCTGGTATGG
+TTGACGCCGGATTTGAGAATCAAAAAGAGCTTACTAAAATGCAACTGGACAATCAGAAAGAGATTGCCGA
+GATGCAAAATGAGACTCAAAAAGAGATTGCTGGCATTCAGTCGGCGACTTCACGCCAGAATACGAAAGAC
+CAGGTATATGCACAAAATGAGATGCTTGCTTATCAACAGAAGGAGTCTACTGCTCGCGTTGCGTCTATTA
+TGGAAAACACCAATCTTTCCAAGCAACAGCAGGTTTCCGAGATTATGCGCCAAATGCTTACTCAAGCTCA
+AACGGCTGGTCAGTATTTTACCAATGACCAAATCAAAGAAATGACTCGCAAGGTTAGTGCTGAGGTTGAC
+TTAGTTCATCAGCAAACGCAGAATCAGCGGTATGGCTCTTCTCATATTGGCGCTACTGCAAAGGATATTT
+CTAATGTCGTCACTGATGCTGCTTCTGGTGTGGTTGATATTTTTCATGGTATTGATAAAGCTGTTGCCGA
+TACTTGGAACAATTTCTGGAAAGACGGTAAAGCTGATGGTATTGGCTCTAATTTGTCTAGGAAATAACCG
+TCAGGATTGACACCCTCCCAATTGTATGTTTTCATGCCTCCAAATCTTGGAGGCTTTTTTATGGTTCGTT
+CTTATTACCCTTCTGAATGTCACGCTGATTATTTTGACTTTGAGCGTATCGAGGCTCTTAAACCTGCTAT
+TGAGGCTTGTGGCATTTCTACTCTTTCTCAATCCCCAATGCTTGGCTTCCATAAGCAGATGGATAACCGC
+ATCAAGCTCTTGGAAGAGATTCTGTCTTTTCGTATGCAGGGCGTTGAGTTCGATAATGGTGATATGTATG
+TTGACGGCCATAAGGCTGCTTCTGACGTTCGTGATGAGTTTGTATCTGTTACTGAGAAGTTAATGGATGA
+ATTGGCACAATGCTACAATGTGCTCCCCCAACTTGATATTAATAACACTATAGACCACCGCCCCGAAGGG
+GACGAAAAATGGTTTTTAGAGAACGAGAAGACGGTTACGCAGTTTTGCCGCAAGCTGGCTGCTGAACGCC
+CTCTTAAGGATATTCGCGATGAGTATAATTACCCCAAAAAGAAAGGTATTAAGGATGAGTGTTCAAGATT
+GCTGGAGGCCTCCACTATGAAATCGCGTAGAGGCTTTACTATTCAGCGTTTGATGAATGCAATGCGACAG
+GCTCATGCTGATGGTTGGTTTATCGTTTTTGACACTCTCACGTTGGCTGACGACCGATTAGAGGCGTTTT
+ATGATAATCCCAATGCTTTGCGTGACTATTTTCGTGATATTGGTCGTATGGTTCTTGCTGCCGAGGGTCG
+CAAGGCTAATGATTCACACGCCGACTGCTATCAGTATTTTTGTGTGCCTGAGTATGGTACAGCTAATGGC
+CGTCTTCATTTCCATGCGGTGCATTTTATGCGGACACTTCCTACAGGTAGCGTTGACCCTAATTTTGGTC
+GTCGGGTACGCAATCGCCGCCAGTTAAATAGCTTGCAAAATACGTGGCCTTATGGTTACAGTATGCCCAT
+CGCAGTTCGCTACACGCAGGACGCTTTTTCACGTTCTGGTTGGTTGTGGCCTGTTGATGCTAAAGGTGAG
+CCGCTTAAAGCTACCAGTTATATGGCTGTTGGTTTCTATGTGGCTAAATACGTTAACAAAAAGTCAGATA
+TGGACCTTGCTGCTAAAGGTCTAGGAGCTAAAGAATGGAACAACTCACTAAAAACCAAGCTGTCGCTACT
+TCCCAAGAAGCTGTTCAGAATCAGAATGAGCCGCAACTTCGGGATGAAAATGCTCACAATGACAAATCTG
+TCCACGGAGTGCTTAATCCAACTTACCAAGCTGGGTTACGACGCGACGCCGTTCAACCAGATATTGAAGC
+AGAACGCAAAAAGAGAGATGAGATTGAGGCTGGGAAAAGTTACTGTAGCCGACGTTTTGGCGGCGCAACC
+TGTGACGACAAATCTGCTCAAATTTATGCGCGCTTCGATAAAAATGATTGGCGTATCCAACCTGCA
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tool-data/bowtie_indices.loc.sample	Mon Nov 09 11:18:30 2015 -0500
@@ -0,0 +1,37 @@
+#This is a sample file distributed with Galaxy that enables tools
+#to use a directory of Bowtie indexed sequences data files. You will
+#need to create these data files and then create a bowtie_indices.loc
+#file similar to this one (store it in this directory) that points to
+#the directories in which those files are stored. The bowtie_indices.loc
+#file has this format (longer white space characters are TAB characters):
+#
+#<unique_build_id>   <dbkey>   <display_name>   <file_base_path>
+#
+#So, for example, if you had hg18 indexed stored in
+#/depot/data2/galaxy/bowtie/hg18/,
+#then the bowtie_indices.loc entry would look like this:
+#
+#hg18	hg18	hg18	/depot/data2/galaxy/bowtie/hg18/hg18
+#
+#and your /depot/data2/galaxy/bowtie/hg18/ directory
+#would contain hg18.*.ebwt files:
+#
+#-rw-r--r--  1 james    universe 830134 2005-09-13 10:12 hg18.1.ebwt
+#-rw-r--r--  1 james    universe 527388 2005-09-13 10:12 hg18.2.ebwt
+#-rw-r--r--  1 james    universe 269808 2005-09-13 10:12 hg18.3.ebwt
+#...etc...
+#
+#Your bowtie_indices.loc file should include an entry per line for each
+#index set you have stored. The "file" in the path does not actually
+#exist, but it is the prefix for the actual index files. For example:
+#
+#hg18canon			hg18	hg18 Canonical	/depot/data2/galaxy/bowtie/hg18/hg18canon
+#hg18full			hg18	hg18 Full		/depot/data2/galaxy/bowtie/hg18/hg18full
+#/orig/path/hg19	hg19	hg19			/depot/data2/galaxy/bowtie/hg19/hg19
+#...etc...
+#
+#Note that for backwards compatibility with workflows, the unique ID of
+#an entry must be the path that was in the original loc file, because that
+#is the value stored in the workflow for that parameter. That is why the
+#hg19 entry above looks odd. New genomes can be better-looking.
+#
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tool_data_table_conf.xml.sample	Mon Nov 09 11:18:30 2015 -0500
@@ -0,0 +1,8 @@
+<!-- Use the file tool_data_table_conf.xml.oldlocstyle if you don't want to update your loc files as changed in revision 4550:535d276c92bc-->
+<tables>
+    <!-- Locations of indexes in the Bowtie mapper format -->
+    <table name="bowtie_indexes" comment_char="#">
+        <columns>value, dbkey, name, path</columns>
+        <file path="tool-data/bowtie_indices.loc" />
+    </table>
+</tables>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tool_dependencies.xml	Mon Nov 09 11:18:30 2015 -0500
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<tool_dependency>
+    <package name="bowtie" version="0.12.7">
+        <repository changeset_revision="f0faa5eea2eb" name="package_bowtie_0_12_7" owner="devteam" toolshed="https://testtoolshed.g2.bx.psu.edu" />
+    </package>
+</tool_dependency>