view export_otu.xml @ 1:f92f6cb141fd draft default tip

planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/main/tools/ampvis2 commit e0ad9ce8f508215ec6af69be2682a0faf38415da
author iuc
date Mon, 10 Nov 2025 12:50:02 +0000
parents adab1cdb8811
children
line wrap: on
line source

<tool id="ampvis2_export_otu" name="ampvis2 export otu" version="@TOOL_VERSION@+galaxy1" profile="@PROFILE@" license="MIT">
    <description></description>
    <macros>
        <import>macros.xml</import>
    </macros>
    <expand macro="header"/>
    <command detect_errors="exit_code"><![CDATA[
        Rscript '$rscript' &&
        mv tmp_otu.tsv $otu_long
    ]]></command>
    <configfiles>
        <configfile name="rscript"><![CDATA[
            library(ampvis2, quietly = TRUE)
            library(phyloseq)
            library(tibble)

            ## read the data
            data <- readRDS("$data")

            ## Export otutable (including taxonomy) from an ampvis2 object as TSV
            amp_export_otutable(data, filename = "tmp_otu", sep = "\t", extension = "tsv", normalise = "$norm")

            ## get only tax table (first column OTU ID)
            tax_table <- data\$tax
            tax_table <- tax_table[,c(8,(ncol(tax_table)-6):(ncol(tax_table) - 1))]
            write.table(tax_table, "$tax", sep = "\t", row.names=FALSE, quote = FALSE)

            ## get only otu table (first column OTU ID)
            #if $norm
                data_norm <- normaliseTo100(data)
                otu_table <- data_norm\$abund
            #else
                otu_table <- data\$abund
            #end if

            otu_table <- cbind(OTU = rownames(otu_table), otu_table)

            ## add index col manually: https://stackoverflow.com/questions/2478352/write-table-writes-unwanted-leading-empty-column-to-header-when-has-rownames
            write.table(otu_table, "$otu_short", sep = "\t", row.names=FALSE, quote = FALSE)

            ## get metadata
            meta_data = data\$metadata
            write.table(meta_data, "$meta", sep = "\t", row.names = FALSE, quote = FALSE)

            ## needs to be numeric
            otu_table <- apply(otu_table, 2, as.numeric)

            ## needs to be character so that reupload as ampvis object works
            meta_data[] <- lapply(meta_data, as.character)

            OTU <- otu_table(otu_table, taxa_are_rows = TRUE)
            TAX <- tax_table(tax_table)
            META <- sample_data(meta_data)

            ## we always assume this names and order
            colnames(TAX) <- c("Kingdom", "Phylum", "Class", "Order", "Family", "Genus", "Species")

            physeq <- phyloseq(OTU, TAX, META)

            ## Save the Phyloseq object
            saveRDS(physeq, "$phyloseq")

        ]]></configfile>
    </configfiles>
    <inputs>
        <expand macro="rds_input_macro"/>
        <param argument="norm" type="boolean" truevalue="TRUE" falsevalue="FALSE" checked="false" label="Transform the OTU read counts to be in percent per sample"/>
        <param name="output_selection" type="select" multiple="true" label="Output files selection" min="1">
            <option value="otu_long" selected="false">
                Long OTU with Taxonomy at the end 
            </option>
            <option value="otu_short" selected="true">
                Short OTU
            </option>
            <option value="tax" selected="true">
                Taxonomy mapping
            </option>
            <option value="meta" selected="true">
                Metadata mapping
            </option>
            <option value="phyloseq" selected="false">
                Phyloseq object
            </option>
        </param>
    </inputs>
    <outputs>
        <data name="otu_long" format="tabular" label="${tool.name}: Long OTU" >
        <filter>"otu_long" in output_selection</filter>
        </data>
        <data name="otu_short" format="tabular" label="${tool.name}: Short OTU">
        <filter>"otu_short" in output_selection</filter>
        </data>
        <data name="tax" format="tabular" label="${tool.name}: Taxonomy mapping" >
        <filter>"tax" in output_selection</filter>
        </data>
        <data name="meta" format="tabular" label="${tool.name}: Metadata mapping" >
        <filter>"meta" in output_selection</filter>
        </data>
        <data name="phyloseq" format="phyloseq" label="${tool.name}: Phyloseq object" >
        <filter>"phyloseq" in output_selection</filter>
        </data>
    </outputs>
    <tests>
        <!-- defaults -->
        <test expect_num_outputs="3">
            <param name="data" value="AalborgWWTPs-complete.rds" ftype="ampvis2"/> 
            <output name="otu_short" value="output_otu_short.tsv" ftype="tabular" />
            <output name="tax" value="output_otu_taxonomy_mapping.tsv" ftype="tabular" />
            <output name="meta" value="output_metadata.tsv" ftype="tabular" />
        </test>
        <test expect_num_outputs="5">
            <param name="data" value="AalborgWWTPs-complete.rds" ftype="ampvis2"/> 
            <param name="output_selection" value="otu_long,otu_short,tax,meta,phyloseq" />
            <output name="otu_long" value="output_otu_long.tsv" ftype="tabular" />
            <output name="otu_short" value="output_otu_short.tsv" ftype="tabular" />
            <output name="tax" value="output_otu_taxonomy_mapping.tsv" ftype="tabular" />
            <output name="meta" value="output_metadata.tsv" ftype="tabular" />
            <output name="phyloseq" ftype="phyloseq" >
                <assert_contents>
                    <has_size value="12684" delta="10"/>
                </assert_contents>
            </output>
        </test>
    </tests>
    <help><![CDATA[
What it does
============

Exports OTU/ASV, Taxonomy table, Metadata, or phyloseq object from an ampvis2 object.  
The taxonomy table in the phyloseq object always uses the following headers:  
``Kingdom, Phylum, Class, Order, Family, Genus, Species``.  

This can be changed using the `Add Rank Names to Phyloseq Object <toolshed.g2.bx.psu.edu/repos/iuc/phyloseq_add_rank_names/phyloseq_add_rank_names/1.50.0+galaxy2>`_ tool.  

The Galaxy tool calls the `amp_export_otutable <https://kasperskytte.github.io/ampvis2/reference/amp_export_otutable.html>`_ function  
from the ampvis2 package.  

Input
=====

@HELP_RDS_INPUT@

Use case
========

Load your OTU into a ampvis object with ampvis load. Subset based on metadata and/or taxonomy. Export the OTU table / phyloseq object.
Perform downstream analysis such as differential analysis and/or phyloseq visualization.

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