# HG changeset patch
# User jackcurragh
# Date 1647952476 0
# Node ID 14fb4b4872e398e0866a417faeba22d936c09f42
# Parent 1b109d213a42f94ab82dadaed75f5f383a2f84c1
Uploaded
diff -r 1b109d213a42 -r 14fb4b4872e3 bowtie_transcriptome_wrapper/bowtie_transcriptome_wrapper.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bowtie_transcriptome_wrapper/bowtie_transcriptome_wrapper.py Tue Mar 22 12:34:36 2022 +0000
@@ -0,0 +1,472 @@
+#!/usr/bin/env python
+
+"""
+Runs Bowtie on single-end or paired-end data.
+
+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)
+ --output_mapping_stats=: File name for mapping statistics (output on stderr by bowtie)
+ -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
+import os
+import shutil
+import subprocess
+import sys
+import 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.exit('%s\n' % msg)
+
+
+def __main__():
+ 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( '', '--output_mapping_stats', dest='output_mapping_stats', help='File for mapping statistics (i.e. stderr from bowtie)' )
+ 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 as 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
+ with open(tmp, 'w') as tmp_stderr:
+ returncode = subprocess.call(args=cmd1, shell=True, cwd=tmp_index_dir, stderr=tmp_stderr.fileno())
+ if returncode != 0:
+ # get stderr, allowing for case where it's very large
+ stderr = ''
+ buffsize = 1048576
+ with open(tmp, 'r') as tmp_stderr:
+ try:
+ while True:
+ stderr += tmp_stderr.read(buffsize)
+ if not stderr or len(stderr) % buffsize != 0:
+ break
+ except OverflowError:
+ pass
+ raise Exception(stderr)
+ except Exception as 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 as 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
+ with open(tmp, 'w') as tmp_stderr:
+ returncode = subprocess.call(args=cmd2, shell=True, cwd=tmp_index_dir, stderr=tmp_stderr.fileno())
+ # get stderr, allowing for case where it's very large
+ stderr = ''
+ buffsize = 1048576
+ with open(tmp, 'r') as tmp_stderr:
+ try:
+ while True:
+ stderr += tmp_stderr.read(buffsize)
+ if not stderr or len(stderr) % buffsize != 0:
+ break
+ except OverflowError:
+ pass
+ if returncode != 0:
+ raise Exception(stderr)
+ elif options.output_mapping_stats is not None:
+ # Write stderr (containing the mapping statistics) to a named file
+ with open(options.output_mapping_stats, 'w') as mapping_stats:
+ mapping_stats.write( 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 as 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 as 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 as 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__()
diff -r 1b109d213a42 -r 14fb4b4872e3 bowtie_transcriptome_wrapper/bowtie_transcriptomic_wrapper.xml
--- a/bowtie_transcriptome_wrapper/bowtie_transcriptomic_wrapper.xml Tue Mar 15 10:06:15 2022 +0000
+++ b/bowtie_transcriptome_wrapper/bowtie_transcriptomic_wrapper.xml Tue Mar 22 12:34:36 2022 +0000
@@ -5,7 +5,7 @@
bowtie --version
- python '$__tool_directory__/bowtie_wrapper.py'
+ python '$__tool_directory__/bowtie_transcriptome_wrapper.py'
## Set number of threads
--threads="\${GALAXY_SLOTS:-4}"
## Outputs
@@ -154,12 +154,12 @@
-
+
-
+
@@ -167,7 +167,7 @@
-
+
@@ -257,7 +257,7 @@
-
+
@@ -340,7 +340,7 @@
-
+
@@ -353,6 +353,7 @@
+
diff -r 1b109d213a42 -r 14fb4b4872e3 bowtie_transcriptome_wrapper/bowtie_wrapper.py
--- a/bowtie_transcriptome_wrapper/bowtie_wrapper.py Tue Mar 15 10:06:15 2022 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,472 +0,0 @@
-#!/usr/bin/env python
-
-"""
-Runs Bowtie on single-end or paired-end data.
-
-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)
- --output_mapping_stats=: File name for mapping statistics (output on stderr by bowtie)
- -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
-import os
-import shutil
-import subprocess
-import sys
-import 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.exit('%s\n' % msg)
-
-
-def __main__():
- 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( '', '--output_mapping_stats', dest='output_mapping_stats', help='File for mapping statistics (i.e. stderr from bowtie)' )
- 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 as 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
- with open(tmp, 'w') as tmp_stderr:
- returncode = subprocess.call(args=cmd1, shell=True, cwd=tmp_index_dir, stderr=tmp_stderr.fileno())
- if returncode != 0:
- # get stderr, allowing for case where it's very large
- stderr = ''
- buffsize = 1048576
- with open(tmp, 'r') as tmp_stderr:
- try:
- while True:
- stderr += tmp_stderr.read(buffsize)
- if not stderr or len(stderr) % buffsize != 0:
- break
- except OverflowError:
- pass
- raise Exception(stderr)
- except Exception as 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 as 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
- with open(tmp, 'w') as tmp_stderr:
- returncode = subprocess.call(args=cmd2, shell=True, cwd=tmp_index_dir, stderr=tmp_stderr.fileno())
- # get stderr, allowing for case where it's very large
- stderr = ''
- buffsize = 1048576
- with open(tmp, 'r') as tmp_stderr:
- try:
- while True:
- stderr += tmp_stderr.read(buffsize)
- if not stderr or len(stderr) % buffsize != 0:
- break
- except OverflowError:
- pass
- if returncode != 0:
- raise Exception(stderr)
- elif options.output_mapping_stats is not None:
- # Write stderr (containing the mapping statistics) to a named file
- with open(options.output_mapping_stats, 'w') as mapping_stats:
- mapping_stats.write( 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 as 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 as 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 as 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__()
diff -r 1b109d213a42 -r 14fb4b4872e3 bowtie_transcriptome_wrapper/test-data/bowtie_in2.fastqsanger
--- a/bowtie_transcriptome_wrapper/test-data/bowtie_in2.fastqsanger Tue Mar 15 10:06:15 2022 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,104 +0,0 @@
-@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
diff -r 1b109d213a42 -r 14fb4b4872e3 bowtie_transcriptome_wrapper/test-data/bowtie_in5.fastqillumina
--- a/bowtie_transcriptome_wrapper/test-data/bowtie_in5.fastqillumina Tue Mar 15 10:06:15 2022 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,72 +0,0 @@
-@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
diff -r 1b109d213a42 -r 14fb4b4872e3 bowtie_transcriptome_wrapper/test-data/bowtie_in5.fastqsanger
--- a/bowtie_transcriptome_wrapper/test-data/bowtie_in5.fastqsanger Tue Mar 15 10:06:15 2022 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,72 +0,0 @@
-@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""IIIIIIIIIIIIIIIIIIIphiX174
-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
-
diff -r 1b109d213a42 -r 14fb4b4872e3 bowtie_transcriptome_wrapper/tool_data_table_conf.xml.test
--- a/bowtie_transcriptome_wrapper/tool_data_table_conf.xml.test Tue Mar 15 10:06:15 2022 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-
-
-
-