<macros>
    <xml name="requirements">
        <requirements>
            <requirement type="package" version="@TOOL_VERSION@">samtools</requirement>
            <yield/>
        </requirements>
    </xml>
    <token name="@TOOL_VERSION@">1.9</token>
    <token name="@FLAGS@">#set $flags = sum(map(int, str($filter).split(',')))</token>
    <token name="@PREPARE_IDX@"><![CDATA[
        ##prepare input and indices 
        ln -s '$input' infile &&
        #if $input.is_of_type('bam'):
            #if str( $input.metadata.bam_index ) != "None":
                ln -s '${input.metadata.bam_index}' infile.bai &&
            #else:
                samtools index infile infile.bai &&
            #end if
        #elif $input.is_of_type('cram'):
            #if str( $input.metadata.cram_index ) != "None":
                ln -s '${input.metadata.cram_index}' infile.crai &&
            #else:
                samtools index infile infile.crai &&
            #end if
        #end if
    ]]></token>
    <token name="@PREPARE_IDX_MULTIPLE@"><![CDATA[
        ##prepare input and indices 
        #for $i, $bam in enumerate( $input_bams ):
            ln -s '$bam' '${i}' &&
            #if $bam.is_of_type('bam'):
                #if str( $bam.metadata.bam_index ) != "None":
                    ln -s '${bam.metadata.bam_index}' '${i}.bai' &&
                #else:
                    samtools index '${i}' '${i}.bai' &&
                #end if
            #elif $bam.is_of_type('cram'):
                #if str( $bam.metadata.cram_index ) != "None":
                    ln -s '${bam.metadata.cram_index}' '${i}.crai' &&
                #else:
                    samtools index '${i}' '${i}.crai' &&
                #end if
            #end if
        #end for
    ]]></token>
    <token name="@PREPARE_FASTA_IDX@"><![CDATA[
        ##checks for reference data ($addref_cond.addref_select=="history" or =="cached")
        ##and sets the -t/-T parameters accordingly:
        ##- in case of history a symbolic link is used because samtools (view) will generate
        ##  the index which might not be possible in the directory containing the fasta file
        ##- in case of cached the absolute path is used which allows to read the cram file
        ##  without specifying the reference
        #if $addref_cond.addref_select == "history":
            ln -s '${addref_cond.ref}' reference.fa &&
            samtools faidx reference.fa &&
            #set reffa="reference.fa"
            #set reffai="reference.fa.fai"
        #elif $addref_cond.addref_select == "cached":
            #set reffa=str($addref_cond.ref.fields.path)
            #set reffai=str($addref_cond.ref.fields.path)+".fai"
        #else
            #set reffa=None
            #set reffai=None
        #end if
    ]]></token>
    <token name="@ADDTHREADS@"><![CDATA[
        ##compute the number of ADDITIONAL threads to be used by samtools (-@)
        addthreads=\${GALAXY_SLOTS:-1} && (( addthreads-- )) &&
    ]]></token>
    <token name="@ADDMEMORY@"><![CDATA[
        ##compute the number of memory available to samtools sort (-m)
        ##use only 75% of available: https://github.com/samtools/samtools/issues/831
        addmemory=\${GALAXY_MEMORY_MB_PER_SLOT:-768} && 
        ((addmemory=addmemory*75/100)) &&
    ]]></token>
    <xml name="seed_input">
       <param name="seed" type="integer" optional="True" label="Seed for random number generator" help="If empty a random seed is used." /> 
    </xml>
    <xml name="flag_options">
        <option value="1">read is paired</option>
        <option value="2">read is mapped in a proper pair</option>
        <option value="4">read is unmapped</option>
        <option value="8">mate is unmapped</option>
        <option value="16">read reverse strand</option>
        <option value="32">mate reverse strand</option>
        <option value="64">read is the first in a pair</option>
        <option value="128">read is the second in a pair</option>
        <option value="256">alignment or read is not primary</option>
        <option value="512">read fails platform/vendor quality checks</option>
        <option value="1024">read is a PCR or optical duplicate</option>
        <option value="2048">supplementary alignment</option>
    </xml>

    <!-- region specification macros and tokens for tools that allow the specification 
         of region by bed file / space separated list of regions -->
    <token name="@REGIONS_FILE@"><![CDATA[
        #if $cond_region.select_region == 'tab':
            -t '$cond_region.targetregions'
        #end if
    ]]></token>
    <token name="@REGIONS_MANUAL@"><![CDATA[
        #if $cond_region.select_region == 'text':
            #for $i, $x in enumerate($cond_region.regions_repeat):
               '${x.region}'
            #end for
        #end if
    ]]></token>
    <xml name="regions_macro">
        <conditional name="cond_region">
            <param name="select_region" type="select" label="Filter by regions" help="restricts output to only those alignments which overlap the specified region(s)">
                <option value="no" selected="True">No</option>
                <option value="text">Manualy specify regions</option>
                <option value="tab">Regions from tabular file</option>
            </param>
            <when value="no"/>
            <when value="text">
                <repeat name="regions_repeat" min="1" default="1" title="Regions">
                    <param name="region" type="text" label="region" help="format chr:from-to">
                        <validator type="regex" message="Required format: CHR[:FROM[-TO]]; where CHR: string containing any character except quotes, whitespace and colon; FROM and TO: any integer">^[^\s'\":]+(:\d+(-\d+){0,1}){0,1}$</validator>
                    </param>
                </repeat>
            </when>
            <when value="tab">
                <param name="targetregions" argument="-t/--target-regions" type="data" format="tabular" label="Target regions file" help="Do stats in these regions only. Tab-delimited file chr,from,to (1-based, inclusive)" />
            </when>
        </conditional>
    </xml>

    <xml name="citations">
        <citations>
            <citation type="bibtex">
                @misc{SAM_def,
                title={Definition of SAM/BAM format},
                url = {https://samtools.github.io/hts-specs/},}
            </citation>
            <citation type="doi">10.1093/bioinformatics/btp352</citation>
            <citation type="doi">10.1093/bioinformatics/btr076</citation>
            <citation type="doi">10.1093/bioinformatics/btr509</citation>
            <citation type="bibtex">
                @misc{Danecek_et_al,
                Author={Danecek, P., Schiffels, S., Durbin, R.},
                title={Multiallelic calling model in bcftools (-m)},
                url = {http://samtools.github.io/bcftools/call-m.pdf},}
            </citation>
            <citation type="bibtex">
                @misc{Durbin_VCQC,
                Author={Durbin, R.},
                title={Segregation based metric for variant call QC},
                url = {http://samtools.github.io/bcftools/rd-SegBias.pdf},}
            </citation>
            <citation type="bibtex">
                @misc{Li_SamMath,
                Author={Li, H.},
                title={Mathematical Notes on SAMtools Algorithms},
                url = {http://www.broadinstitute.org/gatk/media/docs/Samtools.pdf},}
            </citation>
            <citation type="bibtex">
                @misc{SamTools_github,
                title={SAMTools GitHub page},
                url = {https://github.com/samtools/samtools},}
            </citation>
        </citations>
    </xml>
    <xml name="version_command">
        <version_command><![CDATA[samtools 2>&1 | grep Version]]></version_command>
    </xml>
    <xml name="stdio">
        <stdio>
            <exit_code range="1:" level="fatal" description="Error" />
        </stdio>
    </xml>
</macros>
