changeset 0:f4d0bd4b4d6d draft

planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/aldex2 commit b99f09cf03f075a6881d192b0f1233233289fa60
author iuc
date Wed, 29 Jun 2022 07:36:45 +0000
parents
children 75214276e2b7
files aldex2.R aldex2.xml macros.xml test-data/reads.tabular
diffstat 4 files changed, 874 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/aldex2.R	Wed Jun 29 07:36:45 2022 +0000
@@ -0,0 +1,150 @@
+#!/usr/bin/env Rscript
+
+suppressPackageStartupMessages(library("ALDEx2"))
+suppressPackageStartupMessages(library("data.table"))
+suppressPackageStartupMessages(library("qgraph"))
+suppressPackageStartupMessages(library("optparse"))
+
+option_list <- list(
+    make_option(c("--aldex_test"), action = "store", dest = "aldex_test", default = NULL, help = "Indicates which analysis to perform"),
+    make_option(c("--analysis_type"), action = "store", dest = "analysis_type", help = "Indicates which analysis to perform"),
+    make_option(c("--cutoff_effect"), action = "store", dest = "cutoff_effect", type = "integer", default = NULL, help = "Effect size cutoff for plotting"),
+    make_option(c("--cutoff_pval"), action = "store", dest = "cutoff_pval", type = "double", default = NULL, help = "Benjamini-Hochberg fdr cutoff"),
+    make_option(c("--denom"), action = "store", dest = "denom", help = "Indicates which features to retain as the denominator for the Geometric Mean calculation"),
+    make_option(c("--effect"), action = "store", dest = "effect", default = "false", help = "Calculate abundances and effect sizes"),
+    make_option(c("--feature_name"), action = "store", dest = "feature_name", default = NULL, help = "Name of the feature from the input data to be plotted"),
+    make_option(c("--group_names"), action = "store", dest = "group_names", help = "Group names vector"),
+    make_option(c("--group_nums"), action = "store", dest = "group_nums", default = NULL, help = "Group number for continuous numeric vector"),
+    make_option(c("--hist_plot"), action = "store", dest = "hist_plot", default = "false", help = "Indicates whether to plot a histogram of p-values for the first Dirichlet Monte Carlo instance"),
+    make_option(c("--include_sample_summary"), action = "store", dest = "include_sample_summary", default = "false", help = "Include median clr values for each sample"),
+    make_option(c("--iterate"), action = "store", dest = "iterate", default = "false", help = "Indicates whether to iteratively perform a test"),
+    make_option(c("--num_cols"), action = "store", dest = "num_cols", help = "Number of columns in group vector"),
+    make_option(c("--num_cols_in_groups"), action = "store", dest = "num_cols_in_groups", default = NULL, help = "Number of columns in each group dewfining the continuous numeric vector"),
+    make_option(c("--num_mc_samples"), action = "store", dest = "num_mc_samples", type = "integer", help = "Number of Monte Carlo samples"),
+    make_option(c("--output"), action = "store", dest = "output", help = "output file"),
+    make_option(c("--paired_test"), action = "store", dest = "paired_test", default = "false", help = "Indicates whether to do paired-sample tests"),
+    make_option(c("--plot_test"), action = "store", dest = "plot_test", default = NULL, help = "The method of calculating significance"),
+    make_option(c("--plot_type"), action = "store", dest = "plot_type", default = NULL, help = "The type of plot to be produced"),
+    make_option(c("--reads"), action = "store", dest = "reads", help = "Input reads table"),
+    make_option(c("--xlab"), action = "store", dest = "xlab", default = NULL, help = "x lable for the plot"),
+    make_option(c("--ylab"), action = "store", dest = "ylab", default = NULL, help = "y lable for the plot")
+)
+
+parser <- OptionParser(usage = "%prog [options] file", option_list = option_list)
+args <- parse_args(parser, positional_arguments = TRUE)
+opt <- args$options
+
+get_boolean_value <- function(val) {
+    if (val == "true") {
+        return(TRUE)
+    } else {
+        return(FALSE)
+    }
+}
+
+# Read the input reads file into a data frame.
+reads_df <- read.table(file = opt$reads, header = TRUE, sep = "\t", row.names = 1, dec = ".", as.is = FALSE)
+
+# Split the group_names and num_cols into lists of strings.
+group_names_str <- as.character(opt$group_names)
+group_names_list <- strsplit(group_names_str, ",")[[1]]
+num_cols_str <- as.character(opt$num_cols)
+num_cols_list <- strsplit(num_cols_str, ",")[[1]]
+# Construct conditions vector.
+conditions_vector <- c()
+for (i in seq_along(num_cols_list)) {
+    num_cols <- as.integer(num_cols_list[i])
+    group_name <- group_names_list[i]
+    for (j in 1:num_cols) {
+        conditions_vector <- cbind(conditions_vector, group_name)
+    }
+}
+# The conditions_vector is now a matrix,
+# so coerce it back to a vector.
+conditions_vector <- as.vector(conditions_vector)
+
+# Convert boolean values to boolean.
+effect <- get_boolean_value(opt$effect)
+include_sample_summary <- get_boolean_value(opt$include_sample_summary)
+iterate <- get_boolean_value(opt$iterate)
+
+if (opt$analysis_type == "aldex") {
+    aldex_obj <- aldex(reads = reads_df,
+                       conditions_vector,
+                       mc.samples = opt$num_mc_samples,
+                       test = opt$aldex_test,
+                       effect = effect,
+                       include.sample.summary = include_sample_summary,
+                       denom = opt$denom,
+                       iterate = iterate)
+} else {
+    # Generate Monte Carlo samples of the Dirichlet distribution for each sample. Convert each
+    # instance using a log-ratio transform. This is the input for all further analyses.
+    aldex_clr_obj <- aldex.clr(reads_df, conditions_vector, mc.samples = opt$num_mc_samples, denom = opt$denom)
+
+    if (opt$analysis_type == "aldex_corr") {
+        if (!is.null(opt$cont_var)) {
+            # Read the input cont_var vector.
+            cont_var <- as.numeric(read.table(file = opt$cont_var, header = FALSE, sep = "\t"))
+        }
+
+        # Split the group_names and num_cols into lists of strings.
+        group_nums_str <- as.character(opt$group_nums)
+        group_nums_list <- strsplit(group_nums_str, ",")[[1]]
+        num_cols_in_groups_str <- as.character(opt$num_cols_in_groups)
+        num_cols_in_groups_list <- strsplit(num_cols_in_groups_str, ",")[[1]]
+        # Construct continuous numeric vector.
+        cont_var_vector <- c()
+        for (i in seq_along(num_cols_in_groups_list)) {
+            num_cols_in_group <- as.integer(num_cols_in_groups_list[i])
+            group_num <- group_nums_list[i]
+            for (j in 1:num_cols_in_group) {
+                cont_var_vector <- cbind(cont_var_vector, group_num)
+            }
+        }
+        # The cont_var_vector is now a matrix,
+        # so coerce it back to a vector.
+        cont_var_vector <- as.numeric(as.vector(cont_var_vector))
+
+        aldex_obj <- aldex.corr(aldex_clr_obj, cont.var = cont_var_vector)
+    } else if (opt$analysis_type == "aldex_effect") {
+        aldex_obj <- aldex.effect(aldex_clr_obj, include_sample_summary)
+    } else if (opt$analysis_type == "aldex_expected_distance") {
+        dist <- aldex.expectedDistance(aldex_clr_obj)
+        png(filename = opt$output)
+        qgraph(dist, layout = "spring", vsize = 1)
+        dev.off()
+    } else if (opt$analysis_type == "aldex_kw") {
+        aldex_obj <- aldex.kw(aldex_clr_obj)
+    } else if (opt$analysis_type == "aldex_plot") {
+        aldex_obj <- aldex(reads = reads_df,
+                           conditions_vector,
+                           mc.samples = opt$num_mc_samples,
+                           test = opt$aldex_test,
+                           effect = effect,
+                           include.sample.summary = include_sample_summary,
+                           denom = opt$denom,
+                           iterate = iterate)
+        png(filename = opt$output)
+        aldex.plot(x = aldex_obj,
+                   type = opt$plot_type,
+                   test = opt$plot_test,
+                   cutoff.pval = opt$cutoff_pval,
+                   cutoff.effect = opt$cutoff_effect,
+                   xlab = opt$xlab,
+                   ylab = opt$ylab)
+        dev.off()
+    } else if (opt$analysis_type == "aldex_plot_feature") {
+        png(filename = opt$output)
+        aldex.plotFeature(aldex_clr_obj, opt$feature_name)
+        dev.off()
+    } else if (opt$analysis_type == "aldex_ttest") {
+        paired_test <- get_boolean_value(opt$paired_test)
+        hist_plot <- get_boolean_value(opt$hist_plot)
+        aldex_obj <- aldex.ttest(aldex_clr_obj, paired.test = paired_test, hist.plot = hist_plot)
+    }
+}
+if ((opt$analysis_type != "aldex_expected_distance") && (opt$analysis_type != "aldex_plot") && (opt$analysis_type != "aldex_plot_feature")) {
+    # Output the ALDEx object.
+    write.table(aldex_obj, file = opt$output, append = FALSE, sep = "\t", dec = ".", row.names = FALSE, col.names = TRUE)
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/aldex2.xml	Wed Jun 29 07:36:45 2022 +0000
@@ -0,0 +1,471 @@
+<tool id="aldex2" name="ALDEx2" version="@TOOL_VERSION@+galaxy@VERSION_SUFFIX@" profile="@PROFILE@">
+  <description>differential abundance analysis</description>
+    <macros>
+        <import>macros.xml</import>
+    </macros>
+    <expand macro="biotools"/>
+    <expand macro="requirements"/>
+    <command detect_errors="exit_code"><![CDATA[
+## Enable building the conditions_vector.
+#set group_names = []
+#set num_cols = []
+#for $condition_items in $conditions:
+    $group_names.append(str($condition_items.group_name))
+    $num_cols.append(str($condition_items.num_cols))
+#end for
+#set group_names = ','.join($group_names)
+#set num_cols = ','.join($num_cols)
+
+#if str($analysis_type_cond.analysis_type) == 'aldex_corr':
+    ## Enable building the cond_var (a continuous numeric vector).
+    #set group_nums = []
+    #set num_cols_in_groups = []
+    #for $cont_var_items in $analysis_type_cond.cont_var:
+        $group_nums.append(str($cont_var_items.group_num))
+        $num_cols_in_groups.append(str($cont_var_items.num_cols_in_group))
+    #end for
+    #set group_nums = ','.join($group_nums)
+    #set num_cols_in_groups = ','.join($num_cols_in_groups)
+#end if
+
+Rscript '${__tool_directory__}/aldex2.R' 
+--reads '$reads' 
+--group_names '$group_names'
+--num_cols '$num_cols'
+--num_mc_samples $num_mc_samples
+--denom '$denom'
+--analysis_type '$analysis_type_cond.analysis_type'
+#if str($analysis_type_cond.analysis_type) == 'aldex':
+    --aldex_test '$analysis_type_cond.aldex_test'
+    --effect '$analysis_type_cond.effect'
+    --include_sample_summary '$analysis_type_cond.include_sample_summary'
+    --iterate '$analysis_type_cond.iterate'
+#else if str($analysis_type_cond.analysis_type) == 'aldex_corr':
+    --group_nums '$group_nums'
+    --num_cols_in_groups '$num_cols_in_groups'
+#else if str($analysis_type_cond.analysis_type) == 'aldex_effect':
+    --include_sample_summary '$analysis_type_cond.include_sample_summary'
+#else if str($analysis_type_cond.analysis_type) == 'aldex_plot':
+    --aldex_test '$analysis_type_cond.aldex_test'
+    --effect '$analysis_type_cond.effect'
+    --include_sample_summary '$analysis_type_cond.include_sample_summary'
+    --iterate '$analysis_type_cond.iterate'
+    --plot_type '$analysis_type_cond.plot_type'
+    --plot_test '$analysis_type_cond.plot_test'
+    --cutoff_pval $analysis_type_cond.cutoff_pval
+    --cutoff_effect $analysis_type_cond.cutoff_effect
+    #if str($analysis_type_cond.xlab) != '':
+        --xlab '$analysis_type_cond.xlab'
+    #end if
+    #if str($analysis_type_cond.ylab) != '':
+        --ylab '$analysis_type_cond.ylab'
+    #end if
+#else if str($analysis_type_cond.analysis_type) == 'aldex_plot_feature':
+    --feature_name '$analysis_type_cond.feature_name'
+#else if str($analysis_type_cond.analysis_type) == 'aldex_ttest':
+    --paired_test '$analysis_type_cond.paired_test'
+    --hist_plot '$analysis_type_cond.hist_plot'
+#end if
+#if str($analysis_type_cond.analysis_type) == 'aldex':
+    --output '$output_aldex'
+#else if str($analysis_type_cond.analysis_type) == 'aldex_corr':
+    --output '$output_aldex_corr'
+#else if str($analysis_type_cond.analysis_type) == 'aldex_effect':
+    --output '$output_aldex_effect'
+#else if str($analysis_type_cond.analysis_type) == 'aldex_expected_distance':
+    --output '$output_aldex_expected_distance'
+#else if str($analysis_type_cond.analysis_type) == 'aldex_kw':
+    --output '$output_aldex_kw'
+#else if str($analysis_type_cond.analysis_type) == 'aldex_plot':
+    --output '$output_aldex_plot'
+#else if str($analysis_type_cond.analysis_type) == 'aldex_plot_feature':
+    --output '$output_aldex_plot_feature'
+#else if str($analysis_type_cond.analysis_type) == 'aldex_ttest':
+    --output '$output_aldex_ttest'
+    #if str($analysis_type_cond.hist_plot) == 'true':
+        && mv 'Rplots.pdf' '$output_aldex_ttest_plot'
+    #end if
+#end if
+    ]]></command>
+    <inputs>
+        <param argument="--reads" type="data" format="tabular" label="Reads table file" help="Rows contain genes and columns contain sequencing read counts"/>
+        <repeat name="conditions" title="Comparison group" min="1">
+            <param name="group_name" type="text" value="Grp1" label="Group name" help="Specify a group label and the number of sequencing read count columns associated with it">
+                <validator type="empty_field"/>
+                <expand macro="sanitize_query" validinitial="string.ascii_letters,string.punctuation"/>
+            </param>
+            <param name="num_cols" type="integer" min="1" value="1" label="Number of columns in group"/>
+        </repeat>
+        <param argument="--num_mc_samples" type="integer" min="1" value="128" label="Number of Monte Carlo samples to use when estimating the underlying distributions"/>
+        <param argument="--denom" type="select" label="Select features to retain as the denominator for the Geometric Mean calculation">
+            <option value="all" selected="true">All features</option>
+            <option value="median">Median abundance of all features</option>
+            <option value="iqlr">Features that are between the first and third quartile of the variance of the clr values across all samples</option>
+            <option value="zero">Non-zero features in each group as the denominator</option>
+            <option value="lvha">features that have low variance and high relative abundance</option>
+        </param>
+        <conditional name="analysis_type_cond">
+            <param name="analysis_type" type="select" label="Select the analysis to be performed">
+                <option value="aldex" selected="true">Compute an ALDEx2 object (aldex)</option>
+                <option value="aldex_corr">Calculate correlation with a continuous variable (aldex.corr)</option>
+                <option value="aldex_effect">Calculate effect sizes and differences between conditions (aldex.effect)</option>
+                <option value="aldex_expected_distance">Calculate the expected values of distances between samples (aldex.expectedDistance)</option>
+                <option value="aldex_kw">Calculate the Kruskal-Wallis test and glm ANOVA statistics (aldex.kw)</option>
+                <option value="aldex_plot">Plot an ALDEx2 object (aldex.plot)</option>
+                <option value="aldex_plot_feature">Show dispersion of the expected values returned by aldex.effect (aldex.plotFeature)</option>
+                <option value="aldex_ttest">Calculate Welch’s t-test and Wilcoxon test statistics (aldex.ttest)</option>
+            </param>
+            <when value="aldex">
+                <expand macro="aldex_test_param"/>
+                <expand macro="effect_param"/>
+                <expand macro="include_sample_summary_param"/>
+                <expand macro="iterate_param"/>
+            </when>
+            <when value="aldex_corr">
+                <repeat name="cont_var" title="Group number" min="1">
+                    <param name="group_num" type="integer" min="1" value="1" label="Group number" help="Specify a group number and the number of columns from the Reads table file associated with the group"/>
+                    <param name="num_cols_in_group" type="integer" min="1" value="1" label="Number of columns in group"/>
+                </repeat>
+            </when>
+            <when value="aldex_effect">
+                <expand macro="include_sample_summary_param"/>
+            </when>
+            <when value="aldex_expected_distance"/>
+            <when value="aldex_kw"/>
+            <when value="aldex_plot">
+                <expand macro="aldex_test_param"/>
+                <expand macro="effect_param"/>
+                <expand macro="include_sample_summary_param"/>
+                <expand macro="iterate_param"/>
+                <param name="plot_type" type="select" label="Select the plot type">
+                    <option value="MA" selected="true">A Bland-Altman style plot</option>
+                    <option value="MW">A difference between to a variance within plot</option>
+                </param>
+                <param name="plot_test" type="select" label="Select the method of calculating significance">
+                    <option value="welch" selected="true">Welch’s t test</option>
+                    <option value="wilcox">Wilcox rank test</option>
+                    <option value="kruskal">Kruskal-Wallace test</option>
+                </param>
+                <param name="cutoff_pval" type="float" value="0.1" min="0" label="Benjamini-Hochberg fdr cutoff"/>
+                <param name="cutoff_effect" type="integer" value="1" min="0" label="Effect size cutoff for plotting"/>
+                <param name="xlab" type="text" value="" optional="true" label="x-label for the plot">
+                    <expand macro="sanitize_query" validinitial="string.ascii_letters,string.punctuation"/>
+                </param>
+                <param name="ylab" type="text" value="" optional="true" label="y-label for the plot">
+                    <expand macro="sanitize_query" validinitial="string.ascii_letters,string.punctuation"/>
+                </param>
+            </when>
+            <when value="aldex_plot_feature">
+                <param name="feature_name" type="text" value="" label="Name of the feature from the input data to be plotted">
+                    <expand macro="sanitize_query" validinitial="string.ascii_letters,string.punctuation"/>
+                </param>
+            </when>
+            <when value="aldex_ttest">
+                <param argument="--paired_test" type="boolean" truevalue="true" falsevalue="false" checked="false" label="Calculate effect size for paired samples?"/>
+                <param argument="--hist_plot" type="select" label="Plot a histogram of p-values for the first Dirichlet Monte Carlo instance?">
+                    <option value="false" selected="true">No</option>
+                    <option value="true">Yes</option>
+                </param>
+            </when>
+        </conditional>
+    </inputs>
+    <outputs>
+        <data name="output_aldex" format="tabular" label="${tool.name} on ${on_string}: (aldex)">
+            <filter>analysis_type_cond['analysis_type'] == 'aldex'</filter>
+        </data>
+        <data name="output_aldex_corr" format="tabular" label="${tool.name} on ${on_string}: (aldex.corr)">
+            <filter>analysis_type_cond['analysis_type'] == 'aldex_corr'</filter>
+        </data>
+        <data name="output_aldex_effect" format="tabular" label="${tool.name} on ${on_string}: (aldex.effect)">
+            <filter>analysis_type_cond['analysis_type'] == 'aldex_effect'</filter>
+        </data>
+        <data name="output_aldex_expected_distance" format="png" label="${tool.name} on ${on_string}: (aldex.expectedDistance)">
+            <filter>analysis_type_cond['analysis_type'] == 'aldex_expected_distance'</filter>
+        </data>
+        <data name="output_aldex_kw" format="tabular" label="${tool.name} on ${on_string}: (aldex.kw)">
+            <filter>analysis_type_cond['analysis_type'] == 'aldex_kw'</filter>
+        </data>
+        <data name="output_aldex_plot" format="png" label="${tool.name} on ${on_string}: (aldex.plot)">
+            <filter>analysis_type_cond['analysis_type'] == 'aldex_plot'</filter>
+        </data>
+        <data name="output_aldex_plot_feature" format="png" label="${tool.name} on ${on_string}: (aldex.plotFeature)">
+            <filter>analysis_type_cond['analysis_type'] == 'aldex_plot_feature'</filter>
+        </data>
+        <data name="output_aldex_ttest" format="tabular" label="${tool.name} on ${on_string}: (aldex.ttest)">
+            <filter>analysis_type_cond['analysis_type'] == 'aldex_ttest'</filter>
+        </data>
+        <data name="output_aldex_ttest_plot" format="pdf" label="${tool.name} on ${on_string}: (aldex.ttest hist plot)">
+            <filter>analysis_type_cond['analysis_type'] == 'aldex_ttest' and analysis_type_cond['hist_plot'] == 'true'</filter>
+        </data>
+    </outputs>
+    <tests>
+        <test expect_num_outputs="1">
+            <param name="reads" value="reads.tabular" ftype="tabular"/>
+            <repeat name="conditions">
+                <param name="group_name" value="NS"/>
+                <param name="num_cols" value="7"/>
+            </repeat>
+            <repeat name="conditions">
+                <param name="group_name" value="S"/>
+                <param name="num_cols" value="7"/>
+            </repeat>
+            <output name="output_aldex" ftype="tabular">
+                <assert_contents>
+                    <has_text text="rab.all"/>
+                    <has_size value="39906" delta="100"/>
+                </assert_contents>
+            </output>
+        </test>
+        <test expect_num_outputs="1">
+            <param name="reads" value="reads.tabular" ftype="tabular"/>
+            <repeat name="conditions">
+                <param name="group_name" value="NS"/>
+                <param name="num_cols" value="7"/>
+            </repeat>
+            <repeat name="conditions">
+                <param name="group_name" value="S"/>
+                <param name="num_cols" value="7"/>
+            </repeat>
+            <param name="denom" value="zero"/>
+            <output name="output_aldex" ftype="tabular">
+                <assert_contents>
+                    <has_text text="rab.all"/>
+                    <has_size value="39908" delta="100"/>
+                </assert_contents>
+            </output>
+        </test>
+        <test expect_num_outputs="1">
+            <param name="reads" value="reads.tabular" ftype="tabular"/>
+            <repeat name="conditions">
+                <param name="group_name" value="NS"/>
+                <param name="num_cols" value="7"/>
+            </repeat>
+            <repeat name="conditions">
+                <param name="group_name" value="S"/>
+                <param name="num_cols" value="7"/>
+            </repeat>
+            <param name="effect" value="false"/>
+            <param name="include_sample_summary" value="true"/>
+            <param name="iterate" value="true"/>
+            <output name="output_aldex" ftype="tabular">
+                <assert_contents>
+                    <has_text text="we.ep"/>
+                    <has_size value="14595" delta="100"/>
+                </assert_contents>
+            </output>
+        </test>
+        <test expect_num_outputs="1">
+            <param name="reads" value="reads.tabular" ftype="tabular"/>
+            <repeat name="conditions">
+                <param name="group_name" value="NS"/>
+                <param name="num_cols" value="7"/>
+            </repeat>
+            <repeat name="conditions">
+                <param name="group_name" value="S"/>
+                <param name="num_cols" value="7"/>
+            </repeat>
+            <param name="aldex_test" value="kw"/>
+            <output name="output_aldex" ftype="tabular">
+                <assert_contents>
+                    <has_text text="kw.ep"/>
+                    <has_size value="14615" delta="100"/>
+                </assert_contents>
+            </output>
+        </test>
+        <test expect_num_outputs="1">
+            <param name="reads" value="reads.tabular" ftype="tabular"/>
+            <repeat name="conditions">
+                <param name="group_name" value="NS"/>
+                <param name="num_cols" value="7"/>
+            </repeat>
+            <repeat name="conditions">
+                <param name="group_name" value="S"/>
+                <param name="num_cols" value="7"/>
+            </repeat>
+            <param name="analysis_type" value="aldex_corr"/>
+            <repeat name="cont_var">
+                <param name="group_num" value="1"/>
+                <param name="num_cols_in_group" value="7"/>
+            </repeat>
+            <repeat name="cont_var">
+                <param name="group_num" value="2"/>
+                <param name="num_cols_in_group" value="7"/>
+            </repeat>
+            <output name="output_aldex_corr" ftype="tabular">
+                <assert_contents>
+                    <has_text text="pearson.ecor"/>
+                    <has_size value="33232" delta="100"/>
+                </assert_contents>
+            </output>
+        </test>
+        <test expect_num_outputs="1">
+            <param name="reads" value="reads.tabular" ftype="tabular"/>
+            <repeat name="conditions">
+                <param name="group_name" value="NS"/>
+                <param name="num_cols" value="7"/>
+            </repeat>
+            <repeat name="conditions">
+                <param name="group_name" value="S"/>
+                <param name="num_cols" value="7"/>
+            </repeat>
+            <param name="analysis_type" value="aldex_effect"/>
+            <output name="output_aldex_effect" ftype="tabular">
+                <assert_contents>
+                    <has_text text="rab.all"/>
+                    <has_size value="25268" delta="100"/>
+                </assert_contents>
+            </output>
+        </test>
+        <test expect_num_outputs="1">
+            <param name="reads" value="reads.tabular" ftype="tabular"/>
+            <repeat name="conditions">
+                <param name="group_name" value="NS"/>
+                <param name="num_cols" value="7"/>
+            </repeat>
+            <repeat name="conditions">
+                <param name="group_name" value="S"/>
+                <param name="num_cols" value="7"/>
+            </repeat>
+            <param name="analysis_type" value="aldex_expected_distance"/>
+            <output name="output_aldex_expected_distance" ftype="png">
+                <assert_contents>
+                    <has_size value="70183" delta="2000"/>
+                </assert_contents>
+            </output>
+        </test>
+        <test expect_num_outputs="1">
+            <param name="reads" value="reads.tabular" ftype="tabular"/>
+            <repeat name="conditions">
+                <param name="group_name" value="NS"/>
+                <param name="num_cols" value="7"/>
+            </repeat>
+            <repeat name="conditions">
+                <param name="group_name" value="S"/>
+                <param name="num_cols" value="7"/>
+            </repeat>
+            <param name="analysis_type" value="aldex_kw"/>
+            <output name="output_aldex_kw" ftype="tabular">
+                <assert_contents>
+                    <has_text text="kw.ep"/>
+                    <has_size value="14623" delta="100"/>
+                </assert_contents>
+            </output>
+        </test>
+        <test expect_num_outputs="1">
+            <param name="reads" value="reads.tabular" ftype="tabular"/>
+            <repeat name="conditions">
+                <param name="group_name" value="NS"/>
+                <param name="num_cols" value="7"/>
+            </repeat>
+            <repeat name="conditions">
+                <param name="group_name" value="S"/>
+                <param name="num_cols" value="7"/>
+            </repeat>
+            <param name="analysis_type" value="aldex_plot"/>
+            <output name="output_aldex_plot" ftype="png">
+                <assert_contents>
+                    <has_size value="19064" delta="500"/>
+                </assert_contents>
+            </output>
+        </test>
+        <test expect_num_outputs="1">
+            <param name="reads" value="reads.tabular" ftype="tabular"/>
+            <repeat name="conditions">
+                <param name="group_name" value="NS"/>
+                <param name="num_cols" value="7"/>
+            </repeat>
+            <repeat name="conditions">
+                <param name="group_name" value="S"/>
+                <param name="num_cols" value="7"/>
+            </repeat>
+            <param name="analysis_type" value="aldex_plot_feature"/>
+            <param name="feature_name" value="A:D:A:E"/>
+            <output name="output_aldex_plot_feature" ftype="png">
+                <assert_contents>
+                    <has_size value="30772" delta="2000"/>
+                </assert_contents>
+            </output>
+        </test>
+        <test expect_num_outputs="1">
+            <param name="reads" value="reads.tabular" ftype="tabular"/>
+            <repeat name="conditions">
+                <param name="group_name" value="NS"/>
+                <param name="num_cols" value="7"/>
+            </repeat>
+            <repeat name="conditions">
+                <param name="group_name" value="S"/>
+                <param name="num_cols" value="7"/>
+            </repeat>
+            <param name="analysis_type" value="aldex_ttest"/>
+            <output name="output_aldex_ttest" ftype="tabular">
+                <assert_contents>
+                    <has_text text="we.ep"/>
+                    <has_size value="14596" delta="100"/>
+                </assert_contents>
+            </output>
+        </test>
+        <test expect_num_outputs="2">
+            <param name="reads" value="reads.tabular" ftype="tabular"/>
+            <repeat name="conditions">
+                <param name="group_name" value="NS"/>
+                <param name="num_cols" value="7"/>
+            </repeat>
+            <repeat name="conditions">
+                <param name="group_name" value="S"/>
+                <param name="num_cols" value="7"/>
+            </repeat>
+            <param name="analysis_type" value="aldex_ttest"/>
+            <param name="paired_test" value="true"/>
+            <param name="hist_plot" value="true"/>
+            <output name="output_aldex_ttest" ftype="tabular">
+                <assert_contents>
+                    <has_text text="we.ep"/>
+                    <has_size value="13822" delta="100"/>
+                </assert_contents>
+            </output>
+            <output name="output_aldex_ttest_plot" ftype="pdf">
+                <assert_contents>
+                    <has_text text="%PDF"/>
+                    <has_size value="7331" delta="100"/>
+                </assert_contents>
+            </output>
+        </test>
+    </tests>
+    <help>
+**What it does**
+
+Performs a differential abundance analysis for the comparison of two or more conditions (e.g., single-organism
+and meta-RNA-seq high-throughput sequencing assays, or of selected and unselected values from in-vitro sequence
+selections).  This tool generates Monte Carlo samples of the Dirichlet distribution for each sample, converts
+each instance using a log-ratio transform, then returns test results for two sample (Welch’s t, Wilcoxon) or
+multi-sample (glm, Kruskal-Wallace) tests.  The tool also estimates effect size for two sample analyses.
+
+**Options**
+
+  * **Reads table file** - a tabular file with unique names for all rows and columns. Rows should contain genes and columns should contain sequencing read counts (i.e., sample vectors).  Rows with 0 reads in each sample are deleted prior to analysis.
+  * **Define the comparison groups describing the reads data structure** - Specify a group label and the number of sequencing read count columns associated with it.  The total number of columns must be equal to the number of numeric columns in the selected Reads table file.
+  * **Number of Monte Carlo samples to use** - the number of Monte Carlo samples to use when estimating the underlying distributions. Since we are estimating central tendencies, 128 is usually sufficient.
+  * **Select features to retain as the denominator for the Geometric Mean calculation** - indicates which features to retain as the denominator for the Geometric Mean calculation. 
+  * **Select the analysis to be performed**
+
+    * **Compute an ALDEx2 object (aldex)** - performs log-ratio transformation and statistical testing. Specifically, this function: (a) generates Monte Carlo samples of the Dirichlet distribution for each sample, (b) converts each instance using a log-ratio transform, then (c) retcalculates the expected values for the correlation between each feature and a contin- uous variable, using data returned returned by aldex.clr and a vector of the continuous variable. Returns results of Pearson, Spearman and Kendall tests.urns test results for two sample (Welch’s t, Wilcoxon) or multi-sample (glm, Kruskal-Wallace) tests. This function also estimates effect size for two sample analyses.
+
+      * **Select the tests to be performed** - select the tests to be performed when crearing the ALDEx2 object.
+      * **Calculate abundances and effect sizes** - applies only if the selected test is Welch’s t and Wilcox tests, or if tests are performed iteratively.
+      * **Include median clr values for each sample** - specify whether to include median clr values for each sample (applies only if abundances and effect sizes are calculated).
+      * **Perform tests iteratively** - Specify whether to iteratively perform a test.  For example, this will use the results from an initial Welch’s t and Wilcox test routine to seed the reference (i.e., denominator of Geometric Mean calculation) for a second Welch’s t and Wilcox test routine.
+
+    * **Calculate correlation with a continuous variable (aldex.corr)** - calculates the expected values for the correlation between each feature and a continuous variable using data returned by aldex.clr and a vector of the continuous variable. Returns results of Pearson, Spearman and Kendall tests.
+    * **Calculate effect sizes and differences between conditions (aldex.effect)** - calculates (1) the median clr abundances per sample, per condition, (2) the median differences in abundance between 2 conditions and (3) the median effect size and proportion of effect that overlaps 0.
+    * **Calculate the expected values of distances between samples (aldex.expectedDistance)** - calculates the expected value of distances between samples using the median value of distances derived from N Monte-Carlo replicates.
+    * **Calculate the Kruskal-Wallis test and glm ANOVA statistics (aldex.kw)** - calculates the expected values of the Kruskal-Wallis test and a glm ANOVA.
+    * **Plot an ALDEx2 object (aldex.plot)** - generate an MW-plot or an MA-plot of the given ALDEx2 object.
+    * **Show dispersion of the expected values returned by aldex.effect (aldex.plotFeature)** - generates density plots showing the dispersion of the expected values given in the output from aldex.effect. The expected values are shown in the plots. This is a diagnostic visualization to help determine if the expected values are trustworthy.
+    * **Calculate Welch’s t-test and Wilcoxon test statistics (aldex.ttest)** - calculate the expected values of the Wilcoxon Rank Sum test and Welch's t-test on the data returned by aldex.clr
+
+      * **Calculate paired tests** - specify whether to calculate effect size for paired samples (applies only if abundances and effect sizes are calculated and the selected test is Welch’s t and Wilcox tests).
+      * **Plot a histogram of p-values for the first Dirichlet Monte Carlo instance** - specify whether to plot a histogram of p-values for the first Dirichlet Monte Carlo instance.
+    </help>
+    <expand macro="citations"/>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/macros.xml	Wed Jun 29 07:36:45 2022 +0000
@@ -0,0 +1,52 @@
+<macros>
+    <token name="@TOOL_VERSION@">1.26.0</token>
+    <token name="@VERSION_SUFFIX@">0</token>
+    <token name="@PROFILE@">21.01</token>
+    <xml name="biotools">
+        <xrefs>
+            <xref type="bio.tools">aldex2</xref>
+        </xrefs>
+    </xml>
+    <xml name="requirements">
+        <requirements>
+            <requirement type="package" version="@TOOL_VERSION@">bioconductor-aldex2</requirement>
+            <requirement type="package" version="1.14.2">r-data.table</requirement>
+            <requirement type="package" version="1.7.1">r-optparse</requirement>
+            <requirement type="package" version="1.9.2">r-qgraph</requirement>
+        </requirements>
+    </xml>
+    <xml name="aldex_test_param">
+        <param name="aldex_test" type="select" label="Select the tests to be performed">
+            <option value="t" selected="true">Welch's t and Wilcoxon tests</option>
+            <option value="kw">Kruskal-Wallace and glm tests</option>
+            <option value="corr">Correlation test</option>
+        </param>
+    </xml>
+    <xml name="effect_param">
+        <param argument="--effect" type="boolean" truevalue="true" falsevalue="false" checked="true" label="Calculate abundances and effect sizes?" help="Used only for Welch's t and Wilcoxon tests or if performing tests iteratively"/>
+    </xml>
+    <xml name="include_sample_summary_param">
+        <param argument="--include_sample_summary" type="boolean" truevalue="true" falsevalue="false" checked="false" label="Include median clr values for each sample?"/>
+    </xml>
+    <xml name="iterate_param">
+        <param argument="--iterate" type="boolean" truevalue="true" falsevalue="false" checked="false" label="Perform tests iteratively?"/>
+    </xml>
+    <xml name="sanitize_query" token_validinitial="string.printable">
+        <sanitizer>
+            <valid initial="@VALIDINITIAL@">
+                <remove value="&apos;"/>
+            </valid>
+            <mapping initial="none">
+                <add source="&apos;" target="&apos;&quot;&apos;&quot;&apos;"/>
+            </mapping>
+        </sanitizer>
+    </xml>
+    <xml name="citations">
+        <citations>
+            <citation type="doi">10.1371/journal.pone.0067019</citation>
+            <citation type="doi">10.1186/2049-2618-2-15</citation>
+            <citation type="doi">10.1080/10618600.2015.1131161</citation>
+        </citations>
+    </xml>
+</macros>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/reads.tabular	Wed Jun 29 07:36:45 2022 +0000
@@ -0,0 +1,201 @@
+	1_ANS	1_BNS	1_CNS	1_DNS	2_ANS	2_CNS	2_DNS	1_AS	1_BS	1_CS	1_DS	2_AS	2_CS	2_DS
+A:D:A:D	347	271	396	317	391	260	620	8	1	1	2	0	1	3
+A:D:A:E	436	361	461	241	410	387	788	83	6	8	12	0	3	2
+A:E:A:D	476	288	378	215	412	430	591	997	3747	662	421	37	75	6353
+A:E:A:E	513	307	424	381	499	447	709	10547	12033	5394	15998	293	1816	33
+A:D:C:D	178	165	195	185	124	158	409	0	0	0	0	0	0	1
+A:D:C:E	222	138	152	74	202	179	426	0	0	1	0	0	0	0
+A:E:C:D	181	114	142	254	193	149	670	15	18	67	36	35	13	140
+A:E:C:E	238	177	204	163	242	255	561	25	48	145	46	81	30	7
+A:D:D:D	192	140	236	207	181	182	720	0	1	0	1	0	0	1
+A:D:D:E	185	118	217	189	208	179	276	0	0	0	1	1	1	0
+A:E:D:D	206	108	279	173	213	223	446	12	30	18	18	25	9	113
+A:E:D:E	224	154	190	168	187	204	375	22	35	60	21	35	20	4
+A:D:E:D	200	101	179	107	177	155	553	0	0	0	0	0	0	1
+A:D:E:E	242	192	204	107	173	147	361	0	0	1	0	1	1	1
+A:E:E:D	266	144	258	133	287	227	630	24	28	42	4	35	26	9
+A:E:E:E	290	140	168	219	210	213	293	44	44	35	56	48	51	3
+A:D:F:D	124	91	194	117	187	143	289	0	0	0	0	0	1	0
+A:D:F:E	185	118	253	126	169	160	295	0	3	0	0	0	1	0
+A:E:F:D	234	128	200	120	172	173	260	1	4	0	0	1	1	2
+A:E:F:E	206	168	255	88	237	182	291	0	238	2	1	0	2	1
+A:D:G:D	526	318	434	359	533	431	1347	110	9	33	15	12	8	38
+A:D:G:E	425	499	450	319	673	506	1368	132	24	37	35	16	24	10
+A:E:G:D	832	465	483	377	663	574	1495	31648	37532	53271	22702	33241	24257	98629
+A:E:G:E	718	577	657	910	677	691	1745	56735	77600	72115	68594	58439	60094	4265
+A:D:H:D	144	95	115	90	161	114	486	0	1	0	0	0	0	1
+A:D:H:E	179	130	171	93	163	186	436	0	0	0	0	0	0	0
+A:E:H:D	224	214	167	146	239	250	426	0	0	0	1	1	3	0
+A:E:H:E	251	165	186	198	190	185	467	0	2	87	0	0	3	0
+A:D:I:D	172	90	113	102	187	170	733	0	0	0	1	0	0	2
+A:D:I:E	243	130	208	165	178	208	309	1	0	0	0	1	0	1
+A:E:I:D	295	161	255	176	226	154	347	0	0	0	0	4	15	2
+A:E:I:E	238	162	216	284	281	215	487	16	0	3	108	6	1	2
+A:D:K:D	117	109	142	161	184	110	140	0	0	0	0	0	0	1
+A:D:K:E	159	116	144	76	103	99	546	1	0	0	0	1	0	1
+A:E:K:D	152	146	142	82	175	151	267	1	1	0	0	0	2	1
+A:E:K:E	199	115	180	150	142	151	377	116	0	21	5	0	0	2
+A:D:L:D	491	334	460	393	579	475	1428	0	2	0	0	2	1	0
+A:D:L:E	495	352	431	401	544	506	1433	1	0	0	1	1	0	0
+A:E:L:D	668	467	607	528	635	656	1152	10	363	1	0	12	6	3
+A:E:L:E	677	464	520	656	738	622	1500	3	77	93	3	5	12	6
+A:D:M:D	73	125	117	55	91	97	167	1	0	0	0	1	0	0
+A:D:M:E	88	68	111	51	101	99	128	1	0	0	18	0	0	0
+A:E:M:D	78	94	93	39	143	114	213	9	0	46	2	1	0	0
+A:E:M:E	103	75	106	65	104	114	116	9	8	10	6719	0	0	2
+A:D:N:D	87	83	115	46	83	84	174	0	0	0	0	0	0	0
+A:D:N:E	124	83	76	74	129	121	359	0	0	1	0	0	0	0
+A:E:N:D	112	118	187	140	150	129	227	0	0	0	1	0	1	1
+A:E:N:E	101	85	108	65	157	132	254	0	1	0	1	1	0	2
+A:D:P:D	324	261	200	239	295	293	982	0	0	0	0	12	1	1
+A:D:P:E	291	192	290	176	355	300	701	269	0	0	0	2	0	0
+A:E:P:D	415	267	343	211	376	341	461	0	4	2	14	2	0	2
+A:E:P:E	393	257	471	215	352	352	935	142	2	2	3	0	0	2
+A:D:Q:D	180	160	186	121	208	174	259	0	1	0	0	0	1	0
+A:D:Q:E	151	122	274	131	177	182	437	0	0	0	0	0	0	0
+A:E:Q:D	217	223	252	205	193	210	383	7	0	6	1	1	1	200
+A:E:Q:E	210	157	267	143	191	194	400	0	1	1	0	0	2	1
+A:D:R:D	587	404	532	511	606	539	1088	0	1	0	1	1	0	2
+A:D:R:E	613	444	640	501	488	656	2654	0	0	2	0	1	81	0
+A:E:R:D	688	502	588	444	581	605	1316	82	16	294	14	31	27	16
+A:E:R:E	743	501	559	510	636	737	1916	57	44	50	52	47	83	6
+A:D:S:D	425	303	405	369	507	420	953	1	1	0	0	0	0	1
+A:D:S:E	441	411	542	344	551	478	1498	1	0	3	0	0	0	1
+A:E:S:D	601	331	517	327	579	493	1333	16	13	124	157	25	16	122
+A:E:S:E	570	427	671	399	515	585	894	28	53	132	40	43	29	9
+A:D:T:D	205	164	168	170	175	204	495	0	0	0	0	0	0	0
+A:D:T:E	190	138	191	133	175	147	266	0	0	0	0	0	0	0
+A:E:T:D	221	175	233	174	212	198	396	2	4	1	1	1	7	8
+A:E:T:E	260	143	368	243	357	280	740	15	13	3	33	0	3	7
+A:D:V:D	427	265	435	447	415	366	969	2	1	0	0	0	2	1
+A:D:V:E	378	320	366	325	526	360	1143	0	0	1	2	2	0	1
+A:E:V:D	501	333	482	493	485	434	1205	36	42	94	18	49	15	65
+A:E:V:E	573	343	552	426	537	484	914	63	51	93	72	61	54	2835
+A:D:W:D	108	85	111	113	90	79	186	0	0	0	0	0	0	1
+A:D:W:E	88	85	87	51	110	92	260	3	0	0	0	0	0	0
+A:E:W:D	129	122	101	140	142	133	332	49	66	139	9	73	50	15
+A:E:W:E	149	144	111	99	115	191	134	254	65	83	52	106	119	0
+A:D:Y:D	136	91	159	93	93	102	385	0	0	0	0	0	0	1
+A:D:Y:E	113	79	142	83	146	123	671	0	0	0	0	0	0	2
+A:E:Y:D	165	108	171	99	153	124	533	0	0	0	0	5	0	1
+A:E:Y:E	222	148	246	139	164	137	449	0	2	2	2	3	2	0
+C:D:A:D	217	117	164	91	189	126	170	1	1	0	0	2	0	1
+C:D:A:E	164	138	169	80	165	184	293	0	0	8	0	0	0	1
+C:E:A:D	212	146	210	86	200	187	307	0	1	0	0	0	0	11
+C:E:A:E	180	124	152	89	252	191	397	2	5	5	11	4	1	0
+C:D:C:D	75	67	76	43	63	88	114	0	0	0	0	0	0	0
+C:D:C:E	78	49	52	66	80	88	130	0	0	1	0	0	0	0
+C:E:C:D	90	53	87	99	84	56	200	0	0	0	0	0	0	0
+C:E:C:E	78	91	82	57	114	90	141	0	0	0	0	0	0	0
+C:D:D:D	89	54	83	48	128	107	211	0	0	0	0	0	0	0
+C:D:D:E	83	46	64	32	67	56	92	0	0	0	0	0	0	0
+C:E:D:D	76	71	120	104	81	90	114	0	0	7	0	0	0	0
+C:E:D:E	72	79	86	63	152	99	148	0	0	0	0	0	0	0
+C:D:E:D	110	40	93	39	79	75	96	0	0	0	0	0	0	1
+C:D:E:E	98	64	66	26	89	99	62	0	0	0	0	0	0	0
+C:E:E:D	103	78	100	57	75	86	172	0	0	0	0	0	0	0
+C:E:E:E	88	90	82	109	98	84	143	0	0	0	0	0	0	0
+C:D:F:D	63	40	73	109	101	71	96	0	0	0	0	0	1	0
+C:D:F:E	80	50	33	21	85	57	90	0	0	0	0	0	0	0
+C:E:F:D	80	44	61	37	68	80	87	0	0	0	0	1	0	0
+C:E:F:E	86	70	178	38	111	80	90	0	0	0	0	0	0	1
+C:D:G:D	288	145	276	83	257	228	293	2	1	20	2	3	3	6
+C:D:G:E	185	151	218	108	236	181	445	4	0	32	2	1	0	3
+C:E:G:D	262	178	370	301	235	264	517	11	3	8	4	3	5	8
+C:E:G:E	303	222	305	205	280	195	536	4	2	11	7	0	4	6
+C:D:H:D	44	37	42	27	60	81	107	0	0	0	0	0	0	0
+C:D:H:E	72	64	87	56	118	94	316	0	0	1	0	1	0	1
+C:E:H:D	36	49	52	28	74	61	115	0	0	0	0	0	0	0
+C:E:H:E	85	60	126	70	207	92	191	0	0	0	0	0	0	0
+C:D:I:D	72	51	90	53	69	38	62	0	0	0	0	0	0	1
+C:D:I:E	97	84	63	23	102	70	89	0	0	0	0	0	0	0
+C:E:I:D	91	59	89	66	86	72	88	0	0	0	0	1	0	0
+C:E:I:E	123	61	103	58	97	98	354	0	0	0	0	0	0	0
+C:D:K:D	65	30	28	43	42	74	40	0	0	0	0	0	0	0
+C:D:K:E	55	24	65	77	71	79	169	0	0	0	0	0	0	0
+C:E:K:D	71	33	75	33	39	75	274	0	0	0	0	0	0	0
+C:E:K:E	59	49	52	50	103	89	154	0	0	0	0	0	0	0
+C:D:L:D	245	169	223	222	270	202	805	1	0	0	0	0	0	1
+C:D:L:E	263	173	185	168	267	190	455	0	0	0	0	0	0	1
+C:E:L:D	263	236	228	163	242	248	541	0	0	1	0	0	1	0
+C:E:L:E	301	240	389	293	380	303	568	0	0	0	0	0	0	1
+C:D:M:D	66	42	25	31	25	27	200	0	0	73	0	0	0	0
+C:D:M:E	46	22	51	14	39	41	31	0	0	1	1	0	0	1
+C:E:M:D	32	24	38	39	36	35	81	0	0	0	0	0	0	0
+C:E:M:E	40	35	33	17	48	30	43	0	1	1	1	0	1	0
+C:D:N:D	39	40	58	21	45	47	122	0	0	0	0	0	0	0
+C:D:N:E	40	27	20	15	44	38	164	0	0	0	0	0	0	0
+C:E:N:D	48	24	48	42	42	63	192	0	0	0	0	0	0	0
+C:E:N:E	70	37	48	27	117	61	123	0	0	0	0	1	1	0
+C:D:P:D	118	67	158	51	108	106	147	0	0	0	0	0	0	0
+C:D:P:E	140	60	152	46	148	142	278	0	0	0	0	2	0	0
+C:E:P:D	124	111	248	125	161	122	503	0	0	0	0	0	0	1
+C:E:P:E	190	110	132	64	137	170	214	1	0	0	0	0	0	0
+C:D:Q:D	97	46	110	25	75	51	58	0	0	0	0	0	0	0
+C:D:Q:E	89	53	64	53	70	111	97	0	0	0	0	0	0	1
+C:E:Q:D	97	60	73	76	76	121	81	0	0	9	0	0	0	0
+C:E:Q:E	97	69	113	117	113	84	471	0	0	0	0	0	0	0
+C:D:R:D	282	216	234	113	198	219	252	0	0	1	0	0	0	1
+C:D:R:E	235	140	184	141	330	239	425	0	0	1	0	0	0	0
+C:E:R:D	281	211	280	99	308	294	492	0	0	0	0	0	0	0
+C:E:R:E	308	224	373	296	440	297	554	0	0	0	0	0	0	0
+C:D:S:D	171	130	158	148	188	143	309	0	0	0	0	0	0	0
+C:D:S:E	227	112	296	127	229	184	336	0	0	2	0	264	0	1
+C:E:S:D	271	146	194	136	221	191	558	0	0	0	0	1	0	0
+C:E:S:E	201	167	182	153	258	204	369	0	1	0	1	0	0	0
+C:D:T:D	72	63	55	27	71	62	85	0	0	0	0	0	0	0
+C:D:T:E	81	44	74	63	93	133	74	0	0	0	0	0	0	0
+C:E:T:D	81	81	121	33	89	92	268	0	1	0	0	0	0	0
+C:E:T:E	95	82	60	45	90	114	94	0	0	0	0	0	0	0
+C:D:V:D	202	89	231	180	182	204	261	0	0	0	0	0	2	1
+C:D:V:E	243	118	214	122	172	199	492	1	1	1	0	0	0	1
+C:E:V:D	202	197	224	203	270	192	380	0	0	0	0	0	0	0
+C:E:V:E	206	122	169	161	225	221	745	0	0	1	0	0	0	1
+C:D:W:D	40	29	49	12	40	57	46	0	0	0	0	0	0	0
+C:D:W:E	48	45	23	56	76	37	56	0	0	0	0	0	0	0
+C:E:W:D	74	67	64	53	57	60	82	0	0	0	0	0	0	0
+C:E:W:E	44	42	65	41	86	56	49	0	0	0	0	0	0	0
+C:D:Y:D	65	33	42	54	50	43	77	0	0	0	0	0	0	0
+C:D:Y:E	50	44	95	25	41	43	80	0	0	0	0	0	0	0
+C:E:Y:D	72	81	45	36	41	42	82	0	0	0	0	0	0	0
+C:E:Y:E	78	38	36	45	74	62	107	0	0	0	0	0	0	0
+D:D:A:D	237	132	174	78	214	184	457	1	0	0	0	1	0	2
+D:D:A:E	295	164	234	133	298	223	899	0	2	2	0	3	1	0
+D:E:A:D	269	133	327	179	284	247	258	0	5	4	0	96	1	44
+D:E:A:E	274	194	363	301	403	307	422	15	20	9	51	11	10	3
+D:D:C:D	93	60	62	56	93	133	165	0	0	0	0	0	0	0
+D:D:C:E	109	52	35	42	127	109	234	0	0	0	0	1	0	0
+D:E:C:D	82	64	67	85	110	127	371	0	0	0	0	0	0	0
+D:E:C:E	97	86	117	55	133	124	423	0	0	0	0	1	0	1
+D:D:D:D	96	81	82	47	96	122	174	0	0	0	0	0	1	2
+D:D:D:E	111	59	162	49	163	114	237	0	0	0	0	0	1	1
+D:E:D:D	137	105	94	58	190	136	175	0	1	0	0	0	0	3
+D:E:D:E	133	43	180	62	144	110	158	1	0	0	0	0	0	0
+D:D:E:D	143	64	159	53	138	97	165	0	0	0	0	1	0	1
+D:D:E:E	114	99	170	133	131	147	208	0	1	0	0	0	0	0
+D:E:E:D	122	81	105	102	158	120	144	0	0	0	0	0	0	0
+D:E:E:E	142	84	117	108	157	106	296	0	0	2	0	0	0	1
+D:D:F:D	117	100	113	45	119	108	325	0	0	0	0	0	0	0
+D:D:F:E	124	88	79	24	152	132	127	0	0	0	0	0	0	0
+D:E:F:D	134	64	90	49	138	103	425	0	0	0	0	0	0	0
+D:E:F:E	93	75	135	47	147	115	146	0	0	0	1	0	0	0
+D:D:G:D	286	257	308	212	304	292	589	4	2	6	2	4	2	7
+D:D:G:E	327	178	317	146	299	260	843	2	2	9	3	1	4	4
+D:E:G:D	341	220	300	290	395	347	801	19	13	16	15	14	17	80
+D:E:G:E	374	238	335	225	519	407	659	36	37	37	68	21	19	6
+D:D:H:D	94	63	65	49	97	80	464	0	0	0	0	1	0	0
+D:D:H:E	105	101	174	49	119	144	405	0	0	1	0	0	0	0
+D:E:H:D	140	114	115	41	185	131	340	0	0	0	0	0	0	0
+D:E:H:E	120	84	152	123	147	125	232	0	0	0	0	1	0	1
+D:D:I:D	114	91	101	125	116	114	209	0	0	0	0	0	1	0
+D:D:I:E	151	76	81	129	163	100	281	0	0	0	0	1	0	0
+D:E:I:D	123	70	107	69	120	118	168	0	1	0	0	0	0	0
+D:E:I:E	119	85	175	101	154	145	147	0	0	0	0	0	0	1
+D:D:K:D	87	53	79	41	73	83	86	0	0	0	0	0	0	0
+D:D:K:E	78	65	66	97	92	58	111	0	0	0	0	0	0	0
+D:E:K:D	112	50	110	39	91	67	123	0	1	0	0	1	0	0
+D:E:K:E	106	38	105	35	99	99	157	0	0	0	0	0	0	0
+D:D:L:D	319	201	289	327	325	298	534	0	1	0	0	0	0	0
+D:D:L:E	321	242	372	247	345	383	1109	0	0	0	0	1	0	0
+D:E:L:D	377	254	387	339	415	361	1077	0	0	1	0	0	0	1
+D:E:L:E	343	244	450	250	476	331	1120	0	1	0	1	4	0	3