diff hydra.xml @ 0:1f1214983a1c draft default tip

planemo upload for repository https://github.com/phac-nml/quasitools commit 5a9e4c9a582828654893166caf20576f5e0c418e
author nml
date Mon, 20 Jun 2022 20:05:57 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hydra.xml	Mon Jun 20 20:05:57 2022 +0000
@@ -0,0 +1,325 @@
+<tool id="hydra" name="Hydra pipeline" version="@TOOL_VERSION@+galaxy@VERSION_SUFFIX@">
+    <description>Identifies drug resistance within an NGS dataset</description>
+    <macros>
+        <import>macros.xml</import>
+    </macros>
+    <expand macro="requirements"/>
+    <command detect_errors="exit_code"><![CDATA[
+
+        quasitools hydra
+
+        ## 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 $mutation_db:
+            -m '$mutation_db'
+        #end if
+
+        #if $reporting_threshold:
+            -rt '$reporting_threshold'
+        #end if
+
+        #if $consensus_pct:
+            -cp '$consensus_pct'
+        #end if
+
+        #if $length_cutoff:
+            -lc '$length_cutoff'
+        #end if
+
+        #if $score_cutoff:
+            -sc '$score_cutoff'
+        #end if
+
+        #if $error_rate:
+            -e '$error_rate'
+        #end if
+
+        #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'
+        #end if
+
+        #if $min_ac:
+            -ma '$min_ac'
+        #end if
+
+        #if $min_freq:
+            -mf '$min_freq'
+        #end if
+
+        #if $consensus.consensus_bool == "true_consensus":
+            --generate_consensus
+
+            #if $consensus.fasta_id.type == "default":
+                --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'
+            #end if
+        #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="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="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_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">
+                <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>
+                        <option value="custom">Use custom name</option>
+                    </param>
+                    <when value="default">
+                    </when>
+                    <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>
+            </when>
+            <when value="false_consensus">
+            </when>
+        </conditional>
+        <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="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" />
+        <data format="vcf" label="HyDRA: variants output" name="output_hydra" from_work_dir="output/hydra.vcf" />
+        <data format="txt" label="HyDRA: aa mutations output" name="output_aa_mt" from_work_dir="output/mutation_report.aavf" />
+        <data format="txt" label="HyDRA: stats output" name="output_stats" from_work_dir="output/stats.txt" />
+        <data format="fasta" label="HyDRA: consensus output" name="output_consensus" from_work_dir="output/consensus.fasta" >
+            <filter>consensus['consensus_bool'] == "true_consensus"</filter>
+        </data>
+    </outputs>
+    <tests>
+        <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" />
+                    <has_text text="1,0" />
+                    <has_text text="948,0" />
+                </assert_contents>
+            </output>
+            <output name="output_dr">
+                <assert_contents>
+                    <has_text text="Chromosome,Gene,Category,Surveillance,Wildtype,Position,Mutation,Mutation Frequency,Coverage" />
+                    <has_text text="hxb2_pol,RT,NNRTI,Yes,K,101,P,14.23,1574" />
+                    <has_text text="hxb2_pol,RT,NNRTI,Yes,K,103,N,5.49,1912" />
+                    <has_text text="hxb2_pol,RT,NNRTI,Yes,Y,181,C,24.07,4557" />
+                    <has_text text="hxb2_pol,RT,NNRTI,Yes,Y,181,I,18.04,4557" />
+                    <has_text text="hxb2_pol,RT,NNRTI,Yes,Y,181,V,20.08,4557" />
+                    <has_text text="hxb2_pol,RT,NNRTI,Yes,Y,188,C,2.81,3454" />
+                    <has_text text="hxb2_pol,RT,NNRTI,Yes,G,190,A,5.20,3233" />
+                    <has_text text="hxb2_pol,RT,NNRTI,Yes,G,190,S,6.68,3233" />
+                </assert_contents>
+            </output>
+            <output name="output_hydra">
+                <assert_contents>
+                    <has_text_matching expression="#CHROM\tPOS\tID\tREF\tALT\tQUAL\tFILTER\tINFO"/>
+                    <has_text_matching expression="hxb2_pol\s576\s.\sa\sg\s100\sPASS\sDP=805;AC=245;AF=0.3043" />
+                    <has_text_matching expression="hxb2_pol\s958\s.\sc\sa\s100\sPASS\sDP=2503;AC=28;AF=0.0112" />
+                </assert_contents>
+            </output>
+            <output name="output_aa_mt">
+                <assert_contents>
+                    <has_text_matching expression="#CHROM\tGENE\tPOS\tREF\tALT\tFILTER\tALT_FREQ\tCOVERAGE\tINFO"/>
+                    <has_text_matching expression="hxb2_pol\tRT\t101\tK\tP\tPASS\t0.1423\t1574\tRC=aaa;AC=CCa;ACF=0.1423;CAT=NNRTI;SRVL=Yes" />
+                    <has_text_matching expression="hxb2_pol\tRT\t101\tK\tT\tmf0.01\t0.0013\t1574\tRC=aaa;AC=aCa;ACF=0.0013;CAT=.;SRVL=." />
+                </assert_contents>
+            </output>
+           
+            <output name="output_stats">
+                <assert_contents>
+                    <has_text text="Input Size: 25000"/>
+                    <has_text text="Number of reads filtered due to length: 15074"/>
+                    <has_text text="Number of reads filtered due to average quality score: 501"/>
+                    <has_text text="Number of reads filtered due to presence of Ns: 0"/>
+                    <has_text text="Number of reads filtered due to excess coverage: 0"/>
+                    <has_text text="Number of reads filtered due to poor mapping: 12"/>
+                    <has_text text="Percentage of reads filtered: 62.35"/>
+                </assert_contents>
+            </output>
+        </test>
+    </tests>
+    <help><![CDATA[
+
+HyDRA - HIV Drug Resistance Analyzer
+====================================
+
+The HyDRA pipeline provides a pipeline for identifying drug resistance within a Next Generation Sequencing dataset. The pipeline takes as input the raw reads produced by a Next Generation Sequencer and produces a report detailing found drug resistance per sample.
+
+Authors
+-------
+
+The HyDRA pipeline was developed by Eric Enns and David Peddle.
+
+Stages
+------
+
+The HyDRA pipleine proceeds through the following stages:
+
+1. Quality Control/Filtering
+2. Reference mapping using bowtie2.
+3. Variant Calling and filtering using a Poisson distribution.
+4. AA Mutation Calling and filtering.
+5. Drug Resistance report generation.
+
+Details
+-------
+
+The following is an example for running the pipeline, using our included test dataset:
+    * Output directory name: "/tmp/hydra_out"
+    * Forward reads: "reads_w_K103N.fastq"
+
+### Output ###
+
+The detailed output directory tree looks as follows:
+
+    /tmp/hydra_out/
+        * align.bam
+        * coverage_file.csv
+        * dr_report.csv
+        * filtered.fastq
+        * hydra.vcf
+        * mutation_report.aavf
+        * stats.txt
+
+The description of each of these directories/files are as follows:
+
+* __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.
+    * __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.
+    * __hydra.vcf__: The variants found by the pipeline.
+    * __mutation_report.aavf__: The AA mutations found by the pipeline.
+    * __stats.txt__: A log file detailing size after filtering and major stages.
+
+The __dr_report.csv__ file lists all found drug resistant mutations (mutations included in the mutation database) which have frequency greater than the reporting threshold. An example of this file is given below.
+
+Example: __dr_report.csv__
+
+    Gene,Category,Surveillance,Wildtype,Position,Mutation,Mutation Frequency,Coverage
+    RT,NNRTI,Yes,K,103,N,9.03,155
+
+The __mutation_report.aavf__ file is in AAVF format (https://github.com/winhiv/aavf-spec), an amino acid variant format inspired by the VCF format. The __mutation_report.aavf__ file details all of the AA mutations found by the pipeline. An example if this file is given below.
+
+Example: __mutation_report.aavf__
+
+    ##fileformat=AAVFv1.0
+    ##fileDate=20220615
+    ##source=quasitools:hydra
+    ##reference=hxb2_pol.fas
+    ##INFO=<ID=RC,Number=1,Type=String,Description="Reference Codon">
+    ##INFO=<ID=AC,Number=.,Type=String,Description="Alternate Codon">
+    ##INFO=<ID=ACF,Number=.,Type=Float,Description="Alternate Codon Frequency,for each Alternate Codon,in the same order aslisted.">
+    ##INFO=<ID=CAT,Number=.,Type=String,Description="Drug Resistance Category">
+    ##INFO=<ID=SRVL,Number=.,Type=String,Description="Drug Resistance Surveillance">
+    ##FILTER=<ID=af0.01,Description="Set if True; alt_freq<0.01">
+    #CHROM	GENE	POS	REF	ALT	FILTER	ALT_FREQ	COVERAGE	INFO
+    hxb2_pol	RT	101	K	P	PASS	0.1423	1574	RC=aaa;AC=CCa;ACF=0.1423;CAT=NNRTI;SRVL=Yes
+
+    ]]></help>
+    <expand macro="citations" />
+</tool>