changeset 12:5d18acd59604 draft

Uploaded
author triasteran
date Wed, 23 Feb 2022 14:03:33 +0000
parents a01ac17a4b82
children bdf46f27f23d
files bowtie_remove_rrna_wrapper/.hgignore bowtie_remove_rrna_wrapper/bowtie_indices.loc.sample bowtie_remove_rrna_wrapper/bowtie_remove_rrna_wrapper.xml bowtie_remove_rrna_wrapper/bowtie_wrapper.py bowtie_remove_rrna_wrapper/bowtie_wrapper_py3.py bowtie_remove_rrna_wrapper/test-data/bowtie_in2.fastqsanger bowtie_remove_rrna_wrapper/test-data/bowtie_in5.fastqillumina bowtie_remove_rrna_wrapper/test-data/bowtie_in5.fastqsanger bowtie_remove_rrna_wrapper/test-data/bowtie_in5.fastqsolexa bowtie_remove_rrna_wrapper/test-data/bowtie_in6.fastqillumina bowtie_remove_rrna_wrapper/test-data/bowtie_in6.fastqsanger bowtie_remove_rrna_wrapper/test-data/bowtie_in6.fastqsolexa bowtie_remove_rrna_wrapper/test-data/bowtie_out10.sam bowtie_remove_rrna_wrapper/test-data/bowtie_out6.sam bowtie_remove_rrna_wrapper/test-data/bowtie_out7.sam bowtie_remove_rrna_wrapper/test-data/bowtie_out8_1.fastq bowtie_remove_rrna_wrapper/test-data/bowtie_out8_1.fastqillumina.sorted bowtie_remove_rrna_wrapper/test-data/bowtie_out8_1.fastqsolexa.sorted bowtie_remove_rrna_wrapper/test-data/bowtie_out8_2.fastq bowtie_remove_rrna_wrapper/test-data/bowtie_out8_2.fastqillumina.sorted bowtie_remove_rrna_wrapper/test-data/bowtie_out8_2.fastqsolexa.sorted bowtie_remove_rrna_wrapper/test-data/bowtie_out9.sam bowtie_remove_rrna_wrapper/test-data/phiX.fasta bowtie_remove_rrna_wrapper/tool-data/bowtie_indices.loc bowtie_remove_rrna_wrapper/tool_data_table_conf.xml.sample
diffstat 25 files changed, 2490 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bowtie_remove_rrna_wrapper/.hgignore	Wed Feb 23 14:03:33 2022 +0000
@@ -0,0 +1,2 @@
+syntax: glob
+.idea
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bowtie_remove_rrna_wrapper/bowtie_indices.loc.sample	Wed Feb 23 14:03:33 2022 +0000
@@ -0,0 +1,1 @@
+Mouse_rRNA	Mouse_rRNA	Mouse_rRNA	/home/DATA/galaxy/galaxy-dist/data/indexes/bowtie_rrna_indexes/Mouse_rRNA/bowtie_rrna_indexes/mouse_rRNA_index
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bowtie_remove_rrna_wrapper/bowtie_remove_rrna_wrapper.xml	Wed Feb 23 14:03:33 2022 +0000
@@ -0,0 +1,681 @@
+<tool id="bowtie_remove_rrna_wrapper" name="Remove rRNA using Bowtie" version="0.1.1b">
+    <requirements>
+        <requirement type="package" version="1.3.1">bowtie</requirement>
+    </requirements>
+    <command detect_errors="exit_code"><![CDATA[
+        python '__tool_directory__/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}"
+            --icutoff="${refGenomeSource.indexParams.cutoff}"
+          #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}"
+          --mismatchSeed="${singlePaired.sParams.sMismatchSeed}"
+          --mismatchQual="${singlePaired.sParams.sMismatchQual}"
+          --seedLen="${singlePaired.sParams.sSeedLen}"
+          --rounding="${singlePaired.sParams.sRounding}"
+          --maqSoapAlign="${singlePaired.sParams.sMaqSoapAlign}"
+          --reverseAlign="${singlePaired.sParams.sReverseAlign}"
+          --tryHard="${singlePaired.sParams.sTryHard}"
+          --valAlign="${singlePaired.sParams.sValAlign}"
+          --allValAligns="${singlePaired.sParams.sAllValAligns}"
+          --suppressAlign="${singlePaired.sParams.sSuppressAlign}"
+          --best="${singlePaired.sParams.sBestOption.sBest}"
+          #if $singlePaired.sParams.sBestOption.sBest == "doBest":
+            --maxBacktracks="${singlePaired.sParams.sBestOption.sdMaxBacktracks}"
+            --strata="${singlePaired.sParams.sBestOption.sdStrata}"
+          #else:
+            --maxBacktracks="${singlePaired.sParams.sBestOption.snMaxBacktracks}"
+          #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}"
+          --mismatchSeed="${singlePaired.pParams.pMismatchSeed}"
+          --mismatchQual="${singlePaired.pParams.pMismatchQual}"
+          --seedLen="${singlePaired.pParams.pSeedLen}"
+          --rounding="${singlePaired.pParams.pRounding}"
+          --maqSoapAlign="${singlePaired.pParams.pMaqSoapAlign}"
+          --minInsert="${singlePaired.pParams.pMinInsert}"
+          --maxAlignAttempt="${singlePaired.pParams.pMaxAlignAttempt}"
+          --forwardAlign="${singlePaired.pParams.pForwardAlign}"
+          --reverseAlign="${singlePaired.pParams.pReverseAlign}"
+          --tryHard="${singlePaired.pParams.pTryHard}"
+          --valAlign="${singlePaired.pParams.pValAlign}"
+          --allValAligns="${singlePaired.pParams.pAllValAligns}"
+          --suppressAlign="${singlePaired.pParams.pSuppressAlign}"
+          --best="${singlePaired.pParams.pBestOption.pBest}"
+          #if $singlePaired.pParams.pBestOption.pBest == "doBest":
+            --maxBacktracks="${singlePaired.pParams.pBestOption.pdMaxBacktracks}"
+            --strata="${singlePaired.pParams.pBestOption.pdStrata}"
+          #else:
+            --maxBacktracks="${singlePaired.pParams.pBestOption.pnMaxBacktracks}"
+          #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 the appropriate rRNA index" help="If the rRNA index for your organism is not listed, you will need to upload a fasta file of the rRNA sequences. ">
+          <options from_data_table="bowtie_rrna_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" 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)">
+                  <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" label="The period for the difference-cover sample (--dcv)" />
+              </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" label="How many rows get marked during annotation of some or all of the Burrows-Wheeler rows (-o)" />
+            <param name="ftab" type="integer" value="10" label="The size of the lookup table used to calculate an initial Burrows-Wheeler range with respect to the first n characters of the query (-t)" help="ftab 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" />
+            <param name="cutoff" type="integer" value="-1" label="Number of first bases of the reference sequence to index (--cutoff)" 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" selected="true">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)" />
+            <param name="sMismatchSeed" type="integer" value="2" 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" label="Maximum permitted total of quality values at mismatched read positions (-e)" />
+            <param name="sSeedLen" type="integer" value="25" 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)">
+              <option value="round">Round to nearest 10</option>
+              <option value="noRound">Do not round to nearest 10</option>
+            </param>
+            <param name="sMaqSoapAlign" type="integer" value="3" label="Number of mismatches for SOAP-like alignment policy (-v)" help="-1 for default MAQ-like alignment policy" />
+            <param name="sReverseAlign" type="select" label="Choose whether or not to align against the reverse-complement reference strand (--norc)"> 
+              <option value="noReverse">Do not align against the reverse-complement reference strand</option>
+              <option value="reverse">Align against the reverse-complement reference strand</option>
+            </param>
+            <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>
+            <param name="sValAlign" type="integer" value="1" label="Report up to n valid alignments per read (-k)" />
+            <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>
+            <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="True" label="Write all reads that could not be aligned to a file (--un)" />
+            <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">
+                <param name="snMaxBacktracks" type="integer" value="125" label="Maximum number of backtracks permitted when aligning a read (--maxbts)" />
+              </when>
+              <when value="doBest">
+                <param name="sdMaxBacktracks" type="integer" value="800" label="Maximum number of backtracks permitted when aligning a read (--maxbts)" />
+                <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>
+              </when>
+            </conditional> <!-- bestOption -->
+            <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)" />
+            <param name="pMismatchSeed" type="integer" value="2" 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" label="Maximum permitted total of quality values at mismatched read positions (-e)" />
+            <param name="pSeedLen" type="integer" value="25" 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)">
+              <option value="round">Round to nearest 10</option>
+              <option value="noRound">Do not round to nearest 10</option>
+            </param>
+            <param name="pMaqSoapAlign" type="integer" value="-1" label="Number of mismatches for SOAP-like alignment policy (-v)" help="-1 for default MAQ-like alignment policy" />
+            <param name="pMinInsert" type="integer" value="0" label="Minimum insert size for valid paired-end alignments (-I)" />
+            <param name="pMaxAlignAttempt" type="integer" value="100" 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="pForwardAlign" type="select" label="Choose whether or not to attempt to align 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 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>
+            <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>
+            <param name="pValAlign" type="integer" value="1" label="Report up to n valid arguments per pair (-k)" />
+            <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>
+            <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)" />
+            <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">
+                <param name="pnMaxBacktracks" type="integer" value="125" label="Maximum number of backtracks permitted when aligning a read (--maxbts)" />
+              </when>
+              <when value="doBest">
+                <param name="pdMaxBacktracks" type="integer" value="800" label="Maximum number of backtracks permitted when aligning a read (--maxbts)" />
+                <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>
+              </when>
+            </conditional>
+            <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" 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="pMismatchSeed" value="2" />
+      <param name="pMismatchQual" value="70" />
+      <param name="pSeedLen" value="25" />
+      <param name="pRounding" value="round" />
+      <param name="pMaqSoapAlign" value="-1" />
+      <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="pMismatchSeed" value="2" />
+      <param name="pMismatchQual" value="70" />
+      <param name="pSeedLen" value="25" />
+      <param name="pRounding" value="round" />
+      <param name="pMaqSoapAlign" value="-1" />
+      <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="fastqillumna" file="bowtie_out8_1.fastqillumina.sorted" sort="True" />
+      <output name="output_unmapped_reads_r" ftype="fastqillumna" 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="pMismatchSeed" value="2" />
+      <param name="pMismatchQual" value="70" />
+      <param name="pSeedLen" value="25" />
+      <param name="pRounding" value="round" />
+      <param name="pMaqSoapAlign" value="-1" />
+      <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 25 +maxbts 125 -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="sMismatchSeed" value="2" />
+      <param name="sMismatchQual" value="70" />
+      <param name="sSeedLen" value="25" />
+      <param name="sRounding" value="round" />
+      <param name="sMaqSoapAlign" value="-1" />
+      <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="snMaxBacktracks" value="125" />
+      <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="cutoff" 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>
+	<![CDATA[
+	    Bowtie is a short read aligner.
+    ]]>
+	</help>
+    <citations>
+        <citation type="bibtex">
+@misc{githubbowtie,
+  author = {LastTODO, FirstTODO},
+  year = {TODO},
+  title = {bowtie},
+  publisher = {GitHub},
+  journal = {GitHub repository},
+  url = {https://github.com/BenLangmead/bowtie},
+}</citation>
+    </citations>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bowtie_remove_rrna_wrapper/bowtie_wrapper.py	Wed Feb 23 14:03:33 2022 +0000
@@ -0,0 +1,469 @@
+#!/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, --maqSoapAlign=P: Choose MAQ- or SOAP-like alignment policy
+    -w, --tryHard=: Whether or not to try as hard as possible to find valid alignments when they exist
+    -v, --valAlign=v: Report up to n valid arguments per read
+    -V, --allValAligns=V: Whether or not to report all valid alignments per read
+    -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
+    -c, --icutoff=c: Number of first bases of the reference sequence to index
+    -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', '--maqSoapAlign', dest='maqSoapAlign', help='Choose MAQ- or SOAP-like alignment policy' )
+    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', '--valAlign', dest='valAlign', help='Report up to n valid arguments per read' )
+    parser.add_option( '-V', '--allValAligns', dest='allValAligns', help='Whether or not to report all valid alignments per read' )
+    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( '-c', '--icutoff', dest='icutoff', help='Number of first bases of the reference sequence to index' )
+    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()
+    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 ) > 0:
+                    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 ) >= 0:
+                    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 = ''
+                if options.icutoff and int( options.icutoff ) > 0:
+                    icutoff = '--cutoff %s' % options.icutoff
+                else:
+                    icutoff = ''
+                indexing_cmds = '%s %s %s %s %s %s %s --offrate %s %s %s %s %s %s %s' % \
+                                ( iautoB, ipacked, ibmax, ibmaxdivn, idcv, inodc, 
+                                  inoref, options.ioffrate, iftab, intoa, iendian, 
+                                  iseed, icutoff, 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.maqSoapAlign != '-1' and int( options.maqSoapAlign ) >= 0:
+                maqSoapAlign = '-v %s' % options.maqSoapAlign
+            else:
+                maqSoapAlign = ''
+            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 ) >= 0:
+                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, maqSoapAlign,
+                              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_remove_rrna_wrapper/bowtie_wrapper_py3.py	Wed Feb 23 14:03:33 2022 +0000
@@ -0,0 +1,469 @@
+#!/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, --maqSoapAlign=P: Choose MAQ- or SOAP-like alignment policy
+    -w, --tryHard=: Whether or not to try as hard as possible to find valid alignments when they exist
+    -v, --valAlign=v: Report up to n valid arguments per read
+    -V, --allValAligns=V: Whether or not to report all valid alignments per read
+    -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
+    -c, --icutoff=c: Number of first bases of the reference sequence to index
+    -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', '--maqSoapAlign', dest='maqSoapAlign', help='Choose MAQ- or SOAP-like alignment policy' )
+    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', '--valAlign', dest='valAlign', help='Report up to n valid arguments per read' )
+    parser.add_option( '-V', '--allValAligns', dest='allValAligns', help='Whether or not to report all valid alignments per read' )
+    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( '-c', '--icutoff', dest='icutoff', help='Number of first bases of the reference sequence to index' )
+    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()
+    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 ) > 0:
+                    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 ) >= 0:
+                    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 = ''
+                if options.icutoff and int( options.icutoff ) > 0:
+                    icutoff = '--cutoff %s' % options.icutoff
+                else:
+                    icutoff = ''
+                indexing_cmds = '%s %s %s %s %s %s %s --offrate %s %s %s %s %s %s %s' % \
+                                ( iautoB, ipacked, ibmax, ibmaxdivn, idcv, inodc, 
+                                  inoref, options.ioffrate, iftab, intoa, iendian, 
+                                  iseed, icutoff, 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 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.maqSoapAlign != '-1' and int( options.maqSoapAlign ) >= 0:
+                maqSoapAlign = '-v %s' % options.maqSoapAlign
+            else:
+                maqSoapAlign = ''
+            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 ) >= 0:
+                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, maqSoapAlign,
+                              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):
+            # 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 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__()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bowtie_remove_rrna_wrapper/test-data/bowtie_in2.fastqsanger	Wed Feb 23 14:03:33 2022 +0000
@@ -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/bowtie_remove_rrna_wrapper/test-data/bowtie_in5.fastqillumina	Wed Feb 23 14:03:33 2022 +0000
@@ -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/bowtie_remove_rrna_wrapper/test-data/bowtie_in5.fastqsanger	Wed Feb 23 14:03:33 2022 +0000
@@ -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/bowtie_remove_rrna_wrapper/test-data/bowtie_in5.fastqsolexa	Wed Feb 23 14:03:33 2022 +0000
@@ -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/bowtie_remove_rrna_wrapper/test-data/bowtie_in6.fastqillumina	Wed Feb 23 14:03:33 2022 +0000
@@ -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/bowtie_remove_rrna_wrapper/test-data/bowtie_in6.fastqsanger	Wed Feb 23 14:03:33 2022 +0000
@@ -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/bowtie_remove_rrna_wrapper/test-data/bowtie_in6.fastqsolexa	Wed Feb 23 14:03:33 2022 +0000
@@ -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/bowtie_remove_rrna_wrapper/test-data/bowtie_out10.sam	Wed Feb 23 14:03:33 2022 +0000
@@ -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/bowtie_remove_rrna_wrapper/test-data/bowtie_out6.sam	Wed Feb 23 14:03:33 2022 +0000
@@ -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/bowtie_remove_rrna_wrapper/test-data/bowtie_out7.sam	Wed Feb 23 14:03:33 2022 +0000
@@ -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/bowtie_remove_rrna_wrapper/test-data/bowtie_out8_1.fastq	Wed Feb 23 14:03:33 2022 +0000
@@ -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/bowtie_remove_rrna_wrapper/test-data/bowtie_out8_1.fastqillumina.sorted	Wed Feb 23 14:03:33 2022 +0000
@@ -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/bowtie_remove_rrna_wrapper/test-data/bowtie_out8_1.fastqsolexa.sorted	Wed Feb 23 14:03:33 2022 +0000
@@ -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/bowtie_remove_rrna_wrapper/test-data/bowtie_out8_2.fastq	Wed Feb 23 14:03:33 2022 +0000
@@ -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/bowtie_remove_rrna_wrapper/test-data/bowtie_out8_2.fastqillumina.sorted	Wed Feb 23 14:03:33 2022 +0000
@@ -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/bowtie_remove_rrna_wrapper/test-data/bowtie_out8_2.fastqsolexa.sorted	Wed Feb 23 14:03:33 2022 +0000
@@ -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/bowtie_remove_rrna_wrapper/test-data/bowtie_out9.sam	Wed Feb 23 14:03:33 2022 +0000
@@ -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/bowtie_remove_rrna_wrapper/test-data/phiX.fasta	Wed Feb 23 14:03:33 2022 +0000
@@ -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/bowtie_remove_rrna_wrapper/tool-data/bowtie_indices.loc	Wed Feb 23 14:03:33 2022 +0000
@@ -0,0 +1,1 @@
+Mouse_rRNA	Mouse_rRNA	Mouse_rRNA	/home/DATA/galaxy/galaxy-dist/data/indexes/bowtie_rrna_indexes/Mouse_rRNA/bowtie_rrna_indexes/mouse_rRNA_index
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bowtie_remove_rrna_wrapper/tool_data_table_conf.xml.sample	Wed Feb 23 14:03:33 2022 +0000
@@ -0,0 +1,8 @@
+<tables>
+    <!-- Locations of indexes in the Bowtie mapper format -->
+    <table name="bowtie_rrna_indexes" comment_char="#">
+        <columns>value, dbkey, name, path</columns>
+        <file path="tool-data/bowtie_indices.loc" />
+    </table>
+</tables>
+