view ivar_variants.xml @ 16:194e3ceee923 draft

planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/ivar/ commit dab395b37976a99a62334c3188073ee8b97f451f
author iuc
date Mon, 11 Mar 2024 15:50:29 +0000
parents 045d6d00f606
children
line wrap: on
line source

<tool id="ivar_variants" name="ivar variants" version="@TOOL_VERSION@+galaxy1" profile="@PROFILE@">
    <description>Call variants from aligned BAM file</description>
    <macros>
        <import>macros.xml</import>
    </macros>
    <expand macro="requirements"/>
    <expand macro="version_command"/>
    <command detect_errors="exit_code"><![CDATA[
        ln -s '$ref' ref.fa &&
        ln -s '$input_bam' sorted.bam &&
        samtools mpileup -A -d 0 --reference ref.fa -B -Q 0 sorted.bam | ivar variants
        -p variants
        -q $min_qual
        -t $min_freq
        #if str($output_format.choice) == "tabular" or str($output_format.choice) == "tabular_and_vcf"
            #if str($gtf) != 'None':
                -r ref.fa
                -g '$gtf'
            #end if
        #end if
        #if str($output_format.choice) == "vcf" or str($output_format.choice) == "tabular_and_vcf"
            && python '${__tool_directory__}/ivar_variants_to_vcf.py'
            ${output_format.pass_only}
            variants.tsv variants.vcf
        #end if
    ]]></command>
    <inputs>
        <param name="input_bam" type="data" format="bam" label="Bam file" help="Aligned reads, to trim primers and quality"/>
        <param name="ref" type="data" format="fasta" label="Reference"/>
        <param name="min_qual" argument="-q" type="integer" min="0" max="255" value="20" label="Minimum quality score threshold to count base"/>
        <param name="min_freq" argument="-t" type="float" min="0" max="1" value="0.03" label="Minimum frequency threshold"/>
        <conditional name="output_format">
            <param name="choice" type="select" label="Output format">
                <option value="tabular">Tabular (native tool output)</option>
                <option value="vcf">VCF</option>
                <option value="tabular_and_vcf">Both Tabular and VCF</option>
            </param>
            <when value="vcf">
                <param argument="--pass_only" type="boolean" truevalue="--pass_only" falsevalue="" label="In VCF only output variants that PASS all filters"/>
            </when>
            <when value="tabular_and_vcf">
                <param argument="--pass_only" type="boolean" truevalue="--pass_only" falsevalue="" label="In VCF only output variants that PASS all filters"/>
                <param name="gtf" argument="-g" optional="true" type="data" format="gff" label="Coordinates of ORFs for optional variant effect prediction" help="Provide a GFF3 dataset with annotated ORFs to have the rightmost 5 columns of the tabular output populated with mutation information at the residue level. This has no effect on the VCF output."/>
            </when>
            <when value="tabular">
                <param name="gtf" argument="-g" optional="true" type="data" format="gff" label="Coordinates of ORFs for optional variant effect prediction" help="Provide a GFF3 dataset with annotated ORFs to have the rightmost 5 columns of the tabular output populated with mutation information at the residue level."/>
            </when>
        </conditional>
    </inputs>
    <outputs>
        <data name="output_variants_tabular" from_work_dir="./variants.tsv" format="tabular" label="${tool.name} tabular output on ${on_string}">
            <filter>output_format['choice'] == 'tabular' or output_format['choice'] == 'tabular_and_vcf'</filter>
            <actions>
                <action name="column_names" type="metadata" default="REGION,POS,REF,ALT,REF_DP,REF_RV,REF_QUAL,ALT_DP,ALT_RV,ALT_QUAL,ALT_FREQ,TOTAL_DP,PVAL,PASS,GFF_FEATURE,REF_CODON,REF_AA,ALT_CODON,ALT_AA,POS_AA"/>
            </actions>
        </data>
        <data name="output_variants_vcf" from_work_dir="./variants.vcf" format="vcf" label="${tool.name} VCF on ${on_string}">
            <filter>output_format['choice'] == 'vcf' or output_format['choice'] == 'tabular_and_vcf'</filter>
        </data>
    </outputs>
    <tests>
        <test expect_num_outputs="1"> <!-- test 1 -->
            <param name="input_bam" value="zika/Z52_a.masked.sorted.bam"/>
            <param name="ref" value="zika/db/PRV.fa"/>
            <output name="output_variants_tabular" file="zika/Z52_a.tsv" ftype="tabular"/>
        </test>
        <test expect_num_outputs="1"> <!-- test 2 -->
            <param name="input_bam" value="zika/Z52_a.masked.sorted.bam"/>
            <param name="ref" value="zika/db/PRV.fa"/>
            <conditional name="output_format">
                <param name="choice" value="vcf"/>
            </conditional>
            <output name="output_variants_vcf" file="zika/Z52_a.vcf" ftype="vcf"/>
        </test>
        <test expect_num_outputs="2"> <!-- test 3 -->
            <param name="input_bam" value="zika/Z52_a.masked.sorted.bam"/>
            <param name="ref" value="zika/db/PRV.fa"/>
            <conditional name="output_format">
                <param name="choice" value="tabular_and_vcf"/>
                <param name="pass_only" value="true"/>
            </conditional>
            <output name="output_variants_tabular" file="zika/Z52_a.tsv" ftype="tabular" lines_diff="6"/>
            <output name="output_variants_vcf" file="zika/Z52_a_pass.vcf" ftype="vcf"/>
        </test>
        <test expect_num_outputs="1"> <!-- test 4 -->
            <param name="input_bam" value="zika/Z52_a.masked.sorted.bam"/>
            <param name="ref" value="zika/db/PRV.fa"/>
            <param name="gtf" value="zika/db/PRV.gff"/>
            <output name="output_variants_tabular" file="zika/Z52_a_annotated.tsv" ftype="tabular"/>
        </test>
        <test expect_num_outputs="2"> <!-- test 5 -->
            <param name="input_bam" value="zika/Z52_a.masked.sorted.bam"/>
            <param name="ref" value="zika/db/PRV.fa"/>
            <param name="gtf" value="zika/db/PRV.gff"/>
            <conditional name="output_format">
                <param name="choice" value="tabular_and_vcf"/>
                <param name="pass_only" value="true"/>
            </conditional>
            <output name="output_variants_tabular" file="zika/Z52_a_annotated.tsv" ftype="tabular"/>
            <output name="output_variants_vcf" file="zika/Z52_a_pass.vcf" ftype="vcf"/>
        </test>
    </tests>
    <help><![CDATA[
iVar uses the output of the samtools mpileup command to call variants -
single nucleotide variants(SNVs) and indels. In order to call variants
correctly, the reference file used for alignment must be passed to iVar
using the -r flag. The output of samtools pileup is piped into ivar variants
to generate a .tsv file with the variants. There are two parameters that can
be set for variant calling using iVar - minimum quality(Default: 20) and
minimum frequency(Default: 0.03). Minimum quality is the minimum quality for
a base to be counted towards the ungapped depth to canculate iSNV frequency
at a given position. For insertions, the quality metric is discarded and the
mpileup depth is used directly. Minimum frequency is the minimum frequency
required for a SNV or indel to be reported.

Documentation can be found at `<https://andersen-lab.github.io/ivar/html/manualpage.html>`_.

Optionally output is converted to VCF using a version of the
`ivar_variants_to_vcf.py script <https://github.com/nf-core/viralrecon/blob/dev/bin/ivar_variants_to_vcf.py>`_,
that has been modified to store attributes in INFO fields.
    ]]></help>
    <expand macro="citations">
        <citation type="bibtex">@misc{githubivar_variants_to_vcf,
            author = {Fernandez, Sarai Varona and Patel, Harshil},
            year = {2021},
            title = {ivar_variants_to_vcf},
            url = {https://github.com/nf-core/viralrecon/blob/dev/bin/ivar_variants_to_vcf.py}
        }</citation>
    </expand>
</tool>