view jvarkit_wgscoverageplotter.xml @ 1:364b8ee3a3e4 draft

"planemo upload for repository https://github.com/galaxyproject/iuc/tree/master/tools/jvarkit commit daf26ee9c6301e69786c505d9c9f97c67fd59746"
author iuc
date Thu, 11 Feb 2021 10:14:31 +0000
parents 859e0611960c
children ac048a34cac3
line wrap: on
line source

<tool id="jvarkit_wgscoverageplotter" name="BAM Coverage Plotter" version="@TOOL_VERSION@+galaxy0">
    <description>Plot read coverage across a genomic contig</description>
    <macros>
        <token name="@TOOL_VERSION@">20201223</token>
    </macros>
    <requirements>
        <requirement type="package" version="@TOOL_VERSION@">jvarkit-wgscoverageplotter</requirement>
        <requirement type="package" version="1.11">samtools</requirement>
        <requirement type="package" version="7.0.10_62">imagemagick</requirement>
    </requirements>
    <command detect_errors="exit_code"><![CDATA[
        #set include_regex = str($adv.include_contig_regex).strip()
        #set exclude_regex = str($adv.skip_contig_regex).strip()
        #set alignment_name = str($alignment_file.element_identifier)
        #if str($reference.source) == "history"
            ln -s '$reference.hist_genome' reference.fasta &&
            samtools faidx reference.fasta &&
        #else
            #set ref_path = str($reference.cached_genome.fields.path)
            #set ref_index_path = str($reference.cached_genome.fields.path) + '.fai'
            ln -s '$ref_path' reference.fasta &&
            ln -s '$ref_index_path' reference.fasta.fai &&
        #end if
        samtools view -H '$alignment_file' |grep -E '^(@HD|@SQ)' >reference.dict &&
        cat reference.dict &&
        ln -s '$alignment_file' '$alignment_name' &&
        ln -s '${alignment_file.metadata.bam_index}' '${alignment_name}.bai' &&
        wgscoverageplotter.sh 
        --reference reference.fasta
        --dimension '$dimension'
        --output plot.svg
        $adv.disable_paired_overlap
        #if $include_regex
            -I '$include_regex'
        #end if
        #if $exclude_regex
            -X '$exclude_regex'
        #end if
        --mapq $adv.min_mapq
        --max-depth $adv.max_depth
        $adv.clip
        --min-contig-length '$adv.min_contig_length'
        --percentile $adv.percentile
        $adv.points
        #if str($adv.sample_filter.filter_by_sample) == "true"
            --samples '$adv.sample_filter.samples'
            --partition '$adv.sample_filter.partition'
        #end if
        '$alignment_name' &&
        #if str($format) == "SVG"
            mv plot.svg '$plot_output'
        #else
            convert plot.svg '$format:$plot_output'
        #end if
    ]]>
    </command>
    <inputs>
        <conditional name="reference">
            <param name="source" type="select"
            label="Will you select a reference genome from your history or use a built-in genome?">
                <option value="cached">Use a built-in genome</option>
                <option value="history" selected="true">Use a genome from my history</option>
            </param>
            <when value="cached">
                <!-- NOTE: wgscoverageplotter requires the genome to be both indexed (with samtools index)
                     and also have a dictionary (from picard CreateSequenceDictionary). since there is no
                     way to specify both of these requirements, we take the indexed genome and build a dictionary -->
                <param name="cached_genome" type="select"
                label="Reference genome"
                help="The FASTA reference genome that reads were mapped against.">
                    <options from_data_table="fasta_indexes" />
                </param>
            </when>
            <when value="history">
                <param name="hist_genome" type="data" format="fasta"
                label="Reference genome"
                help="The FASTA reference genome that reads were mapped against."/>
            </when>
        </conditional>
        <param name="alignment_file" type="data" format="bam" label="BAM alignment" />
        <param argument="--dimension" value="1000x500" type="text" label="Image dimensions" />
        <param name="format" type="select" label="Output format" help="Note that SVG might not display correctly on all Galaxy servers">
            <option value="PNG" selected="true">PNG</option>
            <option value="SVG">SVG</option>
        </param>
        <section name="adv" title="Advanced options" expanded="false">
            <param argument="--disable-paired-overlap" 
                name="disable_paired_overlap" 
                type="boolean" truevalue="--disable-paired-overlap" 
                falsevalue="" label="Count overlapping bases with mate for paired-end" />
            <param argument="--include-contig-regex" name="include_contig_regex" type="text" label="Only keep chromosomes matching this regular expression." />
            <param argument="--mapq" name="min_mapq" type="integer" value="1" label="Minimum mapping quality" />
            <param argument="--max-depth" 
                name="max_depth" 
                type="integer" 
                label="y-axis (depth) limit of the plot" 
                value="-1"
                help="The special value '-1' will first compute the average depth and the set the max depth to 2*average" />
            <param argument="--clip"
                type="boolean"
                label="Clip the plot at the y-axis limit"
                help="Default is to let the coverage plot exceed the y-axis limit"
                truevalue="--clip"
                falsevalue="" />
            <param argument="--min-contig-length" 
                name="min_contig_length" 
                type="text" 
                label="Skip chromosomes shorter than"
                value="0"
                help="A distance specified as a positive integer.">
                <validator type="regex" message="A positive integer optionally followed by the suffixes b,bp,k,kb,m,mb is required">[0-9,]+(bp|b|kb|k|mb|m)?$</validator>
            </param>
            <param argument="--percentile" type="select" label="How to bin the coverage under one pixel">
                <option value="median" selected="true">median</option>
                <option value="average">average</option>
                <option value="min">min</option>
                <option value="max">max</option>
            </param>
            <param argument="--points" 
                type="boolean" 
                label="Plot coverage using points instead of areas" 
                truevalue="--points" 
                falsevalue=""
            />
            <param argument="--skip-contig-regex"
                name="skip_contig_regex"
                type="text"
                label="Skip chromosomes matching this regular expression" />
            <conditional name="sample_filter">
                <param name="filter_by_sample" type="select" label="Filter by sample">
                    <option value="true">Yes</option>
                    <option value="false" selected="true">No</option>
                </param>
                <when value="true">
                    <param argument="--samples"
                        type="text"
                        label="Limit to these read groups" 
                        help="See also --partition. Multiple read groups can be separated with commas.">
                        <validator type="expression"  message="If a filter is being used, this field cannot be blank">len(str(value).strip()) > 0</validator>
                    </param>
                    <param argument="--partition" type="select" label="How to interpret identifiers in --samples" help="Partitions are modelled on the GATK logic as described here: https://gatk.broadinstitute.org/hc/en-us/articles/360051307491-DepthOfCoverage-BETA-#--partition-type">
                        <option value="sample" selected="true">sample</option>
                        <option value="readgroup">readgroup</option>
                        <option value="library">library</option>
                        <option value="platform">platform</option>
                        <option value="sample_by_platform">sample_by_platform</option>
                        <option value="sample_by_platform_by_center">sample_by_platform_by_center</option>
                        <option value="any">any</option>
                    </param>
                </when>
                <when value="false">
                </when>
            </conditional>
        </section>
    </inputs>
    <outputs>
        <data format="png" name="plot_output">
            <change_format>
                <when input="format" value="SVG" format="svg" />
            </change_format>
        </data>
    </outputs>
    <tests>
        <test>
            <conditional name="reference">
                <param name="source" value="history" />
                <param name="hist_genome" ftype="fasta" value="reference.fasta" />
            </conditional>
            <param name="alignment_file" ftype="bam" value="sars_cov2_trimmed_cut.bam" />
            <output name="plot_output">
                <assert_contents>
                    <has_size value="26303" delta="15000" />
                </assert_contents>
            </output>
        </test>
        <test>
            <conditional name="reference">
                <param name="source" value="history" />
                <param name="hist_genome" ftype="fasta" value="reference.fasta" />
            </conditional>
            <param name="alignment_file" ftype="bam" value="sars_cov2_trimmed_cut.bam" />
            <param name="format" value="SVG" />
            <output name="plot_output">
                <assert_contents>
                    <has_size value="7805" delta="2000"/>
                </assert_contents>
            </output>
        </test>
        <test>
            <conditional name="reference">
                <param name="source" value="history" />
                <param name="hist_genome" ftype="fasta" value="reference.fasta" />
            </conditional>
            <param name="alignment_file" ftype="bam" value="sars_cov2_trimmed_cut.bam" />
            <section name="adv">
                <param name="max_depth" value="50" />
            </section>
            <output name="plot_output">
                <assert_contents>
                    <has_size value="25410" delta="15000" />
                </assert_contents>
            </output>
        </test>
        <test>
            <conditional name="reference">
                <param name="source" value="cached" />
                <param name="cached_genome" value="sars-cov-2-fragment" />
            </conditional>
            <param name="alignment_file" ftype="bam" value="sars_cov2_trimmed_cut.bam" />
            <output name="plot_output">
                <assert_contents>
                    <has_size value="26303" delta="15000" />
                </assert_contents>
            </output>
        </test>

    </tests>
    <help><![CDATA[

    **WGSCoveragePlotter from the jvarkit toolkit** 

    WGSCoveragePlotter_ is a tool to plot the coverage of aligned reads across a genomic contig. It takes
    as input a BAM file and a genomic contig in FASTA format and produces an image in either PNG or SVG format
    showing the depth of read coverage across the contig. 

    .. _WGSCoveragePlotter: http://lindenb.github.io/jvarkit/WGSCoveragePlotter.html
    ]]>
    </help>
    <citations>
        <citation type="doi">10.6084/m9.figshare.1425030</citation>
    </citations>
</tool>