Next changeset 1:680917d9d415 (2020-09-14) |
Commit message:
"planemo upload for repository https://github.com/QFAB-Bioinformatics/metaDEGalaxy/tree/master/symmetric_plot commit a68579d7bdde7420b8f04346d3b6e361588acf50" |
added:
symmetric_plot.r symmetric_plot.xml test-data/SymmetricPlot.html test-data/count.txt test-data/metadata.txt test-data/observation.txt |
b |
diff -r 000000000000 -r 0cac08094b86 symmetric_plot.r --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/symmetric_plot.r Mon Sep 14 06:04:44 2020 +0000 |
[ |
@@ -0,0 +1,182 @@ +library('getopt') +library('tidyr') +suppressPackageStartupMessages(library('dplyr')) +suppressPackageStartupMessages(library('phyloseq')) +suppressPackageStartupMessages(library('DESeq2')) +suppressPackageStartupMessages(library('ggplot2')) +suppressPackageStartupMessages(library('data.table')) +Sys.setenv("DISPLAY"=":1") + + +options(warn= -1) +option_specification = matrix(c( + 'input.data','i',2,'character', + 'meta.data','m',2,'character', + 'obs.data','t',2,'character', + 'record','r',2,'numeric', + 'taxrank','x',2,'character', + 'norm','n',2,'logical', + 'n.column','c',2,'numeric', + 'g.group','g',2,'character', + 'outdir','o',2,'character', + 'htmlfile','h',2,'character' +),byrow=TRUE,ncol=4); + + +options <- getopt(option_specification); +options(bitmapType="cairo") + + +if (!is.null(options$outdir)) { + # Create the directory + dir.create(options$outdir,FALSE) +} + + +input.table<-read.table(options$input.data,header=T,sep="\t",stringsAsFactors = F) +metadata.table<-read.table(options$meta.data,header=T,sep="\t",stringsAsFactors = F,comment.char="") +obs.table<-read.table(options$obs.data,header=F,sep="\t",stringsAsFactors = F,comment.char="") + +colnames(obs.table)<-c("OTUID","taxonomy") + + +tax_col <- c("OTUID","Kingdom","Phylum","Class","Order","Family","Genus","Species") +tax_col_extra <- c("OTUID","None","Kingdom","Phylum","Class","Order","Family","Genus","Species") + +### remove the leading #sign in column name if the column name begins with number +colnames(input.table)<-gsub("^X","",colnames(input.table)) +colnames(metadata.table)<-gsub("^X.","",colnames(metadata.table)) + + +column.name<-colnames(metadata.table)[options$n.column] +#in.column<-options$g.column +in.group<-options$g.group +nrecord<-options$record +ranking<-options$taxrank + +### create data frame for group +group.df<-data.frame(group=unlist(strsplit(in.group,",")),stringsAsFactors = F) + +### get the number of group +number.of.group<-dim(group.df)[1] + +if(number.of.group != 2){ + print(paste("Number of group for comparision is",number.of.group,sep="")) + quit("yes") +} + + + +group1<-metadata.table[which(metadata.table[,column.name] %in% group.df$group[1]),]$SampleID +group2<-metadata.table[which(metadata.table[,column.name] %in% group.df$group[2]),]$SampleID + +sample2group.map <- data.frame(sample=colnames(input.table[,c(group1,group2)]), + groups=c(rep(group.df$group[1],length(group1)), + rep(group.df$group[2],length(group2)))) + + +if(options$norm =="false"){ +### raw count table + count.table<-input.table + rownames(count.table)<-count.table[,1] + count.table<-count.table[,-1] + + suppressMessages(raw.count.deseq.obj<-DESeqDataSetFromMatrix(countData = count.table,colData=metadata.table, as.formula(paste('~',column.name,sep="")))) + + gm_mean = function(x, na.rm=TRUE){ + exp(sum(log(x[x > 0]), na.rm=na.rm) / length(x)) + } + + geoMeans = apply(counts(raw.count.deseq.obj), 1, gm_mean) + deseq_obj = estimateSizeFactors(raw.count.deseq.obj, geoMeans = geoMeans) + deseq_obj_norm<-counts(deseq_obj,normalized=T) +} else { + deseq_obj_norm<-input.table + rownames(deseq_obj_norm)<-deseq_obj_norm[,1] + deseq_obj_norm<-deseq_obj_norm[,-1] +} + + +#first.50.otu.id<-rownames(counts(raw.count.deseq.obj))[1:50] +first.50.otu.id<-rownames(deseq_obj_norm)[1:nrecord] + + +#filtered.data<-counts(raw.count.deseq.obj)[first.50.otu.id,c(group1,group2)] +filtered.data<-deseq_obj_norm[first.50.otu.id,c(group1,group2)] +filtered.data<-as.data.frame(cbind(OTUID=rownames(filtered.data),filtered.data),stringsAsFactors=F) + +nc <- match('OTUID',colnames(filtered.data)) +filtered.data[,-nc]<-sapply(filtered.data[,-nc],as.integer) +stopifnot(min(range(filtered.data[,-nc]))>=0) + +long <- gather(filtered.data,sample,expr,-OTUID) +suppressMessages((long <- left_join(long, sample2group.map))) +long$expr[long$groups == group.df$group[1]] <- long$expr*-1 + +sorted.OTU <- rev(sort(unique(long$OTUID))) +long$OTUID <- factor(long$OTUID, levels=sorted.OTU) +long$sample <- as.factor(long$sample) + + +tax.table.new<-as.data.frame(cbind(obs.table[,1],t(as.data.table(strsplit(obs.table[,2],";"))))) + +if(length(colnames(tax.table.new)) != length(tax_col_extra)) +{ +colnames(tax.table.new)<-tax_col +} else { +colnames(tax.table.new)<-tax_col_extra +} + +long<-cbind(long,tax.table.new[match(long$OTUID,tax.table.new$OTUID),-1]) + +comparison<-paste(column.name,paste(group.df$group[1],group.df$group[2],sep="-"),sep=" ") + + +p<-ggplot(long,aes(x=reorder(OTUID,expr),y=expr, fill=groups)) + + geom_bar(stat='identity') + theme_bw() + + xlab("OTU ID") + + labs(title=comparison) + facet_grid( as.formula(paste(ranking,"~ .",sep="")),scales = "free", space = "free" ) + theme(strip.text.y = element_text(angle = 0)) + + coord_flip() +q<-ggplot_build(p) +q$layout$panel_ranges[[1]]$x.labels <- gsub("-","",q$layout$panel_ranges[[1]]$x.labels) +#Reassemble the plot using ggplot_gtable() +q<-ggplot_gtable(q) + + + + +pdffile <- gsub("[ ]+", "", paste(options$outdir,"/symmetric.pdf")) +pngfile_symmetric <- gsub("[ ]+", "", paste(options$outdir,"/symmetric.png")) +htmlfile <- gsub("[ ]+", "", paste(options$htmlfile)) + + +# Produce PDF file +pdf(pdffile); +plot(q) +garbage<-dev.off(); + +#png('richness.png') +bitmap(pngfile_symmetric,"png16m",height=10,width=10,res=100) +plot(q) +garbage<-dev.off() + +# Produce the HTML file + htmlfile_handle <- file(htmlfile) + html_output = c('<html><body>', + '<table align="center">', + '<tr>', + '<td valign="middle" style="vertical-align:middle;">', + '<a href="pdffile.pdf"><img src="symmetric.png"/></a>', + '</td>', + '</tr>', + '</table>', + '<table align="center>', + '<tr>', + '<td valign="middle" style="vertical-align:middle;">', + '<a href="pdffile.pdf"><img src="symmetric.png"/></a>', + '</td>', + '</tr>', + '</table>', + '</html></body>'); + writeLines(html_output, htmlfile_handle); + close(htmlfile_handle); |
b |
diff -r 000000000000 -r 0cac08094b86 symmetric_plot.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/symmetric_plot.xml Mon Sep 14 06:04:44 2020 +0000 |
[ |
@@ -0,0 +1,135 @@ +<tool id="symmetricPlot" name="Symmetric Plot" version="1.0.1" hidden="false" force_history_refresh="True">> + <description>Symmetric Plot</description> + <requirements> + <requirement type="package" version="3.4.1">r-base</requirement> + <requirement type="package" version="1.22.3">bioconductor-phyloseq</requirement> + <requirement type="package" version="1.18.1">bioconductor-deseq2</requirement> + <requirement type="package" version="1.20.0">r-getopt</requirement> + <requirement type="package" version="0.6.3">r-tidyr</requirement> + <requirement type="package" version="9.18">ghostscript</requirement> +<tool id="symmetricPlot2" name="Symmetric Plot" version="1.0.1" hidden="false" force_history_refresh="True">> + <description>Symmetric Plot</description> + <requirements> + <requirement type="package" version="3.4.1">r-base</requirement> + <requirement type="package" version="1.22.3">bioconductor-phyloseq</requirement> + <requirement type="package" version="1.18.1">bioconductor-deseq2</requirement> + <requirement type="package" version="1.20.0">r-getopt</requirement> + <requirement type="package" version="0.6.3">r-tidyr</requirement> + <requirement type="package" version="9.18">ghostscript</requirement> + </requirements> + <version_command><![CDATA[ + echo $(R --version | grep version | grep -v GNU)", phyloseq version" $(R --vanilla --slave -e "library(phyloseq); cat(sessionInfo()\$otherPkgs\$phyloseq\$Version)" 2> /dev/null | grep -v -i "WARNING: ") + ]]></version_command> + <command detect_errors="exit_code"><![CDATA[ + Rscript '${__tool_directory__}/symmetric_plot.r' + --input.data='$input_table' + --meta.data='$meta_table' + --obs.data='$obs_table' + --taxrank='$taxonomy_rank' + --record='$nTop' + --norm="${norm_bool}" + --n.column="${selectedCol}" + --g.group="${group}" + --outdir="$htmlfile.files_path" + --htmlfile='$htmlfile' + ]]></command> + + <inputs> + <param format="tabular" name="input_table" type="data" label="Count table file"/> + <param format="tabular" name="meta_table" type="data" label="Metadata file"/> + <param format="tabular" name="obs_table" type="data" label="OTU Taxonomy file"/> + + <param name="nTop" type="select" display="radio" label="Select number of records to display"> + <option value="20" selected="true">20</option> + <option value="30">30</option> + <option value="40">40</option> + <option value="50">50</option> + <option value="100">100</option> + </param> + + <param name="taxonomy_rank" type="select" display="radio" label="Select a taxonomy rank"> + <option value="Kingdom" selected="true">Kingdom</option> + <option value="Phylum">Phylum</option> + <option value="Class">Class</option> + <option value="Order">Order</option> + <option value="Family">Family</option> + <option value="Genus">Genus</option> + <option value="Species">Species</option> + </param> + + + <param name="norm_bool" type="boolean" truevalue="true" falsevalue="false" checked="false" label="is the data normalised?"/> + <param name="selectedCol" type="data_column" data_ref="meta_table" use_header_names="TRUE" label="Variable to compare"/> + <param name="group" type="text" label="Fill in two comparable group separated by comma"/> + + </inputs> + + <outputs> + <data format="html" name="htmlfile" label="${tool.name} SymmetricPlot.html"/> + </outputs> + + <tests> + <test> + <param name="input_table" value="count.txt"/> + <param name="meta_table" value="metadata.txt"/> + <param name="obs_table" value="observation.txt"/> + <param name="nTop" value="30"/> + <param name="taxonomy_rank" value="Phylum"/> + <param name="selectedCol" value="3"/> + <param name="group" value="Early,Late"/> + <output name="htmlfile" ftype="html" file="SymmetricPlot.html"/></test> + </tests> + <help> +.. class:: infomark + +**TIP:** The input data should be in tabular format. + +.. class:: infomark + +**TIP:** The first column should contain OTU ID. + +.. class:: infomark + +**TIP:** This program takes in two files:1)raw count/normalised table, 2) a metadata file + +.. class:: infomark + +**What it does** + + This program uses an R package called DESeq2_ and ggplot2_ to create a symmetric bar plot. + +.. _DESeq2 : https://bioconductor.org/packages/release/bioc/html/DESeq2.html +.. _ggplot2: https://ggplot2.tidyverse.org/ + +======= + This program uses an R package called DESeq2 and ggplot2 to create a symmetric bar plot. + +----- + +**Syntax** + +This tool creates a symmetric plot based on input table. The input table,if it is a raw count table, will be normalised by DESeq "counts" function with flag "normalised=T". + +- **A normalised dataset** - set to "Yes" only if the input table is a normalised dataset +- **Group of choice** - The group of choice will appear in the title of the plot(e.g., Tissue, protein and etc). +- **Select a group** - This is a list of group to use in comparison(e.g., Tissue A vs Tissue B). This should be the same as "Group of choice". +- **Select only two groups to compare** - select only two groups of interest for comparison. + +----- + +========= +Resources +========= + +======= +**Wrapper Author** + +QFAB Bioinformatics (support@qfab.org) + + </help> + <citations> + <citation type="doi">10.18129/B9.bioc.DESeq2</citation> + <citation type="doi">10.1007/978-3-319-24277-4</citation> + </citations> +======= +</tool> |
b |
diff -r 000000000000 -r 0cac08094b86 test-data/SymmetricPlot.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/SymmetricPlot.html Mon Sep 14 06:04:44 2020 +0000 |
b |
@@ -0,0 +1,9 @@ +<html><body> +<table align="center"> +<tr> +<td valign="middle" style="vertical-align:middle;"> +<a href="pdffile.pdf"><img src="symmetric.png"/></a> +</td> +</tr> +</table> +</html></body> |
b |
diff -r 000000000000 -r 0cac08094b86 test-data/count.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/count.txt Mon Sep 14 06:04:44 2020 +0000 |
b |
b'@@ -0,0 +1,3359 @@\n+OTUID\tF3D147\tF3D0\tF3D7\tF3D6\tF3D1\tF3D144\tF3D148\tF3D149\tF3D2\tF3D141\tF3D146\tF3D9\tF3D142\tF3D145\tF3D8\tF3D3\tF3D143\tF3D5\n+297768\t1314\t354\t519\t707\t359\t300\t794\t832\t1721\t379\t236\t431\t327.366656200031\t525\t355\t651\t176\t274\n+794170\t297\t107\t69\t104\t30\t80\t199\t169\t100\t64\t54\t67\t65.4733312400061\t126\t62\t59\t58\t35\n+345662\t806\t44\t176\t201\t71\t159\t415\t448\t437\t164\t114\t143\t88.3370342127067\t198\t109\t313\t99\t170\n+182733\t13\t3\t6\t8\t3\t6\t7\t17\t14\t3\t2\t6\t4.15703690412737\t12\t1\t14\t5\t3\n+328698\t872\t424\t415\t551\t220\t273\t584\t702\t1143\t313\t235\t472\t156.928143130808\t487\t332\t442\t192\t264\n+789537\t515\t55\t9\t13\t10\t57\t263\t209\t38\t84\t61\t9\t29.0992583288916\t105\t5\t16\t36\t19\n+835517\t2\t0\t0\t0\t0\t1\t2\t1\t0\t0\t0\t0\t0\t3\t0\t0\t2\t0\n+768418\t121\t26\t35\t39\t5\t36\t53\t68\t73\t28\t27\t29\t20.7851845206369\t64\t16\t42\t22\t19\n+271934\t21\t116\t0\t0\t0\t5\t29\t8\t2\t5\t1\t0\t4.15703690412737\t14\t0\t0\t2\t1\n+4484676\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t1\t0\t0\t0\n+263472\t1344\t517\t597\t931\t363\t368\t772\t805\t3225\t397\t284\t457\t255.657769603833\t563\t235\t890\t194\t283\n+715297\t5\t0\t0\t1\t0\t1\t1\t2\t2\t0\t0\t1\t3.11777767809553\t0\t1\t2\t1\t1\n+335523\t573\t176\t545\t531\t139\t146\t532\t484\t382\t208\t202\t649\t227.597770500974\t380\t580\t471\t127\t151\n+802273\t0\t5\t2\t13\t30\t3\t8\t11\t76\t3\t8\t25\t1.03925922603184\t7\t29\t6\t4\t10\n+231806\t1173\t468\t6\t12\t36\t354\t866\t648\t113\t320\t269\t2\t180.831105329541\t463\t1\t22\t222\t19\n+262166\t94\t11\t12\t16\t1\t19\t54\t45\t21\t11\t26\t4\t4.15703690412737\t22\t2\t14\t11\t6\n+201490\t319\t81\t1\t1\t0\t113\t283\t180\t17\t107\t37\t1\t53.002220527624\t120\t6\t25\t36\t36\n+784569\t140\t49\t98\t366\t109\t12\t12\t73\t290\t10\t4\t148\t98.7296264730251\t24\t126\t85\t37\t46\n+1051764\t301\t168\t309\t263\t110\t180\t228\t318\t688\t145\t103\t229\t84.1799973085793\t262\t213\t335\t80\t231\n+641881\t0\t21\t13\t14\t93\t0\t0\t1\t173\t0\t1\t67\t0\t0\t66\t5\t0\t8\n+764495\t0\t0\t0\t0\t2\t0\t0\t0\t1\t0\t0\t1\t0\t0\t1\t0\t0\t0\n+611419\t15\t54\t13\t40\t147\t4\t19\t25\t285\t8\t17\t57\t1.03925922603184\t3\t25\t13\t1\t35\n+1116652\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t4\t0\t0\t0\t0\n+794112\t1112\t437\t292\t391\t66\t343\t906\t913\t460\t510\t397\t199\t164.202957713031\t561\t146\t191\t230\t158\n+793544\t26\t26\t11\t45\t43\t14\t13\t42\t131\t8\t36\t62\t3.11777767809553\t13\t41\t17\t11\t40\n+608864\t20\t29\t7\t39\t31\t1\t2\t8\t100\t2\t4\t79\t4.15703690412737\t0\t37\t7\t1\t30\n+793598\t14\t20\t2\t9\t17\t2\t20\t55\t48\t13\t15\t6\t2.07851845206369\t5\t12\t5\t4\t5\n+229622\t98\t179\t249\t268\t197\t44\t590\t600\t1347\t346\t73\t458\t88.3370342127067\t145\t303\t434\t102\t210\n+752203\t2\t10\t0\t5\t6\t1\t1\t4\t7\t0\t5\t4\t0\t1\t3\t3\t0\t2\n+768762\t17\t29\t6\t17\t30\t2\t46\t31\t21\t43\t27\t26\t3.11777767809553\t11\t23\t3\t26\t16\n+803937\t10\t5\t5\t22\t70\t1\t14\t31\t48\t7\t8\t25\t0\t1\t16\t10\t1\t46\n+194043\t89\t14\t0\t1\t0\t29\t45\t33\t2\t17\t19\t0\t11.4318514863503\t44\t0\t2\t15\t0\n+126968\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+636535\t58\t69\t29\t46\t259\t11\t37\t31\t312\t26\t23\t75\t9.35333303428659\t11\t31\t44\t7\t68\n+783396\t764\t248\t160\t250\t83\t207\t507\t492\t297\t214\t199\t197\t138.221477062235\t352\t113\t144\t135\t106\n+315669\t1\t1\t0\t0\t2\t0\t3\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+795920\t31\t66\t47\t101\t93\t2\t6\t5\t181\t2\t31\t49\t4.15703690412737\t6\t39\t13\t1\t47\n+565140\t445\t17\t9\t43\t103\t244\t386\t475\t51\t159\t170\t24\t39.49185058921\t312\t16\t155\t70\t53\n+2096434\t32\t26\t0\t0\t0\t21\t82\t28\t5\t16\t3\t0\t28.0599991028598\t6\t0\t16\t11\t0\n+732155\t1\t89\t8\t16\t12\t9\t9\t10\t40\t22\t3\t13\t3.11777767809553\t4\t17\t6\t5\t10\n+216524\t45\t13\t0\t0\t2\t18\t32\t29\t2\t15\t17\t0\t3.11777767809553\t25\t0\t0\t11\t0\n+781109\t0\t1\t1\t1\t2\t0\t0\t0\t1\t0\t0\t2\t0\t0\t2\t0\t0\t1\n+790211\t3\t54\t11\t38\t46\t0\t1\t8\t83\t3\t5\t11\t2.07851845206369\t3\t7\t12\t0\t19\n+453937\t530\t211\t4\t4\t36\t142\t410\t294\t38\t140\t144\t3\t98.7296264730251\t241\t0\t5\t103\t4\n+214906\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\n+273631\t12\t70\t9\t48\t69\t15\t8\t41\t78\t20\t21\t41\t6.23555535619106\t13\t30\t6\t11\t40\n+795350\t5\t14\t1\t12\t7\t0\t2\t13\t21\t1\t3\t3\t2.07851845206369\t1\t9\t5\t3\t4\n+208402\t71\t16\t24\t30\t9\t20\t43\t33\t92\t17\t15\t12\t20.7851845206369\t24\t7\t26\t14\t11\n+367519\t0\t9\t0\t0\t0\t0\t0\t0\t6\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+796269\t7\t4\t1\t2\t3\t1\t0\t7\t5\t0\t3\t4\t0\t0\t0\t1\t0\t3\n+724472\t33\t5\t1\t10\t9\t4\t16\t15\t22\t9\t1\t7\t7.2748145822229\t10\t5\t4\t6\t4\n+190916\t663\t156\t64\t80\t49\t136\t359\t229\t210\t147\t102\t35\t114.318514863503\t271\t20\t87\t62\t91\n+4406374\t6\t1\t0\t3\t0\t0\t16\t9\t0\t3\t2\t1\t4.15703690412737\t4\t1\t0\t2\t0\n+4444771\t42\t68\t39\t76\t110\t6\t56\t4\t441\t6\t3\t43\t7.2748145822229\t5\t21\t414\t4\t19\n+289443\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+744185\t40\t8\t5\t6\t20\t4\t28\t46\t61\t12\t9\t14\t2.07851845206369\t3\t11\t2\t11\t6\n+309960\t0\t0\t0\t0\t0\t0\t1'..b'\t0\t0\t0\t0\n+236514\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\n+846319\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+258852\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t1\n+769488\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+275657\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+1075919\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+348748\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+331965\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\n+306201\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\n+695966\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\n+227787\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+1101746\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+275931\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\n+261212\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\n+449877\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\n+702183\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\n+183578\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+453377\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+4049151\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+683171\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\n+374831\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+306860\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+214711\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+1036956\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+776532\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\n+162367\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+330353\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\n+232822\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+953889\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+326578\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+187214\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\n+4243544\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+277583\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+194906\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\n+445648\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+314496\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\n+657218\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\n+643245\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\n+4326814\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\n+321821\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+4115286\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1.03925922603184\t0\t0\t0\t0\t0\n+233515\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+608625\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+4307862\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+3314541\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+795663\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+665674\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\n+292398\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+187233\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+284339\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+198882\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+230744\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\n+203970\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+178503\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+4432047\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\n+259382\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\n+268059\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+433422\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\n+510131\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+314903\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\n+697920\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+3449658\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\n+729082\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\n+716470\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\n+272188\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+341504\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+270993\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+659748\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\n+626489\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+4432504\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+349748\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+274521\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+342570\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+612337\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\t0\n+339622\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\n+674982\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+188345\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+277533\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+724250\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+1085592\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+534772\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+333049\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+298785\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+1080675\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+272488\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+550699\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+182712\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+343331\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+1044577\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n+511768\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n' |
b |
diff -r 000000000000 -r 0cac08094b86 test-data/metadata.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/metadata.txt Mon Sep 14 06:04:44 2020 +0000 |
b |
@@ -0,0 +1,19 @@ +#SampleID dpw time Food Replicate_Group +F3D0 0 Early None Group1 +F3D1 1 Early None Group1 +F3D2 2 Early None Group1 +F3D3 3 Early Cheddar Group2 +F3D5 5 Early Cheddar Group2 +F3D6 6 Early Cheddar Group2 +F3D7 7 Early Swiss Group3 +F3D8 8 Early Swiss Group3 +F3D9 9 Early Swiss Group3 +F3D141 141 Late Cheddar Group4 +F3D142 142 Late Cheddar Group4 +F3D143 143 Late Cheddar Group4 +F3D144 144 Late None Group5 +F3D145 145 Late None Group5 +F3D146 146 Late None Group5 +F3D147 147 Late Swiss Group6 +F3D148 148 Late Swiss Group6 +F3D149 149 Late Swiss Group6 |
b |
diff -r 000000000000 -r 0cac08094b86 test-data/observation.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/observation.txt Mon Sep 14 06:04:44 2020 +0000 |
[ |
b'@@ -0,0 +1,3359 @@\n+OTUID\ttaxonomy\n+775126\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__; g__; s__\n+228502\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__Ruminococcaceae; g__Ruminococcus; s__\n+314713\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__Ruminococcaceae; g__Ruminococcus; s__\n+314425\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__Ruminococcaceae; g__Ruminococcus; s__\n+316122\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__; g__; s__\n+432015\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__; g__; s__\n+4374047\tk__Bacteria; p__Actinobacteria; c__Coriobacteriia; o__Coriobacteriales; f__Coriobacteriaceae; g__Adlercreutzia; s__\n+344726\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__Lachnospiraceae; g__; s__\n+1078157\tk__Bacteria; p__Firmicutes; c__Bacilli; o__Bacillales; f__Staphylococcaceae; g__Staphylococcus; s__\n+974097\tk__Bacteria; p__Firmicutes; c__Bacilli; o__Bacillales; f__Staphylococcaceae; g__Staphylococcus; s__\n+323154\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__Lachnospiraceae; g__; s__\n+266555\tk__Bacteria; p__Actinobacteria; c__Coriobacteriia; o__Coriobacteriales; f__Coriobacteriaceae; g__Adlercreutzia; s__\n+4316029\tk__Bacteria; p__Firmicutes; c__Bacilli; o__Bacillales; f__Bacillaceae; g__; s__\n+317867\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__; g__; s__\n+190425\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__; g__; s__\n+323592\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__; g__; s__\n+258628\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__; g__; s__\n+277152\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__Ruminococcaceae; g__Oscillospira; s__\n+271499\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__; g__; s__\n+338644\tk__Bacteria; p__Actinobacteria; c__Coriobacteriia; o__Coriobacteriales; f__Coriobacteriaceae; g__Adlercreutzia; s__\n+338640\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__Ruminococcaceae; g__Ruminococcus; s__\n+313804\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__Lachnospiraceae; g__; s__\n+344723\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__; g__; s__\n+188785\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__; g__; s__\n+182836\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__; g__; s__\n+350381\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__; g__; s__\n+338004\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__; g__; s__\n+646532\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__; g__; s__\n+131618\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__Lachnospiraceae; g__; s__\n+351343\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__Lachnospiraceae; g__[Ruminococcus]; s__gnavus\n+309703\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__Ruminococcaceae; g__Ruminococcus; s__\n+339092\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__Lachnospiraceae; g__[Ruminococcus]; s__gnavus\n+468933\tk__Bacteria; p__Firmicutes; c__Bacilli; o__Bacillales; f__Staphylococcaceae; g__Staphylococcus; s__\n+277588\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__Ruminococcaceae; g__Oscillospira; s__\n+4372373\tk__Bacteria; p__Proteobacteria; c__Betaproteobacteria; o__Neisseriales; f__Neisseriaceae; g__Neisseria; s__cinerea\n+4432700\tk__Bacteria; p__Proteobacteria; c__Betaproteobacteria; o__Neisseriales; f__Neisseriaceae; g__Neisseria; s__cinerea\n+4429481\tk__Bacteria; p__Proteobacteria; c__Betaproteobacteria; o__Neisseriales; f__Neisseriaceae; g__Neisseria; s__cinerea\n+4323499\tk__Bacteria; p__Proteobacteria; c__Betaproteobacteria; o__Neisseriales; f__Neisseriaceae; g__Neisseria; s__cinerea\n+140239\tk__Bacteria; p__Proteobacteria; c__Betaproteobacteria; o__Neisseriales; f__Neisseriaceae; g__Neisseria; s__cinere'..b'iraceae; g__; s__\n+307193\tk__Bacteria; p__Firmicutes; c__Bacilli; o__Lactobacillales; f__Lactobacillaceae; g__Lactobacillus; s__\n+183927\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__Lachnospiraceae; g__; s__\n+329268\tk__Bacteria; p__Bacteroidetes; c__Bacteroidia; o__Bacteroidales; f__S24-7; g__; s__\n+313274\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__Ruminococcaceae; g__Oscillospira; s__\n+258750\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__; g__; s__\n+272646\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__; g__; s__\n+269427\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__Ruminococcaceae; g__Oscillospira; s__\n+3697034\tk__Bacteria; p__Firmicutes; c__Bacilli; o__Lactobacillales; f__Enterococcaceae; g__Enterococcus; s__\n+2632775\tk__Bacteria; p__Proteobacteria; c__Gammaproteobacteria; o__Aeromonadales; f__Aeromonadaceae; g__; s__\n+349874\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__; g__; s__\n+232276\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__Lachnospiraceae; g__Dorea; s__\n+341448\tk__Bacteria; p__Bacteroidetes; c__Bacteroidia; o__Bacteroidales; f__S24-7; g__; s__\n+273479\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__; g__; s__\n+553352\tk__Bacteria; p__Firmicutes; c__Bacilli; o__Lactobacillales; f__Lactobacillaceae; g__Lactobacillus; s__\n+172503\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__Lachnospiraceae; g__; s__\n+290844\tk__Bacteria; p__Proteobacteria; c__Gammaproteobacteria; o__Enterobacteriales; f__Enterobacteriaceae; g__; s__\n+788402\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__Lachnospiraceae; g__Coprococcus; s__\n+752420\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__Ruminococcaceae; g__Oscillospira; s__\n+706077\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__Ruminococcaceae; g__Oscillospira; s__\n+189184\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__Lachnospiraceae; g__; s__\n+204126\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__Ruminococcaceae; g__Oscillospira; s__\n+204125\tk__Bacteria; p__Bacteroidetes; c__Bacteroidia; o__Bacteroidales; f__S24-7; g__; s__\n+1918929\tk__Bacteria; p__Proteobacteria; c__Alphaproteobacteria; o__Rickettsiales; f__mitochondria; g__; s__\n+1058958\tk__Bacteria; p__Firmicutes; c__Bacilli; o__Bacillales; f__Staphylococcaceae; g__Staphylococcus; s__\n+266697\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__; g__; s__\n+273308\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__; g__; s__\n+356148\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__Lachnospiraceae; g__; s__\n+314903\tk__Bacteria; p__Bacteroidetes; c__Bacteroidia; o__Bacteroidales; f__S24-7; g__; s__\n+267671\tk__Bacteria; p__Bacteroidetes; c__Bacteroidia; o__Bacteroidales; f__S24-7; g__; s__\n+275619\tk__Bacteria; p__Bacteroidetes; c__Bacteroidia; o__Bacteroidales; f__S24-7; g__; s__\n+272256\tk__Bacteria; p__Bacteroidetes; c__Bacteroidia; o__Bacteroidales; f__S24-7; g__; s__\n+274237\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__Lachnospiraceae; g__; s__\n+188092\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__; g__; s__\n+180535\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__; g__; s__\n+273631\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__; g__; s__\n+288344\tk__Bacteria; p__Bacteroidetes; c__Bacteroidia; o__Bacteroidales; f__S24-7; g__; s__\n+212201\tk__Bacteria; p__Bacteroidetes; c__Bacteroidia; o__Bacteroidales; f__S24-7; g__; s__\n+1961361\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__Lachnospiraceae; g__; s__\n+665761\tk__Bacteria; p__Firmicutes; c__Clostridia; o__Clostridiales; f__Lachnospiraceae; g__; s__\n+131558\tk__Bacteria; p__Bacteroidetes; c__Bacteroidia; o__Bacteroidales; f__S24-7; g__; s__\n+247570\tk__Bacteria; p__Cyanobacteria; c__Chloroplast; o__Streptophyta; f__; g__; s__\n' |