Repository 'seurat'
hg clone https://toolshed.g2.bx.psu.edu/repos/iuc/seurat

Changeset 15:fab6ff46e019 (2023-07-07)
Previous changeset 14:c0fd285eb553 (2022-11-21)
Commit message:
planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/seurat commit b437a46efb50e543b6d7c9988f954efe2caa9046
modified:
Seurat.R
seurat.xml
added:
citeseq_Seurat.R
macros.xml
test-data/adt.tab.gz
test-data/markers.tsv
test-data/protein_out.tsv
test-data/rna.tab.gz
test-data/rna_out.tsv
b
diff -r c0fd285eb553 -r fab6ff46e019 Seurat.R
--- a/Seurat.R Mon Nov 21 14:35:28 2022 +0000
+++ b/Seurat.R Fri Jul 07 01:43:02 2023 +0000
b
b'@@ -8,19 +8,24 @@\n #\'     low_thresholds: ""\n #\'     high_thresholds: ""\n #\'     numPCs: ""\n-#\'     cells_use: ""\n #\'     resolution: ""\n #\'     perplexity: ""\n #\'     min_pct: ""\n #\'     logfc_threshold: ""\n+#\'     end_step: ""\n #\'     showcode: ""\n #\'     warn: ""\n #\'     varstate: ""\n #\'     vlnfeat: ""\n #\'     featplot: ""\n #\'     PCplots: ""\n-#\'     tsne: ""\n+#\'     nmds: ""\n #\'     heatmaps: ""\n+#\'     norm_out: ""\n+#\'     variable_out: ""\n+#\'     pca_out : ""\n+#\'     clusters_out: ""\n+#\'     markers_out: ""\n #\' ---\n \n # nolint start\n@@ -34,87 +39,148 @@\n vlnfeat <- as.logical(params$vlnfeat)\n featplot <- as.logical(params$featplot)\n pc_plots <- as.logical(params$PCplots)\n-tsne <- as.logical(params$tsne)\n+nmds <- as.logical(params$nmds)\n heatmaps <- as.logical(params$heatmaps)\n-\n+end_step <- as.integer(params$end_step)\n+norm_out <- as.logical(params$norm_out)\n # we need that to not crash Galaxy with an UTF-8 error on German LC settings.\n loc <- Sys.setlocale("LC_MESSAGES", "en_US.UTF-8")\n \n #+ echo = F, warning = `warn`, include =`varstate`\n min_cells <- as.integer(params$min_cells)\n min_genes <- as.integer(params$min_genes)\n-low_thresholds <- as.integer(params$low_thresholds)\n-high_thresholds <- as.integer(params$high_thresholds)\n-num_pcs <- as.integer(params$numPCs)\n-cells_use <- as.integer(params$cells_use)\n-resolution <- as.double(params$resolution)\n-perplexity <- as.integer(params$perplexity)\n-min_pct <- as.double(params$min_pct)\n-logfc_threshold <- as.double(params$logfc_thresh)\n print(paste0("Minimum cells: ", min_cells))\n print(paste0("Minimum features: ", min_genes))\n+low_thresholds <- as.integer(params$low_thresholds)\n+high_thresholds <- as.integer(params$high_thresholds)\n print(paste0("Umi low threshold: ", low_thresholds))\n print(paste0("Umi high threshold: ", high_thresholds))\n-print(paste0("Number of principal components: ", num_pcs))\n-print(paste0("Resolution: ", resolution))\n-print(paste0("Perplexity: ", perplexity))\n-print(paste0("Minimum percent of cells", min_pct))\n-print(paste0("Logfold change threshold", logfc_threshold))\n+\n+if (end_step >= 2) {\n+    variable_out <- as.logical(params$variable_out)\n+}\n+\n \n-#+ echo = FALSE\n+if (end_step >= 3) {\n+    num_pcs <- as.integer(params$numPCs)\n+    print(paste0("Number of principal components: ", num_pcs))\n+    pca_out <- as.logical(params$pca_out)\n+}\n+if (end_step >= 4) {\n+    if (params$perplexity == "") {\n+       perplexity <- -1\n+       print(paste0("Perplexity: ", perplexity))\n+    } else { \n+        perplexity <- as.integer(params$perplexity)\n+        print(paste0("Perplexity: ", perplexity))\n+    }\n+    resolution <- as.double(params$resolution)\n+    print(paste0("Resolution: ", resolution))\n+    clusters_out <- as.logical(params$clusters_out)\n+}\n+if (end_step >= 5) {\n+    min_pct <- as.double(params$min_pct)\n+    logfc_threshold <- as.double(params$logfc_thresh)\n+    print(paste0("Minimum percent of cells", min_pct))\n+    print(paste0("Logfold change threshold", logfc_threshold))\n+    markers_out <- as.logical(params$markers_out)\n+}\n+\n+\n if (showcode == TRUE) print("Read in data, generate inital Seurat object")\n #+ echo = `showcode`, warning = `warn`, message = F\n counts <- read.delim(params$counts, row.names = 1)\n seuset <- Seurat::CreateSeuratObject(counts = counts, min.cells = min_cells, min.features = min_genes)\n \n-#+ echo = FALSE\n if (showcode == TRUE && vlnfeat == TRUE) print("Raw data vizualization")\n #+ echo = `showcode`, warning = `warn`, include=`vlnfeat`\n-Seurat::VlnPlot(object = seuset, features = c("nFeature_RNA", "nCount_RNA"))\n-Seurat::FeatureScatter(object = seuset, feature1 = "nCount_RNA", feature2 = "nFeature_RNA")\n+if (vlnfeat == TRUE){\n+    print(Seurat::VlnPlot(object = seuset, features = c("nFeature_RNA", "nCount_RNA")))\n+    print(Seurat::FeatureScatter(object = seuset, feature1 = "nCount_RNA", feature2 = "nFeature_RNA"))\n+}\n \n-#+ echo = FALSE\n if (showcode == TRUE) print("Filter and normalize for UMI counts")\n #+ echo = `showco'..b't, npcs = num_pcs)\n-Seurat::VizDimLoadings(seuset, dims = 1:2)\n-Seurat::DimPlot(seuset, dims = c(1, 2), reduction = "pca")\n-Seurat::DimHeatmap(seuset, dims = 1:num_pcs, nfeatures = 30, reduction = "pca")\n-seuset <- Seurat::JackStraw(seuset, dims = num_pcs, reduction = "pca", num.replicate = 100)\n-seuset <- Seurat::ScoreJackStraw(seuset, dims = 1:num_pcs)\n-Seurat::JackStrawPlot(seuset, dims = 1:num_pcs)\n-Seurat::ElbowPlot(seuset, ndims = num_pcs, reduction = "pca")\n+if (end_step >= 3) {\n+    #+ echo = FALSE\n+    if (showcode == TRUE && pc_plots == TRUE) print("PCA Visualization")\n+    #+ echo = `showcode`, warning = `warn`, include = `pc_plots`\n+    seuset <- Seurat::RunPCA(seuset, npcs = num_pcs)\n+    seuset <- Seurat::JackStraw(seuset, dims = num_pcs, reduction = "pca", num.replicate = 100)\n+    seuset <- Seurat::ScoreJackStraw(seuset, dims = 1:num_pcs)\n+    if (pc_plots == TRUE) {\n+        print(Seurat::VizDimLoadings(seuset, dims = 1:2))\n+        print(Seurat::DimPlot(seuset, dims = c(1, 2), reduction = "pca"))\n+        print(Seurat::DimHeatmap(seuset, dims = 1:num_pcs, nfeatures = 30, reduction = "pca"))\n+        print(Seurat::JackStrawPlot(seuset, dims = 1:num_pcs))\n+        print(Seurat::ElbowPlot(seuset, ndims = num_pcs, reduction = "pca"))\n+    }\n+    if (pca_out == TRUE) {\n+        saveRDS(seuset, "pca_out.rds")\n+    }\n+}\n \n-#+ echo = FALSE\n-if (showcode == TRUE && tsne == TRUE) print("tSNE")\n-#+ echo = `showcode`, warning = `warn`, include = `tsne`\n-seuset <- Seurat::FindNeighbors(object = seuset)\n-seuset <- Seurat::FindClusters(object = seuset)\n-if (perplexity == -1) {\n-    seuset <- Seurat::RunTSNE(seuset, dims = 1:num_pcs, resolution = resolution);\n-} else {\n-    seuset <- Seurat::RunTSNE(seuset, dims = 1:num_pcs, resolution = resolution, perplexity = perplexity);\n+if (end_step >= 4) {\n+    #+ echo = FALSE\n+    if (showcode == TRUE && nmds == TRUE) print("tSNE and UMAP")\n+    #+ echo = `showcode`, warning = `warn`, include = `nmds`\n+    seuset <- Seurat::FindNeighbors(object = seuset)\n+    seuset <- Seurat::FindClusters(object = seuset)\n+    if (perplexity == -1) {\n+        seuset <- Seurat::RunTSNE(seuset, dims = 1:num_pcs, resolution = resolution);\n+    } else {\n+        seuset <- Seurat::RunTSNE(seuset, dims = 1:num_pcs, resolution = resolution, perplexity = perplexity);\n+    }\n+    if (nmds == TRUE) {\n+        print(Seurat::DimPlot(seuset, reduction = "tsne"))\n+    }\n+    seuset <- Seurat::RunUMAP(seuset, dims = 1:num_pcs)\n+    if (nmds == TRUE) {\n+            print(Seurat::DimPlot(seuset, reduction = "umap"))\n+    }\n+    if (clusters_out == TRUE) {\n+        tsnedata <- Seurat::Embeddings(seuset, reduction="tsne")\n+        saveRDS(seuset, "tsne_out.rds")\n+        umapdata <- Seurat::Embeddings(seuset, reduction="umap")\n+        saveRDS(seuset, "umap_out.rds")\n+    }\n }\n-Seurat::DimPlot(seuset, reduction = "tsne")\n+\n \n-#+ echo = FALSE\n-if (showcode == TRUE && heatmaps == TRUE) print("Marker Genes")\n-#+ echo = `showcode`, warning = `warn`, include = `heatmaps`\n-markers <- Seurat::FindAllMarkers(seuset, only.pos = TRUE, min.pct = min_pct, logfc.threshold = logfc_threshold)\n-top10 <- dplyr::group_by(markers, cluster)\n-top10 <- dplyr::top_n(top10, 10, avg_log2FC)\n-Seurat::DoHeatmap(seuset, features = top10$gene)\n+if (end_step == 5) {\n+    #+ echo = FALSE\n+    if (showcode == TRUE && heatmaps == TRUE) print("Marker Genes")\n+    #+ echo = `showcode`, warning = `warn`, include = `heatmaps`\n+    markers <- Seurat::FindAllMarkers(seuset, only.pos = TRUE, min.pct = min_pct, logfc.threshold = logfc_threshold)\n+    top10 <- dplyr::group_by(markers, cluster)\n+    top10 <- dplyr::top_n(top10, n = 10, wt = avg_log2FC)\n+    print(top10)\n+    if (heatmaps == TRUE) {\n+        print(Seurat::DoHeatmap(seuset, features = top10$gene))\n+    }\n+    if (markers_out == TRUE) {\n+        saveRDS(seuset, "markers_out.rds")\n+        data.table::fwrite(x = markers, row.names=TRUE, sep="\\t", file = "markers_out.tsv")\n+    }\n+}\n # nolint end\n'
b
diff -r c0fd285eb553 -r fab6ff46e019 citeseq_Seurat.R
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/citeseq_Seurat.R Fri Jul 07 01:43:02 2023 +0000
[
b'@@ -0,0 +1,260 @@\n+#\' ---\n+#\' title: "Seurat Cite-seq Analysis"\n+#\' author: "Performed using Galaxy"\n+#\' params:\n+#\'     rna: ""\n+#\'     prot: ""\n+#\'     min_cells: ""\n+#\'     min_genes: ""\n+#\'     low_thresholds: ""\n+#\'     high_thresholds: ""\n+#\'     numPCs: ""\n+#\'     resolution: ""\n+#\'     perplexity: ""\n+#\'     min_pct: ""\n+#\'     logfc_threshold: ""\n+#\'     showcode: ""\n+#\'     warn: ""\n+#\'     varstate: ""\n+#\'     vlnfeat: ""\n+#\'     featplot: ""\n+#\'     PCplots: ""\n+#\'     nmds: ""\n+#\'     heatmaps: ""\n+#\'     norm_out: ""\n+#\'     variable_out: ""\n+#\'     pca_out : ""\n+#\'     clusters_out: ""\n+#\'     markers_out: ""\n+#\'     cite_markers: ""\n+#\'     comparison: ""\n+#\'     feat_comp: ""\n+#\'     marker_compare: ""\n+#\'     top_x: ""\n+#\' ---\n+\n+# nolint start\n+#+ echo=F, warning = F, message=F\n+options(show.error.messages = F, error = function() {\n+    cat(geterrmessage(), file = stderr()); q("no", 1, F)\n+})\n+\n+# we need that to not crash Galaxy with an UTF-8 error on German LC settings.\n+loc <- Sys.setlocale("LC_MESSAGES", "en_US.UTF-8")\n+\n+showcode <- as.logical(params$showcode)\n+warn <-  as.logical(params$warn)\n+varstate <- as.logical(params$varstate)\n+vlnfeat <- as.logical(params$vlnfeat)\n+featplot <- as.logical(params$featplot)\n+pc_plots <- as.logical(params$PCplots)\n+nmds <- as.logical(params$nmds)\n+heatmaps <- as.logical(params$heatmaps)\n+end_step <- as.integer(params$end_step)\n+norm_out <- as.logical(params$norm_out)\n+comparison <- as.logical(params$comparison)\n+feature <- trimws(unlist(strsplit(as.character(params$feat_comp), ",")))\n+marker_compare <- as.logical(params$marker_compare)\n+top_x <- as.integer(params$top_x)\n+min_cells <- as.integer(params$min_cells)\n+min_genes <- as.integer(params$min_genes)\n+low_thresholds <- as.integer(params$low_thresholds)\n+high_thresholds <- as.integer(params$high_thresholds)\n+num_pcs <- as.integer(params$numPCs)\n+cells_use <- as.integer(params$cells_use)\n+resolution <- as.double(params$resolution)\n+min_pct <- as.double(params$min_pct)\n+logfc_threshold <- as.double(params$logfc_thresh)\n+variable_out <- as.logical(params$variable_out)\n+pca_out <- as.logical(params$pca_out)\n+clusters_out <- as.logical(params$clusters_out)\n+markers_out <- as.logical(params$markers_out)\n+\n+print(paste0("Minimum cells: ", min_cells))\n+print(paste0("Minimum features: ", min_genes))\n+print(paste0("Umi low threshold: ", low_thresholds))\n+print(paste0("Umi high threshold: ", high_thresholds))\n+print(paste0("Number of principal components: ", num_pcs))\n+print(paste0("Resolution: ", resolution))\n+print(paste0("Minimum percent of cells", min_pct))\n+print(paste0("Logfold change threshold", logfc_threshold))\n+if (params$perplexity == "") {\n+    perplexity <- -1\n+    print(paste0("Perplexity: ", perplexity))\n+} else { \n+    perplexity <- as.integer(params$perplexity)\n+    print(paste0("Perplexity: ", perplexity))\n+}\n+\n+#+ echo = FALSE\n+if (showcode == TRUE) print("Read in data, generate inital Seurat object")\n+#+ echo = `showcode`, warning = `warn`, message = F\n+rna <- read.delim(params$rna, row.names = 1)\n+rna <- Seurat::CollapseSpeciesExpressionMatrix(rna)\n+protein <- read.delim(params$prot, row.names = 1)\n+tryCatch(all.equal(colnames(rna), colnames(protein)), error = "Columns do not match in input files")\n+seuset <- Seurat::CreateSeuratObject(counts = rna, min.cells = min_cells, min.features = min_genes)\n+\n+if (showcode == TRUE) print("asdf")\n+#+ echo = `showcode`, warning = `warn`, message = F\n+prot_obj <- Seurat::CreateAssayObject(counts = protein)\n+\n+if (showcode == TRUE) print("qwer")\n+#+ echo = `showcode`, warning = `warn`, message = F\n+seuset[["ADT"]] <- prot_obj\n+\n+if (showcode == TRUE) print("zxcv")\n+#+ echo = `showcode`, warning = `warn`, message = F\n+Seurat::DefaultAssay(seuset) <- "RNA"\n+\n+if (showcode == TRUE && vlnfeat == TRUE) print("Raw data vizualization")\n+#+ echo = `showcode`, warning = `warn`, include=`vlnfeat`\n+if (vlnfeat == TRUE){\n+    print(Seurat::VlnPlot(object = seuset, features = c('..b' <- Seurat::Embeddings(seuset, reduction="tsne")\n+    saveRDS(seuset, "tsne_out.rds")\n+    umapdata <- Seurat::Embeddings(seuset, reduction="umap")\n+    saveRDS(seuset, "umap_out.rds")\n+}\n+\n+if (showcode == TRUE && heatmaps == TRUE) print("Marker Genes")\n+#+ echo = `showcode`, warning = `warn`, include = `heatmaps`\n+markers <- Seurat::FindAllMarkers(seuset, only.pos = TRUE, min.pct = min_pct, logfc.threshold = logfc_threshold)\n+top10 <- dplyr::group_by(markers, cluster)\n+top10 <- dplyr::top_n(top10, n = 10, wt = avg_log2FC)\n+print(top10)\n+if (heatmaps == TRUE) {\n+    print(Seurat::DoHeatmap(seuset, features = top10$gene))\n+}\n+if (markers_out == TRUE) {\n+    saveRDS(seuset, "markers_out.rds")\n+    data.table::fwrite(x = markers, row.names=TRUE, sep="\\t", file = "markers_out.tsv")\n+}\n+\n+#+ echo = FALSE\n+if (showcode == TRUE && comparison == TRUE) print("Compare")\n+#+ echo = `showcode`, warning = `warn`, include = `comparison`\n+  Seurat::DefaultAssay(seuset) <- "ADT"\n+  seuset <- Seurat::NormalizeData(seuset, normalization.method = "CLR", margin = 2)\n+  Seurat::DefaultAssay(seuset) <- "RNA"\n+  seuset <- Seurat::NormalizeData(seuset, normalization.method = "CLR", margin = 2, assay = "ADT")\n+if (comparison == TRUE) {\n+  for(x in feature) {\n+    Seurat::DefaultAssay(seuset) <- "ADT"\n+    p1 <- Seurat::FeaturePlot(seuset, x, cols = c("lightgrey", "red")) + ggplot2::ggtitle(paste0("Protein:", " ", x))\n+    Seurat::DefaultAssay(seuset) <- "RNA"\n+    p2 <- Seurat::FeaturePlot(seuset, x) + ggplot2::ggtitle(paste0("RNA:", " ", x))\n+    print(p1 | p2)\n+    label <- as.character(paste0(Seurat::Key(seuset[["ADT"]]), x))\n+    print(Seurat::VlnPlot(seuset, paste0("rna_", x)))\n+    print(Seurat::VlnPlot(seuset, paste0("adt_", x)))\n+  }\n+}\n+\n+#+ echo = FALSE\n+if (showcode == TRUE) print("Cite-seq")\n+#+ echo = `showcode`, warning = `warn`, include = `marker_compare`\n+rna_markers <- Seurat::FindAllMarkers(seuset, only.pos = TRUE, min.pct = min_pct, logfc.threshold = logfc_threshold, assay="RNA")\n+protein_markers <- Seurat::FindAllMarkers(seuset, only.pos = TRUE, min.pct = min_pct, logfc.threshold = logfc_threshold, assay="ADT")\n+if (marker_compare == TRUE) {\n+  data.table::fwrite(x = rna_markers, sep="\\t", file = "rna_out.tsv")\n+  data.table::fwrite(x = protein_markers, sep="\\t", file = "protein_out.tsv")\n+}\n+toprna <- dplyr::top_n(dplyr::group_by(rna_markers, cluster), n=5, avg_log2FC)\n+toprna <- head(as.list(unique(as.data.frame(toprna)$gene)), top_x)\n+topprot <- dplyr::top_n(dplyr::group_by(protein_markers, cluster), n=5, avg_log2FC)\n+topprot <- head(as.list(unique(as.data.frame(topprot)$gene)), top_x)\n+if(marker_compare == TRUE) {\n+  pdf(file="citeseq_out.pdf")\n+  rna_labels <- as.vector(toprna)\n+  rna_labels <- rna_labels[!duplicated(rna_labels)]\n+  prot_labels <- as.vector(topprot)\n+  prot_labels <- prot_labels[!duplicated(prot_labels)]\n+  for(rnamarker in rna_labels) {\n+    rnamarker <-  paste("rna_", rnamarker, sep = "")\n+    for(protmarker in prot_labels) {\n+      protmarker <- paste("adt_", protmarker, sep="")\n+      plot <- Seurat::FeatureScatter(seuset, feature1 = rnamarker, feature2 = protmarker) + ggplot2::ggtitle(paste0(rnamarker, " vs ", protmarker))\n+      print(plot)\n+    }\n+  }\n+  for(rnamarker in rna_labels) {\n+    rnamarker <-  paste("rna_", rnamarker, sep = "")\n+    for(rnamarker2 in rna_labels) {\n+      rnamarker2 <- paste("rna_", rnamarker2, sep="")\n+      plot <- Seurat::FeatureScatter(seuset, feature1 = rnamarker, feature2 = rnamarker2) + ggplot2::ggtitle(paste0(rnamarker, " vs ", rnamarker2))\n+      print(plot)\n+    }\n+  }\n+  for(protmarker in prot_labels) {\n+    protmarker <-  paste("adt_", protmarker, sep = "")\n+    for(protmarker2 in prot_labels) {\n+      protmarker2 <- paste("adt_", protmarker2, sep="")\n+      plot <- Seurat::FeatureScatter(seuset, feature1 = protmarker, feature2 = protmarker2) + ggplot2::ggtitle(paste0(protmarker, " vs ", protmarker2))\n+      print(plot)\n+    }\n+  }\n+  dev.off()\n+}\n+\n+# nolint end\n'
b
diff -r c0fd285eb553 -r fab6ff46e019 macros.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/macros.xml Fri Jul 07 01:43:02 2023 +0000
[
@@ -0,0 +1,67 @@
+<macros>
+    <token name="@TOOL_VERSION@">4.3.0.1</token>
+    <token name="@FUNCTION_BASE@">function['function_select'] == "base"</token>
+    <token name="@FUNCTION_CITE@">function['function_select'] == "cite"</token>
+    <token name="@VARIABLE_CONTINUE@">function['variable_continue']['variable_continue'] == "yes"</token>
+    <token name="@PCA_CONTINUE@">function['variable_continue']['pca_continue']['pca_continue'] == "yes"</token>
+    <token name="@CLUSTERS_CONTINUE@">function['variable_continue']['pca_continue']['clusters_continue']['clusters_continue'] == "yes"</token>
+    <token name="@MARKERS_CONTINUE@">function['variable_continue']['pca_continue']['clusters_continue']['markers_continue']['markers_continue'] == "yes"</token>
+    <xml name="requirements">
+        <requirements>
+            <requirement type="package" version="@TOOL_VERSION@">r-seurat</requirement>
+            <requirement type="package" version="2.22">r-rmarkdown</requirement>
+            <requirement type="package" version="1.14.2">r-data.table</requirement>
+        </requirements>
+    </xml>
+    <xml name="norm" label="Normalizing data" expanded="true">
+        <param name="low_thresholds" type="integer" value="1" min="0" label="Low threshold for filtering cells" />
+        <param name="high_thresholds" type="integer" value="20000000" min="1" label="High threshold for filtering cells" />
+        <param name="vlnfeat"  type="boolean" truevalue="T" falsevalue="F" label="Include violin plot and scatter plot of cell features"/>
+        <param name="norm_file" type="boolean" truevalue="T" falsevalue="F" label="Output seurat object after data normalization"/>
+    </xml>
+    <xml name="variable" label="Variable features" expanded="true">
+        <param name="featplot" type="boolean" truevalue="T" falsevalue="F" label="Include plot of variable features"/>
+        <param name="var_file" type="boolean" truevalue="T" falsevalue="F" label="Output seurat object after data scaling"/>
+    </xml>
+    <xml name="pca"  label="Principal component analysis" expanded="true">
+        <param name="num_PCs" type="integer" min="0" value="10" label="Number of PCs to use in plots" help="Uses this number of PCs in PCHEatmap, JackStrawPlot, FindClusters, RunTSNE" />
+        <param name="pc_plots" type="boolean" truevalue="T" falsevalue="F" label="Include PCA plots"/>
+        <param name="pca_file" type="boolean" truevalue="T" falsevalue="F" label="Output seurat object after PCA analysis"/>
+    </xml>
+    <xml name="clusters" label="Multidimensional scaling and Clustering" expanded="true">
+        <param name="perplexity" type="integer" value="" optional="true" label="Perplexity parameter" help="Parameter for the tSNE dimensionality reduction" min="1"/>
+        <param name="resolution" type="float" value="0.6" min="0" label="Resolution parameter" help="Value of the resolution parameter used in FindClusters, use a value above (below) 1.0 if you want to obtain a larger (smaller) number of communities" />
+        <param name="nmds" type="boolean" truevalue="T" falsevalue="F" label="Include UMAP and TSNE plots"/>
+        <param name="clusters_file" type="boolean" truevalue="T" falsevalue="F" label="Output seurat object after TSNE and UMAP analysis"/>
+    </xml>
+    <xml name="markers"  label="Marker genes" expanded="true">
+        <param name="min_pct" type="float" value="0.1" min="0" max="1.0" label="Minimum percent cells" help="With FindMarkers, only test genes that are detected in at least this percentage of cells in either of the two populations. Meant to speed up the function by not testing genes that are very infrequently expressed" />
+        <param name="logfc_threshold" type="float" min="0" value="0.25" label="Log fold change threshold"
+            help="With FindMarkers, limit testing to genes which show, on average, at least X-fold difference (log-scale) between the two groups of cells. Increasing this parameter speeds up the function, but can miss weaker signals" />
+        <param name="heatmaps" type="boolean" truevalue="T" falsevalue="F" label="Include heatmaps of markers"/>
+        <param name="markers_file" type="boolean" truevalue="T" falsevalue="F" label="Output marker data"/>
+    </xml>
+    <xml name="cite-seq" label="Cite-seq analysis" expanded="true">
+        <param name="cite_markers" type="boolean" truevalue="T" falsevalue="F" label="Output list of cite-seq markers"/>
+        <conditional name="comparison">
+                <param name="comparison" type="select" label="Compare specific feature's effect on protein and rna expression?">
+                    <option value="yes">Yes</option>
+                    <option value="no" selected="true">No</option>
+                </param>
+                <when value="yes">
+                    <param name="feat_comp" type="text" label="Feature(s) to inspect" help="Comma-separated list of features to directly compare with protein and RNA expression"/>
+                </when>
+                <when value="no"/>
+        </conditional>
+        <conditional name="marker_compare">
+            <param name="marker_compare" type="select" label="Compare top RNA and protein features graphically against themselves and one another">
+                <option value="yes">Yes</option>
+                <option value="no">No</option>
+            </param>
+            <when value="yes">
+                <param name="top_x" type="integer" min="1" value="5" label="How many of the top features should be shown"/>
+            </when>
+            <when value="no"/>
+        </conditional>
+    </xml>
+</macros> 
\ No newline at end of file
b
diff -r c0fd285eb553 -r fab6ff46e019 seurat.xml
--- a/seurat.xml Mon Nov 21 14:35:28 2022 +0000
+++ b/seurat.xml Fri Jul 07 01:43:02 2023 +0000
[
b'@@ -1,119 +1,322 @@\n-<tool id="seurat" name="Seurat" version="@TOOL_VERSION@+galaxy0">\n+<tool id="seurat" name="Seurat" version="@TOOL_VERSION@+galaxy1">\n     <description>- toolkit for exploration of single-cell RNA-seq data</description>\n     <macros>\n-        <token name="@TOOL_VERSION@">4.3.0</token>\n+        <import>macros.xml</import>\n     </macros>\n-    <requirements>\n-        <requirement type="package" version="@TOOL_VERSION@">r-seurat</requirement>\n-        <requirement type="package" version="2.18">r-rmarkdown</requirement>\n-    </requirements>\n+    <expand macro="requirements"/>\n     <command detect_errors="exit_code"><![CDATA[\n-#if "vln" in $meta.plots:\n-    #set $vln = \'T\'\n-#else\n-    #set $vln = \'F\'\n-#end if\n-#if "feat" in $meta.plots:\n-    #set $feat = \'T\'\n-#else\n-    #set $feat = \'F\'\n-#end if\n-#if "PCs" in $meta.plots:\n-    #set $PCs = \'T\'\n-#else\n-    #set $PCs = \'F\'\n-#end if\n-#if "tsne" in $meta.plots:\n-    #set $tsne = \'T\'\n-#else\n-    #set $tsne = \'F\'\n-#end if\n-#if "heat" in $meta.plots:\n-    #set $heatmaps = \'T\'\n-#else\n-    #set $heatmaps = \'F\'\n-#end if\n-#if not str($adv.perplexity):\n-    #set $adv_perplexity = -1\n-#else:\n-    #set $adv_perplexity = $adv.perplexity\n-#end if\n-Rscript -e "library(\\"rmarkdown\\"); render(\\"$__tool_directory__/Seurat.R\\",\n-    params = list(counts = \\"${counts}\\",\n-        min_cells = \\"${adv.min_cells}\\",\n-        min_genes = \\"${adv.min_genes}\\",\n-        low_thresholds = \\"${adv.low_thresholds}\\",\n-        high_thresholds = \\"${adv.high_thresholds}\\",\n-        numPCs = \\"${adv.num_PCs}\\",\n-        cells_use = \\"${adv.cells_use}\\",\n-        resolution = \\"${adv.resolution}\\",\n-        perplexity = \\"${adv_perplexity}\\",\n-        min_pct = \\"${adv.min_pct}\\",\n-        logfc_threshold = \\"${adv.logfc_threshold}\\",\n+    #if $function.function_select == "base": \n+        Rscript -e "library(\\"rmarkdown\\"); render(\\"$__tool_directory__/Seurat.R\\",\n+        params = list(counts = \\"${function.input}\\",\n+        min_cells = \\"${function.min_cells}\\",\n+        min_genes = \\"${function.min_genes}\\",\n+        low_thresholds = \\"${function.low_thresholds}\\",\n+        high_thresholds = \\"${function.high_thresholds}\\",\n+        vlnfeat = \\"${function.vlnfeat}\\",\n+        norm_out = \\"${function.norm_file}\\",\n+        #if $function.variable_continue.variable_continue == "yes":\n+            featplot = \\"${function.variable_continue.featplot}\\",\n+            variable_out = \\"${function.variable_continue.var_file}\\",\n+            #if $function.variable_continue.pca_continue.pca_continue == "yes":\n+                numPCs = \\"${function.variable_continue.pca_continue.num_PCs}\\",\n+                PCplots = \\"${function.variable_continue.pca_continue.pc_plots}\\",\n+                pca_out = \\"${function.variable_continue.pca_continue.pca_file}\\",\n+                #if $function.variable_continue.pca_continue.clusters_continue.clusters_continue == "yes":\n+                    perplexity = \\"${function.variable_continue.pca_continue.clusters_continue.perplexity}\\",\n+                    resolution = \\"${function.variable_continue.pca_continue.clusters_continue.resolution}\\",\n+                    nmds = \\"${function.variable_continue.pca_continue.clusters_continue.nmds}\\",\n+                    clusters_out = \\"${function.variable_continue.pca_continue.clusters_continue.clusters_file}\\",\n+                    #if $function.variable_continue.pca_continue.clusters_continue.markers_continue.markers_continue == "yes":\n+                        min_pct = \\"${function.variable_continue.pca_continue.clusters_continue.markers_continue.min_pct}\\",\n+                        logfc_threshold = \\"${function.variable_continue.pca_continue.clusters_continue.markers_continue.logfc_threshold}\\",\n+                        heatmaps = \\"${function.variable_continue.pca_continue.clusters_continue.markers_continue.heatmaps}\\",\n+                        markers_out = \\"${function.variable_continue.pca_continue.clusters_continue.mar'..b'aram name="low_thresholds" value="1" />\n+                <param name="high_thresholds" value="20000000" />\n+                <param name="vlnfeat" value="F"/>\n+                <param name="norm_file" value="F"/>\n+                <param name="featplot" value="T"/>\n+                <param name="var_file" value="F"/>\n+                <param name="num_PCs" value="20" />\n+                <param name="pc_plots" value="T"/>\n+                <param name="pca_file" value="F"/>\n+                <param name="resolution" value="0.6" />\n+                <param name="nmds" value="F"/>\n+                <param name="clusters_file" value="F"/>\n+                <param name="min_pct" value="0.25" />\n+                <param name="logfc_threshold" value="0.25" />\n+                <param name="heatmaps" value="T"/>\n+                <param name="markers_file" value="F"/>\n+                <param name="cite_markers" value="T"/>\n+                <conditional name="comparison">\n+                    <param name="comparison" value="yes"/>\n+                    <param name="feat_comp" value="CD4,CD19"/>\n+                </conditional>\n+                <conditional name="marker_compare">\n+                    <param name="marker_compare" value="yes"/>\n+                    <param name="top_x" value="3"/>\n+                </conditional>\n+            </conditional>\n+            <section name="meta">\n+                <param name="showcode" value="T"/>\n+                <param name="warn" value="F"/>\n+                <param name="varstate" value="F"/>\n+            </section>\n+            <output name="rnamarkerst" ftype="tabular" file="rna_out.tsv" compare="sim_size" delta="500" />\n+            <output name="protmarkerst" ftype="tabular" file="protein_out.tsv" compare="sim_size" delta="500" />\n+        </test>\n+        <test expect_num_outputs="9">\n+            <conditional name="function">\n+                <param name="function_select" value="cite"/>\n+                <param name="rna" ftype="tabular" value="rna.tab.gz"/>\n+                <param name="prot" ftype="tabular" value="adt.tab.gz"/>\n+                <param name="min_cells" value="0"/>\n+                <param name="min_genes" value="0"/>\n+                <param name="low_thresholds" value="1" />\n+                <param name="high_thresholds" value="20000000" />\n+                <param name="vlnfeat" value="F"/>\n+                <param name="norm_file" value="T"/>\n+                <param name="featplot" value="T"/>\n+                <param name="var_file" value="T"/>\n+                <param name="num_PCs" value="20" />\n+                <param name="pc_plots" value="T"/>\n+                <param name="pca_file" value="T"/>\n+                <param name="resolution" value="0.6" />\n+                <param name="nmds" value="T"/>\n+                <param name="clusters_file" value="T"/>\n+                <param name="min_pct" value="0.25" />\n+                <param name="logfc_threshold" value="0.25" />\n+                <param name="heatmaps" value="T"/>\n+                <param name="markers_file" value="T"/>\n+                <param name="cite_markers" value="F"/>\n+                <conditional name="comparison">\n+                    <param name="comparison" value="yes"/>\n+                    <param name="feat_comp" value="CD4,CD19"/>\n+                </conditional>\n+                <conditional name="marker_compare">\n+                    <param name="marker_compare" value="yes"/>\n+                    <param name="top_x" value="3"/>\n+                </conditional>\n+            </conditional>\n+            <section name="meta">\n+                <param name="showcode" value="T"/>\n+                <param name="warn" value="F"/>\n+                <param name="varstate" value="F"/>\n+            </section>\n         </test>\n     </tests>\n     <help><![CDATA[\n@@ -167,6 +473,8 @@\n **Inputs**\n \n     * Gene count matrix in TAB-separated format\n+        or\n+    * RNA and Protein count matrices in TAB-separated formats\n \n -----\n \n'
b
diff -r c0fd285eb553 -r fab6ff46e019 test-data/adt.tab.gz
b
Binary file test-data/adt.tab.gz has changed
b
diff -r c0fd285eb553 -r fab6ff46e019 test-data/markers.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/markers.tsv Fri Jul 07 01:43:02 2023 +0000
b
b'@@ -0,0 +1,773 @@\n+""\tp_val\tavg_log2FC\tpct.1\tpct.2\tp_val_adj\tcluster\tgene\n+Nucks1\t1.18411323850772e-16\t1.00561994844169\t1\t1\t1.09767297209666e-13\t0\tNucks1\n+Gpi1\t1.79982790200504e-16\t1.4397713415714\t1\t0.975\t1.66844046515867e-13\t0\tGpi1\n+Trp53\t4.43575005074525e-16\t1.67570868184123\t0.986\t0.949\t4.11194029704085e-13\t0\tTrp53\n+Gdf3\t6.15314650265127e-15\t1.75957711466652\t0.944\t0.802\t5.70396680795773e-12\t0\tGdf3\n+Rpl4\t9.94148370705165e-15\t0.555534334164376\t1\t1\t9.21575539643688e-12\t0\tRpl4\n+Ralb\t1.5603785645578e-14\t1.92721605141292\t0.93\t0.695\t1.44647092934508e-11\t0\tRalb\n+Ftl1\t5.38929343854758e-14\t0.896518520873592\t1\t1\t4.99587501753361e-11\t0\tFtl1\n+Zfp704\t3.48560933499829e-13\t1.54864588651405\t0.972\t0.838\t3.23115985354342e-10\t0\tZfp704\n+Tns1\t5.77529013908346e-13\t1.68280690355749\t0.887\t0.503\t5.35369395893037e-10\t0\tTns1\n+Gcat\t3.87561669839796e-12\t1.69793512322551\t0.958\t0.807\t3.59269667941491e-09\t0\tGcat\n+St3gal4\t6.49102709874417e-12\t1.10146192261782\t0.606\t0.173\t6.01718212053585e-09\t0\tSt3gal4\n+Gpa33\t1.33561520892938e-11\t2.12256764711496\t0.592\t0.208\t1.23811529867753e-08\t0\tGpa33\n+Xrn2\t3.29473696699025e-11\t0.770133884184816\t1\t0.995\t3.05422116839996e-08\t0\tXrn2\n+Mrpl17\t3.50012211643864e-11\t0.746796177121439\t1\t0.99\t3.24461320193862e-08\t0\tMrpl17\n+Ceacam2\t5.36266305938498e-11\t0.659994093618872\t0.761\t0.345\t4.97118865604987e-08\t0\tCeacam2\n+Adi1\t5.64090996263144e-11\t1.48358282742796\t0.972\t0.888\t5.22912353535935e-08\t0\tAdi1\n+Sept2\t7.01918447074417e-11\t0.868969458163974\t1\t1\t6.50678400437984e-08\t0\tSept2\n+Ppp1r11\t7.44523196438785e-11\t0.918592139758593\t1\t0.959\t6.90173003098754e-08\t0\tPpp1r11\n+Eif4e2\t2.22092667324463e-10\t0.824779756130801\t1\t0.995\t2.05879902609777e-07\t0\tEif4e2\n+Cacybp\t2.68829218185697e-10\t1.00228344950431\t0.986\t0.995\t2.49204685258141e-07\t0\tCacybp\n+Eno1\t6.96987523876623e-10\t0.40016030945526\t0.93\t0.599\t6.4610743463363e-07\t0\tEno1\n+Myeov2\t1.9990246379103e-09\t0.685539965183034\t0.986\t0.985\t1.85309583934285e-06\t0\tMyeov2\n+Gng10\t3.94623730908105e-09\t1.17130525771998\t0.859\t0.457\t3.65816198551814e-06\t0\tGng10\n+Cd109\t4.39844362440024e-09\t1.91175145685468\t0.408\t0.107\t4.07735723981902e-06\t0\tCd109\n+Hnrnpa0\t1.58290267057998e-08\t0.811216726627202\t0.986\t0.98\t1.46735077562765e-05\t0\tHnrnpa0\n+Msrb2\t5.48032890646332e-08\t1.24147534501256\t0.732\t0.381\t5.08026489629149e-05\t0\tMsrb2\n+Ptcd3\t6.19767456859678e-08\t0.800091440706327\t1\t0.99\t5.74524432508921e-05\t0\tPtcd3\n+Rai14\t8.40068444688735e-08\t1.31175247785821\t0.845\t0.538\t7.78743448226457e-05\t0\tRai14\n+Hint2\t2.26929636291787e-07\t0.715455167813889\t0.859\t0.497\t0.000210363772842486\t0\tHint2\n+Sra1\t2.68967121984332e-07\t0.93977408723431\t0.972\t0.924\t0.000249332522079476\t0\tSra1\n+Fth1\t1.19897530626167e-06\t0.631968616609468\t1\t1\t0.00111145010890457\t0\tFth1\n+2810432D09Rik\t1.3935121021676e-06\t1.08796030099265\t0.93\t0.782\t0.00129178571870937\t0\t2810432D09Rik\n+Cycs\t1.65526495315875e-06\t0.480425114297169\t1\t0.995\t0.00153443061157816\t0\tCycs\n+Npr1\t1.91352582651328e-06\t0.832258895946477\t0.972\t0.766\t0.00177383844117781\t0\tNpr1\n+Oas1a\t2.40234815360308e-06\t1.18028761558635\t0.817\t0.66\t0.00222697673839006\t0\tOas1a\n+Fancm\t2.50675446923527e-06\t0.894104496016523\t1\t0.99\t0.0023237613929811\t0\tFancm\n+Pnpla6\t2.84941771941601e-06\t1.15711866758003\t0.958\t0.929\t0.00264141022589864\t0\tPnpla6\n+Fkbp2\t3.35210087424692e-06\t0.681209438799815\t0.958\t0.909\t0.00310739751042689\t0\tFkbp2\n+Egfl7\t3.83761020774903e-06\t1.06164633323232\t0.732\t0.467\t0.00355746466258335\t0\tEgfl7\n+Ctnnb1\t4.95946741674435e-06\t0.468455673768554\t1\t0.99\t0.00459742629532201\t0\tCtnnb1\n+Amdhd2\t5.51993168968458e-06\t1.07601984805959\t0.901\t0.822\t0.0051169766763376\t0\tAmdhd2\n+Il1f9\t6.41757293244151e-06\t0.496713211958332\t0.394\t0.67\t0.00594909010837328\t0\tIl1f9\n+Mrpl51\t7.56282674299504e-06\t0.506391556742938\t1\t0.995\t0.0070107403907564\t0\tMrpl51\n+Exosc8\t1.06283094770493e-05\t0.502095828075973\t1\t1\t0.00985244288522468\t0\tExosc8\n+Prelid1\t1.43265849490701e-05\t0.491961820886089\t0.986\t0.995\t0.0132807442477879\t0\tPrelid1\n+Gabra1\t2.67122398852359e-05\t1.43236925093549\t0.268\t0.081\t0.0247622463736137\t0\tGabra1\n+Mbtps1\t2.72739402167582e-05\t0.87046171'..b'9e-06\t0.441003772850919\t0.96\t0.547\t0.0020627233127515\t4\tSec14l1\n+Gpatch31\t2.28602215776352e-06\t1.71564636112472\t0.84\t0.37\t0.00211914254024678\t4\tGpatch3\n+1700029F12Rik\t3.16670921538127e-06\t1.25920332789257\t0.6\t0.206\t0.00293553944265843\t4\t1700029F12Rik\n+D1Bwg0212e\t3.54092462883736e-06\t1.09075409376934\t0.96\t0.819\t0.00328243713093223\t4\tD1Bwg0212e\n+Agbl5\t3.63234366845022e-06\t0.359000375003823\t0.88\t0.51\t0.00336718258065336\t4\tAgbl5\n+Kif91\t4.01899120973089e-06\t0.768464087196651\t0.88\t0.403\t0.00372560485142053\t4\tKif9\n+Ctnna2\t4.18835867427856e-06\t0.489080438185307\t0.4\t0.107\t0.00388260849105622\t4\tCtnna2\n+Traf7\t4.59597118765464e-06\t0.70767916224615\t1\t0.959\t0.00426046529095585\t4\tTraf7\n+Rbm22\t5.36974645549668e-06\t0.730087432476789\t1\t0.992\t0.00497775496424542\t4\tRbm22\n+Rspry11\t5.69095110889555e-06\t1.0141365217818\t0.96\t0.716\t0.00527551167794617\t4\tRspry1\n+Mecp2\t6.73951105806661e-06\t0.990901622242648\t0.88\t0.551\t0.00624752675082775\t4\tMecp2\n+Ogfrl1\t7.83911040043734e-06\t0.426596561676906\t0.96\t0.56\t0.00726685534120541\t4\tOgfrl1\n+Nmb1\t8.1467937980205e-06\t1.48728600328544\t1\t0.728\t0.007552077850765\t4\tNmb\n+Nin2\t8.41338109135364e-06\t1.03986152957422\t0.96\t0.761\t0.00779920427168482\t4\tNin\n+Ccnyl1\t8.75230930750994e-06\t1.19543145693502\t1\t0.7\t0.00811339072806172\t4\tCcnyl1\n+Tex14\t9.56222447108374e-06\t0.494746429430875\t0.84\t0.436\t0.00886418208469463\t4\tTex14\n+St5\t1.14940659749145e-05\t0.605165682719874\t1\t0.638\t0.0106549991587457\t4\tSt5\n+Nbeal1\t1.21823749551211e-05\t0.832173404655711\t0.96\t0.897\t0.0112930615833972\t4\tNbeal1\n+Clk21\t1.68162380954407e-05\t1.21176749980517\t0.96\t0.852\t0.0155886527144735\t4\tClk2\n+Pip5k1c\t1.80263888169973e-05\t0.716186824000705\t0.96\t0.757\t0.0167104624333565\t4\tPip5k1c\n+Tmem87b1\t1.81967024576279e-05\t0.686361617836365\t1\t0.835\t0.016868343178221\t4\tTmem87b\n+Ercc4\t2.93090146915522e-05\t1.22254679642911\t1\t0.877\t0.0271694566190689\t4\tErcc4\n+Alox121\t2.9986865925419e-05\t0.814366019417343\t0.96\t0.691\t0.0277978247128634\t4\tAlox12\n+Cotl1\t3.55238391783376e-05\t0.291812126661166\t0.8\t0.387\t0.032930598918319\t4\tCotl1\n+Vps39\t3.62481073948892e-05\t1.28853126628222\t0.96\t0.827\t0.0336019955550623\t4\tVps39\n+4632434I11Rik1\t3.93389287722145e-05\t0.608031235714694\t0.96\t0.934\t0.0364671869718429\t4\t4632434I11Rik\n+Ankrd27\t4.13605244951355e-05\t0.78336551232952\t1\t0.794\t0.0383412062069906\t4\tAnkrd27\n+Fah1\t4.76477821526752e-05\t0.331144383476058\t0.4\t0.107\t0.0441694940555299\t4\tFah\n+Zmym4\t4.99487631936679e-05\t0.819479010245981\t0.96\t0.93\t0.0463025034805301\t4\tZmym4\n+Mosc21\t8.75878249805554e-05\t0.804360337949048\t0.96\t0.753\t0.0811939137569749\t4\tMosc2\n+Fem1c1\t0.000134144950945859\t1.59351176629955\t0.96\t0.831\t0.124352369526812\t4\tFem1c\n+D4Bwg0951e1\t0.000137801588617095\t0.565645554404937\t0.8\t0.403\t0.127742072648047\t4\tD4Bwg0951e\n+Zkscan141\t0.00014549216540626\t0.583843128566121\t0.92\t0.576\t0.134871237331603\t4\tZkscan14\n+Cry21\t0.000155364520126801\t0.42931037311356\t0.92\t0.531\t0.144022910157544\t4\tCry2\n+Dtnb1\t0.000163437118936719\t0.485702200066726\t1\t0.7\t0.151506209254338\t4\tDtnb\n+Abcc32\t0.000168288248321098\t0.250119026164717\t0.88\t0.514\t0.156003206193658\t4\tAbcc3\n+Zfp523\t0.000191398072795126\t0.329049002394344\t0.36\t0.107\t0.177426013481082\t4\tZfp523\n+Sec31a\t0.000344008370420095\t0.924496462911904\t1\t0.984\t0.318895759379428\t4\tSec31a\n+Ercc5\t0.000413521809768657\t0.419204737728817\t0.88\t0.584\t0.383334717655545\t4\tErcc5\n+Tnrc6a\t0.000536560574620653\t0.406801300987023\t0.96\t0.988\t0.497391652673345\t4\tTnrc6a\n+Ctnnd1\t0.000892942115112949\t0.766388544590886\t1\t0.984\t0.827757340709703\t4\tCtnnd1\n+Zmym31\t0.00106377539780854\t0.443295470931702\t1\t0.815\t0.986119793768515\t4\tZmym3\n+Zfp8301\t0.00119573195456822\t0.556755544900666\t1\t0.889\t1\t4\tZfp830\n+Hells1\t0.00123148933789219\t0.320858221286585\t0.96\t0.979\t1\t4\tHells\n+Nlrp31\t0.00167546658564824\t0.682913638083824\t0.48\t0.23\t1\t4\tNlrp3\n+Serpine21\t0.00170095741538562\t0.492169327022354\t0.96\t0.757\t1\t4\tSerpine2\n+Ttll5\t0.00173194686095845\t0.334901585350436\t0.96\t0.823\t1\t4\tTtll5\n+Shprh\t0.00223213166460002\t0.455600408375772\t0.96\t0.881\t1\t4\tShprh\n+Dcdc2c1\t0.00228198449889257\t1.55885090391374\t0.84\t0.675\t1\t4\tDcdc2c\n'
b
diff -r c0fd285eb553 -r fab6ff46e019 test-data/protein_out.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/protein_out.tsv Fri Jul 07 01:43:02 2023 +0000
b
@@ -0,0 +1,103 @@
+p_val avg_log2FC pct.1 pct.2 p_val_adj cluster gene
+1.67295292546245e-13 0.326405715743977 1 1 2.17483880310118e-12 1 CD3
+1.5642098215071e-44 0.495970381707604 1 1 2.03347276795923e-43 3 CD3
+1.14196527784025e-35 0.40085553451009 1 1 1.48455486119233e-34 3 CD4
+1.00171227157907e-42 0.49278398824099 1 1 1.30222595305279e-41 4 CD3
+4.45804690128427e-32 0.383908885768934 1 1 5.79546097166956e-31 4 CD4
+2.3270323108152e-64 0.535858744002285 1 1 3.02514200405976e-63 6 CD11c
+4.59697497155158e-71 0.582642681231806 1 1 5.97606746301705e-70 8 CD11c
+5.42829982399312e-23 0.310022335647084 1 1 7.05678977119106e-22 9 CD11c
+5.34022845897306e-70 0.60889940093635 1 1 6.94229699666497e-69 10 CD11c
+1.94515080115917e-75 0.987231181827462 1 1 2.52869604150692e-74 11 CD19
+1.3401718411323e-32 0.27534720926661 1 1 1.74222339347199e-31 11 CD45RA
+6.82783507401538e-62 0.57275793552547 1 1 8.87618559621999e-61 12 CD11c
+2.04431843457248e-31 0.449927697936415 1 1 2.65761396494422e-30 15 CD11c
+3.39342323568419e-26 0.404810867237044 1 1 4.41145020638945e-25 16 CD11c
+7.88511793517547e-29 0.465776338611985 1 1 1.02506533157281e-27 17 CD11c
+1.91570514633727e-46 0.56726960905273 1 1 2.49041669023845e-45 18 CD11c
+5.1260483533881e-82 1.18155234784116 1 1 6.66386285940453e-81 20 CD8
+1.57361935775751e-47 0.391899061098195 1 1 2.04570516508476e-46 20 CD45RA
+8.74284608877472e-39 0.546627661446195 1 1 1.13656999154071e-37 23 CD11c
+1.96816328438562e-27 0.525377309779508 1 1 2.55861226970131e-26 24 CD3
+2.80113243084789e-26 0.445779372516199 1 1 3.64147216010226e-25 24 CD4
+2.08891825701061e-32 0.359032672171917 1 1 2.71559373411379e-31 25 CD45RA
+6.38184609794435e-23 0.314402863729703 1 1 8.29639992732766e-22 25 CD56
+2.33924416208311e-19 0.275395941678534 1 1 3.04101741070804e-18 25 CD16
+1.23100762344444e-72 0.527654790808374 1 1 1.60030991047777e-71 26 CD45RA
+1.00222124580754e-61 0.47303501407078 1 1 1.3028876195498e-60 26 CD56
+5.04433216574995e-61 0.499525696517984 1 1 6.55763181547493e-60 26 CD16
+2.57942814886754e-19 0.397056393594097 1 1 3.3532565935278e-18 26 CD8
+3.80436056159182e-21 0.471090809116061 1 1 4.94566873006937e-20 27 CD3
+5.62262803624727e-14 0.365368408368207 1 1 7.30941644712145e-13 27 CD4
+8.05030043675788e-29 0.556377398183442 1 1 1.04653905677852e-27 28 CD3
+5.68183022990689e-24 0.462604140851 1 1 7.38637929887895e-23 28 CD4
+4.32372215869929e-27 0.492374012295227 1 1 5.62083880630908e-26 30 CD4
+8.80072296811784e-27 0.562209188025505 1 1 1.14409398585532e-25 30 CD3
+5.86102527405308e-30 0.514318772298818 1 1 7.619332856269e-29 31 CD4
+1.10478058693055e-26 0.551831262152829 1 1 1.43621476300972e-25 31 CD3
+6.38562416996792e-11 0.407403482613083 1 1 8.30131142095829e-10 32 CD3
+4.17895569544475e-06 0.272549702717712 1 1 5.43264240407818e-05 32 CD4
+3.72341120344556e-39 0.63404032335664 1 1 4.84043456447923e-38 33 CD11c
+3.47626583425057e-31 0.298415769867169 1 1 4.51914558452574e-30 33 CD14
+1.61092774622993e-19 0.32674447986965 1 1 2.09420607009891e-18 35 CD45RA
+7.8712241758892e-27 0.572421953528271 1 1 1.0232591428656e-25 36 CD11c
+2.53970993841925e-22 0.278363837640406 1 1 3.30162291994503e-21 36 CD14
+1.35360047893276e-42 1.32718688149546 1 1 1.75968062261259e-41 37 CD8
+5.24757172988244e-13 0.263336896623814 1 1 6.82184324884717e-12 37 CD45RA
+0.00411967300711807 0.251455582065055 1 1 0.0535557490925349 37 CD3
+5.08213840057668e-09 0.388143218090763 1 1 6.60677992074969e-08 38 CD3
+5.78899385075161e-07 0.325099136996257 1 1 7.52569200597709e-06 38 CD4
+4.66505722311064e-22 0.586604170424365 1 1 6.06457439004383e-21 39 CD3
+3.76660069557731e-21 0.514611202436318 1 1 4.8965809042505e-20 39 CD4
+5.55663908351586e-38 0.515577202059993 1 1 7.22363080857062e-37 40 CD45RA
+6.27348968932591e-32 0.472480692520507 1 1 8.15553659612369e-31 40 CD16
+1.42947043118412e-28 0.415013457906016 1 1 1.85831156053936e-27 40 CD56
+1.8793375763755e-14 0.352665542997354 1 1 2.44313884928815e-13 40 CD8
+5.6008185645827e-24 0.602331877466961 1 1 7.2810641339575e-23 41 CD11c
+2.57123247695116e-20 0.285387697218841 1 1 3.34260222003651e-19 41 CD14
+1.49095077292205e-14 0.49697275611693 1 1 1.93823600479867e-13 43 CD4
+2.08946196531086e-14 0.555739574445692 1 1 2.71630055490412e-13 43 CD3
+2.19758957676378e-05 0.399823538718023 1 1 0.000285686644979291 44 CD3
+6.14864318795116e-05 0.326473015534509 1 1 0.00079932361443365 44 CD4
+1.27620616488274e-20 0.48718207480276 1 1 1.65906801434756e-19 46 CD45RA
+5.73473851777945e-19 0.463918420273511 1 1 7.45516007311328e-18 46 CD16
+8.88217928924765e-16 0.402449826305318 1 1 1.15468330760219e-14 46 CD56
+3.86899212782144e-09 0.403347559498734 1 1 5.02968976616787e-08 46 CD8
+7.82441161756527e-14 0.54974339100417 1 1 1.01717351028348e-12 47 CD4
+1.64611664916494e-12 0.593590803126451 1 1 2.13995164391443e-11 47 CD3
+1.50261128404362e-08 0.444698278386498 1 1 1.9533946692567e-07 48 CD4
+3.0693920280249e-08 0.485806405732138 1 1 3.99020963643237e-07 48 CD3
+3.75064021004935e-05 0.426060220487989 1 1 0.000487583227306415 49 CD3
+0.000142612327520314 0.368345962674295 1 1 0.00185396025776409 49 CD4
+1.75303069982881e-08 0.553523232257216 1 1 2.27893990977745e-07 50 CD3
+2.92205657488682e-07 0.472836909811648 1 1 3.79867354735287e-06 50 CD4
+1.58132516634947e-07 0.546611394241725 1 1 2.05572271625431e-06 52 CD3
+1.9461168179332e-07 0.488063324884708 1 1 2.52995186331316e-06 52 CD4
+8.03593559106167e-08 0.569767489448342 1 1 1.04467162683802e-06 54 CD3
+1.06870991801859e-06 0.487932704728795 1 1 1.38932289342417e-05 54 CD4
+0.000814556186990549 0.351686671472014 1 1 0.0105892304308771 56 CD3
+2.51009951330222e-06 0.493665228200334 1 1 3.26312936729289e-05 57 CD4
+2.42776604502913e-05 0.523629664434363 1 1 0.000315609585853786 57 CD3
+5.42134770798451e-06 0.496080353437594 1 1 7.04775202037986e-05 58 CD4
+4.89589551780272e-05 0.519918267191007 1 1 0.000636466417314353 58 CD3
+1.06083275668956e-05 0.518183248473891 1 1 0.000137908258369643 59 CD3
+2.28373871872614e-05 0.448662008549807 1 1 0.000296886033434398 59 CD4
+2.95127375391735e-07 0.545865093820575 1 1 3.83665588009256e-06 60 CD4
+6.89510261130472e-07 0.5873278673037 1 1 8.96363339469613e-06 60 CD3
+5.96266228093642e-07 0.6022052282127 1 1 7.75146096521734e-06 61 CD3
+2.05697616928793e-05 0.492874477040793 1 1 0.00026740690200743 61 CD4
+4.40285876196449e-05 0.50357982780149 1 1 0.000572371639055384 62 CD3
+0.00232951066979824 0.369528572352012 1 1 0.0302836387073771 62 CD4
+0.0032270997397837 0.343040055579376 1 1 0.0419522966171881 63 CD4
+0.00444570306598577 0.373769928678549 1 1 0.057794139857815 63 CD3
+0.00134937804457614 0.409801469287103 1 1 0.0175419145794898 64 CD3
+6.14108702172555e-07 0.526255271530294 1 1 7.98341312824321e-06 65 CD4
+4.59012879700512e-06 0.564101106006382 1 1 5.96716743610665e-05 65 CD3
+0.000265824057131672 0.474857735628406 1 1 0.00345571274271173 66 CD3
+0.00165866588427592 0.408084027476855 1 1 0.021562656495587 66 CD4
+0.000236342795052248 0.458031750173302 1 1 0.00307245633567922 67 CD3
+0.00268645559141873 0.374370937282443 1 1 0.0349239226884434 67 CD4
+2.3591660433204e-05 0.543103607805673 1 1 0.000306691585631652 69 CD3
+0.000647898842261096 0.415466628025077 1 1 0.00842268494939425 69 CD4
+0.000517321179939829 0.449086058194056 1 1 0.00672517533921778 70 CD3
+0.00369469052975548 0.372007896439794 1 1 0.0480309768868212 70 CD4
b
diff -r c0fd285eb553 -r fab6ff46e019 test-data/rna.tab.gz
b
Binary file test-data/rna.tab.gz has changed
b
diff -r c0fd285eb553 -r fab6ff46e019 test-data/rna_out.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/rna_out.tsv Fri Jul 07 01:43:02 2023 +0000
b
b'@@ -0,0 +1,582 @@\n+p_val\tavg_log2FC\tpct.1\tpct.2\tp_val_adj\tcluster\tgene\n+0\t6.05663691346878\t1\t0.014\t0\t0\tCD9\n+1.9822323994606e-32\t0.892085602138872\t0.845\t0.67\t5.33220515454903e-30\t0\tCD74\n+1.15168092712414e-08\t0.478645233478619\t0.323\t0.19\t3.09802169396393e-06\t0\tCD36\n+2.8479031688574e-07\t0.475224325321269\t0.342\t0.22\t7.66085952422642e-05\t0\tCD68\n+1.19367791108326e-06\t0.319116267570157\t0.356\t0.236\t0.000321099358081397\t0\tCD14\n+1.25526626910762e-300\t2.55646528238641\t0.997\t0.174\t3.37666626389951e-298\t1\tCD247\n+4.9467417746979e-104\t1.38113679016585\t1\t0.491\t1.33067353739374e-101\t1\tCD7\n+3.26887578464599e-22\t0.738081621550979\t0.711\t0.447\t8.79327586069771e-20\t1\tCD3D\n+1.67975517808425e-21\t0.6897744848159\t0.646\t0.375\t4.51854142904665e-19\t1\tCD3E\n+5.06329852867774e-18\t0.772122890497265\t0.523\t0.295\t1.36202730421431e-15\t1\tCD3G\n+1.27114026491996e-14\t0.540176080901698\t0.729\t0.537\t3.41936731263469e-12\t1\tCD69\n+4.22106923632502e-12\t0.628229473292235\t0.431\t0.256\t1.13546762457143e-09\t1\tCD27\n+1.59191271885828e-09\t0.923324279812694\t0.28\t0.161\t4.28224521372878e-07\t1\tCD96\n+6.33331731091395e-06\t0.635612480130467\t0.3\t0.202\t0.00170366235663585\t1\tCD2\n+1.2084710019556e-05\t0.652639529253708\t0.266\t0.176\t0.00325078699526057\t1\tAAK1\n+7.18353005289289e-05\t0.45395573069296\t0.36\t0.264\t0.0193236958422819\t1\tCDC42SE2\n+0\t7.28866683945211\t1\t0.01\t0\t2\tCDC34\n+6.2438029160881e-11\t0.287473417951871\t0.837\t0.671\t1.6795829844277e-08\t2\tCD74\n+1.67553729019084e-291\t2.5252687279094\t1\t0.161\t4.50719531061337e-289\t3\tCDC42SE1\n+1.81222647838563e-48\t0.774911191999161\t1\t0.494\t4.87488922685735e-46\t3\tCD7\n+1.59722179115194e-38\t0.979326889347329\t0.758\t0.372\t4.29652661819873e-36\t3\tCD3E\n+7.84242124211886e-35\t0.885592128425985\t0.81\t0.444\t2.10961131412997e-32\t3\tCD3D\n+1.99915714824053e-33\t1.11040695652189\t0.611\t0.293\t5.37773272876704e-31\t3\tCD3G\n+2.3333724887806e-29\t1.01503304498776\t0.549\t0.252\t6.27677199481982e-27\t3\tCD27\n+1.04002760149565e-21\t0.661402834305967\t0.833\t0.534\t2.79767424802329e-19\t3\tCD69\n+2.11673614992016e-20\t0.44565536712769\t0.961\t0.849\t5.69402024328522e-18\t3\tCD52\n+4.16399404112572e-16\t1.17812983627874\t0.261\t0.108\t1.12011439706282e-13\t3\tCD6\n+6.12847805829085e-12\t0.906143067361228\t0.307\t0.156\t1.64856059768024e-09\t3\tCCR7\n+3.64114850082905e-09\t0.669170386110504\t0.346\t0.2\t9.79468946723015e-07\t3\tCD2\n+4.14796430174784e-09\t0.753573810220556\t0.294\t0.161\t1.11580239717017e-06\t3\tCD96\n+1.5417100566513e-06\t0.656281233809736\t0.284\t0.175\t0.0004147200052392\t3\tAAK1\n+3.81221452867488e-06\t0.523887078268232\t0.382\t0.264\t0.00102548570821354\t3\tCDC42SE2\n+3.97949109644182e-05\t0.443250782597945\t0.379\t0.271\t0.0107048310494285\t3\tCCT3\n+0.000406152806467521\t0.369291108612562\t0.376\t0.279\t0.109255104939763\t3\tCCT4\n+2.86179772528272e-140\t1.69823655981722\t1\t0.494\t7.69823588101052e-138\t4\tCD7\n+5.75083718491135e-41\t1.12108078531178\t0.734\t0.373\t1.54697520274115e-38\t4\tCD3E\n+2.87854133026334e-40\t0.975825622716567\t0.826\t0.444\t7.74327617840839e-38\t4\tCD3D\n+3.21739743549182e-23\t0.915070086700084\t0.566\t0.294\t8.65479910147299e-21\t4\tCD3G\n+1.07571393161663e-22\t0.703404470988817\t0.809\t0.535\t2.89367047604873e-20\t4\tCD69\n+5.66376326372948e-21\t0.998065485935792\t0.493\t0.254\t1.52355231794323e-18\t4\tCD27\n+5.60713087816813e-17\t0.410160383521315\t0.967\t0.849\t1.50831820622723e-14\t4\tCD52\n+5.74774963343849e-14\t1.097599612095\t0.309\t0.156\t1.54614465139495e-11\t4\tCCR7\n+4.99928644683509e-12\t0.95149999528962\t0.355\t0.2\t1.34480805419864e-09\t4\tCD2\n+7.61741524350528e-07\t0.566723778496881\t0.388\t0.27\t0.000204908470050292\t4\tCCT3\n+0.00597813707088682\t0.325303001531855\t0.28\t0.217\t1\t4\tCCT2\n+0\t6.3624837958636\t1\t0.012\t0\t5\tABCB7\n+0\t3.58747133818528\t0.88\t0.073\t0\t6\tABI3\n+1.42748858021799e-58\t1.53828071963406\t0.634\t0.212\t3.83994428078639e-56\t6\tCD68\n+1.07762676060828e-50\t1.09102064840927\t0.942\t0.669\t2.89881598603628e-48\t6\tCD74\n+5.07731529501781e-32\t1.3974890987987\t0.33\t0.1\t1.36579781435979e-29\t6\tCD86\n+6.97336181247085e-29\t1.45563803514765\t0.293\t0.088\t1.87583432755466e-26\t6\tCD300E\n+6.62536629976547e-23\t0.979237343350899\t0.507\t0.232\t1.78222353463691e-20\t6\tCD14\n+1.29879352423192'..b'8595059\t0.667\t0.262\t0.0300974343544684\t61\tCD27\n+0.000404998028111006\t1.14360651693177\t0.524\t0.205\t0.108944469561861\t61\tCD2\n+0.00325008416209062\t1.35697019849102\t0.524\t0.268\t0.874272639602378\t61\tCDC42SE2\n+0.00481829874618626\t0.98912520838801\t0.571\t0.303\t1\t61\tCD3G\n+0.00817202071604155\t0.642746565867117\t0.905\t0.544\t1\t61\tCD69\n+7.24611611446303e-06\t1.32003445589636\t0.857\t0.456\t0.00194920523479056\t62\tCD3D\n+0.000135130354289854\t1.63135403132032\t0.571\t0.262\t0.0363500653039708\t62\tCD27\n+0.00786163265781978\t0.814130760974114\t0.619\t0.409\t1\t62\tABRACL\n+0.00929561210732165\t0.991993254650952\t0.619\t0.385\t1\t62\tCD3E\n+0.00100151451502045\t0.985211935922848\t0.81\t0.544\t0.269407404540502\t63\tCD69\n+0.00140164320290821\t2.03211575223649\t0.429\t0.205\t0.377042021582309\t63\tCD2\n+0.0028110331662747\t0.966838796433823\t0.714\t0.457\t0.756167921727894\t63\tCD3D\n+0.0042739888518399\t1.42636035169469\t0.381\t0.179\t1\t63\tAAK1\n+0.00454958074894623\t0.836310251185253\t0.667\t0.385\t1\t63\tCD3E\n+0.00694858195731693\t0.557889545219698\t1\t0.853\t1\t63\tCD52\n+0.00714727517925193\t1.58210815517271\t0.333\t0.155\t1\t63\tABHD14B\n+0.00110319769218366\t0.903585518242311\t0.85\t0.544\t0.296760179197406\t64\tCD69\n+0.00148232064011444\t1.14761294230867\t0.75\t0.457\t0.398744252190784\t64\tCD3D\n+0.00642810796024993\t1.95574099974102\t0.35\t0.166\t1\t64\tCD96\n+2.42129765572733e-10\t2.00752214617334\t0.85\t0.261\t6.51329069390652e-08\t65\tCD27\n+5.76124142720778e-08\t2.03540694606857\t0.5\t0.113\t1.54977394391889e-05\t65\tCD6\n+3.25135565904384e-07\t2.85543958113225\t0.3\t0.051\t8.74614672282793e-05\t65\tCDCA7\n+8.43429615411452e-07\t2.21633445744274\t0.35\t0.07\t0.000226882566545681\t65\tABT1\n+3.53415724250826e-05\t1.05714306727267\t0.85\t0.385\t0.00950688298234722\t65\tCD3E\n+0.000140898983429988\t1.04671232639444\t0.9\t0.544\t0.0379018265426667\t65\tCD69\n+0.000283242576302817\t0.793604334287641\t0.95\t0.456\t0.0761922530254577\t65\tCD3D\n+0.00283529997397836\t0.514586942910608\t1\t0.853\t0.76269569300018\t65\tCD52\n+0.00340246674824964\t1.66926896855698\t0.25\t0.077\t0.915263555279153\t65\tCD40LG\n+0.00420406168813611\t1.14034407827933\t0.4\t0.161\t1\t65\tCCR7\n+0.00827065968049449\t1.5203844891369\t0.35\t0.155\t1\t65\tABHD14B\n+1.089560479526e-06\t1.33753090935073\t0.895\t0.385\t0.000293091768992493\t66\tCD3E\n+1.4129844504618e-06\t1.5789233757261\t0.737\t0.262\t0.000380092817174226\t66\tCD27\n+6.50886453713584e-05\t1.91249503683349\t0.368\t0.099\t0.0175088456048954\t66\tCCSER2\n+0.000131192836723538\t1.01054714777336\t0.895\t0.456\t0.0352908730786317\t66\tCD3D\n+0.000310537463949175\t0.907993053471882\t0.947\t0.544\t0.0835345778023282\t66\tCD69\n+0.00119147122927957\t0.608040991330872\t1\t0.853\t0.320505760676203\t66\tCD52\n+0.00151344246528663\t1.40627428091189\t0.421\t0.161\t0.407116023162102\t66\tCCR7\n+0.00770613574973099\t0.965383360144156\t0.421\t0.179\t1\t66\tAAK1\n+1.99394300815168e-06\t1.67397188957183\t0.842\t0.385\t0.000536370669192802\t67\tCD3E\n+0.00721868484936139\t1.36363253432037\t0.474\t0.262\t1\t67\tCD27\n+0.00877685171030327\t1.77884134972083\t0.263\t0.099\t1\t67\tCCSER2\n+0.000121082194768989\t1.42934247953002\t0.474\t0.16\t0.0325711103928581\t68\tCCR7\n+0.000653422794496296\t0.683045963502556\t1\t0.853\t0.175770731719504\t68\tCD52\n+0.00138765394116794\t1.30303667873644\t0.684\t0.385\t0.373278910174175\t68\tCD3E\n+0.00227347524038789\t0.954888155764406\t0.789\t0.544\t0.611564839664343\t68\tCD69\n+0.00270991774514855\t1.19273307152492\t0.579\t0.303\t0.728967873444959\t68\tCD3G\n+1.18945658282419e-05\t1.29850680560603\t0.895\t0.544\t0.00319963820779707\t69\tCD69\n+3.24568022150215e-05\t1.3633659373819\t0.737\t0.303\t0.00873087979584077\t69\tCD3G\n+0.0002195008780272\t1.07052905045681\t0.842\t0.457\t0.0590457361893169\t69\tCD3D\n+0.00703706170020798\t0.85755211311989\t0.684\t0.385\t1\t69\tCD3E\n+7.80489030433116e-05\t1.27349257904159\t0.778\t0.385\t0.0209951549186508\t70\tCD3E\n+0.00039423165375324\t1.08035764255708\t0.833\t0.457\t0.106048314859621\t70\tCD3D\n+0.000483402587592305\t0.975759148107562\t0.889\t0.544\t0.13003529606233\t70\tCD69\n+0.000554825609359925\t1.55708817466902\t0.556\t0.274\t0.14924808891782\t70\tCCT3\n+0.00375929385790544\t1.62746392034211\t0.444\t0.219\t1\t70\tCCT2\n+0.00391030643136033\t1.28281486642971\t0.444\t0.205\t1\t70\tCD2\n'