<?xml version="1.0"?>
<macros>
    <token name="@TOOL_VERSION@">2.5.83</token>
    <token name="@VERSION_SUFFIX@">0</token>
    <token name="@PROFILE@">24.0</token>
    <token name="@SHELL_OPTIONS@">export TERM="vt100"; </token>

    <xml name="inputs">
	    <param name="input_file" type="data" format="fasta,fasta.gz,nex" label="Input FASTA or NEXUS file" help="An in-frame codon alignment in one of the formats supported by HyPhy" />
        <param name="input_nhx" type="data" format="nhx,newick" optional="true" label="Input newick file; this will override any trees included in the file" help="A phylogenetic tree (optionally annotated with {})"/>
    </xml>
    <xml name="bio_tools">
        <xrefs>
            <xref type="bio.tools">HyPhy</xref>
        </xrefs>
    </xml>
    <xml name="substitution" tokens="argument">
        <param argument="@ARGUMENT@" type="select" label="Substitution model">
            <option value="LG">LG - Generalist empirical model from
            Le and Gascuel (2008)</option>
            <option value="WAG">WAG - Generalist empirical model from
            Whelan and Goldman (2001)</option>
            <option value="JTT" selected="true">JTT - Generalist empirical model from
            Jones, Taylor, and Thornton (1996)</option>
            <option value="JC69">JC69 - Generalist empirical model
            from with equal exchangeability rates</option>
            <option value="mtMet">mtMet - Specialist empirical model
            for metazoan mitochondrial genomes</option>
            <option value="mtVer">mtVer - Specialist empirical model
            for vertebrate mitochondrial genomes</option>
            <option value="mtInv">mtInv - Specialist empirical model
            for invertebrate mitochondrial genomes</option>
            <option value="gcpREV">gcpREV - Specialist empirical
            model for green plant chloroplast genomes</option>
            <option value="HIVBm">HIVBm - Specialist empirical model
            for between-host HIV sequences</option>
            <option value="HIVWm">HIVWm - Specialist empirical model
            for within-host HIV sequences</option>
            <option value="GTR" selected="true">GTR - General time reversible
            model</option>
        </param>
    </xml>

    <xml name="conditional_posteriorEstimationMethod">
        <conditional name="posteriorEstimationMethod">
            <param argument="--method" type="select" label="Posterior estimation method" help="The inference method to use for estimating the posterior distribution.">
                <option value="Variational-Bayes">0-th order Variational Bayes approximation</option>
                <option value="Metropolis-Hastings">Full Metropolis-Hastings MCMC algorithm</option>
                <option value="Collapsed-Gibbs">Collapsed Gibbs sampler</option>
            </param>
            <when value="Variational-Bayes">
            </when>
            <when value="Metropolis-Hastings">
                <expand macro="mcmc_options" />
            </when>
            <when value="Collapsed-Gibbs">
                <expand macro="mcmc_options" />
            </when>
        </conditional>
    </xml>

    <token name="@posteriorEstimationMethod_cmd@">
            #if $posteriorEstimationMethod.method != "Variational-Bayes"
                --chains '$posteriorEstimationMethod.chains'
                --chain-length '$posteriorEstimationMethod.chain_length'
                --burn-in '$posteriorEstimationMethod.samples'
                --samples '$posteriorEstimationMethod.samples_per_chain'
            #end if
    </token>

    <xml name="mcmc_options">
        <param argument="--chains" type="integer" value="5" min="2" max="20" label="Number of MCMC chains" help="The number of MCMC chains to run." />
        <param argument="--chain-length" type="integer" value="2000000" min="500000" max="50000000" label="Length of each chain" help="The length of each MCMC chain." />
        <param argument="--burn-in" name="samples" type="integer" value="1000000" min="100000" max="1900000" label="Samples to use for burn-in" help="The number of samples to discard from the beginning of each MCMC chain." />
        <param argument="--samples" name="samples_per_chain" type="integer" value="100" min="50" max="1000000" label="Samples to draw from each chain" help="The number of samples to draw from each MCMC chain after the burn-in period." />
    </xml>

    <xml name="gencode">
        <param argument="--code" name="gencodeid" type="select" label="Genetic code" help="Which genetic code should be used">
            <option value="Universal">Universal code</option>
            <option value="Vertebrate-mtDNA">Vertebrate mitochondrial DNA
            code</option>
            <option value="Yeast-mtDNA">Yeast mitochondrial DNA
            code</option>
            <option value="Mold-Protozoan-mtDNA">Mold, Protozoan and
            Coelenterate mt; Mycloplasma/Spiroplasma</option>
            <option value="Invertebrate-mtDNA">Invertebrate mitochondrial
            DNA code</option>
            <option value="Ciliate-Nuclear">Ciliate, Dasycladacean and
            Hexamita Nuclear code</option>
            <option value="Echinoderm-mtDNA">Echinoderm mitochondrial DNA
            code</option>
            <option value="Euplotid-Nuclear">Euplotid Nuclear
            code</option>
            <option value="Alt-Yeast-Nuclear">Alternative Yeast Nuclear
            code</option>
            <option value="Ascidian-mtDNA">Ascidian mitochondrial DNA
            code</option>
            <option value="Flatworm-mtDNA">Flatworm mitochondrial DNA
            code</option>
            <option value="Blepharisma-Nuclear">Blepharisma Nuclear
            code</option>
            <option value="Chlorophycean-mtDNA">Chlorophycean-mtDNA</option>
            <option value="Trematode-mtDNA">Trematode-mtDNA</option>
            <option value="Scenedesmus-obliquus-mtDNA">Scenedesmus-obliquus-mtDNA</option>
            <option value="Thraustochytrium-mtDNA">Thraustochytrium-mtDNA</option>
            <option value="Pterobranchia-mtDNA">Pterobranchia-mtDNA</option>
            <option value="SR1-and-Gracilibacteria">SR1-and-Gracilibacteria</option>
            <option value="Pachysolen-Nuclear">Pachysolen-Nuclear</option>
            <option value="Mesodinium-Nuclear">Mesodinium-Nuclear</option>
            <option value="Peritrich-Nuclear">Peritrich-Nuclear</option>
            <option value="Cephalodiscidae-mtDNA">Cephalodiscidae-mtDNA</option>
        </param>
    </xml>

    <xml name="kill_zero_lengths_param">
        <param argument="--kill-zero-lengths" type="select" label="Kill zero-length branches" help="Automatically delete internal zero-length branches for computational efficiency">
            <option value="Yes" selected="true">Automatically delete internal zero-length branches for computational efficiency (will not affect results otherwise)</option>
            <option value="Constrain">Keep zero-length branches, but constrain their values to 0</option>
            <option value="No">Keep all branches</option>
        </param>
    </xml>

    <xml name="srv">
        <conditional name="advanced" label="Advanced options">
            <param name="srv_options" type="select" label="Advanced parameters" help="Use default values or specify advanced parameters">
                <option value="defaults">Use defaults</option>
                <option value="specify">Specify values</option>
            </param>
            <when value="defaults" />
            <when value="specify">
                <param argument="--grid-size" type="integer" value="250" label="Points in the initial distributional guess for likelihood fitting" max="5000"/>
                <param argument="--starting-points" type="integer" value="1" label="Initial random guesses to seed rate values optimization" help="The number of initial random guesses to seed rate values optimization" max="1000"/>
                <param argument="--syn-rates" type="integer" min="1" max="10" value="3" label="Synonymous rate classes" />
                <param argument="--rates" type="integer" min="2" max="10" value="3" label="Non-synonymous rate classes" />
                <param argument="--srv" type="select" label="Include synonymous rate variation">
                    <option value="No" selected="true">No</option>
                    <option value="Yes">Yes</option>
                    <option value="Branch-site">Branch-site</option>
                    <option value="HMM">HMM</option>
                </param>
            </when>
        </conditional>
    </xml>

    <xml name="busted_advanced_options">
        <conditional name="advanced" label="Advanced options">
            <param name="srv_options" type="select" label="Advanced parameters" help="Use default values or specify advanced parameters">
                <option value="defaults">Use defaults</option>
                <option value="specify">Specify values</option>
            </param>
            <when value="defaults" />
            <when value="specify">
                <param argument="--grid-size" type="integer" value="250" max="5000" label="Points in the initial distributional guess for likelihood fitting" help="The number of points in the initial distributional guess for likelihood fitting"/>
                <param argument="--starting-points" type="integer" value="1" label="Initial random guesses to seed rate values optimization" help="The number of initial random guesses to seed rate values optimization" max="1000"/>
                <param argument="--syn-rates" type="integer" min="1" max="10" value="3" label="Synonymous rate classes" help="The number of synonymous rate classes to include in the model [1-10, default 3]"/>
                <param argument="--rates" type="integer" min="2" max="10" value="3" label="Non-synonymous rate classes" help="The number of non-synonymous rate classes to include in the model [1-10, default 3]"/>
                <param argument="--multiple-hits" type="select" label="Multiple hits correction" help="Include support for multiple nucleotide substitutions">
                    <option value="None">None</option>
                    <option value="Double">Double</option>
                    <option value="Double+Triple">Double and Triple</option>
                </param>
                <param argument="--error-sink" type="boolean" truevalue="Yes" falsevalue="No" label="Include a rate class for misalignment artifacts (experimental)" help="Include a rate class to capture misalignment artifacts" checked="true"/>
                <param name="save_alternative_model" type="boolean" label="Save alternative model fit" help="Save BUSTED model fit to this file (default is not to save)"/>
                <conditional name="mss">
                    <param name="enabled" type="select" label="Include support for multiple synonymous rate class substitutions">
                        <option value="false" selected="true">No</option>
                        <option value="true">Yes</option>
                    </param>
                    <when value="false"/>
                    <when value="true">
                        <conditional name="mss_type_cond">
                            <param name="mss_type" type="select" label="How to partition synonymous codons into classes">
                                <option value="Full">Each set of codons mapping to the same amino-acid class have a separate substitution rate (Valine == neutral)</option>
                                <option value="SynREV">Each set of codons mapping to the same amino-acid class have a separate substitution rate (mean = 1)</option>
                                <option value="SynREV2">Each pair of synonymous codons mapping to the same amino-acid class and separated by a transition have a separate substitution rate (no rate scaling))</option>
                                <option value="SynREV2g">Each pair of synonymous codons mapping to the same amino-acid class and separated by a transition have a separate substitution rate (Valine == neutral). All between-class synonymous substitutions share a rate.</option>
                                <option value="SynREVCodon">Each codon pair that is exchangeable gets its own substitution rate (fully estimated, mean = 1)</option>
                                <option value="Random">Random partition (specify how many classes; largest class = neutral)</option>
                                <option value="Empirical">Load a TSV file with an empirical rate estimate for each codon pair</option>
                                <option value="File">Load a TSV partition from file (prompted for neutral class)</option>
                                <option value="Codon-file">Load a TSV partition for pairs of codons from a file (prompted for neutral class)</option>
                            </param>
                            <when value="Full"/>
                            <when value="SynREV"/>
                            <when value="SynREV2"/>
                            <when value="SynREV2g"/>
                            <when value="SynREVCodon"/>
                            <when value="Random">
                                <param name="mss_classes" type="integer" value="2" label="How many codon rate classes"/>
                            </when>
                            <when value="Empirical">
                                <param name="mss_file" type="data" format="tabular" label="File defining empirical rates for each pair of codons"/>
                            </when>
                            <when value="File">
                                <param name="mss_file" type="data" format="tabular" label="File defining the model partition"/>
                                <param name="mss_neutral" type="text" value="neutral" label="Designation for the neutral substitution rate"/>
                            </when>
                            <when value="Codon-file">
                                <param name="mss_file" type="data" format="tabular" label="File defining the model partition for pairs of codons"/>
                                <param name="mss_neutral" type="text" value="neutral" label="Designation for the neutral substitution rate"/>
                            </when>
                        </conditional>
                    </when>
                </conditional>
            </when>
        </conditional>
    </xml>

    <xml name="alternative_model_output">
        <data name="alternative_model" format="nex" from_work_dir="alternative_model.nhx" label="${tool.name} on ${on_string}: Alternative model">
            <filter>advanced_options.save_alternative_model == True</filter>
        </data>
    </xml>
    <xml name="branches">
        <conditional name="branch_cond">
            <param argument="--branches" name="branch_sel" type="select" label="Set of branches to test" help="Branches to test">
                <option value="All">All branches</option>
                <option value="Internal">Internal branches</option>
                <option value="Leaves">Leaf branches</option>
                <option value="'Unlabeled-branches'">Unlabeled branches</option>
                <option value="specify">Custom</option>
            </param>
            <when value="specify">
                <param name="branch_label" type="text" value="Test" optional="false" label="Branch label" help="The label for the branches to be tested. These labels are case-sensitive and must be present in the Newick tree in {label} format.">
                    <sanitizer invalid_char="">
                        <valid initial="default" />
                    </sanitizer>
                </param>
            </when>
            <when value="All" />
            <when value="Internal" />
            <when value="Leaves" />
            <when value="'Unlabeled-branches'" />
        </conditional>
    </xml>
    <xml name="citations">
        <citations>
            <citation type="doi">10.1093/molbev/msz197</citation>
            <yield/>
        </citations>
    </xml>
    <xml name="requirements">
        <requirements>
            <requirement type="package" version="@TOOL_VERSION@">hyphy</requirement>
            <yield/>
        </requirements>
    </xml>
    <xml name="regex_sanitizer">
        <sanitizer>
            <valid initial="string.ascii_letters,string.digits">
                <add value="^"/>
                <add value="$"/>
                <add value="("/>
                <add value=")"/>
                <add value="|"/>
                <add value="?"/>
                <add value="*"/>
                <add value="+"/>
                <add value="{"/>
                <add value="-"/>
                <add value="}"/>
                <add value="\"/>
                <add value="["/>
                <add value="]"/>
                <add value="."/>
                <add value=","/>
            </valid>
        </sanitizer>
        <validator type="empty_field" />
        <validator type="regex" message="Pattern must not end with backslash.">.*[^\\]$</validator>
    </xml>
    <xml name="resample">
        <param argument="--resample" type="integer" value="0" min="0" optional="true" label="Perform parametric bootstrap resampling to derive site-level null LRT distributions" help="Warning: This will result in a significantly slower analysis. A value of 0 means no resampling is performed. This parameter specifies the maximum number of replicates per site." />
    </xml>
    <token name="@resample@"><![CDATA[
            #if $resample:
                --resample $resample
            #end if
        ]]></token>

    <token name="@INPUT_TREE@"><![CDATA[
            #if $input_nhx:
                --tree input.nhx
            #end if
        ]]></token>
    <token name="@branch_options@"><![CDATA[
        #if $branch_cond.branch_sel == 'specify':
            --branches '$branch_cond.branch_label'
        #else:
            --branches $branch_cond.branch_sel
        #end if
        ]]></token>
    <token name="@advanced_options@"><![CDATA[
            #if $advanced.srv_options == 'specify':
                --grid-size $advanced.grid_size
                --starting-points $advanced.starting_points
                --syn-rates $advanced.syn_rates
                --rates $advanced.rates
                --srv '$advanced.srv'
            #end if
    ]]></token>
    <token name="@busted_advanced_options_command@"><![CDATA[
        #if $advanced.srv_options == 'specify':
            --grid-size $advanced.grid_size
            --starting-points $advanced.starting_points
            --syn-rates $advanced.syn_rates
            --rates $advanced.rates
            #if $advanced.multiple_hits != 'None':
                --multiple-hits $advanced.multiple_hits
            #end if
            #if $advanced.error_sink:
                --error-sink Yes
            #end if
            #if $advanced.save_alternative_model:
                --save-fit alternative_model.nhx
            #end if
            #if $advanced.mss.enabled == "true":
                --mss Yes
                --mss-type $advanced.mss.mss_type_cond.mss_type
                #if $advanced.mss.mss_type_cond.mss_type == "Random":
                    --mss-classes $advanced.mss.mss_type_cond.mss_classes
                #elif $advanced.mss.mss_type_cond.mss_type == "Empirical":
                    --mss-file $advanced.mss.mss_type_cond.mss_file
                #elif $advanced.mss.mss_type_cond.mss_type == "File":
                    --mss-file $advanced.mss.mss_type_cond.mss_file
                    --mss-neutral $advanced.mss.mss_type_cond.mss_neutral
                #elif $advanced.mss.mss_type_cond.mss_type == "Codon-file":
                    --mss-file $advanced.mss.mss_type_cond.mss_file
                    --mss-neutral $advanced.mss.mss_type_cond.mss_neutral
                #end if
            #end if
        #end if
    ]]></token>
    <token name="@srv_options@"><![CDATA[
        #if $srv_conditional.srv_enabled == 'true':
            --srv Yes
            #if $srv_conditional.syn_rates:
                --syn-rates $srv_conditional.syn_rates
            #end if
        #end if
    ]]></token>
    <token name="@HYPHYMPI@">\${GALAXY_MPIRUN:-mpirun --allow-run-as-root --oversubscribe -mca orte_tmpdir_base "\${TMPDIR:-.}" -np \${GALAXY_SLOTS:-1}} HYPHYMPI </token>
    <token name="@HYPHYMP@">hyphy CPU=\${GALAXY_SLOTS:-4}  </token>
    <token name="@ERRORS@"><![CDATA[
        ; EC=\$? ; [[ -f errors.* ]] && cat errors.* >&2 ; exit \$EC
    ]]></token>
    <token name="@HYPHY_ENVIRONMENT@">
        export HYPHY=`which hyphy` &amp;&amp;
        export HYPHY_PATH=`dirname \$HYPHY` &amp;&amp;
        export HYPHY_LIB=`readlink -f \$HYPHY_PATH/../share/hyphy` &amp;&amp;</token>
    <token name="@HYPHY_INVOCATION@">
        @HYPHY_ENVIRONMENT@ hyphy LIBPATH=\$HYPHY_LIB
    </token>
    <token name="@SYMLINK_FILES@"><![CDATA[
        #if $input_nhx is not None:
            ln -s '$input_nhx' input.nhx &&
        #end if
        ln -s '$input_file' input.$input_file.extension &&
        #set $input_file = 'input.%s' % $input_file.extension
    ]]></token>
    <token name="@SYMLINK_FILES_NO_TREE@"><![CDATA[
        ln -s '$input_file' input.$input_file.extension &&
    ]]></token>
</macros>
