Next changeset 1:75214276e2b7 (2024-06-14) |
Commit message:
planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/aldex2 commit b99f09cf03f075a6881d192b0f1233233289fa60 |
added:
aldex2.R aldex2.xml macros.xml test-data/reads.tabular |
b |
diff -r 000000000000 -r f4d0bd4b4d6d aldex2.R --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/aldex2.R Wed Jun 29 07:36:45 2022 +0000 |
[ |
b'@@ -0,0 +1,150 @@\n+#!/usr/bin/env Rscript\n+\n+suppressPackageStartupMessages(library("ALDEx2"))\n+suppressPackageStartupMessages(library("data.table"))\n+suppressPackageStartupMessages(library("qgraph"))\n+suppressPackageStartupMessages(library("optparse"))\n+\n+option_list <- list(\n+ make_option(c("--aldex_test"), action = "store", dest = "aldex_test", default = NULL, help = "Indicates which analysis to perform"),\n+ make_option(c("--analysis_type"), action = "store", dest = "analysis_type", help = "Indicates which analysis to perform"),\n+ make_option(c("--cutoff_effect"), action = "store", dest = "cutoff_effect", type = "integer", default = NULL, help = "Effect size cutoff for plotting"),\n+ make_option(c("--cutoff_pval"), action = "store", dest = "cutoff_pval", type = "double", default = NULL, help = "Benjamini-Hochberg fdr cutoff"),\n+ make_option(c("--denom"), action = "store", dest = "denom", help = "Indicates which features to retain as the denominator for the Geometric Mean calculation"),\n+ make_option(c("--effect"), action = "store", dest = "effect", default = "false", help = "Calculate abundances and effect sizes"),\n+ make_option(c("--feature_name"), action = "store", dest = "feature_name", default = NULL, help = "Name of the feature from the input data to be plotted"),\n+ make_option(c("--group_names"), action = "store", dest = "group_names", help = "Group names vector"),\n+ make_option(c("--group_nums"), action = "store", dest = "group_nums", default = NULL, help = "Group number for continuous numeric vector"),\n+ 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"),\n+ make_option(c("--include_sample_summary"), action = "store", dest = "include_sample_summary", default = "false", help = "Include median clr values for each sample"),\n+ make_option(c("--iterate"), action = "store", dest = "iterate", default = "false", help = "Indicates whether to iteratively perform a test"),\n+ make_option(c("--num_cols"), action = "store", dest = "num_cols", help = "Number of columns in group vector"),\n+ 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"),\n+ make_option(c("--num_mc_samples"), action = "store", dest = "num_mc_samples", type = "integer", help = "Number of Monte Carlo samples"),\n+ make_option(c("--output"), action = "store", dest = "output", help = "output file"),\n+ make_option(c("--paired_test"), action = "store", dest = "paired_test", default = "false", help = "Indicates whether to do paired-sample tests"),\n+ make_option(c("--plot_test"), action = "store", dest = "plot_test", default = NULL, help = "The method of calculating significance"),\n+ make_option(c("--plot_type"), action = "store", dest = "plot_type", default = NULL, help = "The type of plot to be produced"),\n+ make_option(c("--reads"), action = "store", dest = "reads", help = "Input reads table"),\n+ make_option(c("--xlab"), action = "store", dest = "xlab", default = NULL, help = "x lable for the plot"),\n+ make_option(c("--ylab"), action = "store", dest = "ylab", default = NULL, help = "y lable for the plot")\n+)\n+\n+parser <- OptionParser(usage = "%prog [options] file", option_list = option_list)\n+args <- parse_args(parser, positional_arguments = TRUE)\n+opt <- args$options\n+\n+get_boolean_value <- function(val) {\n+ if (val == "true") {\n+ return(TRUE)\n+ } else {\n+ return(FALSE)\n+ }\n+}\n+\n+# Read the input reads file into a data frame.\n+reads_df <- read.table(file = opt$reads, header = TRUE, sep = "\\t", row.names = 1, dec = ".", as.is = FALSE)\n+\n+# Split the group_names and num_cols into lists of strings.\n+group_names_str <- as.character(opt$group_names)\n+group_names_list <- strsplit(group_names_str, ",")[[1]]\n+num_cols_st'..b'pt$iterate)\n+\n+if (opt$analysis_type == "aldex") {\n+ aldex_obj <- aldex(reads = reads_df,\n+ conditions_vector,\n+ mc.samples = opt$num_mc_samples,\n+ test = opt$aldex_test,\n+ effect = effect,\n+ include.sample.summary = include_sample_summary,\n+ denom = opt$denom,\n+ iterate = iterate)\n+} else {\n+ # Generate Monte Carlo samples of the Dirichlet distribution for each sample. Convert each\n+ # instance using a log-ratio transform. This is the input for all further analyses.\n+ aldex_clr_obj <- aldex.clr(reads_df, conditions_vector, mc.samples = opt$num_mc_samples, denom = opt$denom)\n+\n+ if (opt$analysis_type == "aldex_corr") {\n+ if (!is.null(opt$cont_var)) {\n+ # Read the input cont_var vector.\n+ cont_var <- as.numeric(read.table(file = opt$cont_var, header = FALSE, sep = "\\t"))\n+ }\n+\n+ # Split the group_names and num_cols into lists of strings.\n+ group_nums_str <- as.character(opt$group_nums)\n+ group_nums_list <- strsplit(group_nums_str, ",")[[1]]\n+ num_cols_in_groups_str <- as.character(opt$num_cols_in_groups)\n+ num_cols_in_groups_list <- strsplit(num_cols_in_groups_str, ",")[[1]]\n+ # Construct continuous numeric vector.\n+ cont_var_vector <- c()\n+ for (i in seq_along(num_cols_in_groups_list)) {\n+ num_cols_in_group <- as.integer(num_cols_in_groups_list[i])\n+ group_num <- group_nums_list[i]\n+ for (j in 1:num_cols_in_group) {\n+ cont_var_vector <- cbind(cont_var_vector, group_num)\n+ }\n+ }\n+ # The cont_var_vector is now a matrix,\n+ # so coerce it back to a vector.\n+ cont_var_vector <- as.numeric(as.vector(cont_var_vector))\n+\n+ aldex_obj <- aldex.corr(aldex_clr_obj, cont.var = cont_var_vector)\n+ } else if (opt$analysis_type == "aldex_effect") {\n+ aldex_obj <- aldex.effect(aldex_clr_obj, include_sample_summary)\n+ } else if (opt$analysis_type == "aldex_expected_distance") {\n+ dist <- aldex.expectedDistance(aldex_clr_obj)\n+ png(filename = opt$output)\n+ qgraph(dist, layout = "spring", vsize = 1)\n+ dev.off()\n+ } else if (opt$analysis_type == "aldex_kw") {\n+ aldex_obj <- aldex.kw(aldex_clr_obj)\n+ } else if (opt$analysis_type == "aldex_plot") {\n+ aldex_obj <- aldex(reads = reads_df,\n+ conditions_vector,\n+ mc.samples = opt$num_mc_samples,\n+ test = opt$aldex_test,\n+ effect = effect,\n+ include.sample.summary = include_sample_summary,\n+ denom = opt$denom,\n+ iterate = iterate)\n+ png(filename = opt$output)\n+ aldex.plot(x = aldex_obj,\n+ type = opt$plot_type,\n+ test = opt$plot_test,\n+ cutoff.pval = opt$cutoff_pval,\n+ cutoff.effect = opt$cutoff_effect,\n+ xlab = opt$xlab,\n+ ylab = opt$ylab)\n+ dev.off()\n+ } else if (opt$analysis_type == "aldex_plot_feature") {\n+ png(filename = opt$output)\n+ aldex.plotFeature(aldex_clr_obj, opt$feature_name)\n+ dev.off()\n+ } else if (opt$analysis_type == "aldex_ttest") {\n+ paired_test <- get_boolean_value(opt$paired_test)\n+ hist_plot <- get_boolean_value(opt$hist_plot)\n+ aldex_obj <- aldex.ttest(aldex_clr_obj, paired.test = paired_test, hist.plot = hist_plot)\n+ }\n+}\n+if ((opt$analysis_type != "aldex_expected_distance") && (opt$analysis_type != "aldex_plot") && (opt$analysis_type != "aldex_plot_feature")) {\n+ # Output the ALDEx object.\n+ write.table(aldex_obj, file = opt$output, append = FALSE, sep = "\\t", dec = ".", row.names = FALSE, col.names = TRUE)\n+}\n' |
b |
diff -r 000000000000 -r f4d0bd4b4d6d aldex2.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/aldex2.xml Wed Jun 29 07:36:45 2022 +0000 |
[ |
b'@@ -0,0 +1,471 @@\n+<tool id="aldex2" name="ALDEx2" version="@TOOL_VERSION@+galaxy@VERSION_SUFFIX@" profile="@PROFILE@">\n+ <description>differential abundance analysis</description>\n+ <macros>\n+ <import>macros.xml</import>\n+ </macros>\n+ <expand macro="biotools"/>\n+ <expand macro="requirements"/>\n+ <command detect_errors="exit_code"><![CDATA[\n+## Enable building the conditions_vector.\n+#set group_names = []\n+#set num_cols = []\n+#for $condition_items in $conditions:\n+ $group_names.append(str($condition_items.group_name))\n+ $num_cols.append(str($condition_items.num_cols))\n+#end for\n+#set group_names = \',\'.join($group_names)\n+#set num_cols = \',\'.join($num_cols)\n+\n+#if str($analysis_type_cond.analysis_type) == \'aldex_corr\':\n+ ## Enable building the cond_var (a continuous numeric vector).\n+ #set group_nums = []\n+ #set num_cols_in_groups = []\n+ #for $cont_var_items in $analysis_type_cond.cont_var:\n+ $group_nums.append(str($cont_var_items.group_num))\n+ $num_cols_in_groups.append(str($cont_var_items.num_cols_in_group))\n+ #end for\n+ #set group_nums = \',\'.join($group_nums)\n+ #set num_cols_in_groups = \',\'.join($num_cols_in_groups)\n+#end if\n+\n+Rscript \'${__tool_directory__}/aldex2.R\' \n+--reads \'$reads\' \n+--group_names \'$group_names\'\n+--num_cols \'$num_cols\'\n+--num_mc_samples $num_mc_samples\n+--denom \'$denom\'\n+--analysis_type \'$analysis_type_cond.analysis_type\'\n+#if str($analysis_type_cond.analysis_type) == \'aldex\':\n+ --aldex_test \'$analysis_type_cond.aldex_test\'\n+ --effect \'$analysis_type_cond.effect\'\n+ --include_sample_summary \'$analysis_type_cond.include_sample_summary\'\n+ --iterate \'$analysis_type_cond.iterate\'\n+#else if str($analysis_type_cond.analysis_type) == \'aldex_corr\':\n+ --group_nums \'$group_nums\'\n+ --num_cols_in_groups \'$num_cols_in_groups\'\n+#else if str($analysis_type_cond.analysis_type) == \'aldex_effect\':\n+ --include_sample_summary \'$analysis_type_cond.include_sample_summary\'\n+#else if str($analysis_type_cond.analysis_type) == \'aldex_plot\':\n+ --aldex_test \'$analysis_type_cond.aldex_test\'\n+ --effect \'$analysis_type_cond.effect\'\n+ --include_sample_summary \'$analysis_type_cond.include_sample_summary\'\n+ --iterate \'$analysis_type_cond.iterate\'\n+ --plot_type \'$analysis_type_cond.plot_type\'\n+ --plot_test \'$analysis_type_cond.plot_test\'\n+ --cutoff_pval $analysis_type_cond.cutoff_pval\n+ --cutoff_effect $analysis_type_cond.cutoff_effect\n+ #if str($analysis_type_cond.xlab) != \'\':\n+ --xlab \'$analysis_type_cond.xlab\'\n+ #end if\n+ #if str($analysis_type_cond.ylab) != \'\':\n+ --ylab \'$analysis_type_cond.ylab\'\n+ #end if\n+#else if str($analysis_type_cond.analysis_type) == \'aldex_plot_feature\':\n+ --feature_name \'$analysis_type_cond.feature_name\'\n+#else if str($analysis_type_cond.analysis_type) == \'aldex_ttest\':\n+ --paired_test \'$analysis_type_cond.paired_test\'\n+ --hist_plot \'$analysis_type_cond.hist_plot\'\n+#end if\n+#if str($analysis_type_cond.analysis_type) == \'aldex\':\n+ --output \'$output_aldex\'\n+#else if str($analysis_type_cond.analysis_type) == \'aldex_corr\':\n+ --output \'$output_aldex_corr\'\n+#else if str($analysis_type_cond.analysis_type) == \'aldex_effect\':\n+ --output \'$output_aldex_effect\'\n+#else if str($analysis_type_cond.analysis_type) == \'aldex_expected_distance\':\n+ --output \'$output_aldex_expected_distance\'\n+#else if str($analysis_type_cond.analysis_type) == \'aldex_kw\':\n+ --output \'$output_aldex_kw\'\n+#else if str($analysis_type_cond.analysis_type) == \'aldex_plot\':\n+ --output \'$output_aldex_plot\'\n+#else if str($analysis_type_cond.analysis_type) == \'aldex_plot_feature\':\n+ --output \'$output_aldex_plot_feature\'\n+#else if str($analysis_type_cond.analysis_type) == \'aldex_ttest\':\n+ --output \'$output_aldex_ttest\'\n+ #if str($analysis_type_cond.hist_plot) == \'true\':\n+ && mv \'Rplots.pdf\' \'$output_aldex_ttest_plot\'\n+ #end if\n+#end if\n+ ]]></command>\n+ <inputs>\n+ <p'..b'e selected Reads table file.\n+ * **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.\n+ * **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. \n+ * **Select the analysis to be performed**\n+\n+ * **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\xe2\x80\x99s t, Wilcoxon) or multi-sample (glm, Kruskal-Wallace) tests. This function also estimates effect size for two sample analyses.\n+\n+ * **Select the tests to be performed** - select the tests to be performed when crearing the ALDEx2 object.\n+ * **Calculate abundances and effect sizes** - applies only if the selected test is Welch\xe2\x80\x99s t and Wilcox tests, or if tests are performed iteratively.\n+ * **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).\n+ * **Perform tests iteratively** - Specify whether to iteratively perform a test. For example, this will use the results from an initial Welch\xe2\x80\x99s t and Wilcox test routine to seed the reference (i.e., denominator of Geometric Mean calculation) for a second Welch\xe2\x80\x99s t and Wilcox test routine.\n+\n+ * **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.\n+ * **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.\n+ * **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.\n+ * **Calculate the Kruskal-Wallis test and glm ANOVA statistics (aldex.kw)** - calculates the expected values of the Kruskal-Wallis test and a glm ANOVA.\n+ * **Plot an ALDEx2 object (aldex.plot)** - generate an MW-plot or an MA-plot of the given ALDEx2 object.\n+ * **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.\n+ * **Calculate Welch\xe2\x80\x99s 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\n+\n+ * **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\xe2\x80\x99s t and Wilcox tests).\n+ * **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.\n+ </help>\n+ <expand macro="citations"/>\n+</tool>\n+\n' |
b |
diff -r 000000000000 -r f4d0bd4b4d6d macros.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/macros.xml Wed Jun 29 07:36:45 2022 +0000 |
b |
@@ -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="'"/> + </valid> + <mapping initial="none"> + <add source="'" target="'"'"'"/> + </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> + |
b |
diff -r 000000000000 -r f4d0bd4b4d6d test-data/reads.tabular --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/reads.tabular Wed Jun 29 07:36:45 2022 +0000 |
b |
b'@@ -0,0 +1,201 @@\n+\t1_ANS\t1_BNS\t1_CNS\t1_DNS\t2_ANS\t2_CNS\t2_DNS\t1_AS\t1_BS\t1_CS\t1_DS\t2_AS\t2_CS\t2_DS\n+A:D:A:D\t347\t271\t396\t317\t391\t260\t620\t8\t1\t1\t2\t0\t1\t3\n+A:D:A:E\t436\t361\t461\t241\t410\t387\t788\t83\t6\t8\t12\t0\t3\t2\n+A:E:A:D\t476\t288\t378\t215\t412\t430\t591\t997\t3747\t662\t421\t37\t75\t6353\n+A:E:A:E\t513\t307\t424\t381\t499\t447\t709\t10547\t12033\t5394\t15998\t293\t1816\t33\n+A:D:C:D\t178\t165\t195\t185\t124\t158\t409\t0\t0\t0\t0\t0\t0\t1\n+A:D:C:E\t222\t138\t152\t74\t202\t179\t426\t0\t0\t1\t0\t0\t0\t0\n+A:E:C:D\t181\t114\t142\t254\t193\t149\t670\t15\t18\t67\t36\t35\t13\t140\n+A:E:C:E\t238\t177\t204\t163\t242\t255\t561\t25\t48\t145\t46\t81\t30\t7\n+A:D:D:D\t192\t140\t236\t207\t181\t182\t720\t0\t1\t0\t1\t0\t0\t1\n+A:D:D:E\t185\t118\t217\t189\t208\t179\t276\t0\t0\t0\t1\t1\t1\t0\n+A:E:D:D\t206\t108\t279\t173\t213\t223\t446\t12\t30\t18\t18\t25\t9\t113\n+A:E:D:E\t224\t154\t190\t168\t187\t204\t375\t22\t35\t60\t21\t35\t20\t4\n+A:D:E:D\t200\t101\t179\t107\t177\t155\t553\t0\t0\t0\t0\t0\t0\t1\n+A:D:E:E\t242\t192\t204\t107\t173\t147\t361\t0\t0\t1\t0\t1\t1\t1\n+A:E:E:D\t266\t144\t258\t133\t287\t227\t630\t24\t28\t42\t4\t35\t26\t9\n+A:E:E:E\t290\t140\t168\t219\t210\t213\t293\t44\t44\t35\t56\t48\t51\t3\n+A:D:F:D\t124\t91\t194\t117\t187\t143\t289\t0\t0\t0\t0\t0\t1\t0\n+A:D:F:E\t185\t118\t253\t126\t169\t160\t295\t0\t3\t0\t0\t0\t1\t0\n+A:E:F:D\t234\t128\t200\t120\t172\t173\t260\t1\t4\t0\t0\t1\t1\t2\n+A:E:F:E\t206\t168\t255\t88\t237\t182\t291\t0\t238\t2\t1\t0\t2\t1\n+A:D:G:D\t526\t318\t434\t359\t533\t431\t1347\t110\t9\t33\t15\t12\t8\t38\n+A:D:G:E\t425\t499\t450\t319\t673\t506\t1368\t132\t24\t37\t35\t16\t24\t10\n+A:E:G:D\t832\t465\t483\t377\t663\t574\t1495\t31648\t37532\t53271\t22702\t33241\t24257\t98629\n+A:E:G:E\t718\t577\t657\t910\t677\t691\t1745\t56735\t77600\t72115\t68594\t58439\t60094\t4265\n+A:D:H:D\t144\t95\t115\t90\t161\t114\t486\t0\t1\t0\t0\t0\t0\t1\n+A:D:H:E\t179\t130\t171\t93\t163\t186\t436\t0\t0\t0\t0\t0\t0\t0\n+A:E:H:D\t224\t214\t167\t146\t239\t250\t426\t0\t0\t0\t1\t1\t3\t0\n+A:E:H:E\t251\t165\t186\t198\t190\t185\t467\t0\t2\t87\t0\t0\t3\t0\n+A:D:I:D\t172\t90\t113\t102\t187\t170\t733\t0\t0\t0\t1\t0\t0\t2\n+A:D:I:E\t243\t130\t208\t165\t178\t208\t309\t1\t0\t0\t0\t1\t0\t1\n+A:E:I:D\t295\t161\t255\t176\t226\t154\t347\t0\t0\t0\t0\t4\t15\t2\n+A:E:I:E\t238\t162\t216\t284\t281\t215\t487\t16\t0\t3\t108\t6\t1\t2\n+A:D:K:D\t117\t109\t142\t161\t184\t110\t140\t0\t0\t0\t0\t0\t0\t1\n+A:D:K:E\t159\t116\t144\t76\t103\t99\t546\t1\t0\t0\t0\t1\t0\t1\n+A:E:K:D\t152\t146\t142\t82\t175\t151\t267\t1\t1\t0\t0\t0\t2\t1\n+A:E:K:E\t199\t115\t180\t150\t142\t151\t377\t116\t0\t21\t5\t0\t0\t2\n+A:D:L:D\t491\t334\t460\t393\t579\t475\t1428\t0\t2\t0\t0\t2\t1\t0\n+A:D:L:E\t495\t352\t431\t401\t544\t506\t1433\t1\t0\t0\t1\t1\t0\t0\n+A:E:L:D\t668\t467\t607\t528\t635\t656\t1152\t10\t363\t1\t0\t12\t6\t3\n+A:E:L:E\t677\t464\t520\t656\t738\t622\t1500\t3\t77\t93\t3\t5\t12\t6\n+A:D:M:D\t73\t125\t117\t55\t91\t97\t167\t1\t0\t0\t0\t1\t0\t0\n+A:D:M:E\t88\t68\t111\t51\t101\t99\t128\t1\t0\t0\t18\t0\t0\t0\n+A:E:M:D\t78\t94\t93\t39\t143\t114\t213\t9\t0\t46\t2\t1\t0\t0\n+A:E:M:E\t103\t75\t106\t65\t104\t114\t116\t9\t8\t10\t6719\t0\t0\t2\n+A:D:N:D\t87\t83\t115\t46\t83\t84\t174\t0\t0\t0\t0\t0\t0\t0\n+A:D:N:E\t124\t83\t76\t74\t129\t121\t359\t0\t0\t1\t0\t0\t0\t0\n+A:E:N:D\t112\t118\t187\t140\t150\t129\t227\t0\t0\t0\t1\t0\t1\t1\n+A:E:N:E\t101\t85\t108\t65\t157\t132\t254\t0\t1\t0\t1\t1\t0\t2\n+A:D:P:D\t324\t261\t200\t239\t295\t293\t982\t0\t0\t0\t0\t12\t1\t1\n+A:D:P:E\t291\t192\t290\t176\t355\t300\t701\t269\t0\t0\t0\t2\t0\t0\n+A:E:P:D\t415\t267\t343\t211\t376\t341\t461\t0\t4\t2\t14\t2\t0\t2\n+A:E:P:E\t393\t257\t471\t215\t352\t352\t935\t142\t2\t2\t3\t0\t0\t2\n+A:D:Q:D\t180\t160\t186\t121\t208\t174\t259\t0\t1\t0\t0\t0\t1\t0\n+A:D:Q:E\t151\t122\t274\t131\t177\t182\t437\t0\t0\t0\t0\t0\t0\t0\n+A:E:Q:D\t217\t223\t252\t205\t193\t210\t383\t7\t0\t6\t1\t1\t1\t200\n+A:E:Q:E\t210\t157\t267\t143\t191\t194\t400\t0\t1\t1\t0\t0\t2\t1\n+A:D:R:D\t587\t404\t532\t511\t606\t539\t1088\t0\t1\t0\t1\t1\t0\t2\n+A:D:R:E\t613\t444\t640\t501\t488\t656\t2654\t0\t0\t2\t0\t1\t81\t0\n+A:E:R:D\t688\t502\t588\t444\t581\t605\t1316\t82\t16\t294\t14\t31\t27\t16\n+A:E:R:E\t743\t501\t559\t510\t636\t737\t1916\t57\t44\t50\t52\t47\t83\t6\n+A:D:S:D\t425\t303\t405\t369\t507\t420\t953\t1\t1\t0\t0\t0\t0\t1\n+A:D:S:E\t441\t411\t542\t344\t551\t478\t1498\t1\t0\t3\t0\t0\t0\t1\n+A:E:S:D\t601\t331\t517\t327\t579\t493\t1333\t16\t13\t124\t157\t25\t16\t122\n+A:E:S:E\t570\t427\t671\t399\t515\t585\t894\t28\t53\t132\t40\t43\t29\t9\n+A:D:T:D\t205\t164\t168\t170\t175\t204\t495\t0\t0\t0\t0\t0\t0\t0\n+A:D:T:E\t190\t138\t191\t133\t175\t147\t266\t0\t0\t0\t0\t0\t0\t0\n+A:E:T:D\t221\t175\t233\t174\t212\t198\t396\t2\t4\t1\t1\t1\t7\t8\n+A:E:T:E\t260\t143\t368\t243\t357\t280\t740\t15\t13\t3\t33\t0\t3\t7\n+A:D:V:D\t427\t265\t435\t447\t415\t366\t969\t2\t1\t0\t0\t0\t2\t1\n+A:D:V:E\t378\t320\t366\t325\t526\t360\t1143\t0\t0\t1\t2\t2\t0\t1\n+A:E:V:D\t501\t333\t482\t493\t485\t434\t1205\t36\t42\t94\t18\t49\t15\t65\n+A:E:V:E\t573\t343\t552\t426\t537\t484\t914\t63\t51\t93\t72\t61\t54\t2835\n+A:D:W:D\t108\t85\t111\t1'..b'\t267\t190\t455\t0\t0\t0\t0\t0\t0\t1\n+C:E:L:D\t263\t236\t228\t163\t242\t248\t541\t0\t0\t1\t0\t0\t1\t0\n+C:E:L:E\t301\t240\t389\t293\t380\t303\t568\t0\t0\t0\t0\t0\t0\t1\n+C:D:M:D\t66\t42\t25\t31\t25\t27\t200\t0\t0\t73\t0\t0\t0\t0\n+C:D:M:E\t46\t22\t51\t14\t39\t41\t31\t0\t0\t1\t1\t0\t0\t1\n+C:E:M:D\t32\t24\t38\t39\t36\t35\t81\t0\t0\t0\t0\t0\t0\t0\n+C:E:M:E\t40\t35\t33\t17\t48\t30\t43\t0\t1\t1\t1\t0\t1\t0\n+C:D:N:D\t39\t40\t58\t21\t45\t47\t122\t0\t0\t0\t0\t0\t0\t0\n+C:D:N:E\t40\t27\t20\t15\t44\t38\t164\t0\t0\t0\t0\t0\t0\t0\n+C:E:N:D\t48\t24\t48\t42\t42\t63\t192\t0\t0\t0\t0\t0\t0\t0\n+C:E:N:E\t70\t37\t48\t27\t117\t61\t123\t0\t0\t0\t0\t1\t1\t0\n+C:D:P:D\t118\t67\t158\t51\t108\t106\t147\t0\t0\t0\t0\t0\t0\t0\n+C:D:P:E\t140\t60\t152\t46\t148\t142\t278\t0\t0\t0\t0\t2\t0\t0\n+C:E:P:D\t124\t111\t248\t125\t161\t122\t503\t0\t0\t0\t0\t0\t0\t1\n+C:E:P:E\t190\t110\t132\t64\t137\t170\t214\t1\t0\t0\t0\t0\t0\t0\n+C:D:Q:D\t97\t46\t110\t25\t75\t51\t58\t0\t0\t0\t0\t0\t0\t0\n+C:D:Q:E\t89\t53\t64\t53\t70\t111\t97\t0\t0\t0\t0\t0\t0\t1\n+C:E:Q:D\t97\t60\t73\t76\t76\t121\t81\t0\t0\t9\t0\t0\t0\t0\n+C:E:Q:E\t97\t69\t113\t117\t113\t84\t471\t0\t0\t0\t0\t0\t0\t0\n+C:D:R:D\t282\t216\t234\t113\t198\t219\t252\t0\t0\t1\t0\t0\t0\t1\n+C:D:R:E\t235\t140\t184\t141\t330\t239\t425\t0\t0\t1\t0\t0\t0\t0\n+C:E:R:D\t281\t211\t280\t99\t308\t294\t492\t0\t0\t0\t0\t0\t0\t0\n+C:E:R:E\t308\t224\t373\t296\t440\t297\t554\t0\t0\t0\t0\t0\t0\t0\n+C:D:S:D\t171\t130\t158\t148\t188\t143\t309\t0\t0\t0\t0\t0\t0\t0\n+C:D:S:E\t227\t112\t296\t127\t229\t184\t336\t0\t0\t2\t0\t264\t0\t1\n+C:E:S:D\t271\t146\t194\t136\t221\t191\t558\t0\t0\t0\t0\t1\t0\t0\n+C:E:S:E\t201\t167\t182\t153\t258\t204\t369\t0\t1\t0\t1\t0\t0\t0\n+C:D:T:D\t72\t63\t55\t27\t71\t62\t85\t0\t0\t0\t0\t0\t0\t0\n+C:D:T:E\t81\t44\t74\t63\t93\t133\t74\t0\t0\t0\t0\t0\t0\t0\n+C:E:T:D\t81\t81\t121\t33\t89\t92\t268\t0\t1\t0\t0\t0\t0\t0\n+C:E:T:E\t95\t82\t60\t45\t90\t114\t94\t0\t0\t0\t0\t0\t0\t0\n+C:D:V:D\t202\t89\t231\t180\t182\t204\t261\t0\t0\t0\t0\t0\t2\t1\n+C:D:V:E\t243\t118\t214\t122\t172\t199\t492\t1\t1\t1\t0\t0\t0\t1\n+C:E:V:D\t202\t197\t224\t203\t270\t192\t380\t0\t0\t0\t0\t0\t0\t0\n+C:E:V:E\t206\t122\t169\t161\t225\t221\t745\t0\t0\t1\t0\t0\t0\t1\n+C:D:W:D\t40\t29\t49\t12\t40\t57\t46\t0\t0\t0\t0\t0\t0\t0\n+C:D:W:E\t48\t45\t23\t56\t76\t37\t56\t0\t0\t0\t0\t0\t0\t0\n+C:E:W:D\t74\t67\t64\t53\t57\t60\t82\t0\t0\t0\t0\t0\t0\t0\n+C:E:W:E\t44\t42\t65\t41\t86\t56\t49\t0\t0\t0\t0\t0\t0\t0\n+C:D:Y:D\t65\t33\t42\t54\t50\t43\t77\t0\t0\t0\t0\t0\t0\t0\n+C:D:Y:E\t50\t44\t95\t25\t41\t43\t80\t0\t0\t0\t0\t0\t0\t0\n+C:E:Y:D\t72\t81\t45\t36\t41\t42\t82\t0\t0\t0\t0\t0\t0\t0\n+C:E:Y:E\t78\t38\t36\t45\t74\t62\t107\t0\t0\t0\t0\t0\t0\t0\n+D:D:A:D\t237\t132\t174\t78\t214\t184\t457\t1\t0\t0\t0\t1\t0\t2\n+D:D:A:E\t295\t164\t234\t133\t298\t223\t899\t0\t2\t2\t0\t3\t1\t0\n+D:E:A:D\t269\t133\t327\t179\t284\t247\t258\t0\t5\t4\t0\t96\t1\t44\n+D:E:A:E\t274\t194\t363\t301\t403\t307\t422\t15\t20\t9\t51\t11\t10\t3\n+D:D:C:D\t93\t60\t62\t56\t93\t133\t165\t0\t0\t0\t0\t0\t0\t0\n+D:D:C:E\t109\t52\t35\t42\t127\t109\t234\t0\t0\t0\t0\t1\t0\t0\n+D:E:C:D\t82\t64\t67\t85\t110\t127\t371\t0\t0\t0\t0\t0\t0\t0\n+D:E:C:E\t97\t86\t117\t55\t133\t124\t423\t0\t0\t0\t0\t1\t0\t1\n+D:D:D:D\t96\t81\t82\t47\t96\t122\t174\t0\t0\t0\t0\t0\t1\t2\n+D:D:D:E\t111\t59\t162\t49\t163\t114\t237\t0\t0\t0\t0\t0\t1\t1\n+D:E:D:D\t137\t105\t94\t58\t190\t136\t175\t0\t1\t0\t0\t0\t0\t3\n+D:E:D:E\t133\t43\t180\t62\t144\t110\t158\t1\t0\t0\t0\t0\t0\t0\n+D:D:E:D\t143\t64\t159\t53\t138\t97\t165\t0\t0\t0\t0\t1\t0\t1\n+D:D:E:E\t114\t99\t170\t133\t131\t147\t208\t0\t1\t0\t0\t0\t0\t0\n+D:E:E:D\t122\t81\t105\t102\t158\t120\t144\t0\t0\t0\t0\t0\t0\t0\n+D:E:E:E\t142\t84\t117\t108\t157\t106\t296\t0\t0\t2\t0\t0\t0\t1\n+D:D:F:D\t117\t100\t113\t45\t119\t108\t325\t0\t0\t0\t0\t0\t0\t0\n+D:D:F:E\t124\t88\t79\t24\t152\t132\t127\t0\t0\t0\t0\t0\t0\t0\n+D:E:F:D\t134\t64\t90\t49\t138\t103\t425\t0\t0\t0\t0\t0\t0\t0\n+D:E:F:E\t93\t75\t135\t47\t147\t115\t146\t0\t0\t0\t1\t0\t0\t0\n+D:D:G:D\t286\t257\t308\t212\t304\t292\t589\t4\t2\t6\t2\t4\t2\t7\n+D:D:G:E\t327\t178\t317\t146\t299\t260\t843\t2\t2\t9\t3\t1\t4\t4\n+D:E:G:D\t341\t220\t300\t290\t395\t347\t801\t19\t13\t16\t15\t14\t17\t80\n+D:E:G:E\t374\t238\t335\t225\t519\t407\t659\t36\t37\t37\t68\t21\t19\t6\n+D:D:H:D\t94\t63\t65\t49\t97\t80\t464\t0\t0\t0\t0\t1\t0\t0\n+D:D:H:E\t105\t101\t174\t49\t119\t144\t405\t0\t0\t1\t0\t0\t0\t0\n+D:E:H:D\t140\t114\t115\t41\t185\t131\t340\t0\t0\t0\t0\t0\t0\t0\n+D:E:H:E\t120\t84\t152\t123\t147\t125\t232\t0\t0\t0\t0\t1\t0\t1\n+D:D:I:D\t114\t91\t101\t125\t116\t114\t209\t0\t0\t0\t0\t0\t1\t0\n+D:D:I:E\t151\t76\t81\t129\t163\t100\t281\t0\t0\t0\t0\t1\t0\t0\n+D:E:I:D\t123\t70\t107\t69\t120\t118\t168\t0\t1\t0\t0\t0\t0\t0\n+D:E:I:E\t119\t85\t175\t101\t154\t145\t147\t0\t0\t0\t0\t0\t0\t1\n+D:D:K:D\t87\t53\t79\t41\t73\t83\t86\t0\t0\t0\t0\t0\t0\t0\n+D:D:K:E\t78\t65\t66\t97\t92\t58\t111\t0\t0\t0\t0\t0\t0\t0\n+D:E:K:D\t112\t50\t110\t39\t91\t67\t123\t0\t1\t0\t0\t1\t0\t0\n+D:E:K:E\t106\t38\t105\t35\t99\t99\t157\t0\t0\t0\t0\t0\t0\t0\n+D:D:L:D\t319\t201\t289\t327\t325\t298\t534\t0\t1\t0\t0\t0\t0\t0\n+D:D:L:E\t321\t242\t372\t247\t345\t383\t1109\t0\t0\t0\t0\t1\t0\t0\n+D:E:L:D\t377\t254\t387\t339\t415\t361\t1077\t0\t0\t1\t0\t0\t0\t1\n+D:E:L:E\t343\t244\t450\t250\t476\t331\t1120\t0\t1\t0\t1\t4\t0\t3\n' |