view matutils.xml @ 0:79e2ee4e6ebb draft

"planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/usher commit c1531745ea5f5c4fbd22ad18e290b47fdcb01bb1"
author iuc
date Tue, 11 May 2021 17:54:51 +0000
parents
children 52fd1d491417
line wrap: on
line source

<tool id='usher_matutils' name='UShER matUtils' version='@TOOL_VERSION@+@GALAXY_TOOL_VERSION@' profile='20.01'>
    <description>analyze, edit, and manipulate mutation annotated tree files</description>
    <macros>
        <import>macros.xml</import>
    </macros>
    <expand macro='edam_ontology' />
    <expand macro='requirements' />
    <version_command>usher --version</version_command>
    <command detect_errors='exit_code'><![CDATA[
        matUtils
        $matutils_mode.options_mode
        --input-mat $mutation_annotation_file
        #if $matutils_mode.options_mode == 'extract'
            #if $matutils_mode.operation_mode.operation == 'samples'
                #if $matutils_mode.operation_mode.samples
                    --samples '${matutils_mode.operation_mode.samples}'
                #end if
                $matutils_mode.operation_mode.prune
            #elif $matutils_mode.operation_mode.operation == 'clade'
                --clade '${matutils_mode.operation_mode.clade}'
                $matutils_mode.operation_mode.prune
            #elif $matutils_mode.operation_mode.operation == 'mutation'
                --mutation '${matutils_mode.operation_mode.mutation}'
                $matutils_mode.operation_mode.prune
            #elif $matutils_mode.operation_mode.operation == 'max-epps'
                --max-epps $matutils_mode.operation_mode.max_epps
                $matutils_mode.operation_mode.prune
            #elif $matutils_mode.operation_mode.operation == 'max-parsimony'
                --max-parsimony $matutils_mode.operation_mode.max_parsimony
                $matutils_mode.operation_mode.prune
            #elif $matutils_mode.operation_mode.operation == 'nearest-k'
                --nearest-k '${matutils_mode.operation_mode.nearest_k}'
                $matutils_mode.operation_mode.prune
            #elif $matutils_mode.operation_mode.operation == 'max-branch-length'
                --max-branch-length $matutils_mode.operation_mode.max_branch_length
            #end if
            $matutils_mode.get_representative
            $matutils_mode.resolve_polytomies
            #if 'used-samples' in $matutils_mode.outputs_extract
                --used-samples selected_samples.txt ##$selected_samples
            #end if
            #if 'sample-paths' in $matutils_mode.outputs_extract
                --sample-paths path_mutations.tabular ##$path_mutations
            #end if
            #if 'clade-paths' in $matutils_mode.outputs_extract
                --clade-paths path_clades.tabular ##$path_clades
            #end if
            #if 'all-paths' in $matutils_mode.outputs_extract
                --all-paths all_paths.txt ##$all_paths
            #end if
            #if 'write-vcf' in $matutils_mode.outputs_extract
                --write-vcf subtree_vcf.vcf ##$subtree_vcf
            #end if
            #if 'write-vcf-no-genotypes' in $matutils_mode.outputs_extract and 'write-vcf' not in $matutils_mode.outputs_extract
                --write-vcf subtree_vcf_no_genotypes.vcf --no-genotypes
            #end if
            #if 'write-mat' in $matutils_mode.outputs_extract
                --write-mat mutation_annotated.pb ##$mutation_annotated
            #end if
            #if 'write-mat-collapsed' in $matutils_mode.outputs_extract and 'write-mat' not in $matutils_mode.outputs_extract
                --write-mat mutation_annotated_collapsed.pb --collapsed-tree
            #end if
            #if 'write-json' in $matutils_mode.outputs_extract
                --write-json subtree_json.json ##$subtree_json
            #end if
            #if 'write-tree' in $matutils_mode.outputs_extract
                --write-tree tree_newick.nh ##$tree_newick
            #end if
            #if 'write-tree-retain-branch' in $matutils_mode.outputs_extract and 'write-tree' not in $matutils_mode.outputs_extract
                --write-tree tree_newick_retain_branch.nh --retain-branch-length
            #end if
        #elif $matutils_mode.options_mode == 'summary'
            #if 'samples' in $matutils_mode.summary_options
                --samples samples_stats.tabular
            #end if
            #if 'clades' in $matutils_mode.summary_options
                --clades clades_stats.tabular
            #end if
            #if 'mutations' in $matutils_mode.summary_options
                --mutations mutations_stats.tabular
            #end if
            #if 'aberrant' in $matutils_mode.summary_options
                --aberrant aberrant_stats.tabular
            #end if
            --output-directory ./
        #elif $matutils_mode.options_mode == 'annotate'
            #if $matutils_mode.clade_names
                --clade-names '${matutils_mode.clade_names}'
                #if $matutils_mode.allele_frequency
                    --allele-frequency $matutils_mode.allele_frequency
                #end if
                #if $matutils_mode.set_overlap
                    --set-overlap $matutils_mode.set_overlap
                #end if
                #if $matutils_mode.mask_frequency
                    --mask-frequency $matutils_mode.mask_frequency
                #end if
                #if $matutils_mode.clip_sample_frequency
                    --clip-sample-frequency $matutils_mode.clip_sample_frequency
                #end if
            #end if
            #if $matutils_mode.clade_to_nid
                --clade-to-nid '${matutils_mode.clade_to_nid}'
            #end if
            $matutils_mode.clear_current
            --output-mat output_mat.pb ##$output_mat
        #elif $matutils_mode.options_mode == 'uncertainty'
            --samples '${matutils_mode.samples}'
            #if 'get-parsimony' in $matutils_mode.uncertainty_options
                --get-parsimony
            #end if
            #if 'find-epps' in $matutils_mode.uncertainty_options
                --find-epps equally_parsimonious.tabular
            #end if
            #if 'find-neighborhood' in $matutils_mode.uncertainty_options
                --find-neighborhood neighborhood.tabular
            #end if
        #elif $matutils_mode.options_mode == 'mask'
            #if $matutils_mode.restricted_samples
                --restricted-samples '${matutils_mode.restricted_samples}'
            #end if
            #if $matutils_mode.rename_samples
                --rename-samples '${matutils_mode.rename_samples}'
            #end if
            $$matutils_mode.simplify
            --output-mat output_mat.pb ##$output_mat
        #end if
        --threads \${GALAXY_SLOTS:-1} > output_stdout.txt

    ]]>    </command>
    <inputs>
        <param name="mutation_annotation_file" type="data" format="protobuf3" label="Mutation-annotated tree object" help="Load a mutation annotated tree file, in protocol-buffers format (protobuf3)."/>
        <conditional name="matutils_mode">
            <param name="options_mode" type="select" label="matUtils mode">
                <option value="extract">Extract: subsetting and converting a MAT pb to other file formats</option>
                <option value="summary">Summary: get basic statistics and attribute information about the MAT</option>
                <option value="annotate">Annotate: adding clade annotation information to the MAT</option>
                <option value="uncertainty">Uncertainty: calculates two specific metrics for sample placement certainty</option>
                <option value="mask">Mask: mask specific samples out of the MAT, removing their mutations from visibility</option>
            </param>
            <when value="extract">
                <conditional name="operation_mode">
                    <param name="operation" type="select" label="Operation mode">
                        <option value="samples">Select samples by naming them</option>
                        <option value="clade">Select samples by clade(s)</option>
                        <option value="mutation">Select samples by mutation</option>
                        <option value="max-epps">Select samples by parsimonious placements</option>
                        <option value="max-parsimony">Select samples by parsimonious score</option>
                        <option value="nearest-k">Select samples by sample and context</option>
                        <option value="max-branch-length">Remove samples by branch length</option>
                    </param>
                    <when value="samples">       
                        <param argument="--samples" type="data" format="txt" optional="True" label="Select samples by explicitly naming them, one per line in a plain text file" />
                        <param argument="--prune" type="boolean" truevalue="--prune" falsevalue="" label="Remove the selected samples" help="Remove the selected samples instead of keeping them in the output files" />
                    </when>
                    <when value="clade">   
                        <param argument="--clade" type="text" value="" label="Select samples by membership in any of the indicated clade(s), comma delimited- e.g. -c clade1,clade2">
                            <expand macro="sanitize_string" />
                        </param>
                        <param argument="--prune" type="boolean" truevalue="--prune" falsevalue="" label="Remove the selected samples" help="Remove the selected samples instead of keeping them in the output files" />
                    </when>
                    <when value="mutation">    
                        <param argument="--mutation" type="text" value="" label="Select samples by whether they contain any of the indicated mutation(s), comma delimited- e.g. -m mutation1,mutation2">
                            <expand macro="sanitize_string" />
                        </param>
                        <param argument="--prune" type="boolean" truevalue="--prune" falsevalue="" label="Remove the selected samples" help="Remove the selected samples instead of keeping them in the output files" />
                    </when>
                    <when value="max-epps">   
                        <param argument="--max-epps" type="integer" min="0" max="1000" value="" label="Select samples by whether they have less than or equal to the maximum number of indicated equally parsimonious placements" />
                        <param argument="--prune" type="boolean" truevalue="--prune" falsevalue="" label="Remove the selected samples" help="Remove the selected samples instead of keeping them in the output files" />
                    </when>
                    <when value="max-parsimony">   
                        <param argument="--max-parsimony" type="integer" min="0" max="1000" value="" label="Select samples by whether they have less than or equal to the indicated maximum parsimony score (terminal branch length)" />
                        <param argument="--prune" type="boolean" truevalue="--prune" falsevalue="" label="Remove the selected samples" help="Remove the selected samples instead of keeping them in the output files" />
                    </when>
                    <when value="nearest-k">
                        <param argument="--nearest-k" type="text" value="" label="Select a specific sample and X context samples, formatted as 'sample_name:X'">
                            <expand macro="sanitize_string" />
                        </param>
                        <param argument="--prune" type="boolean" truevalue="--prune" falsevalue="" label="Remove the selected samples" help="Remove the selected samples instead of keeping them in the output files" />
                    </when>
                    <when value="max-branch-length">       
                        <param argument="--max-branch-length" type="integer" min="0" max="1000" value="" label="Remove samples which have branches of greater than the indicated length in their ancestry" />
                    </when>
                </conditional>
                <param argument="--get-representative" type="boolean" truevalue="--get-representative" falsevalue="" label="Select two representative samples per clade" help=" Toggle to automatically select two representative samples per clade currently included in the tree, pruning all other samples from the tree. Applies after other selection steps" />
                <param argument="--resolve-polytomies" type="boolean" truevalue="--resolve-polytomies" falsevalue="" label="Resolve all polytomies" help="Resolve all polytomies by assigning branch length 0 relationships arbitrarily. Applied after selection; prevents recondensing of the MAT" />
                <param name="outputs_extract" type="select" display="checkboxes" multiple="true" label="Select the desired output">
                    <option value="used-samples">Write a simple text file containing selected sample names (--used-samples)</option>
                    <option value="sample-paths">Write the path of mutations defining each sample in the subtree (--sample-paths)</option>
                    <option value="clade-paths">Write the path of mutations defining each clade in the subtree (--clade-paths)</option>
                    <option value="all-paths">Write mutations assigned to each node in the subtree in depth-first traversal order (--all-paths)</option>
                    <option value="write-vcf">Output VCF file representing selected subtree (--write-vcf)</option>  
                    <option value="write-vcf-no-genotypes">Output VCF file representing selected subtree without including genotype column (--write-vcf --no-genotypes) </option>  
                    <option value="write-mat">Write the selected subtree as a mutation annotated tree (--write-math)</option>  
                    <option value="write-mat-collapsed">Write the selected subtree as a collapsed mutation annotated tree (--write-mat --collapsed)</option>  
                    <option value="write-json">Write an Auspice-compatbile json representing the selected subtree (--write-json)</option>  
                    <option value="write-tree"> Write a newick string representing the selected subtree (--write-tree)</option>
                    <option value="write-tree-retain-branch"> Write a newick string representing the selected subtree without recalculating branch lengths (--write-tree --retain-branch)</option>  
                </param>
            </when>
            <when value="summary">
                <param name="summary_options" type="select" display="checkboxes" multiple="true" label="Select statistics and attribute information">
                    <option value="general">Number of nodes, number of samples, number of condensed nodes, and total tree parsimony</option>
                    <option value="samples">Samples in the tree and their parsimony score (--samples)</option>
                    <option value="clades">Clades and the count of associated samples in the tree (--clades)</option>
                    <option value="mutations">Mutations in the tree and their occurrence count (--mutations)</option>
                    <option value="aberrant">Potentially problematic nodes (--aberrant)</option>
                </param>
            </when>
            <when value="annotate">
                <param argument="--clade-names" type="data" format="tabular" optional="True" label="File containing clade asssignments of samples" help="An algorithm automatically locates and annotates clade root nodes."/>
                <param argument="--clade-to-nid" type="data" format="tabular" optional="True" label="File mapping clades to their respective internal node identifiers" help="Internal node names are not maintained when saving and loading from a .pb file. It is not guaranteed that internal node names will correspond directly between two .pb files, so use the direct assignment method with caution."/>                
                <param argument="--set-overlap" type="float" min="0" max="1" value="" optional="True" label="Minimum fraction of the lineage samples" help="Minimum fraction of the lineage samples that should be desecendants of the assigned clade root. Used only with --clade-names" />
                <param argument="--clear-current" type="boolean" truevalue="--clear-current" falsevalue="" label="Remove current annotations" help="Use to remove current annotations before applying new annotations." />
                <param argument="--allele-frequency" type="float" min="0" max="1" value="" optional="True" label="Minimum allele frequency for finding the best clade root" help="Minimum allele frequency in input samples for finding the best clade root. Used only with 'remove current annotation'. Used only with --clade-names" />
                <param argument="--mask-frequency" type="float" min="0" max="1" value="" optional="True" label="Minimum allele frequency for being masked" help="Minimum allele frequency in input samples that should be masked for finding the best clade root. Used only with --clade-names" />
                <param argument="--clip-sample-frequency" type="float" min="0" max="1" value="" optional="True" label="Clip sample frequency" help="Maximum proportion of samples in a branch that are exemplars from --clade-names to consider when sorting candidate clade root nodes." />
            </when>
            <when value="uncertainty">
                <param argument="--samples" type="data" format="txt" label="Select samples by explicitly naming them, one per line in a plain text file" />
                <param name="uncertainty_options" type="select" display="checkboxes" multiple="true" label="Metrics for sample placement certainty">
                    <option value="get-parsimony">Total tree parsimony score (--get-parsimony)</option>
                    <option value="find-epps">Number of equally parsimonious placements for each sample (--find-epps)</option>
                    <option value="find-neighborhood">Neighborhood size scores (--find-neighborhood)</option>
                </param>
            </when>
            <when value="mask">
                <param argument="--restricted-samples" type="data" format="txt" optional="True" label="Select samples by explicitly naming them, one per line in a plain text file" help="Sample names to restrict. Use to perform masking"/>
                <param argument="--rename-samples" type="data" format="tabular" optional="True" label="TSV file containing names of the samples to be renamed and their new names"/>
                <param argument="--simplify" type="boolean" truevalue="--simplify" falsevalue="" label="Use to automatically remove identifying information from the tree, including all sample names and private mutations" />
            </when>
        </conditional>
    </inputs>
    <outputs>
        <data name="selected_samples" format="txt" from_work_dir='selected_samples.txt' label="${tool.name} on ${on_string}: selected samples">
            <filter>matutils_mode['options_mode'] == 'extract' and 'used-samples' in matutils_mode['outputs_extract'] </filter>
        </data>     
        <data name="path_mutations" format="tabular" from_work_dir='path_mutations.tabular' label="${tool.name} on ${on_string}: sample mutations">
            <filter>matutils_mode['options_mode'] == 'extract' and 'sample-paths' in matutils_mode['outputs_extract']</filter>
        </data>    
        <data name="path_clades" format="tabular"  from_work_dir='path_clades.tabular' label="${tool.name} on ${on_string}: clade mutations">
            <filter>matutils_mode['options_mode'] == 'extract' and 'clade-paths' in matutils_mode['outputs_extract']</filter>
        </data>    
        <data name="all_paths" format="txt" from_work_dir='all_paths.txt' label="${tool.name} on ${on_string}: node mutations">
            <filter>matutils_mode['options_mode'] == 'extract' and 'all-paths' in matutils_mode['outputs_extract']</filter>
        </data>    
        <data name="subtree_vcf" format="vcf" from_work_dir='subtree_vcf.vcf' label="${tool.name} on ${on_string}: subtree">
            <filter>matutils_mode['options_mode'] == 'extract' and 'write-vcf' in matutils_mode['outputs_extract']</filter>
        </data>  
        <data name="subtree_no_genotype_vcf" format="vcf" from_work_dir='subtree_vcf_no_genotypes.vcf' label="${tool.name} on ${on_string}: subtree without genotype">
            <filter>matutils_mode['options_mode'] == 'extract' and 'write-vcf-no-genotypes' in matutils_mode['outputs_extract'] and 'write-vcf' not in matutils_mode['outputs_extract']</filter>
        </data>  
        <data name="mutation_annotated" format="protobuf3" from_work_dir='mutation_annotated.pb' label="${tool.name} on ${on_string}: mutation annotated tree">
            <filter>matutils_mode['options_mode'] == 'extract' and 'write-mat' in matutils_mode['outputs_extract'] </filter>
        </data>  
        <data name="mutation_annotated_collapsed" format="protobuf3" from_work_dir='mutation_annotated_collapsed.pb' label="${tool.name} on ${on_string}: mutation annotated tree collapsed">
            <filter>matutils_mode['options_mode'] == 'extract' and 'write-mat-collapse' in matutils_mode['outputs_extract'] and 'write-mat' not in matutils_mode['outputs_extract']</filter>
        </data>  
        <data name="subtree_json" format="json" from_work_dir='subtree_json.json' label="${tool.name} on ${on_string}: subtree (json)">
            <filter>matutils_mode['options_mode'] == 'extract' and 'write-json' in matutils_mode['outputs_extract']</filter>
        </data>  
        <data name="tree_newick" format="newick" from_work_dir='tree_newick.nh' label="${tool.name} on ${on_string}: subtree (newick)">
            <filter>matutils_mode['options_mode'] == 'extract' and 'write-tree' in matutils_mode['outputs_extract']</filter>
        </data>  
        <data name="tree_newick_retain_branch" format="newick" from_work_dir='tree_newick_retain_branch.nh' label="${tool.name} on ${on_string}: subtree retain branch (newick)">
            <filter>matutils_mode['options_mode'] == 'extract' and 'write-tree-retain-branch' in matutils_mode['outputs_extract'] and 'write-tree' not in matutils_mode['outputs_extract']</filter>
        </data> 
        <data name="general_stats" format="txt" from_work_dir='output_stdout.txt' label="${tool.name} on ${on_string}: general stats">
            <filter>matutils_mode['options_mode'] == 'summary' and 'general' in matutils_mode['summary_options']</filter>
        </data>  
        <data name="samples_stats" format="tabular" from_work_dir='samples_stats.tabular' label="${tool.name} on ${on_string}: samples stats">
            <filter>matutils_mode['options_mode'] == 'summary' and 'samples' in matutils_mode['summary_options']</filter>
        </data>  
        <data name="clades_stats" format="tabular" from_work_dir='clades_stats.tabular' label="${tool.name} on ${on_string}: clades stats">
            <filter>matutils_mode['options_mode'] == 'summary' and 'clades' in matutils_mode['summary_options']</filter>
        </data>  
        <data name="mutations_stats" format="tabular" from_work_dir='mutations_stats.tabular' label="${tool.name} on ${on_string}: mutations stats">
            <filter>matutils_mode['options_mode'] == 'summary' and 'mutations' in matutils_mode['summary_options']</filter>
        </data>  
        <data name="aberrant_stats" format="tabular" from_work_dir='aberrant_stats.tabular' label="${tool.name} on ${on_string}: aberrant stats">
            <filter>matutils_mode['options_mode'] == 'summary' and 'aberrant' in matutils_mode['summary_options']</filter>
        </data>  
        <data name="output_mat" format="protobuf3" from_work_dir='output_mat.pb' label="${tool.name} on ${on_string}: mutation annotated tree">
            <filter>matutils_mode['options_mode'] == 'annotate' or matutils_mode['options_mode'] == 'mask'</filter>
        </data>  
        <data name="total_parsimony_tree" format="txt" from_work_dir='output_stdout.txt' label="${tool.name} on ${on_string}: parsimony tree">
            <filter>matutils_mode['options_mode'] == 'uncertainty' and 'get-parsimony' in matutils_mode['uncertainty_options']</filter>
        </data>  
        <data name="equally_parsimonious" from_work_dir='equally_parsimonious.tabular' format="tabular" label="${tool.name} on ${on_string}: equally parsimonious placements">
            <filter>matutils_mode['options_mode'] == 'uncertainty' and 'find-epps' in matutils_mode['uncertainty_options']</filter>
        </data>  
        <data name="neighbourhood" format="tabular" from_work_dir='neighborhood.tabular' label="${tool.name} on ${on_string}: neighborhood size scores">
            <filter>matutils_mode['options_mode'] == 'uncertainty' and 'find-neighborhood' in matutils_mode['uncertainty_options']</filter>
        </data>  
    </outputs>
    <tests>
        <test expect_num_outputs="3">
            <param name="mutation_annotation_file" value="mutation_annotation.pb"/>
            <conditional name="matutils_mode">
                <param name="options_mode" value="extract"/>
                <param name="resolve_polytomies" value="true"/>
                <param name="outputs_extract" value="used-samples,sample-paths,clade-paths"/>
                <conditional name="operation_mode">
                    <param name="operation" value="samples"/>
                    <param name="samples" value="sample_names.txt"/>
                    <param name="prune" value="true"/>
                </conditional>
            </conditional>
            <output name="selected_samples" file="test_13_sample_names.txt" ftype="txt"/>
            <output name="path_mutations" file="test_13_path_mutations.tabular" ftype="tabular"/>
            <output name="path_clades" file="test_13_path_clades.tabular" ftype="tabular"/>
        </test>
        <test expect_num_outputs="5">
            <param name="mutation_annotation_file" value="mutation_annotation.pb"/>
            <conditional name="matutils_mode">
                <param name="options_mode" value="extract"/>
                <param name="outputs_extract" value="used-samples,sample-paths,clade-paths,all-paths,write-vcf"/>
                <conditional name="operation_mode">
                    <param name="operation" value="samples"/>
                    <param name="samples" value="sample_names.txt"/>
                </conditional>
            </conditional>
            <output name="selected_samples" file="test_14_sample_names.txt" ftype="txt"/>
            <output name="path_mutations" file="test_14_path_mutations.tabular" ftype="tabular"/>
            <output name="path_clades" file="test_14_path_clades.tabular" ftype="tabular"/>
            <output name="all_paths" file="test_14_all_paths.txt" ftype="txt"/>
            <output name="subtree_vcf" ftype="vcf">
                <assert_contents>
                    <has_size value="7219100" delta="300"/>
                </assert_contents>
            </output>
        </test>
        <test expect_num_outputs="4">
            <param name="mutation_annotation_file" value="mutation_annotation.pb"/>
            <conditional name="matutils_mode">
                <param name="options_mode" value="extract"/>
                <param name="outputs_extract" value="write-vcf-no-genotypes,write-mat,write-json,write-tree"/>
                <conditional name="operation_mode">
                    <param name="operation" value="mutation"/>
                    <param name="mutation" value="C241T"/>
                </conditional>
            </conditional>
            <output name="subtree_no_genotype_vcf" file="test_15_subtree_no_genotype.vcf" ftype="vcf"/>
            <output name="mutation_annotated" file="test_15_mutation_annotated_tree.pb" ftype="protobuf3"/>
            <output name="subtree_json" file="test_15_subtree.json" ftype="json"/>
            <output name="tree_newick" file="test_15_tree.nh" ftype="newick"/>
        </test>
        <test expect_num_outputs="3">
            <param name="mutation_annotation_file" value="mutation_annotation.pb"/>
            <conditional name="matutils_mode">
                <param name="options_mode" value="extract"/>
                <param name="outputs_extract" value="used-samples,sample-paths,write-vcf"/>
                <conditional name="operation_mode">
                    <param name="operation" value="clades"/>
                    <param name="clade" value="B.1.160.7, B.1.258.4"/>
                </conditional>
            </conditional>
            <output name="selected_samples" file="test_16_sample_names.txt" ftype="txt"/>
            <output name="path_mutations" file="test_16_path_mutations.tabular" ftype="tabular"/>
            <output name="subtree_vcf" ftype="vcf">
                <assert_contents>
                    <has_size value="8999600" delta="300"/>
                </assert_contents>
            </output>
        </test>
        <test expect_num_outputs="5">
            <param name="mutation_annotation_file" value="mutation_annotation.pb"/>
            <conditional name="matutils_mode">
                <param name="options_mode" value="extract"/>
                <param name="outputs_extract" value="used-samples,sample-paths,clade-paths,all-paths,write-vcf"/>
                <conditional name="operation_mode">
                    <param name="operation" value="max-epps"/>
                    <param name="max_epps" value="0"/>
                </conditional>
            </conditional>
            <output name="selected_samples" file="test_17_sample_names.txt" ftype="txt"/>
            <output name="path_mutations" file="test_17_path_mutations.tabular" ftype="tabular"/>
            <output name="path_clades" file="test_17_path_clades.tabular" ftype="tabular"/>
            <output name="all_paths" file="test_17_all_paths.txt" ftype="txt"/>
            <output name="subtree_vcf" ftype="vcf">
                <assert_contents>
                    <has_size value="8999600" delta="300"/>
                </assert_contents>
            </output>
        </test>
        <test expect_num_outputs="5">
            <param name="mutation_annotation_file" value="mutation_annotation.pb"/>
            <conditional name="matutils_mode">
                <param name="options_mode" value="extract"/>
                <param name="outputs_extract" value="used-samples,sample-paths,clade-paths,all-paths,write-vcf"/>
                <conditional name="operation_mode">
                    <param name="operation" value="max-parsimony"/>
                    <param name="max_parsimony" value="1"/>
                </conditional>
            </conditional>
            <output name="selected_samples" file="test_18_sample_names.txt" ftype="txt"/>
            <output name="path_mutations" file="test_18_path_mutations.tabular" ftype="tabular"/>
            <output name="path_clades" file="test_18_path_clades.tabular" ftype="tabular"/>
            <output name="all_paths" file="test_18_all_paths.txt" ftype="txt"/>
            <output name="subtree_vcf" ftype="vcf">
                <assert_contents>
                    <has_size value="1183300" delta="300"/>
                </assert_contents>
            </output>
        </test>
        <test expect_num_outputs="3">
            <param name="mutation_annotation_file" value="mutation_annotation.pb"/>
            <conditional name="matutils_mode">
                <param name="options_mode" value="extract"/>
                <param name="outputs_extract" value="used-samples,sample-paths,clade-paths"/>
                <conditional name="operation_mode">
                    <param name="operation" value="max-branch-length"/>
                    <param name="max_branch_length" value="2"/>
                </conditional>
            </conditional>
            <output name="selected_samples" file="test_19_sample_names.txt" ftype="txt"/>
            <output name="path_mutations" file="test_19_path_mutations.tabular" ftype="tabular"/>
            <output name="path_clades" file="test_19_path_clades.tabular" ftype="tabular"/>
        </test>
        <test expect_num_outputs="1">
            <param name="mutation_annotation_file" value="mutation_annotation.pb"/>
            <conditional name="matutils_mode">
                <param name="options_mode" value="summary"/>
                <param name="summary_options" value="general"/>
            </conditional>
            <output name="general_stats" file="test_20_general_stats.txt" ftype="txt"/>
        </test>
        <test expect_num_outputs="4">
            <param name="mutation_annotation_file" value="mutation_annotation.pb"/>
            <conditional name="matutils_mode">
                <param name="options_mode" value="summary"/>
                <param name="summary_options" value="samples,clades,mutations,aberrant"/>
            </conditional>
            <output name="samples_stats" file="test_21_sample_stats.tabular" ftype="tabular"/>
            <output name="clades_stats" file="test_21_clades_stats.tabular" ftype="tabular"/>
            <output name="mutations_stats" file="test_21_mutations_stats.tabular" ftype="tabular"/>
            <output name="aberrant_stats" file="test_21_aberrant_stats.tabular" ftype="tabular"/>       
        </test>
        <test expect_num_outputs="1">
            <param name="mutation_annotation_file" value="mutation_annotation.pb"/>
            <conditional name="matutils_mode">
                <param name="options_mode" value="uncertainty"/>
                <param name="samples" value="sample_names.txt"/>
                <param name="uncertainty_options" value="get-parsimony"/>
            </conditional>
            <output name="total_parsimony_tree" file="test_22_total_parsimony_tree.txt" ftype="txt"/>
        </test>
        <test expect_num_outputs="2">
            <param name="mutation_annotation_file" value="mutation_annotation.pb"/>
            <conditional name="matutils_mode">
                <param name="options_mode" value="uncertainty"/>
                <param name="samples" value="sample_names.txt"/>
                <param name="uncertainty_options" value="find-epps,find-neighborhood"/>
            </conditional>
            <output name="equally_parsimonious" file="test_23_equally_parsimoniou.tabular" ftype="tabular"/>
            <output name="neighbourhood" file="test_23_neighbourhood.tabular" ftype="tabular"/>
        </test>
        <test expect_num_outputs="1">
            <param name="mutation_annotation_file" value="mutation_annotation.pb"/>
            <conditional name="matutils_mode">
                <param name="options_mode" value="mask"/>
                <param name="restricted_samples" value="sample_names.txt"/>
                <param name="simplify" value="true"/>
            </conditional>
            <output name="output_mat" file="test_24_restricted.pb" ftype="protobuf3"/>
        </test>
        <test expect_num_outputs="1">
            <param name="mutation_annotation_file" value="mutation_annotation.pb"/>
            <conditional name="matutils_mode">
                <param name="options_mode" value="mask"/>
                <param name="rename_samples" value="rename_samples.tabular"/>
            </conditional>
            <output name="output_mat" file="test_25_renamed.pb" ftype="protobuf3"/>
        </test>
    </tests>
    <help><![CDATA[

.. class:: infomark

**Purpose**

matUtils is a suite of tools used to analyze, edit, and manipulate mutation annotated tree (.pb) files. 

----

.. class:: infomark

**matUtils Common Options**

**Extract**: matUtils extract serves as a flexible prebuilt pipeline, and serves as the primary tool for subsetting and converting a MAT pb to other file formats. 
**Sumary**: matUtils summary is used to get basic statistics and attribute information about the mat. 
**Annotate**: matUtils annotate is a function for adding clade annotation information to the pb.
**Uncertainly**: matUtils uncertainty calculates two specific metrics for sample placement certainty. These metrics can be very important to support contact tracing and reliable identification of the origin of a newly placed sample.
**Mask**: matUtils mask is used to mask specific samples out of the pb, removing their mutations from visibility.

You can find more information in the `matUtils official documentation page <https://usher-wiki.readthedocs.io/en/latest/matUtils.html>`_.

    ]]>    </help>
    <expand macro="citations" />
</tool>