changeset 5:b69e898b8109 draft

planemo upload for repository https://github.com/phac-nml/quasitools commit e30c0687f755a46c5b3bd265a1478a1abf5dc9f1
author nml
date Fri, 24 Aug 2018 16:50:28 -0400
parents 8cdffc02d2e2
children 9fb9fed71486
files aacoverage.xml callaavar.xml callcodonvar.xml callntvar.xml consensus.xml distance.xml dnds.xml drmutations.xml hydra.xml quality.xml
diffstat 10 files changed, 276 insertions(+), 68 deletions(-) [+]
line wrap: on
line diff
--- a/aacoverage.xml	Wed Apr 25 10:38:00 2018 -0400
+++ b/aacoverage.xml	Fri Aug 24 16:50:28 2018 -0400
@@ -1,7 +1,7 @@
-<tool id="aacoverage" name="Amino Acid Coverage" version="0.1.0">
+<tool id="aacoverage" name="Amino Acid Coverage" version="0.4.2">
     <description>Builds an aa census and returns its coverage</description>
     <requirements>
-          <requirement type="package" version="0.3.1">quasitools</requirement>
+          <requirement type="package" version="0.4.2">quasitools</requirement>
     </requirements>
     <command detect_errors="exit_code"><![CDATA[
 
--- a/callaavar.xml	Wed Apr 25 10:38:00 2018 -0400
+++ b/callaavar.xml	Fri Aug 24 16:50:28 2018 -0400
@@ -1,15 +1,15 @@
-<tool id="aavariants" name="Amino Acid Variants" version="0.1.0">
+<tool id="aavariants" name="Amino Acid Variants" version="0.4.2">
     <description>Identifies amino acid mutations</description>
     <requirements>
-        <requirement type="package" version="0.3.1">quasitools</requirement>
+        <requirement type="package" version="0.4.2">quasitools</requirement>
     </requirements>
     <command detect_errors="exit_code"><![CDATA[
 
         ln -f -s ${input_bam.metadata.bam_index} ${input_bam}.bai &&
-        quasitools call aavar $input_bam $ref_file $var_file $input_genes 
+        quasitools call aavar $input_bam $ref_file $var_file $input_genes
 
         #if $mutation_db:
-          $mutation_db 
+          $mutation_db
         #end if
 
         -o output.vcf
--- a/callcodonvar.xml	Wed Apr 25 10:38:00 2018 -0400
+++ b/callcodonvar.xml	Fri Aug 24 16:50:28 2018 -0400
@@ -1,17 +1,17 @@
-<tool id="callcodonvar" name="Codon Variants" version="0.1.0">
+<tool id="callcodonvar" name="Codon Variants" version="0.4.2">
     <description>Identifies codon variants and non-synonymous/synonymous mutations</description>
     <requirements>
-          <requirement type="package" version="0.3.1">quasitools</requirement>
+          <requirement type="package" version="0.4.2">quasitools</requirement>
     </requirements>
     <command detect_errors="exit_code"><![CDATA[
 
-        cat $input_genes && 
+        cat $input_genes &&
 
         ln -f -s ${input_bam.metadata.bam_index} ${input_bam}.bai &&
-        quasitools call codonvar $input_bam $ref_file $offset $input_genes 
+        quasitools call codonvar $input_bam $ref_file $offset $input_genes
 
         #if $error_rate:
-            -e $error_rate 
+            -e $error_rate
         #end if
 
         -o output.csv
@@ -46,7 +46,7 @@
 Codon Variants
 ==============
 
-Call codon variants for a given BAM. A report is generated that details nucleotide variants within a 
+Call codon variants for a given BAM. A report is generated that details nucleotide variants within a
 codon and the resulting AA variants. The report indicates whether the nucleotide variants correspond to
 a synonymous or non-synonymous mutation.
 
--- a/callntvar.xml	Wed Apr 25 10:38:00 2018 -0400
+++ b/callntvar.xml	Fri Aug 24 16:50:28 2018 -0400
@@ -1,15 +1,15 @@
-<tool id="callntvar" name="Nucleotide Variants" version="0.1.0">
+<tool id="callntvar" name="Nucleotide Variants" version="0.4.2">
     <description>Identifies nucleotide variants</description>
     <requirements>
-          <requirement type="package" version="0.3.1">quasitools</requirement>
+          <requirement type="package" version="0.4.2">quasitools</requirement>
     </requirements>
     <command detect_errors="exit_code"><![CDATA[
-    
+
         ln -f -s ${input_bam.metadata.bam_index} ${input_bam}.bai &&
-        quasitools call ntvar $input_bam $ref_file 
+        quasitools call ntvar $input_bam $ref_file
 
         #if $error_rate:
-            -e $error_rate 
+            -e $error_rate
         #end if
 
         -o output.vcf
@@ -36,7 +36,7 @@
         </test>
     </tests>
     <help><![CDATA[
-        
+
 Nucleotide Variants
 ===================
 
--- a/consensus.xml	Wed Apr 25 10:38:00 2018 -0400
+++ b/consensus.xml	Fri Aug 24 16:50:28 2018 -0400
@@ -1,21 +1,21 @@
-<tool id="consensus" name="Consensus Sequence" version="0.2.0">
+<tool id="consensus" name="Consensus Sequence" version="0.4.2">
     <description>Generate a consensus sequence from a BAM file</description>
     <requirements>
-          <requirement type="package" version="0.3.1">quasitools</requirement>
+          <requirement type="package" version="0.4.2">quasitools</requirement>
     </requirements>
     <command detect_errors="exit_code"><![CDATA[
 
         ln -f -s ${input_bam.metadata.bam_index} ${input_bam}.bai &&
-        quasitools consensus $input_bam $ref_file 
+        quasitools consensus $input_bam $ref_file
 
         #if $fasta_id.type == 'default':
-            -i '${input_bam.element_identifier}' 
+            -i '${input_bam.element_identifier}'
         #elif $fasta_id.type == 'custom':
             -i '${fasta_id.custom_id}'
         #end if
 
         #if $base_type.type == 'mixed':
-            -p $base_type.percentage 
+            -p $base_type.percentage
         #end if
 
         -o output.fasta
--- a/distance.xml	Wed Apr 25 10:38:00 2018 -0400
+++ b/distance.xml	Fri Aug 24 16:50:28 2018 -0400
@@ -1,7 +1,7 @@
-<tool id="distance" name="Quasispecies Distance" version="0.1.0">
+<tool id="distance" name="Quasispecies Distance" version="0.4.2">
     <description>Calculate the evolutionary distance between viral quasispecies.</description>
     <requirements>
-          <requirement type="package" version="0.3.1">quasitools</requirement>
+          <requirement type="package" version="0.4.2">quasitools</requirement>
     </requirements>
     <command detect_errors="exit_code"><![CDATA[
 
--- a/dnds.xml	Wed Apr 25 10:38:00 2018 -0400
+++ b/dnds.xml	Fri Aug 24 16:50:28 2018 -0400
@@ -1,7 +1,7 @@
-<tool id="dnds" name="dNdS Report" version="0.1.0">
+<tool id="dnds" name="dNdS Report" version="0.4.2">
     <description>Calculate the dN/dS value for each region in a bed file</description>
     <requirements>
-          <requirement type="package" version="0.3.1">quasitools</requirement>
+          <requirement type="package" version="0.4.2">quasitools</requirement>
     </requirements>
     <command detect_errors="exit_code"><![CDATA[
 
--- a/drmutations.xml	Wed Apr 25 10:38:00 2018 -0400
+++ b/drmutations.xml	Fri Aug 24 16:50:28 2018 -0400
@@ -1,15 +1,15 @@
-<tool id="drmutations" name="Drug Resistance Mutations" version="0.1.0">
+<tool id="drmutations" name="Drug Resistance Mutations" version="0.4.2">
     <description></description>
     <requirements>
-        <requirement type="package" version="0.3.1">quasitools</requirement>
+        <requirement type="package" version="0.4.2">quasitools</requirement>
     </requirements>
     <command detect_errors="exit_code"><![CDATA[
 
         ln -f -s ${input_bam.metadata.bam_index} ${input_bam}.bai &&
-        quasitools drmutations $input_bam $ref_file $var_file $input_genes 
-        
+        quasitools drmutations $input_bam $ref_file $var_file $input_genes
+
         #if $mutation_db:
-          $mutation_db 
+          $mutation_db
         #end if
 
         #if $min_freq:
@@ -17,11 +17,11 @@
         #end if
 
         #if $reporting_thres:
-            -t $reporting_thres 
+            -t $reporting_thres
         #end if
 
         -o output.csv
-        
+
     ]]></command>
     <inputs>
         <param name="input_bam" type="data" format="bam" optional="false" label="Bam file" />
--- a/hydra.xml	Wed Apr 25 10:38:00 2018 -0400
+++ b/hydra.xml	Fri Aug 24 16:50:28 2018 -0400
@@ -1,88 +1,102 @@
-<tool id="hydra" name="Hydra pipeline" version="0.2.0">
+<tool id="hydra" name="Hydra pipeline" version="0.4.2">
     <description>Identifies drug resistance within an NGS dataset</description>
     <requirements>
-          <requirement type="package" version="0.3.1">quasitools</requirement>
+          <requirement type="package" version="0.4.2">quasitools</requirement>
     </requirements>
     <command detect_errors="exit_code"><![CDATA[
 
-        quasitools hydra 
+        quasitools hydra
 
         ## Preparing file input.
         #if $data_type.type == "paired":
 
-            '$data_type.fastq_input1' 
-            '$data_type.fastq_input2' 
+            '$data_type.fastq_input1'
+            '$data_type.fastq_input2'
 
         #elif $data_type.type == "collection":
 
-            '$data_type.fastq_input1.forward' 
-            '$data_type.fastq_input1.reverse' 
+            '$data_type.fastq_input1.forward'
+            '$data_type.fastq_input1.reverse'
 
         #elif $data_type.type == "single":
 
-            '$data_type.fastq_input1' 
+            '$data_type.fastq_input1'
 
         #end if
 
         #if $mutation_db:
-            -m '$mutation_db' 
+            -m '$mutation_db'
         #end if
 
         #if $reporting_threshold:
-            -rt '$reporting_threshold' 
+            -rt '$reporting_threshold'
         #end if
 
         #if $consensus_pct:
-            -cp '$consensus_pct' 
+            -cp '$consensus_pct'
         #end if
 
         #if $length_cutoff:
-            -lc '$length_cutoff' 
+            -lc '$length_cutoff'
         #end if
 
         #if $score_cutoff:
-            -sc '$score_cutoff' 
+            -sc '$score_cutoff'
         #end if
 
         #if $error_rate:
-            -e '$error_rate' 
+            -e '$error_rate'
         #end if
 
-        #if $min_qual:
-            -mq '$min_qual' 
+        #if $min_read_qual:
+            -rq '$min_read_qual'
+        #end if
+
+        #if $min_variant_qual:
+            -vq '$min_variant_qual'
         #end if
 
         #if $min_depth:
-            -md '$min_depth' 
+            -md '$min_depth'
         #end if
 
         #if $min_ac:
-            -ma '$min_ac' 
+            -ma '$min_ac'
         #end if
 
         #if $min_freq:
-            -mf '$min_freq' 
+            -mf '$min_freq'
         #end if
 
         #if $consensus.consensus_bool == "true_consensus":
-            --generate_consensus 
+            --generate_consensus
 
             #if $consensus.fasta_id.type == "default":
-                --id 
+                --id
                 #if $data_type.type == "paired":
                     '${fastq_input1.element_identifier}'_'${fastq_input2.element_identifier}'
                 #elif $data_type.type == "single":
                     '${fastq_input1.element_identifier}'
                 #end if
             #elif $consensus.fasta_id.type == "custom":
-                --id '$consensus.fasta_id.custom_id' 
+                --id '$consensus.fasta_id.custom_id'
             #end if
         #end if
 
-        #if $filter_ns:
-            --ns 
+        #if $low_quality.qual_selector == "filter_ns":
+            --ns
+        #elif $low_quality.qual_selector == "mask_reads":
+            --mask_reads
         #end if
 
+        #if $score_type.score_selector == "median":
+            --median
+        #elif $score_type.score_selector == "mean":
+            --mean
+        #end if
+
+        $trim_reads
+
         -o output
 
     ]]></command>
@@ -107,19 +121,21 @@
         <param name="mutation_db" type="data" format="tsv" optional="true" label="Mutation DB" help="Defaults to HIV mutation database." />
         <param name="reporting_threshold" type="integer" optional="true" min="1" max="100" value="1" label="Reporting threshold. Defaults to 1." help="Minimum mutation frequency to report." />
         <param name="consensus_pct" type="integer" optional="true" min="1" max="20" value="20" label="Consensus percentage" help="Minimum mutation frequency to report. Defaults to 20." />
-        <param name="length_cutoff" type="integer" optional="true" min="0" max="1000" label="Length cutoff" value="100" help="Reads which fall short of the specified length will be filtered out. Defaults to 100." />
-        <param name="score_cutoff" type="integer" optional="true" min="0" max="40" label="Score cutoff" value="30" help="Reads whose average quality score is less than the specified score will be filtered out. Defaults to 30." />
+        <param name="length_cutoff" type="integer" optional="true" min="1" max="1000" label="Length cutoff" value="100" help="Reads which fall short of the specified length will be filtered out. Defaults to 100." />
+        <param name="score_cutoff" type="integer" optional="true" min="0" max="40" label="Score cutoff" value="30" help="Reads whose median or mean quality score (depending on the score type specified) is less than the specified score cutoff value will be filtered out. Defaults to 30." />
         <param name="error_rate" type="float" optional="true" min="0" max="1" label="Error rate" value="0.0021" help="Estimated sequencing error rate. Defaults to 0.0021."/>
-        <param name="min_qual" type="integer" optional="true" min="1" max="100" label="Minimum quality" value="30" help="Minimum required quality for variant to be considered later on in the pipeline. Defaults to 30." />
+        <param name="min_variant_qual" type="integer" optional="true" min="1" max="100" label="Minimum quality" value="30" help="Minimum required quality for variant to be considered later on in the pipeline. Defaults to 30." />
+        <param name="min_read_qual" type="integer" optional="true" min="1" max="100" label="Minimum quality" value="30" help="Minimum required quality for a position in a read not to be masked, is masking is enabled. Defaults to 30." />
         <param name="min_depth" type="integer" optional="true" min="0" max="5000" label="Minimum depth" value="100" help="Minimum required depth for variant to be considered later on in the pipeline. Defaults to 100." />
         <param name="min_ac" type="integer" optional="true" min="0" max="5000" label="Minimum allele count" value="5" help="Minimum required allele count for variant to be considered later on in the pipeline. Defaults to 5." />
         <param name="min_freq" type="float" optional="true" min="0" max="1" label="Minimum frequency" value="0.01" help="Minimum required frequency for variant to be considered later on in the pipeline. Defaults to 0.01." />
+        <param name="trim_reads" type="boolean" optional="true" checked="false" truevalue="-tr" falsevalue="" label="Trim reads" help="Iteratively trim reads based on filter values if enabled." />
         <conditional name="consensus">
             <param name="consensus_bool" type="select" label="Generate consensus sequence." multiple="false" display="radio">
                 <option value="true_consensus">True</option>
                 <option selected="true" value="false_consensus">False</option>
             </param>
-            <when value="true_consensus"> 
+            <when value="true_consensus">
                 <conditional name="fasta_id">
                     <param name="type" type="select" label="Specify consensus fasta identifier" multiple="false" display="radio">
                         <option value="default" >Use fasta dataset name</option>
@@ -130,16 +146,37 @@
                     <when value="custom">
                         <param name="custom_id" type="text" optional="false" value="custom_id" label="Fasta identifier" help="Type in a fasta identifier."/>
                     </when>
-                </conditional>            
+                </conditional>
             </when>
-            <when value="false_consensus"> 
+            <when value="false_consensus">
             </when>
         </conditional>
-        <param name="filter_ns" type="boolean" truevalue="--ns" falsevalue="" checked="False" label="Filter out n's" />
+        <conditional name="low_quality">
+            <param name="qual_selector" type="select" label="Filter out regions masked, or mask low coverage regions with n's." multiple="false" display="radio">
+                <option value="filter_ns">Filter out regions with n's</option>
+                <option value="mask_reads">Mask low coverage regions with n's</option>
+                <option value="neither" selected="true">Do not filter or mask low coverage regions.</option>
+            </param>
+            <when value="filter_ns">
+            </when>
+            <when value="mask_reads">
+            </when>
+            <when value="neither">
+            </when>
+        </conditional>
+        <conditional name="score_type">
+            <param name="score_selector" type="select" label="Use either median score (default) or mean score for the score cutoff value." multiple="false" display="radio">
+                <option value="median" selected="true">Use median score</option>
+                <option value="mean">Use mean score</option>
+            </param>
+            <when value="median">
+            </when>
+            <when value="mean">
+            </when>
+        </conditional>
     </inputs>
     <outputs>
         <data format="bam" label="HyDRA: alignment bam output" name="output_bam" from_work_dir="output/align.bam" />
-        <data format="bam" label="HyDRA: bam.bai output" name="output_bam_bai" from_work_dir="output/align.bam.bai" />
         <data format="csv" label="HyDRA: coverage output" name="output_coverage" from_work_dir="output/coverage_file.csv" />
         <data format="csv" label="HyDRA: drug resistance output" name="output_dr" from_work_dir="output/dr_report.csv" />
         <data format="fastq" label="HyDRA: filtered reads output" name="output_filtered" from_work_dir="output/filtered.fastq" />
@@ -154,6 +191,7 @@
         <test>
             <param name="type" value="single"/>
             <param name="fastq_input1" value="forward.fastq" />
+            <param name="score_selector" value="mean" />
             <output name="output_coverage">
                 <assert_contents>
                     <has_text text="frame: 0" />
@@ -237,7 +275,6 @@
 
     /tmp/hydra_out/
         * align.bam
-        * align.bam.bai
         * coverage_file.csv
         * dr_report.csv
         * filtered.fastq
@@ -250,7 +287,6 @@
 * __run.conf__: The configuration used when this output was produced.
 * __reads_w_K103N/__: The results directory for the input file reads_w_K103N.fastq
     * __align.bam__: The alignment file in bam format.
-    * __align.bam.bai__: The index to the alignment file.
     * __coverage_file.csv__: A file with one entry per line with the AA position and the coverage at the position.
     * __dr_report.csv__: A report detailing the drug resistant mutations found, above the reporting threshold (default: 1%).
     * __filtered.fastq__: The reads remaining after the filtering stage.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/quality.xml	Fri Aug 24 16:50:28 2018 -0400
@@ -0,0 +1,172 @@
+<tool id="quality" name="Quality control" version="0.4.2">
+    <description>Performs quality control on FASTQ reads.</description>
+    <requirements>
+          <requirement type="package" version="0.4.2">quasitools</requirement>
+    </requirements>
+    <command detect_errors="exit_code"><![CDATA[
+
+        quasitools quality
+
+        ## Preparing file input.
+        #if $data_type.type == "paired":
+
+            '$data_type.fastq_input1'
+            '$data_type.fastq_input2'
+
+        #elif $data_type.type == "collection":
+
+            '$data_type.fastq_input1.forward'
+            '$data_type.fastq_input1.reverse'
+
+        #elif $data_type.type == "single":
+
+            '$data_type.fastq_input1'
+
+        #end if
+
+        #if $length_cutoff:
+            -lc '$length_cutoff'
+        #end if
+
+        #if $score_cutoff:
+            -sc '$score_cutoff'
+        #end if
+
+        #if $min_read_qual:
+            -rq '$min_read_qual'
+        #end if
+
+        #if $low_quality.qual_selector == "filter_ns":
+            --ns
+        #elif $low_quality.qual_selector == "mask_reads":
+            --mask_reads
+        #end if
+
+        #if $score_type.score_selector == "median":
+            --median
+        #elif $score_type.score_selector == "mean":
+            --mean
+        #end if
+
+        $trim_reads
+
+        -o output
+
+    ]]></command>
+    <inputs>
+        <conditional name="data_type">
+            <param name="type" type="select" label="Specify the read type.">
+                <option value="single">Single-end Data</option>
+                <option value="paired">Paired-end Data</option>
+                <option value="collection">Collection Paired-end Data</option>
+            </param>
+            <when value="single">
+                <param name="fastq_input1" type="data" format="fastq" label="Single end read file(s)"/>
+            </when>
+            <when value="paired">
+                <param name="fastq_input1" type="data" format="fastq" label="Forward paired-end read file"/>
+                <param name="fastq_input2" type="data" format="fastq" label="Reverse paired-end read file"/>
+            </when>
+            <when value="collection">
+                <param name="fastq_input1" type="data_collection" label="Paired-end reads collection" optional="false" format="fastq" collection_type="paired" />
+            </when>
+        </conditional>
+        <param name="length_cutoff" type="integer" optional="true" min="1" max="1000" label="Length cutoff" value="100" help="Reads which fall short of the specified length will be filtered out. Defaults to 100." />
+        <param name="score_cutoff" type="integer" optional="true" min="0" max="40" label="Score cutoff" value="30" help="Reads whose median or mean quality score (depending on the score type specified) is less than the specified score cutoff value will be filtered out. Defaults to 30." />
+        <param name="min_read_qual" type="integer" optional="true" min="1" max="100" label="Minimum quality" value="30" help="Minimum required quality for a position in a read not to be masked, is masking is enabled. Defaults to 30." />
+        <param name="trim_reads" type="boolean" optional="true" checked="false" truevalue="-tr" falsevalue="" label="Trim reads" help="Iteratively trim reads based on filter values if enabled." />
+        <conditional name="low_quality">
+            <param name="qual_selector" type="select" label="Filter out regions masked, or mask low coverage regions with n's." multiple="false" display="radio">
+                <option value="filter_ns">Filter out regions with n's</option>
+                <option value="mask_reads">Mask low coverage regions with n's</option>
+                <option value="neither" selected="true">Do not filter or mask low coverage regions.</option>
+            </param>
+            <when value="filter_ns">
+            </when>
+            <when value="mask_reads">
+            </when>
+            <when value="neither">
+            </when>
+        </conditional>
+        <conditional name="score_type">
+            <param name="score_selector" type="select" label="Use either median score (default) or mean score for the score cutoff value." multiple="false" display="radio">
+                <option value="median" selected="true">Use median score</option>
+                <option value="mean">Use mean score</option>
+            </param>
+            <when value="median">
+            </when>
+            <when value="mean">
+            </when>
+        </conditional>
+    </inputs>
+    <outputs>
+        <data format="fastq" label="Quality control output" name="output_filtered" from_work_dir="output/filtered.fastq" />
+    </outputs>
+    <tests>
+        <test>
+            <param name="type" value="single"/>
+            <param name="fastq_input1" value="forward.fastq" />
+            <param name="score_selector" value="median" />
+            <output name="output_filtered">
+                <assert_contents>
+                    <has_text text="@M01647:10:000000000-ACPHB:1:1101:18589:1580 1:N:0:86" />
+                    <has_text text="CCCCCGG@FFGGGGGGGGGGGGCGGGGGGGGDGFFFGGGGGDEGCFGCFFFGGGGGGGGGGGGGGGGFGGGGGGGGGGFCFCGGGGCGFGGGGFGEGGGGGGGGGGGGGGGGGGGGGFEFGGGGGGF" />
+                </assert_contents>
+            </output>
+        </test>
+        <test>
+            <param name="type" value="single"/>
+            <param name="fastq_input1" value="forward.fastq" />
+            <param name="score_selector" value="median" />
+            <param name="qual_selector" value="filter_ns" />
+            <output name="output_filtered">
+                <assert_contents>
+                    <has_text text="@M01647:10:000000000-ACPHB:1:1101:18589:1580 1:N:0:86" />
+                    <has_text text="CCCCCGG@FFGGGGGGGGGGGGCGGGGGGGGDGFFFGGGGGDEGCFGCFFFGGGGGGGGGGGGGGGGFGGGGGGGGGGFCFCGGGGCGFGGGGFGEGGGGGGGGGGGGGGGGGGGGGFEFGGGGGGF" />
+                </assert_contents>
+            </output>
+        </test>
+        <test>
+            <param name="type" value="single"/>
+            <param name="fastq_input1" value="forward.fastq" />
+            <param name="score_selector" value="median" />
+            <param name="trim_reads" value="-tr" />
+            <output name="output_filtered">
+                <assert_contents>
+                    <has_text text="@M01647:10:000000000-ACPHB:1:1101:18589:1580 1:N:0:86" />
+                    <has_text text="CCCCCGG@FFGGGGGGGGGGGGCGGGGGGGGDGFFFGGGGGDEGCFGCFFFGGGGGGGGGGGGGGGGFGGGGGGGGGGFCFCGGGGCGFGGGGFGEGGGGGGGGGGGGGGGGGGGGGFEFGGGGGGF" />
+                </assert_contents>
+            </output>
+        </test>
+        <test>
+            <param name="type" value="single"/>
+            <param name="fastq_input1" value="forward.fastq" />
+            <param name="score_selector" value="median" />
+            <param name="qual_selector" value="mask_reads" />
+            <output name="output_filtered">
+                <assert_contents>
+                    <has_text text="@M01647:10:000000000-ACPHB:1:1101:18589:1580 1:N:0:86" />
+                    <has_text text="NNNNNNTACCACATCCCNCNNNNTTNNNNNNNNNNANNTCNNTNNCNNTNCTNNNTNTNNNTGNTGCNTNTTTTTCAGTTCCCTTNGNTGNNGNCTTCAGNNNNTATACTGCATTTACCNTNCNT" />
+                </assert_contents>
+            </output>
+        </test>
+        <test>
+            <param name="type" value="single"/>
+            <param name="fastq_input1" value="forward.fastq" />
+            <param name="score_selector" value="mean" />
+            <output name="output_filtered">
+                <assert_contents>
+                    <has_text text="@M01647:10:000000000-ACPHB:1:1101:10485:1674 1:N:0:86" />
+                    <has_text text="CCCCCGG@FFGGGGGGGGGGGGCGGGGGGGGDGFFFGGGGGDEGCFGCFFFGGGGGGGGGGGGGGGGFGGGGGGGGGGFCFCGGGGCGFGGGGFGEGGGGGGGGGGGGGGGGGGGGGFEFGGGGGGF" />
+                </assert_contents>
+            </output>
+        </test>
+    </tests>
+    <help><![CDATA[
+Quality Control
+===============
+
+Perform quality control on FASTQ reads.]]></help>
+    <citations>
+    </citations>
+</tool>