Mercurial > repos > devteam > bowtie2
changeset 15:43d12513224b draft
planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/bowtie2 commit cf554b9b69c32acb484c34fdc60384fa49c7c482
author | iuc |
---|---|
date | Thu, 01 Jun 2017 06:47:03 -0400 |
parents | 937aa69e715f |
children | 8ccbdbe9a695 |
files | bowtie2_macros.xml bowtie2_wrapper.xml read_group_macros.xml test-data/bowtie2-fq_il.fq test-data/bowtie2-stats.out test-data/bowtie2-test1.bam test-data/bowtie2-test2.bam test-data/bowtie2-test_il.bam |
diffstat | 8 files changed, 481 insertions(+), 356 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bowtie2_macros.xml Thu Jun 01 06:47:03 2017 -0400 @@ -0,0 +1,326 @@ +<macros> + <!-- Import this at the top of your command block and then + define rg_auto_name. --> + <token name="@define_read_group_helpers@"> +#def identifier_or_name($input1) + #if hasattr($input1, 'element_identifier') + #return $input1.element_identifier + #else + #return $input1.name.rstrip('.gz').rstrip('.fastq').rstrip('.fq').rstrip('bz2') + #end if +#end def + +#def clean(name) + #import re + #set $name_clean = re.sub('[^\w\-_\.]', '_', $name) + #return $name_clean +#end def + +#def read_group_name_default($input1, $input2=None) + #if $input2 is None + #return $clean($identifier_or_name($input1)) + #else + #import itertools + #set $input_name1 = $clean($identifier_or_name($input1)) + #set $input_name2 = $clean($identifier_or_name($input2)) + #set $common_prefix = ''.join([c[0] for c in itertools.takewhile(lambda x: all(x[0] == y for y in x), itertools.izip(*[$input_name1, $input_name2]))]) + #if len($common_prefix) > 3 + #return $common_prefix + #else + #return $input_name1 + #end if + #end if +#end def + +#def format_read_group(prefix, value, quote='', arg='') + #if $value + #return $arg + $quote + $prefix + $value + $quote + #else + #return '' + #end if +#end def + +#def rg_param(name) + #if $varExists("rg") + #return $rg.get($name, None) + #else + #return $getVar($name, None) + #end if +#end def + +#set $use_rg = True + </token> + <!-- preconditions use_rg and rg_auto_name have been + defined. + --> + <token name="@set_read_group_vars@"> +#if $use_rg + #if $rg_param('read_group_id_conditional') is None + #set $rg_id = $rg_auto_name + #elif $rg_param('read_group_id_conditional').do_auto_name + #set $rg_id = $rg_auto_name + #else + #set $rg_id = str($rg_param('read_group_id_conditional').ID) + #end if + + #if $rg_param('read_group_sm_conditional') is None + #set $rg_sm = '' + #elif $rg_param('read_group_sm_conditional').do_auto_name + #set $rg_sm = $rg_auto_name + #else + #set $rg_sm = str($rg_param('read_group_sm_conditional').SM) + #end if + + #if $rg_param('PL') + #set $rg_pl = str($rg_param('PL')) + #else + #set $rg_pl = '' + #end if + + #if $rg_param('read_group_lb_conditional') is None + #set $rg_lb = '' + #elif $rg_param('read_group_lb_conditional').do_auto_name + #set $rg_lb = $rg_auto_name + #else + #set $rg_lb = str($rg_param('read_group_lb_conditional').LB) + #end if + + #if $rg_param('CN') + #set $rg_cn = str($rg_param('CN')) + #else + #set $rg_cn = '' + #end if + + #if $rg_param("DS") + #set $rg_ds = str($rg_param("DS")) + #else + #set $rg_ds = '' + #end if + + #if $rg_param("DT") + #set $rg_dt = str($rg_param("DT")) + #else + #set $rg_dt = '' + #end if + + #if $rg_param("FO") + #set $rg_fo = str($rg_param("FO")) + #else + #set $rg_fo = '' + #end if + + #if $rg_param("KS") + #set $rg_ks = str($rg_param("KS")) + #else + #set $rg_ks = '' + #end if + + #if $rg_param("PG") + #set $rg_pg = str($rg_param("PG")) + #else + #set $rg_pg = '' + #end if + + #if $rg_param("PI") != None + #set $rg_pi = str($rg_param("PI")) + #else + #set $rg_pi = '' + #end if + + #if $rg_param("PU") + #set $rg_pu = str($rg_param("PU")) + #else + #set $rg_pu = '' + #end if +#end if + </token> + <token name="@set_use_rg_var@"> +#set $use_rg = str($rg.rg_selector) != "do_not_set" + </token> + <xml name="read_group_auto_name_conditional"> + <param name="do_auto_name" type="boolean" label="Auto-assign" help="Use dataset name or collection information to automatically assign this value" checked="false" /> + <when value="true"> + </when> + <when value="false"> + <yield /> + </when> + </xml> + <xml name="read_group_id_param"> + <param name="ID" type="text" value="" label="Read group identifier (ID)" help="This value must be unique among multiple samples in your experiment" optional="false"> + <validator type="empty_field" /> + </param> + </xml> + <xml name="read_group_id_conditional"> + <conditional name="read_group_id_conditional"> + <expand macro="read_group_auto_name_conditional"> + <expand macro="read_group_id_param" /> + </expand> + </conditional> + </xml> + <xml name="read_group_sm_param"> + <param name="SM" type="text" value="" label="Read group sample name (SM)" help="This value should be descriptive. Use pool name where a pool is being sequenced" /> + </xml> + <xml name="read_group_sm_conditional"> + <conditional name="read_group_sm_conditional"> + <expand macro="read_group_auto_name_conditional"> + <expand macro="read_group_sm_param" /> + </expand> + </conditional> + </xml> + <!-- Above SM param is optional (for SAM/BAM spec, this is required + as per Picard. + --> + <xml name="read_group_sm_param_required"> + <param name="SM" type="text" value="" label="Read group sample name (SM)" optional="false" help="This value should be descriptive. Use pool name where a pool is being sequenced"> + <validator type="empty_field" /> + </param> + </xml> + <xml name="read_group_sm_required_conditional"> + <conditional name="read_group_sm_conditional"> + <expand macro="read_group_auto_name_conditional"> + <expand macro="read_group_sm_param" /> + </expand> + </conditional> + </xml> + <xml name="read_group_pl_param"> + <param name="PL" type="select" label="Platform/technology used to produce the reads (PL)"> + <option value="CAPILLARY">CAPILLARY</option> + <option value="LS454">LS454</option> + <option selected="True" value="ILLUMINA">ILLUMINA</option> + <option value="SOLID">SOLID</option> + <option value="HELICOS">HELICOS</option> + <option value="IONTORRENT">IONTORRENT</option> + <option value="PACBIO">PACBIO</option> + </param> + </xml> + <xml name="read_group_lb_param"> + <param name="LB" type="text" label="Library name (LB)" optional="true" /> + </xml> + <xml name="read_group_lb_conditional"> + <conditional name="read_group_lb_conditional"> + <expand macro="read_group_auto_name_conditional"> + <expand macro="read_group_lb_param" /> + </expand> + </conditional> + </xml> + <xml name="read_group_lb_required_param"> + <param name="LB" type="text" label="Library name (LB)" optional="false"> + <validator type="empty_field" /> + </param> + </xml> + <xml name="read_group_lb_required_conditional"> + <conditional name="read_group_lb_conditional"> + <expand macro="read_group_auto_name_conditional"> + <expand macro="read_group_lb_required_param" /> + </expand> + </conditional> + </xml> + <xml name="read_group_cn_param"> + <param name="CN" type="text" label="Sequencing center that produced the read (CN)" /> + </xml> + <xml name="read_group_ds_param"> + <param name="DS" type="text" label="Description (DS)" /> + </xml> + <xml name="read_group_dt_param"> + <param name="DT" type="text" label="Date that run was produced (DT)" help="ISO8601 format date or date/time, like YYYY-MM-DD" /> + </xml> + <xml name="read_group_fo_param"> + <param name="FO" type="text" optional="true" label="Flow order (FO)" help="The array of nucleotide bases that correspond to the nucleotides used for each flow of each read. Multi-base flows are encoded in IUPAC format, and non-nucleotide flows by various other characters. Format: /\*|[ACMGRSVTWYHKDBN]+/"> + <validator type="regex" message="Invalid flow order">\*|[ACMGRSVTWYHKDBN]+$</validator> + </param> + </xml> + <xml name="read_group_ks_param"> + <param name="KS" type="text" label="The array of nucleotide bases that correspond to the key sequence of each read (KS)" /> + </xml> + <xml name="read_group_pg_param"> + <param name="PG" type="text" label="Programs used for processing the read group (PG)" /> + </xml> + <xml name="read_group_pi_param"> + <param name="PI" type="integer" optional="true" label="Predicted median insert size (PI)" /> + </xml> + <xml name="read_group_pu_param"> + <param name="PU" type="text" label="Platform unit (PU)" help="Unique identifier (e.g. flowcell-barcode.lane for Illumina or slide for SOLiD)" optional="True" /> + </xml> + <xml name="read_group_pu_required_param"> + <param name="PU" type="text" label="Platform unit (PU)" help="Unique identifier (e.g. flowcell-barcode.lane for Illumina or slide for SOLiD)" optional="False" /> + </xml> + <!-- Only ID is required - all groups available --> + <xml name="read_group_inputs_spec"> + <expand macro="read_group_id_conditional" /> + <expand macro="read_group_sm_conditional" /> + <expand macro="read_group_pl_param" /> + <expand macro="read_group_lb_conditional" /> + <expand macro="read_group_cn_param" /> + <expand macro="read_group_ds_param" /> + <expand macro="read_group_dt_param" /> + <expand macro="read_group_fo_param" /> + <expand macro="read_group_ks_param" /> + <expand macro="read_group_pg_param" /> + <expand macro="read_group_pi_param" /> + <expand macro="read_group_pu_param" /> + </xml> + <!-- ID, SM, LB, PU, PL all required - not ks, pg, or fo params. --> + <xml name="read_group_inputs_picard"> + <expand macro="read_group_id_conditional" /> + <expand macro="read_group_sm_required_conditional" /> + <expand macro="read_group_lb_required_conditional" /> + <expand macro="read_group_pl_param" /> + <expand macro="read_group_pu_required_param" /> + <expand macro="read_group_cn_param" /> + <expand macro="read_group_ds_param" /> + <expand macro="read_group_pi_param" /> + <expand macro="read_group_dt_param" /> + </xml> + <xml name="read_group_conditional"> + <conditional name="rg"> + <param name="rg_selector" type="select" label="Set read groups information?" help="Specifying read group information can greatly simplify your downstream analyses by allowing combining multiple datasets."> + <option value="set">Set read groups (SAM/BAM specification)</option> + <option value="set_picard">Set read groups (Picard style)</option> + <option value="set_id_auto">Automatically assign ID using name of history item(s)</option> + <option value="do_not_set" selected="True">Do not set</option> + </param> + <when value="set_picard"> + <expand macro="read_group_inputs_picard" /> + </when> + <when value="set"> + <expand macro="read_group_inputs_spec" /> + </when> + <when value="set_id_auto"> + </when> + <when value="do_not_set"> + </when> + </conditional> + </xml> + <xml name="paired_end_options"> + <conditional name="paired_options"> + <param name="paired_options_selector" type="select" label="Do you want to set paired-end options?" help="See "Alignment Options" section of Help below for information"> + <option value="no" selected="True">No</option> + <option value="yes">Yes</option> + </param> + <when value="yes"> + <param argument="-I" type="integer" value="0" min="0" label="Set the minimum fragment length for valid paired-end alignments" + help="E.g. if `-I 60` is specified and a paired-end alignment consists of two 20-bp alignments in the appropriate orientation with a 20-bp gap between them, that alignment is considered valid (as long as `-X` is also satisfied). A 19-bp gap would not be valid in that case. If trimming options `-3` or `-5` are also used, the `-I` constraint is applied with respect to the untrimmed mates. The larger the difference between `-I` and `-X`, the slower Bowtie 2 will run. This is because larger differences bewteen `-I` and `-X` require that Bowtie 2 scan a larger window to determine if a concordant alignment exists. For typical fragment length ranges (200 to 400 nucleotides), Bowtie 2 is very efficient. Default=0"/> + <param argument="-X" type="integer" value="500" min="0" label="Set the maximum fragment length for valid paired-end alignments" + help="E.g. if `-X 100` is specified and a paired-end alignment consists of two 20-bp alignments in the proper orientation with a 60-bp gap between them, that alignment is considered valid (as long as `-I` is also satisfied). A 61-bp gap would not be valid in that case. If trimming options `-3` or `-5` are also used, the `-X` constraint is applied with respect to the untrimmed mates, not the trimmed mates; Default=500"/> + <param name="fr_rf_ff" type="select" display="radio" label="Select the upstream/downstream mate orientations for a valid paired-end alignment against the forward reference strand" + help="--fr, --rf, or --ff; E.g., if `--fr` is specified and there is a candidate paired-end alignment where mate 1 appears upstream of the reverse complement of mate 2 and the fragment length constraints (`-I` and `-X`) are met, that alignment is valid. Also, if mate 2 appears upstream of the reverse complement of mate 1 and all other constraints are met, that too is valid. `--rf` likewise requires that an upstream mate1 be reverse-complemented and a downstream mate2 be forward-oriented. `--ff` requires both an upstream mate 1 and a downstream mate 2 to be forward-oriented; Default=--fr (appropriate for Illumina's Paired-end Sequencing Assay)"> + <option value="--fr" selected="True">--fr</option> + <option value="--rf">--rf</option> + <option value="--ff">--ff</option> + </param> + <param argument="--no-mixed" name="no_mixed" type="boolean" truevalue="--no-mixed" falsevalue="" checked="False" label="Disable no-mixed behavior" help="--no-mixed; By default, when `bowtie2` cannot find a concordant or discordant alignment for a pair, it then tries to find alignments for the individual mates; default=False"/> + <param argument="--no-discordant" name="no_discordant" type="boolean" truevalue="--no-discordant" falsevalue="" checked="False" label="Disable no-discordant behavior" help="--no-discordant; By default, `bowtie2` looks for discordant alignments if it cannot find any concordant alignments. A discordant alignment is an alignment where both mates align uniquely, but that does not satisfy the paired-end constraints (`--fr`/`--rf`/`--ff`, `-I`, `-X`); default=False"/> + <param argument="--dovetail" name="dovetail" type="boolean" truevalue="--dovetail" falsevalue="" checked="False" label="Allow mate dovetailing" help="--dovetail; If the mates `dovetail`, that is if one mate alignment extends past the beginning of the other such that the wrong mate begins upstream, consider that to be concordant. Default=False"/> + <param argument="--no-contain" name="no_contain" type="boolean" truevalue="--no-contain" falsevalue="" checked="False" label="Disallow one mate alignment to contain another" help="--no-contain; If one mate alignment contains the other, consider that to be non-concordant. Default=False"/> + <param argument="--no-overlap" name="no_overlap" type="boolean" truevalue="--no-overlap" falsevalue="" checked="False" label="Disallow mate alignments to overlap" help="--no-overlap; If one mate alignment overlaps the other at all, consider that to be non-concordant. Default=False"/> + </when> + <when value="no"> + <!-- do nothing --> + </when> + </conditional> + </xml> + <xml name="align_unalign"> + <param name="unaligned_file" type="boolean" truevalue="true" falsevalue="false" checked="False" label="Write unaligned reads (in fastq format) to separate file(s)" help="--un/--un-conc (possibly with -gz or -bz2); This triggers --un parameter for single reads and --un-conc for paired reads" /> + <param name="aligned_file" type="boolean" truevalue="true" falsevalue="false" checked="False" label="Write aligned reads (in fastq format) to separate file(s)" help="--al/--al-conc (possibly with -gz or -bz2); This triggers --al parameter for single reads and --al-conc for paired reads" /> + </xml> +</macros>
--- a/bowtie2_wrapper.xml Wed Apr 12 17:09:42 2017 -0400 +++ b/bowtie2_wrapper.xml Thu Jun 01 06:47:03 2017 -0400 @@ -1,10 +1,10 @@ -<tool id="bowtie2" name="Bowtie2" version="2.3.0.1" profile="17.01"> +<tool id="bowtie2" name="Bowtie2" version="2.3.2.1" profile="17.01"> <description>- map reads against reference genome</description> <macros> - <import>read_group_macros.xml</import> + <import>bowtie2_macros.xml</import> </macros> <requirements> - <requirement type="package" version="2.3.0">bowtie2</requirement> + <requirement type="package" version="2.3.2">bowtie2</requirement> <requirement type="package" version="1.3.1">samtools</requirement> </requirements> <version_command>bowtie2 --version</version_command> @@ -66,6 +66,18 @@ #set read2 = "input_r.fastq" #end if ln -s '${library.input_1.reverse}' ${read2} && + + #else if str($library.type) == 'paired_interleaved': + #if $library.input_1.is_of_type("fastq.gz", "fastqsanger.gz"): + #set read1 = "input_il.fastq.gz" + #set compressed = "GZ" + #else if $library.input_1.is_of_type("fastq.bz2", "fastqsanger.bz2"): + #set read1 = "input_il.fastq.bz2" + #set compressed = "BZ2" + #else: + #set read1 = "input_il.fastq" + #end if + ln -s '${library.input_1}' ${read1} && #else: #if $library.input_1.is_of_type("fastq.gz", "fastqsanger.gz"): #set read1 = "input_f.fastq.gz" @@ -110,6 +122,27 @@ --al '${output_aligned_reads_l}' #end if #end if + + #elif str( $library.type ) == "paired_interleaved": + --interleaved '${read1}' + #if str( $library.unaligned_file ) == "true": + #if $compressed == "GZ": + --un-gz '${output_unaligned_reads_l}' + #else if $compressed == "BZ2": + --un-bz2 '${output_unaligned_reads_l}' + #else: + --un '${output_unaligned_reads_l}' + #end if + #end if + #if str( $library.aligned_file ) == "true": + #if $compressed == "GZ": + --al-gz '${output_aligned_reads_l}' + #else if $compressed == "BZ2": + --al-bz2 '${output_aligned_reads_l}' + #else: + --al '${output_aligned_reads_l}' + #end if + #end if #else: -1 '${read1}' -2 '${read2}' @@ -273,69 +306,36 @@ <option value="single">Single-end</option> <option value="paired">Paired-end</option> <option value="paired_collection">Paired-end Dataset Collection</option> + <option value="paired_interleaved">Paired-end data from single interleaved dataset</option> </param> <when value="single"> <param name="input_1" format="fastqsanger,fastqsanger.gz,fastqsanger.bz2" type="data" label="FASTQ file" help="Must be of datatype "fastqsanger"" /> - <param name="unaligned_file" type="boolean" truevalue="true" falsevalue="false" checked="False" label="Write unaligned reads (in fastq format) to separate file(s)" help="--un/--un-conc (possibly with -gz or -bz2); This triggers --un parameter for single reads and --un-conc for paired reads" /> - <param name="aligned_file" type="boolean" truevalue="true" falsevalue="false" checked="False" label="Write aligned reads (in fastq format) to separate file(s)" help="--al/--al-conc (possibly with -gz or -bz2); This triggers --al parameter for single reads and --al-conc for paired reads" /> + + <expand macro="align_unalign" /> + </when> <when value="paired"> <param name="input_1" format="fastqsanger,fastqsanger.gz,fastqsanger.bz2" type="data" label="FASTQ file #1" help="Must be of datatype "fastqsanger"" /> <param name="input_2" format="fastqsanger,fastqsanger.gz,fastqsanger.bz2" type="data" label="FASTQ file #2" help="Must be of datatype "fastqsanger"" /> - <param name="unaligned_file" type="boolean" truevalue="true" falsevalue="false" checked="False" label="Write unaligned reads (in fastq format) to separate file(s)" help="--un/--un-conc (possibly with -gz or -bz2); This triggers --un parameter for single reads and --un-conc for paired reads" /> - <param name="aligned_file" type="boolean" truevalue="true" falsevalue="false" checked="False" label="Write aligned reads (in fastq format) to separate file(s)" help="--al/--al-conc (possibly with -gz or -bz2); This triggers --al parameter for single reads and --al-conc for paired reads" /> - <conditional name="paired_options"> - <param name="paired_options_selector" type="select" label="Do you want to set paired-end options?" help="See "Alignment Options" section of Help below for information"> - <option value="no" selected="True">No</option> - <option value="yes">Yes</option> - </param> - <when value="yes"> - <param name="I" type="integer" value="0" min="0" label="Set the minimum fragment length for valid paired-end alignments" help="-I/--minins; E.g. if `-I 60` is specified and a paired-end alignment consists of two 20-bp alignments in the appropriate orientation with a 20-bp gap between them, that alignment is considered valid (as long as `-X` is also satisfied). A 19-bp gap would not be valid in that case. If trimming options `-3` or `-5` are also used, the `-I` constraint is applied with respect to the untrimmed mates. The larger the difference between `-I` and `-X`, the slower Bowtie 2 will run. This is because larger differences bewteen `-I` and `-X` require that Bowtie 2 scan a larger window to determine if a concordant alignment exists. For typical fragment length ranges (200 to 400 nucleotides), Bowtie 2 is very efficient. Default=0"/> - <param name="X" type="integer" value="500" min="0" label="Set the maximum fragment length for valid paired-end alignments" help="-X/--maxins; E.g. if `-X 100` is specified and a paired-end alignment consists of two 20-bp alignments in the proper orientation with a 60-bp gap between them, that alignment is considered valid (as long as `-I` is also satisfied). A 61-bp gap would not be valid in that case. If trimming options `-3` or `-5` are also used, the `-X` constraint is applied with respect to the untrimmed mates, not the trimmed mates; Default=500"/> - <param name="fr_rf_ff" type="select" display="radio" label="Select the upstream/downstream mate orientations for a valid paired-end alignment against the forward reference strand" help="--fr, --rf, or --ff; E.g., if `--fr` is specified and there is a candidate paired-end alignment where mate 1 appears upstream of the reverse complement of mate 2 and the fragment length constraints (`-I` and `-X`) are met, that alignment is valid. Also, if mate 2 appears upstream of the reverse complement of mate 1 and all other constraints are met, that too is valid. `--rf` likewise requires that an upstream mate1 be reverse-complemented and a downstream mate2 be forward-oriented. `--ff` requires both an upstream mate 1 and a downstream mate 2 to be forward-oriented; Default=--fr (appropriate for Illumina's Paired-end Sequencing Assay)"> - <option value="--fr" selected="True">--fr</option> - <option value="--rf">--rf</option> - <option value="--ff">--ff</option> - </param> - <param name="no_mixed" type="boolean" truevalue="--no-mixed" falsevalue="" checked="False" label="Disable no-mixed behavior" help="--no-mixed; By default, when `bowtie2` cannot find a concordant or discordant alignment for a pair, it then tries to find alignments for the individual mates; default=False"/> - <param name="no_discordant" type="boolean" truevalue="--no-discordant" falsevalue="" checked="False" label="Disable no-discordant behavior" help="--no-discordant; By default, `bowtie2` looks for discordant alignments if it cannot find any concordant alignments. A discordant alignment is an alignment where both mates align uniquely, but that does not satisfy the paired-end constraints (`--fr`/`--rf`/`--ff`, `-I`, `-X`); default=False"/> - <param name="dovetail" type="boolean" truevalue="--dovetail" falsevalue="" checked="False" label="Allow mate dovetailing" help="--dovetail; If the mates `dovetail`, that is if one mate alignment extends past the beginning of the other such that the wrong mate begins upstream, consider that to be concordant. Default=False"/> - <param name="no_contain" type="boolean" truevalue="--no-contain" falsevalue="" checked="False" label="Disallow one mate alignment to contain another" help="--no-contain; If one mate alignment contains the other, consider that to be non-concordant. Default=False"/> - <param name="no_overlap" type="boolean" truevalue="--no-overlap" falsevalue="" checked="False" label="Disallow mate alignments to overlap" help="--no-overlap; If one mate alignment overlaps the other at all, consider that to be non-concordant. Default=False"/> - </when> - <when value="no"> - <!-- do nothing --> - </when> - </conditional> + + <expand macro="align_unalign" /> + <expand macro="paired_end_options" /> + </when> <when value="paired_collection"> <param name="input_1" format="fastqsanger,fastqsanger.gz,fastqsanger.bz2" type="data_collection" collection_type="paired" label="FASTQ Paired Dataset" help="Must be of datatype "fastqsanger"" /> - <param name="unaligned_file" type="boolean" truevalue="true" falsevalue="false" checked="False" label="Write unaligned reads (in fastq format) to separate file(s)" help="--un/--un-conc (possibly with -gz or -bz2); This triggers --un parameter for single reads and --un-conc for paired reads" /> - <param name="aligned_file" type="boolean" truevalue="true" falsevalue="false" checked="False" label="Write aligned reads (in fastq format) to separate file(s)" help="--al/--al-conc (possibly with -gz or -bz2); This triggers --al parameter for single reads and --al-conc for paired reads" /> - <conditional name="paired_options"> - <param name="paired_options_selector" type="select" label="Do you want to set paired-end options?" help="See "Alignment Options" section of Help below for information"> - <option value="no" selected="True">No</option> - <option value="yes">Yes</option> - </param> - <when value="yes"> - <param name="I" type="integer" value="0" min="0" label="Set the minimum fragment length for valid paired-end alignments" help="-I/--minins; E.g. if `-I 60` is specified and a paired-end alignment consists of two 20-bp alignments in the appropriate orientation with a 20-bp gap between them, that alignment is considered valid (as long as `-X` is also satisfied). A 19-bp gap would not be valid in that case. If trimming options `-3` or `-5` are also used, the `-I` constraint is applied with respect to the untrimmed mates. The larger the difference between `-I` and `-X`, the slower Bowtie 2 will run. This is because larger differences bewteen `-I` and `-X` require that Bowtie 2 scan a larger window to determine if a concordant alignment exists. For typical fragment length ranges (200 to 400 nucleotides), Bowtie 2 is very efficient. Default=0"/> - <param name="X" type="integer" value="500" min="0" label="Set the maximum fragment length for valid paired-end alignments" help="-X/--maxins; E.g. if `-X 100` is specified and a paired-end alignment consists of two 20-bp alignments in the proper orientation with a 60-bp gap between them, that alignment is considered valid (as long as `-I` is also satisfied). A 61-bp gap would not be valid in that case. If trimming options `-3` or `-5` are also used, the `-X` constraint is applied with respect to the untrimmed mates, not the trimmed mates; Default=500"/> - <param name="fr_rf_ff" type="select" display="radio" label="Select the upstream/downstream mate orientations for a valid paired-end alignment against the forward reference strand" help="--fr, --rf, or --ff; E.g., if `--fr` is specified and there is a candidate paired-end alignment where mate 1 appears upstream of the reverse complement of mate 2 and the fragment length constraints (`-I` and `-X`) are met, that alignment is valid. Also, if mate 2 appears upstream of the reverse complement of mate 1 and all other constraints are met, that too is valid. `--rf` likewise requires that an upstream mate1 be reverse-complemented and a downstream mate2 be forward-oriented. `--ff` requires both an upstream mate 1 and a downstream mate 2 to be forward-oriented; Default=--fr (appropriate for Illumina's Paired-end Sequencing Assay)"> - <option value="--fr" selected="True">--fr</option> - <option value="--rf">--rf</option> - <option value="--ff">--ff</option> - </param> - <param name="no_mixed" type="boolean" truevalue="--no-mixed" falsevalue="" checked="False" label="Disable no-mixed behavior" help="--no-mixed; By default, when `bowtie2` cannot find a concordant or discordant alignment for a pair, it then tries to find alignments for the individual mates; default=False"/> - <param name="no_discordant" type="boolean" truevalue="--no-discordant" falsevalue="" checked="False" label="Disable no-discordant behavior" help="--no-discordant; By default, `bowtie2` looks for discordant alignments if it cannot find any concordant alignments. A discordant alignment is an alignment where both mates align uniquely, but that does not satisfy the paired-end constraints (`--fr`/`--rf`/`--ff`, `-I`, `-X`); default=False"/> - <param name="dovetail" type="boolean" truevalue="--dovetail" falsevalue="" checked="False" label="Allow mate dovetailing" help="--dovetail; If the mates `dovetail`, that is if one mate alignment extends past the beginning of the other such that the wrong mate begins upstream, consider that to be concordant. Default=False"/> - <param name="no_contain" type="boolean" truevalue="--no-contain" falsevalue="" checked="False" label="Disallow one mate alignment to contain another" help="--no-contain; If one mate alignment contains the other, consider that to be non-concordant. Default=False"/> - <param name="no_overlap" type="boolean" truevalue="--no-overlap" falsevalue="" checked="False" label="Disallow mate alignments to overlap" help="--no-overlap; If one mate alignment overlaps the other at all, consider that to be non-concordant. Default=False"/> - </when> - <when value="no"> - <!-- do nothing --> - </when> - </conditional> + + <expand macro="align_unalign" /> + <expand macro="paired_end_options" /> + + </when> + <when value="paired_interleaved"> + <param name="input_1" format="fastqsanger,fastqsanger.gz,fastqsanger.bz2" type="data" label="Interleaved FASTQ file" help="Must be of datatype "fastqsanger". --interleaved"/> + + <expand macro="align_unalign" /> + <expand macro="paired_end_options" /> + </when> </conditional> @@ -648,7 +648,6 @@ <test> <!-- basic test on single paired default run --> <param name="type" value="paired"/> - <param name="selection" value="no"/> <param name="paired_options_selector" value="no"/> <param name="unaligned_file" value="false"/> <param name="analysis_type_selector" value="simple"/> @@ -661,7 +660,6 @@ <test> <!-- basic test on single paired default run --> <param name="type" value="paired"/> - <param name="selection" value="no"/> <param name="paired_options_selector" value="no"/> <param name="unaligned_file" value="false"/> <param name="analysis_type_selector" value="simple"/> @@ -677,7 +675,6 @@ <test> <!-- basic test on single paired default run with stats--> <param name="type" value="paired"/> - <param name="selection" value="no"/> <param name="paired_options_selector" value="no"/> <param name="unaligned_file" value="false"/> <param name="analysis_type_selector" value="simple"/> @@ -687,12 +684,29 @@ <param name="own_file" value="bowtie2-ref.fasta" /> <param name="save_mapping_stats" value="true" /> <output name="output" file="bowtie2-test1.bam" ftype="bam" lines_diff="2"/> - <output name="mapping_stats" file="bowtie2-stats.out" ftype="txt"/> + <output name="mapping_stats"> + <assert_contents> + <has_text text="of these" /> + </assert_contents> + </output> + </test> + <test> + <!-- basic test on interleaved paired default run --> + <param name="type" value="paired_interleaved"/> + <!-- <param name="paired_options_selector" value="no"/> --> + <param name="unaligned_file" value="false"/> + <param name="analysis_type_selector" value="simple"/> + <param name="rg_selector" value="set"/> + <param name="ID" value="rg1"/> + <param name="PL" value="CAPILLARY"/> + <param name="source" value="history" /> + <param name="input_1" value="bowtie2-fq_il.fq" ftype="fastqsanger"/> + <param name="own_file" value="bowtie2-ref.fasta" /> + <output name="output" file="bowtie2-test_il.bam" ftype="bam" lines_diff="2"/> </test> <test> <!-- test fastqsanger.gz input --> <param name="type" value="paired"/> - <param name="selection" value="no"/> <param name="paired_options_selector" value="no"/> <param name="unaligned_file" value="false"/> <param name="analysis_type_selector" value="simple"/> @@ -705,7 +719,6 @@ <test> <!-- test fastqsanger.bz2 input --> <param name="type" value="paired"/> - <param name="selection" value="no"/> <param name="paired_options_selector" value="no"/> <param name="unaligned_file" value="false"/> <param name="analysis_type_selector" value="simple"/> @@ -754,12 +767,15 @@ **Inputs** -Bowtie 2 accepts files in Sanger FASTQ format (single or pair-end). Use the FASTQ Groomer to prepare your files. +Bowtie 2 accepts files in Sanger FASTQ format (single or paired-end). Paired-end data can represented as two individual (forward and reverse) datasets, as well as a single interleaved dataset (see an example at the end of the help section). ------ **Input options**:: + --interleaved + Reads interleaved FASTQ files where the first two records (8 lines) represent a mate pair. + -s/--skip <int> Skip (i.e. do not align) the first `<int>` reads or pairs in the input. @@ -1137,6 +1153,57 @@ but might be more appropriate in situations where the input consists of many identical reads. +----- + + +**Paired-end (and mate-pair) data in fastq format** + +Paired end datasets can be represented as two individual datasets: + +First dataset:: + + @1/1 + AGGGATGTGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTA + + + EGGEGGGDFGEEEAEECGDEGGFEEGEFGBEEDDECFEFDD@CDD<ED + @2/1 + AGGGATGTGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTA + + + HHHHHHEGFHEEFEEHEEHHGGEGGGGEFGFGGGGHHHHFBEEEEEFG + +Second dataset:: + + @1/2 + CCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAAC + + + GHHHDFDFGFGEGFBGEGGEGEGGGHGFGHFHFHHHHHHHEF?EFEFF + @2/2 + CCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAAC + + + HHHHHHHHHHHHHGHHHHHHGHHHHHHHHHHHFHHHFHHHHHHHHHHH + +Or a single *interleaved* dataset:: + + @1/1 + AGGGATGTGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTA + + + EGGEGGGDFGEEEAEECGDEGGFEEGEFGBEEDDECFEFDD@CDD<ED + @1/2 + CCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAAC + + + GHHHDFDFGFGEGFBGEGGEGEGGGHGFGHFHFHHHHHHHEF?EFEFF + @2/1 + AGGGATGTGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTA + + + HHHHHHEGFHEEFEEHEEHHGGEGGGGEFGFGGGGHHHHFBEEEEEFG + @2/2 + CCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAAC + + + HHHHHHHHHHHHHGHHHHHHGHHHHHHHHHHHFHHHFHHHHHHHHHHH + + + + ]]></help> <citations> <citation type="doi">10.1186/gb-2009-10-3-r25</citation>
--- a/read_group_macros.xml Wed Apr 12 17:09:42 2017 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,294 +0,0 @@ -<macros> - <!-- Import this at the top of your command block and then - define rg_auto_name. --> - <token name="@define_read_group_helpers@"> -#def identifier_or_name($input1) - #if hasattr($input1, 'element_identifier') - #return $input1.element_identifier - #else - #return $input1.name.rstrip('.gz').rstrip('.fastq').rstrip('.fq') - #end if -#end def - -#def clean(name) - #import re - #set $name_clean = re.sub('[^\w\-_\.]', '_', $name) - #return $name_clean -#end def - -#def read_group_name_default($input1, $input2=None) - #if $input2 is None - #return $clean($identifier_or_name($input1)) - #else - #import itertools - #set $input_name1 = $clean($identifier_or_name($input1)) - #set $input_name2 = $clean($identifier_or_name($input2)) - #set $common_prefix = ''.join([c[0] for c in itertools.takewhile(lambda x: all(x[0] == y for y in x), itertools.izip(*[$input_name1, $input_name2]))]) - #if len($common_prefix) > 3 - #return $common_prefix - #else - #return $input_name1 - #end if - #end if -#end def - -#def format_read_group(prefix, value, quote='', arg='') - #if $value - #return $arg + $quote + $prefix + $value + $quote - #else - #return '' - #end if -#end def - -#def rg_param(name) - #if $varExists("rg") - #return $rg.get($name, None) - #else - #return $getVar($name, None) - #end if -#end def - -#set $use_rg = True - </token> - <!-- preconditions use_rg and rg_auto_name have been - defined. - --> - <token name="@set_read_group_vars@"> -#if $use_rg - #if $rg_param('read_group_id_conditional') is None - #set $rg_id = $rg_auto_name - #elif $rg_param('read_group_id_conditional').do_auto_name - #set $rg_id = $rg_auto_name - #else - #set $rg_id = str($rg_param('read_group_id_conditional').ID) - #end if - - #if $rg_param('read_group_sm_conditional') is None - #set $rg_sm = '' - #elif $rg_param('read_group_sm_conditional').do_auto_name - #set $rg_sm = $rg_auto_name - #else - #set $rg_sm = str($rg_param('read_group_sm_conditional').SM) - #end if - - #if $rg_param('PL') - #set $rg_pl = str($rg_param('PL')) - #else - #set $rg_pl = '' - #end if - - #if $rg_param('read_group_lb_conditional') is None - #set $rg_lb = '' - #elif $rg_param('read_group_lb_conditional').do_auto_name - #set $rg_lb = $rg_auto_name - #else - #set $rg_lb = str($rg_param('read_group_lb_conditional').LB) - #end if - - #if $rg_param('CN') - #set $rg_cn = str($rg_param('CN')) - #else - #set $rg_cn = '' - #end if - - #if $rg_param("DS") - #set $rg_ds = str($rg_param("DS")) - #else - #set $rg_ds = '' - #end if - - #if $rg_param("DT") - #set $rg_dt = str($rg_param("DT")) - #else - #set $rg_dt = '' - #end if - - #if $rg_param("FO") - #set $rg_fo = str($rg_param("FO")) - #else - #set $rg_fo = '' - #end if - - #if $rg_param("KS") - #set $rg_ks = str($rg_param("KS")) - #else - #set $rg_ks = '' - #end if - - #if $rg_param("PG") - #set $rg_pg = str($rg_param("PG")) - #else - #set $rg_pg = '' - #end if - - #if $rg_param("PI") != None - #set $rg_pi = str($rg_param("PI")) - #else - #set $rg_pi = '' - #end if - - #if $rg_param("PU") - #set $rg_pu = str($rg_param("PU")) - #else - #set $rg_pu = '' - #end if -#end if - </token> - <token name="@set_use_rg_var@"> -#set $use_rg = str($rg.rg_selector) != "do_not_set" - </token> - <xml name="read_group_auto_name_conditional"> - <param name="do_auto_name" type="boolean" label="Auto-assign" help="Use dataset name or collection information to automatically assign this value" checked="no" /> - <when value="true"> - </when> - <when value="false"> - <yield /> - </when> - </xml> - <xml name="read_group_id_param"> - <param name="ID" type="text" value="" label="Read group identifier (ID)" help="This value must be unique among multiple samples in your experiment" optional="false"> - <validator type="empty_field" /> - </param> - </xml> - <xml name="read_group_id_conditional"> - <conditional name="read_group_id_conditional"> - <expand macro="read_group_auto_name_conditional"> - <expand macro="read_group_id_param" /> - </expand> - </conditional> - </xml> - <xml name="read_group_sm_param"> - <param name="SM" type="text" value="" label="Read group sample name (SM)" help="This value should be descriptive. Use pool name where a pool is being sequenced" /> - </xml> - <xml name="read_group_sm_conditional"> - <conditional name="read_group_sm_conditional"> - <expand macro="read_group_auto_name_conditional"> - <expand macro="read_group_sm_param" /> - </expand> - </conditional> - </xml> - <!-- Above SM param is optional (for SAM/BAM spec, this is required - as per Picard. - --> - <xml name="read_group_sm_param_required"> - <param name="SM" type="text" value="" label="Read group sample name (SM)" optional="false" help="This value should be descriptive. Use pool name where a pool is being sequenced"> - <validator type="empty_field" /> - </param> - </xml> - <xml name="read_group_sm_required_conditional"> - <conditional name="read_group_sm_conditional"> - <expand macro="read_group_auto_name_conditional"> - <expand macro="read_group_sm_param" /> - </expand> - </conditional> - </xml> - <xml name="read_group_pl_param"> - <param name="PL" type="select" label="Platform/technology used to produce the reads (PL)"> - <option value="CAPILLARY">CAPILLARY</option> - <option value="LS454">LS454</option> - <option selected="True" value="ILLUMINA">ILLUMINA</option> - <option value="SOLID">SOLID</option> - <option value="HELICOS">HELICOS</option> - <option value="IONTORRENT">IONTORRENT</option> - <option value="PACBIO">PACBIO</option> - </param> - </xml> - <xml name="read_group_lb_param"> - <param name="LB" type="text" label="Library name (LB)" optional="true" /> - </xml> - <xml name="read_group_lb_conditional"> - <conditional name="read_group_lb_conditional"> - <expand macro="read_group_auto_name_conditional"> - <expand macro="read_group_lb_param" /> - </expand> - </conditional> - </xml> - <xml name="read_group_lb_required_param"> - <param name="LB" type="text" label="Library name (LB)" optional="false"> - <validator type="empty_field" /> - </param> - </xml> - <xml name="read_group_lb_required_conditional"> - <conditional name="read_group_lb_conditional"> - <expand macro="read_group_auto_name_conditional"> - <expand macro="read_group_lb_required_param" /> - </expand> - </conditional> - </xml> - <xml name="read_group_cn_param"> - <param name="CN" type="text" label="Sequencing center that produced the read (CN)" /> - </xml> - <xml name="read_group_ds_param"> - <param name="DS" type="text" label="Description (DS)" /> - </xml> - <xml name="read_group_dt_param"> - <param name="DT" type="text" label="Date that run was produced (DT)" help="ISO8601 format date or date/time, like YYYY-MM-DD" /> - </xml> - <xml name="read_group_fo_param"> - <param name="FO" type="text" optional="true" label="Flow order (FO)" help="The array of nucleotide bases that correspond to the nucleotides used for each flow of each read. Multi-base flows are encoded in IUPAC format, and non-nucleotide flows by various other characters. Format: /\*|[ACMGRSVTWYHKDBN]+/"> - <validator type="regex" message="Invalid flow order">\*|[ACMGRSVTWYHKDBN]+$</validator> - </param> - </xml> - <xml name="read_group_ks_param"> - <param name="KS" type="text" label="The array of nucleotide bases that correspond to the key sequence of each read (KS)" /> - </xml> - <xml name="read_group_pg_param"> - <param name="PG" type="text" label="Programs used for processing the read group (PG)" /> - </xml> - <xml name="read_group_pi_param"> - <param name="PI" type="integer" optional="true" label="Predicted median insert size (PI)" /> - </xml> - <xml name="read_group_pu_param"> - <param name="PU" type="text" label="Platform unit (PU)" help="Unique identifier (e.g. flowcell-barcode.lane for Illumina or slide for SOLiD)" optional="True" /> - </xml> - <xml name="read_group_pu_required_param"> - <param name="PU" type="text" label="Platform unit (PU)" help="Unique identifier (e.g. flowcell-barcode.lane for Illumina or slide for SOLiD)" optional="False" /> - </xml> - <!-- Only ID is required - all groups available --> - <xml name="read_group_inputs_spec"> - <expand macro="read_group_id_conditional" /> - <expand macro="read_group_sm_conditional" /> - <expand macro="read_group_pl_param" /> - <expand macro="read_group_lb_conditional" /> - <expand macro="read_group_cn_param" /> - <expand macro="read_group_ds_param" /> - <expand macro="read_group_dt_param" /> - <expand macro="read_group_fo_param" /> - <expand macro="read_group_ks_param" /> - <expand macro="read_group_pg_param" /> - <expand macro="read_group_pi_param" /> - <expand macro="read_group_pu_param" /> - </xml> - <!-- ID, SM, LB, PU, PL all required - not ks, pg, or fo params. --> - <xml name="read_group_inputs_picard"> - <expand macro="read_group_id_conditional" /> - <expand macro="read_group_sm_required_conditional" /> - <expand macro="read_group_lb_required_conditional" /> - <expand macro="read_group_pl_param" /> - <expand macro="read_group_pu_required_param" /> - <expand macro="read_group_cn_param" /> - <expand macro="read_group_ds_param" /> - <expand macro="read_group_pi_param" /> - <expand macro="read_group_dt_param" /> - </xml> - <xml name="read_group_conditional"> - <conditional name="rg"> - <param name="rg_selector" type="select" label="Set read groups information?" help="Specifying read group information can greatly simplify your downstream analyses by allowing combining multiple datasets."> - <option value="set">Set read groups (SAM/BAM specification)</option> - <option value="set_picard">Set read groups (Picard style)</option> - <option value="set_id_auto">Automatically assign ID</option> - <option value="do_not_set" selected="True">Do not set</option> - </param> - <when value="set_picard"> - <expand macro="read_group_inputs_picard" /> - </when> - <when value="set"> - <expand macro="read_group_inputs_spec" /> - </when> - <when value="set_id_auto"> - </when> - <when value="do_not_set"> - </when> - </conditional> - </xml> -</macros>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/bowtie2-fq_il.fq Thu Jun 01 06:47:03 2017 -0400 @@ -0,0 +1,24 @@ +@M01368:8:000000000-A3GHV:1:1101:6911:8255/1 +ATCTGGTTCCTACTTCAGGGCCATAAAACCTAAATAGCCCACACGTTCCCCTTAAATAAGACATCACGATGGATCACAGGTCTATCACCCTATTAACCACTCACGGGAGCTCTCCATGCATTTGGTATTTTCGTCTGGGGGGTGTGCACGCGATAGCATTGCGAGACGCTGGAGCCGGAGCACCCTATGTCGCAGTATCTGTCTTTGATTCCTGCCTCATCCTATTATTTATCGCACCTACGTTCAATATT ++ +BCCCCFFFFFFFGGGGGGGGGGGHHHHGHGHHHHHHHHHGGGGGGHHHHGHHHHHHHHHHGHHHHHHGGHGGHHHGHHHHFHHGHHHHHHHHHGHEHEFFGHHEGGCEFGGFHHHBGHHGHHHHGHFHHHGHGHGHGGCDFDDACGGGGGGGAAFFFFFFFFFBAFFFFFB;FFFFFFADDFFFFFFFFFFEFFFFFFFFFFBFFFFFFFFFFFFFFEFFFFFFFFBFEFFFFEFE;DFFFDFBFF/9BFB +@M01368:8:000000000-A3GHV:1:1101:6911:8255/2 +TCGCCTTACCGCTACTCACCCACGGCGGCCATCAGCCGATACTAAGTTTGGGGTATGGTGGGGGGGATAATGAATTAGGTTGTGGGGGAGGGTTTGTGGTTGAGAGAAACACAAAAAACAATCTTATATATGGGTAGTCGTTTTGTATTGGTTTTTTGTTTTGTTTGTGTTTTGAGTGTCGGTTTAGTTCGGTGTACTAGGGGGGGTGGATGGGGTCGGCTGGTGAGGGGGTCTTAGTGTATTGAGTGTGG ++ +1>11111@11111A111A100000000////011110//>>/12@1@22B/////1@>21/>>/-----9/;////9////--;-;-;-----;--------9/-/-///9-;-------9//////9/////-//-/9-;-;9--/////99-;--9-:-;----/---/-----////---9-/////--;A-//////---------9/-----;-----/-/-----;--;//////////9;///- +@M01368:8:000000000-A3GHV:1:1101:14518:9998/1 +GTTATTATTATGTCCTACAAGCATTAATTAATTAACACACTTTAGTAAGTATGTTCGCCTGTAATATTGAACGTAGGTGCGATAAATAATAGGATGAGGCAGGAATCAAAGACAGATACTGCGACATAGGGTGCTCCGGCTCCAGCGTCTCGCAATGCTATCGCGTGCACACCCCCCAGACGAAAATACCAAATGCATGGAGAGCTCCCGTGAGTGGTTAATAGGGGGATAGACCTGTGATCCATCGTGAT ++ +AAAAAFFFFFFFGGGGGGGGGGHGGHHHHGHHHHHHHGCGHHHHHHHHHHHHHHHGGGGGHHHHHHHHHGHHGFHFE5BGEEHFGGGHHHHHHHHFBHHGGGGFHGHHFGHHHHGHHHHHHGEGGGGFHFHGEGHHGGCDGDGHGGGDGGHGGCGGGHGHHH/ACDG?.1FGCDCCGCA.CC@CDCHFHGFFGGGEBFGAB//CEFBFGG.:;D;;A0AFFFFFB..:@ABFF//;BFFFFFBF/9D:A// +@M01368:8:000000000-A3GHV:1:1101:14518:9998/2 +CATCACGATGGATCACAGGTCTATCACCCTATTAACCACTCACGGGAGCTCTCCATGCATTTGGTATTTTCGTCTGGGGGGTGTGCACGCGATAGCATTGCGAGACGCTGGAGCCGGAGCACCCTATGTCGCAGTATCTGTCTTTGATTCCTGCCTCATCCTATTATTTATCGCACCTACGTTCAATATTACAGGCGAACATACTTACTAAAGTGTGTTAATTAATTAATGCTTGTAGGACATAATAATAA ++ +CCCCCFCCCCCFGGGGGGGGGGHHHHHHHHHHHHHHHHGFHHHHGGGGGHGFHHHHHHHHHHHHHHHHHHHGHGGEHGGGGCGGGHHGGCGGGGGHHGHHHGGGGGGGG.BFFFGAGADFGAFDGFGGCFFF;DDFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFBFFFFFFFFFFFFFFFFFFF09FFFE00;BE@;DABBFFFFFBBFB00;F:9;FFBFFF9BFFFFFFFFFFFFF90/::BFFFBF0 +@M01368:8:000000000-A3GHV:1:1101:18422:19051/1 +GTATCCGACATCTGGTTCCTACTTCAGGGTCATAAAACCTAAATAGCCCACACGTTCCCCTTAAATAAGACATCACGATGGATCACAGGTCTATCACCCTATTAACCACTCACGGGAGCTCTCCATGCATTTGGTATTTTCGTCTGGGGGGTGTGCACGCGATAGCATTGCGAGACGCTGGAGCCGGAGCACCCTATGTCGCAGTATCTGTCTTTGATTCCTGCCTCATCCTATTATTTATCGCACCTACG ++ +CCCCCFDDDDDFGGGGGGGGGGHHHHHHHHHHHHHHHHGHHHHHHFHHHHGGGGHHHHHHHHHGHHHHHHHHHHHHGGHGGHHHHHHHHHHHHHHHHHHHHHHHHHHHGHHHHHGCGGGHHHHHHHHHHHHHHHHHHHHHHGFDHGFHCFGGGGFGGFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;FFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBFFFFFFFFFF:FFF. +@M01368:8:000000000-A3GHV:1:1101:18422:19051/2 +CTACAAGCATTAATTAATTAACACACTTTAGTAAGTATGTTCGCCTGTAATATTGAACGTAGGTGCGATAAATAATAGGATGAGGCAGGAATCAAAGACAGATACTGCGACATAGGGTGCTCCGGCTCCAGCGTCTCGCAATGCTATCGCGTGCACACCCCCCAGACGAAAATACCAAATGCATGGAGAGCTCCCGTGAGTGGTTAATAGGGGGATAGACCTGTGATCCATCGTGATGTCTTATTTAAGGG ++ +BCCCCFFCFFFFGGGGGGGGGGHHHGHHHHHHHHHHHHHHHHGGGGHHHHHHHHEHHHHHHHGGHHGGHGGHHHHHHHGHGGHHHGGGGGHGHHHHGGGHFHFHHHHHGGGGGHBFFCGDHHHGGGGGGHGGGGGGHHGCGGGFGHHBGGGGGFFFHEGGGGGCDCCE@EFGHHHHFHEGHGFFHHGB;ECBFGGGEFEFFGF0AFGFGFFG.;;DFFFFFFFFFF090BFFFE?FEFBBFBFFFB990BF \ No newline at end of file
--- a/test-data/bowtie2-stats.out Wed Apr 12 17:09:42 2017 -0400 +++ b/test-data/bowtie2-stats.out Thu Jun 01 06:47:03 2017 -0400 @@ -1,3 +1,5 @@ +bowtie2-align-s(30685,0x7fffceb5b3c0) malloc: *** malloc_zone_unregister() failed for 0x7fffceb51000 +bowtie2-align-s(30686,0x7fffceb5b3c0) malloc: *** malloc_zone_unregister() failed for 0x7fffceb51000 100 reads; of these: 100 (100.00%) were paired; of these: 97 (97.00%) aligned concordantly 0 times