view rcx_boxplot.xml @ 0:92325ed91115 draft default tip

planemo upload for repository https://github.com/RECETOX/galaxytools/tree/master/tools commit 68159a987b0597222625834e235441b95e8c3a5e
author recetox
date Mon, 03 Feb 2025 16:18:52 +0000
parents
children
line wrap: on
line source

<tool id="rcx_boxplot" name="recetox-boxplot" version="@TOOL_VERSION@+galaxy0" profile="23.0">
    <description>Boxplot visualization tool using ggplot2</description>
    <macros>
        <import>macros.xml</import>
        <import>help.xml</import>
    </macros>

    <expand macro="creator" />
    <expand macro="requirements" />

    <command detect_errors="exit_code"><![CDATA[
        Rscript '${run_script}'
        #if $export_R_script
        && cat ${run_script} >> $script
        #end if
    ]]></command>

    <configfiles>
        <configfile name="run_script"><![CDATA[

        #if $input_data.ext == "csv"
        data_input <- read.csv("$input_data", check.names = "false")
        #else if $input_data.ext in ["tsv", "txt", "tabular"]
        data_input <- read.delim("$input_data", sep="\t", check.names = "false")
        #else if $input_data.ext == "parquet"
        data_input <- arrow::read_parquet("$input_data")
        #end if

        #if $has_rownames
        rownames(data_input) <- data_input[, 1]
        data_input <- data_input[ ,-1]
        #end if

        y_colname <- "intensity"
        data_long <- tidyr::pivot_longer(data_input,
                                         cols = c(1:ncol(data_input)),
                                         names_to = "samples",
                                         values_to = y_colname)

        #if $transform_data == "replace_zero"
        data_long[data_long == 0] <- NA
        #else if $transform_data == "log2"
        data_long[[y_colname]] <- log2(data_long[[y_colname]])
        #else if $transform_data == "log10"
        data_long[[y_colname]] <- log10(data_long[[y_colname]])        
        #end if

        #if $grouping_boxplot.use_grouping == "yes"
        metadata_input <- read.delim("$grouping_boxplot.input_metadata", sep="\t",  check.names = "false")
        sampleID_column <- colnames(metadata_input)[$grouping_boxplot.sampleID]
        plotting_column <- colnames(metadata_input)[$grouping_boxplot.groupingCol]
        metadata_input <- data.frame(lapply(metadata_input, as.factor))

        data_long <- dplyr::left_join(data_long, metadata_input, by = c("samples" = sampleID_column), keep = TRUE)

        #if $grouping_boxplot.facet_x
        facet_x <- rlang::sym(colnames(metadata_input)[$grouping_boxplot.facet_x])
        #else 
        facet_x <- NULL
        #end if
 
        #if $grouping_boxplot.facet_y
        facet_y <- rlang::sym(colnames(metadata_input)[$grouping_boxplot.facet_y])
        #else
        facet_y <- NULL
        #end if

        plot_boxplot <- ggplot2::ggplot(data_long, ggplot2::aes(
            x = !!rlang::sym(plotting_column),
            y = intensity,
            #if $grouping_boxplot.colorCol
            fill = !!rlang::sym(colnames(metadata_input)[$grouping_boxplot.colorCol])
            #end if
        )) +
                                        ggplot2::geom_boxplot() +
                                        ggplot2::theme_bw()+
                                        ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 45, hjust=1)) +
                                        ggplot2::facet_grid(rows = if(!is.null(facet_y)) dplyr::vars(!!facet_y) else NULL,
                                                            cols = if(!is.null(facet_x)) dplyr::vars(!!facet_x) else NULL,
                                                            scales = "free")


        #else 

        plot_boxplot <- ggplot2::ggplot(data_long, ggplot2::aes(x = samples, y = intensity)) +
                                        ggplot2::geom_boxplot() +
                                        ggplot2::theme_bw()+
                                        ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 45, hjust=1))

        #end if

        #if $xlab
        plot_boxplot <- plot_boxplot + ggplot2::xlab("$xlab")
        #end if

        #if $ylab
        plot_boxplot <- plot_boxplot + ggplot2::ylab("$ylab")
        #end if

        #if $flip_axes == "true"
        plot_boxplot <- plot_boxplot + ggplot2::coord_flip()
        #end if

        ggplot2::ggsave(filename = "boxplot.png", plot_boxplot)

        ]]></configfile>
    </configfiles>

    <inputs>
        <expand macro="boxplot_param"/>
    </inputs>

    <outputs>
        <data name="boxplot" format="png" label="Boxplot on ${on_string}" from_work_dir="boxplot.png"/>        
        <data name="script" format="txt" label="R script">
            <filter>export_R_script</filter>
        </data>
    </outputs>

    <tests>
        <test expect_num_outputs="1">
            <param name="input_data" value="test_data.txt"/>
            <param name="has_rownames" value="true"/>
            <output name="boxplot" ftype="png">
                <assert_contents>
                    <has_size size="1164615" delta="200"/>
                </assert_contents>
            </output>          
        </test>
        <test expect_num_outputs="2">
            <param name="input_data" value="test_data.txt"/>
            <param name="has_rownames" value="true"/>
            <param name="use_grouping" value="yes"/>
            <param name="input_metadata" value="test_expDesign.txt"/>
            <param name="sampleID" value="1"/>
            <param name="groupingCol" value="1"/>
            <param name="export_R_script" value="TRUE"/>
            <output name="boxplot" ftype="png">
                <assert_contents>
                    <has_size size="1164615" delta="200"/>
                </assert_contents>
            </output>          
        </test>
    </tests>

    <help><![CDATA[
        @GENERAL_HELP@
    ]]></help>

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