Repository 'seurat_plot'
hg clone https://toolshed.g2.bx.psu.edu/repos/ebi-gxa/seurat_plot

Changeset 0:95d79f1134f0 (2024-03-02)
Commit message:
planemo upload commit 0264c359f1d638bbbbab515a3502231f679cdcf6
added:
extra/macro_mapper_seurat.yaml
get_test_data.sh
scripts/seurat-scale-data.R
seurat_macros.xml
seurat_plot.xml
b
diff -r 000000000000 -r 95d79f1134f0 extra/macro_mapper_seurat.yaml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/extra/macro_mapper_seurat.yaml Sat Mar 02 10:40:08 2024 +0000
b
@@ -0,0 +1,90 @@
+---
+- option_group:
+    - input-object-file
+    - input-format
+  pre_command_macros:
+    - INPUT_OBJ_PREAMBLE
+  post_command_macros:
+    - INPUT_OBJECT
+  input_declaration_macros:
+    - input_object_params
+- option_group:
+    - output-object-file
+    - output-format
+  post_command_macros:
+    - OUTPUT_OBJECT
+  input_declaration_macros:
+    - output_object_params
+  output_declaration_macros:
+    - output_files
+- option_group:
+    - input-object-files
+    - input-format
+  pre_command_macros:
+    - INPUT_OBJS_PREAMBLE
+  post_command_macros:
+    - INPUT_OBJECTS
+  input_declaration_macros:
+    - input_object_params:
+        multiple: true
+- option_group:
+    - reference-object-files
+    - reference-format
+  pre_command_macros:
+    - REFERENCE_OBJS_PREAMBLE
+  post_command_macros:
+    - REFERENCE_OBJECTS
+  input_declaration_macros:
+    - input_object_params:
+        varname: reference
+        multiple: true
+        optional: true
+- option_group:
+    - reference-object-file
+    - reference-format
+  pre_command_macros:
+    - REFERENCE_OBJ_PREAMBLE
+  post_command_macros:
+    - REFERENCE_OBJECT
+  input_declaration_macros:
+    - input_object_params:
+        varname: reference
+- option_group:
+    - anchors-object-file
+    - anchors-format
+  pre_command_macros:
+    - ANCHORS_OBJ_PREAMBLE
+  post_command_macros:
+    - ANCHORS_OBJECT
+  input_declaration_macros:
+    - input_object_params:
+        varname: anchors
+- option_group:
+    - query-object-file
+    - query-format
+  pre_command_macros:
+    - QUERY_OBJ_PREAMBLE
+  post_command_macros:
+    - QUERY_OBJECT
+  input_declaration_macros:
+    - input_object_params:
+        varname: query
+- option_group:
+    - plot-out
+  post_command_macros:
+    - OUTPUT_PLOT
+  output_declaration_macros:
+    - plot_output_files_format:
+        format: png
+    - plot_output_files_format:
+        format: pdf
+    - plot_output_files_format:
+        format: eps
+    - plot_output_files_format:
+        format: jpg
+    - plot_output_files_format:
+        format: ps
+    - plot_output_files_format:
+        format: tiff
+    - plot_output_files_format:
+        format: svg
b
diff -r 000000000000 -r 95d79f1134f0 get_test_data.sh
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/get_test_data.sh Sat Mar 02 10:40:08 2024 +0000
[
@@ -0,0 +1,77 @@
+#!/usr/bin/env bash
+
+BASENAME_FILE='E-MTAB-6077-3k_features_90_cells'
+
+MTX_LINK='https://drive.google.com/uc?export=download&id=1-1ejn7scP80xsbrG0FtWzsozjg0hhc23'
+RDS_LINK='https://drive.google.com/uc?export=download&id=1KW_GX6xznSUpWRWUykpNaSbAhyClf7_n'
+NORM_LINK='https://drive.google.com/uc?export=download&id=1mvo3ENkBvEAOyWG6ejApzQTPDLX5yBKU'
+FVG_LINK='https://drive.google.com/uc?export=download&id=13Fhruuj-vEEo1WM138ahtAYqfHc7LsaZ'
+SCALED_LINK='https://drive.google.com/uc?export=download&id=18TK8us235LWNajarWDBAtASUXMYAxvw0'
+PCA_LINK='https://drive.google.com/uc?export=download&id=1gf3BTB4dygDsom1TzjsBfgZnZepcoG5c'
+NEIGHBOURS_LINK='https://drive.google.com/uc?export=download&id=1N2lHoKRBZ7pmAYGfghLWB9KUrLA5WoNX'
+CLUSTERS_LINK='https://drive.google.com/uc?export=download&id=1HWxZWHbNUNo4z__9PhhL_CJOLzec_ETa'
+TSNE_LINK='https://drive.google.com/uc?export=download&id=1qsvMr_GkCSp1dyTJt1BZ6cElJwFFX2zO'
+MARKERS_LINK='https://drive.google.com/uc?export=download&id=18OmWNc7mF-4pzH6DQkPp1eKunN4BfvxD'
+
+LOOM_LINK='https://drive.google.com/uc?export=download&id=1qNk5cg8hJG3Nv1ljTKmUEnxTOf11EEZX'
+H5AD_LINK='https://drive.google.com/uc?export=download&id=1YpE0H_t_dkh17P-WBhPijKvRiGP0BlBz'
+
+H5AD_SC182_LINK='https://drive.google.com/uc?export=download&id=16PUJ2KAkXT8F1UkfqU-9LWoOJUkUG1rp'
+SCE_LINK='https://drive.google.com/uc?export=download&id=1UKdyf3M01uAt7oBg93JfmRvNVB_jlUKe'
+
+# Seurat v4 exclusives
+IFNB_BASE_FILE='ifnb_'
+
+IFNB_CTRL_INT_LINK='https://drive.google.com/uc?export=download&id=15E_MLz-UclJYInNaA7YKLhLo5W-qlykL'
+IFNB_STIM_INT_LINK='https://drive.google.com/uc?export=download&id=14iKgCJGPk16dEmpJJF-Gp_lBDcOdo-54'
+
+## Classify and UMAP mapping
+CLASSIFY_QUERY_LINK='https://oc.ebi.ac.uk/s/MlEDILFYRrvkS6E/download'
+CLASSIFY_RESULTS_ANCHORS_OBJECT_LINK='https://drive.google.com/uc?export=download&id=1Xtv4K_CxIU1cJ8RjJ7NTvzLQkLvc8a3i'
+# UMAP_RESULT_OBJECT_LINK='https://oc.ebi.ac.uk/s/k4MdM07y9DAnurp/download'
+UMAP_RESULT_OBJECT_LINK='https://oc.ebi.ac.uk/s/D1z4z2ef1e3dyc3/download'
+
+
+function get_data {
+  local link=$1
+  local fname=$2
+
+  if [ ! -f $fname ]; then
+    echo "$fname not available locally, downloading.."
+    wget -O $fname --retry-connrefused --waitretry=1 --read-timeout=20 --timeout=15 -t 3 $link
+  fi
+}
+
+# get matrix data
+mkdir -p test-data
+pushd test-data
+get_data $MTX_LINK mtx.zip
+unzip mtx.zip
+rm -f mtx.zip
+
+get_data $RDS_LINK $BASENAME_FILE".rds"
+get_data $NORM_LINK $BASENAME_FILE"-normalised.rds"
+get_data $FVG_LINK $BASENAME_FILE"-fvg.rds"
+get_data $SCALED_LINK $BASENAME_FILE"-scaled.rds"
+get_data $PCA_LINK $BASENAME_FILE"-pca.rds"
+get_data $NEIGHBOURS_LINK $BASENAME_FILE"-neighbours.rds"
+get_data $CLUSTERS_LINK $BASENAME_FILE"-clusters.rds"
+get_data $TSNE_LINK $BASENAME_FILE"-tsne.rds"
+get_data $MARKERS_LINK $BASENAME_FILE"-markers.csv.zip"
+
+unzip $BASENAME_FILE"-markers.csv.zip"
+rm -f $BASENAME_FILE"-markers.csv.zip"
+
+get_data $LOOM_LINK $BASENAME_FILE"_loom.h5"
+get_data $SCE_LINK $BASENAME_FILE"_sce.rds"
+get_data $H5AD_LINK $BASENAME_FILE".h5ad"
+
+get_data $H5AD_SC182_LINK $BASENAME_FILE"_sc182.h5ad"
+
+get_data $IFNB_CTRL_INT_LINK $IFNB_BASE_FILE"ctrl_norm_fvg.rds"
+get_data $IFNB_STIM_INT_LINK $IFNB_BASE_FILE"stim_norm_fvg.rds"
+
+get_data $CLASSIFY_QUERY_LINK "Classify_query.rds"
+get_data $CLASSIFY_RESULTS_ANCHORS_OBJECT_LINK "Classify_anchors.rds"
+get_data $UMAP_RESULT_OBJECT_LINK "UMAP_result_integrated.rds"
+
b
diff -r 000000000000 -r 95d79f1134f0 scripts/seurat-scale-data.R
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/seurat-scale-data.R Sat Mar 02 10:40:08 2024 +0000
b
@@ -0,0 +1,165 @@
+#!/usr/bin/env Rscript 
+
+# Load optparse we need to check inputs
+
+suppressPackageStartupMessages(require(optparse))
+
+# Load common functions
+
+suppressPackageStartupMessages(require(workflowscriptscommon))
+
+# parse options
+
+option_list = list(
+  make_option(
+    c("-i", "--input-object-file"),
+    action = "store",
+    default = NA,
+    type = 'character',
+    help = "File name in which a serialized R matrix object may be found."
+  ),
+  make_option(
+    c("--input-format"),
+    action = "store",
+    default = "seurat",
+    type = 'character',
+    help = "Either loom, seurat, anndata or singlecellexperiment for the input format to read."
+  ),
+  make_option(
+    c("--output-format"),
+    action = "store",
+    default = "seurat",
+    type = 'character',
+    help = "Either loom, seurat, anndata or singlecellexperiment for the output format."
+  ),
+  make_option(
+    c("-e", "--genes-use"),
+    action = "store",
+    default = NULL,
+    type = 'character',
+    help = "File with gene names to scale/center (one gene per line). Default is all genes in object@data."
+  ),
+  make_option(
+    c("-v", "--vars-to-regress"),
+    action = "store",
+    default = NULL,
+    type = 'character',
+    help = "Comma-separated list of variables to regress out (previously latent.vars in RegressOut). For example, nUMI, or percent.mito."
+  ),
+  make_option(
+    c("-m", "--model-use"),
+    action = "store",
+    default = 'linear',
+    type = 'character',
+    help = "Use a linear model or generalized linear model (poisson, negative binomial) for the regression. Options are 'linear' (default), 'poisson', and 'negbinom'."
+  ),
+  make_option(
+    c("-u", "--use-umi"),
+    action = "store",
+    default = FALSE,
+    type = 'logical',
+    help = "Regress on UMI count data. Default is FALSE for linear modeling, but automatically set to TRUE if model.use is 'negbinom' or 'poisson'."
+  ),
+  make_option(
+    c("-s", "--do-not-scale"),
+    action = "store_true",
+    default = FALSE,
+    type = 'logical',
+    help = "Skip the data scale."
+  ),
+  make_option(
+    c("-c", "--do-not-center"),
+    action = "store_true",
+    default = FALSE,
+    type = 'logical',
+    help = "Skip data centering."
+  ),  
+  make_option(
+    c("-x", "--scale-max"),
+    action = "store",
+    default = 10,
+    type = 'double',
+    help = "Max value to return for scaled data. The default is 10. Setting this can help reduce the effects of genes that are only expressed in a very small number of cells. If regressing out latent variables and using a non-linear model, the default is 50."
+  ),
+  make_option(
+    c("-b", "--block-size"),
+    action = "store",
+    default = 1000,
+    type = 'integer',
+    help = "Default size for number of genes to scale at in a single computation. Increasing block.size may speed up calculations but at an additional memory cost."
+  ),
+  make_option(
+    c("-d", "--min-cells-to-block"),
+    action = "store",
+    default = 1000,
+    type = 'integer',
+    help = "If object contains fewer than this number of cells, don't block for scaling calculations."
+  ),
+  make_option(
+    c("-n", "--check-for-norm"),
+    action = "store",
+    default = TRUE,
+    type = 'logical',
+    help = "Check to see if data has been normalized, if not, output a warning (TRUE by default)."
+  ),
+  make_option(
+    c("-o", "--output-object-file"),
+    action = "store",
+    default = NA,
+    type = 'character',
+    help = "File name in which to store serialized R object of type 'Seurat'.'"
+  )
+)
+
+opt <- wsc_parse_args(option_list, mandatory = c('input_object_file', 'output_object_file'))
+
+# Check parameter values
+
+if ( ! file.exists(opt$input_object_file)){
+  stop((paste('File', opt$input_object_file, 'does not exist')))
+}
+
+if (! is.null(opt$genes_use)){
+  if (! file.exists(opt$genes_use)){
+    stop((paste('Supplied genes file', opt$genes_use, 'does not exist')))
+  }else{
+    genes_use <- readLines(opt$genes_use)
+  }
+}else{
+  genes_use <- NULL
+}
+
+# break up opt$vars_to_regress into a list if it has commas
+opt$vars_to_regress <- unlist(strsplit(opt$vars_to_regress, ","))
+
+# Now we're hapy with the arguments, load Seurat and do the work
+
+suppressPackageStartupMessages(require(Seurat))
+if(opt$input_format == "loom" | opt$output_format == "loom") {
+  suppressPackageStartupMessages(require(SeuratDisk))
+} else if(opt$input_format == "singlecellexperiment" | opt$output_format == "singlecellexperiment") {
+  suppressPackageStartupMessages(require(scater))
+}
+
+# Input from serialized R object
+
+seurat_object <- read_seurat4_object(input_path = opt$input_object_file, format = opt$input_format)
+# https://stackoverflow.com/questions/9129673/passing-list-of-named-parameters-to-function
+# might be useful
+scaled_seurat_object <- ScaleData(seurat_object, 
+                                  features = genes_use, 
+                                  vars.to.regress = opt$vars_to_regress, 
+                                  model.use = opt$model_use, 
+                                  use.umi = opt$use_umi, 
+                                  do.scale = !opt$do_not_scale, 
+                                  do.center = !opt$do_not_center, 
+                                  scale.max = opt$scale_max, 
+                                  block.size = opt$block_size, 
+                                  min.cells.to.block = opt$min_cells_to_block, 
+                                  verbose = FALSE)
+
+
+# Output to a serialized R object
+write_seurat4_object(seurat_object = scaled_seurat_object, 
+                     output_path = opt$output_object_file,
+                     format = opt$output_format)
b
diff -r 000000000000 -r 95d79f1134f0 seurat_macros.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/seurat_macros.xml Sat Mar 02 10:40:08 2024 +0000
[
b'@@ -0,0 +1,354 @@\n+<?xml version="1.0"?>\n+<macros>\n+    <token name="@VERSION@">4.0.0</token>\n+    <token name="@SEURAT_VERSION@">4.0.4</token>\n+    <xml name="requirements">\n+        <requirements>\n+            <requirement type="package" version="@VERSION@">seurat-scripts</requirement>\n+        </requirements>\n+    </xml>\n+    <xml name="version">\n+    \t<version_command><![CDATA[\n+echo $(R --version | grep version | grep -v GNU)", seurat version" $(R --vanilla --slave -e "library(seurat); cat(sessionInfo()\\$otherPkgs\\$seurat\\$Version)" 2> /dev/null | grep -v -i "WARNING: ")\n+    ]]></version_command>\n+    </xml>\n+\n+   <xml name="input_object_params" token_multiple="False" token_varname="input" token_optional="False">\n+     <conditional name="@VARNAME@" label="Input format">\n+       <param type="select" name="format" label="Choose the format of the @VARNAME@" help="Seurat RDS, Seurat H5, Single Cell Experiment RDS, Loom or AnnData">\n+         <option value="rds_seurat" selected="true">RDS with a Seurat object</option>\n+         <option value="loom">Loom</option>\n+         <option value="h5seurat">Seurat HDF5</option>\n+         <option value="anndata">AnnData</option>\n+         <option value="rds_sce">RDS with a Single Cell Experiment object</option>\n+       </param>\n+       <when value="anndata">\n+         <param type="data" name="anndata_file" multiple="@MULTIPLE@" optional="@OPTIONAL@" label="AnnData file" help="Select AnnData files for @VARNAME@" format="h5,h5ad"/>\n+       </when>\n+       <when value="loom">\n+         <param type="data" name="loom_file" multiple="@MULTIPLE@" optional="@OPTIONAL@" label="Loom file" help="Select Loom file(s) for @VARNAME@" format="h5,h5loom"/>\n+       </when>\n+       <when value="rds_seurat">\n+         <param type="data" name="rds_seurat_file" multiple="@MULTIPLE@" optional="@OPTIONAL@" label="RDS file" help="Select RDS file(s) with Seurat object for @VARNAME@" format="rdata"/>\n+       </when>\n+       <when value="rds_sce">\n+         <param type="data" name="rds_sce_file" multiple="@MULTIPLE@" optional="@OPTIONAL@" label="RDS file" help="Select RDS file(s) with Single Cell Experiment object for @VARNAME@" format="rdata"/>\n+       </when>\n+       <when value="h5seurat">\n+         <param type="data" name="h5seurat_file" multiple="@MULTIPLE@" optional="@OPTIONAL@" label="Seurat HDF5" help="Select Seurat HDF5 file(s) for @VARNAME" format="h5"/>\n+       </when>\n+     </conditional>\n+   </xml>\n+\n+   <token name="@INPUT_OBJ_PREAMBLE@">\n+     #if $input.format == \'loom\'\n+     ln -s \'$input.loom_file\' input.loom;\n+     #else if $input.format == \'h5seurat\'\n+     ln -s \'$input.h5seurat_file\' input.h5seurat;\n+     #else if $input.format == \'anndata\'\n+     ## it complains when using links for AnnData...\n+     cp \'$input.anndata_file\' input.h5ad;\n+     #end if\n+   </token>\n+\n+   <token name="@INPUT_OBJECT@">\n+    #if $input.format == "anndata"\n+        --input-object-file input.h5ad --input-format anndata\n+    #else if $input.format == "loom"\n+        --input-object-file input.loom --input-format loom\n+    #else if $input.format == "rds_seurat"\n+        --input-object-file \'$input.rds_seurat_file\' --input-format seurat\n+    #else if $input.format == "rds_sce"\n+        --input-object-file \'$input.rds_sce_file\' --input-format singlecellexperiment\n+    #else if $input.format == "h5seurat"\n+        --input-object-file input.h5seurat --input-format h5seurat\n+    #end if\n+   </token>\n+\n+   <token name="@QUERY_OBJ_PREAMBLE@">\n+     #if $query.format == \'loom\'\n+     ln -s \'$query.loom_file\' query.loom;\n+     #else if $query.format == \'h5seurat\'\n+     ln -s \'$query.h5seurat_file\' query.h5seurat;\n+     #else if $query.format == \'anndata\'\n+     ## it complains when using links for AnnData...\n+     cp \'$query.anndata_file\' query.h5ad;\n+     #end if\n+   </token>\n+\n+   <token name="@QUERY_OBJECT@">\n+    #if $query.format == "anndata"\n+        --query-object-file query.h5ad --query-format anndata\n+    #else if $query.f'..b'e="@OUTPUT_OBJECT@">\n+    #if $format == "anndata"\n+        --output-object-file \'$anndata_file\' --output-format anndata\n+    #else if $format == "loom"\n+        --output-object-file seurat_obj.loom --output-format loom\n+    #else if $format == "rds_seurat"\n+        --output-object-file \'$rds_seurat_file\' --output-format seurat\n+    #else if $format == "rds_sce"\n+        --output-object-file \'$rds_sce_file\' --output-format singlecellexperiment\n+    #end if\n+   </token>\n+\n+   <xml name="plot_output_files_format" token_format="png">\n+     <data label="Seurat ${plot_type.plot_type_selector} on ${on_string}: @FORMAT@ plot" name="plot_out_@FORMAT@" format=\'@FORMAT@\' >\n+       <filter>plot_format == \'@FORMAT@\'</filter>\n+     </data>\n+   </xml>\n+\n+   <token name="@OUTPUT_PLOT@">\n+    #if $plot_format == "png"\n+        --plot-out \'$plot_out_png\'\n+    #else if $plot_format == "pdf"\n+        --plot-out \'$plot_out_pdf\'\n+    #else if $plot_format == "eps"\n+        --plot-out \'$plot_out_eps\'\n+    #else if $plot_format == "ps"\n+        --plot-out \'$plot_out_ps\'\n+    #else if $plot_format == "jpg"\n+        --plot-out \'$plot_out_jpg\'\n+    #else if $plot_format == "tiff"\n+        --plot-out \'$plot_out_tiff\'\n+    #else if $plot_format == "svg"\n+        --plot-out \'$plot_out_svg\'\n+    #end if\n+   </token>\n+\n+    <xml name="genes-use-input">\n+      <param name="genes_use" argument="--genes-use" optional="true" type="data" format="tsv,txt,tabular" label="Genes to use" help="A file with gene names to use in construction of SNN graph if building directly based on expression data rather than a dimensionally reduced representation (i.e. PCs)."/>\n+    </xml>\n+    <xml name="dims-use-input">\n+      <param name="dims_use" argument="--dims-use" min="1" optional="true" type="integer" label="PCA Dimensions to use" help="Number of PCs (dimensions) to use in construction of the SNN graph."/>\n+    </xml>\n+\n+    <token name="@SEURAT_INTRO@"><![CDATA[\n+Seurat_ is a toolkit for quality control, analysis, and exploration of single cell RNA sequencing data.\n+It is developed and maintained by the `Satija Lab`_ at NYGC. Seurat aims to enable users to identify and\n+interpret sources of heterogeneity from single cell transcriptomic measurements, and to integrate diverse\n+types of single cell data.\n+      ]]></token>\n+\n+    <token name="@VERSION_HISTORY@"><![CDATA[\n+**Version history**\n+4.0.0: Moves to Seurat 4.0.0, introducing a number of methods for merging datasets, plus the whole suite of Seurat plots. Pablo Moreno with funding from AstraZeneca.\n+\n+3.2.3+galaxy0: Moves to Seurat 3.2.3 and introduce convert method, improving format interconversion support.\n+\n+3.1.2_0.0.8: Update metadata parsing\n+\n+3.1.1_0.0.7: Exposes perplexity and enables tab input.\n+\n+3.1.1_0.0.6+galaxy0: Moved to Seurat 3.\n+\n+  Find clusters: removed dims-use, k-param, prune-snn.\n+\n+2.3.1+galaxy0: Improved documentation and further exposition of all script\'s options. Pablo Moreno, Jonathan Manning and Ni Huang, Expression Atlas team https://www.ebi.ac.uk/gxa/home  at\n+EMBL-EBI https://www.ebi.ac.uk/. Parts obtained from wrappers from Christophe Antoniewski (GitHub drosofff) and Lea Bellenger (GitHub bellenger-l).\n+\n+0.0.1: Initial contribution. Maria Doyle (GitHub mblue9).\n+      ]]></token>\n+\n+\n+    <xml name="citations">\n+        <citations>\n+            <citation type="doi">10.1038/s41592-021-01102-w</citation>\n+            <citation type="doi">10.1038/nbt.4096</citation>\n+            <citation type="bibtex">\n+              @misc{r-seurat-scripts.git,\n+              author = {Jonathan Manning, Pablo Moreno, EBI Gene Expression Team},\n+              year = {2018},\n+              title = {Seurat-scripts: command line interface for Seurat},\n+              publisher = {GitHub},\n+              journal = {GitHub repository},\n+              url = {https://github.com/ebi-gene-expression-group/r-seurat-scripts.git},\n+            }\n+            </citation>\n+        </citations>\n+    </xml>\n+</macros>\n'
b
diff -r 000000000000 -r 95d79f1134f0 seurat_plot.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/seurat_plot.xml Sat Mar 02 10:40:08 2024 +0000
[
b'@@ -0,0 +1,726 @@\n+<tool id="seurat_plot" name="Plot" profile="18.01" version="@SEURAT_VERSION@+galaxy0">\n+    <description>with Seurat</description>\n+    <macros>\n+        <import>seurat_macros.xml</import>\n+    </macros>\n+    <expand macro="requirements" />\n+    <expand macro="version" />\n+    <command detect_errors="exit_code"><![CDATA[\n+    @INPUT_OBJ_PREAMBLE@\n+    seurat-plot.R\n+    @INPUT_OBJECT@\n+    @OUTPUT_PLOT@\n+    --plot-type \'$plot_type.plot_type_selector\'\n+\n+\n+    #if str($plot_type.plot_type_selector) == \'DimPlot\':\n+\n+    #if $plot_type.dims\n+    --dims \'$plot_type.dims\'\n+    #end if\n+\n+\n+    #if $plot_type.cells\n+    --cells \'$plot_type.cells\'\n+    #end if\n+\n+\n+    #if $plot_type.cols\n+    --cols \'$plot_type.cols\'\n+    #end if\n+\n+\n+    #if $plot_type.pt_size\n+    --pt-size \'$plot_type.pt_size\'\n+    #end if\n+\n+\n+    #if $plot_type.reduction\n+    --reduction \'$plot_type.reduction\'\n+    #end if\n+\n+\n+    #if $plot_type.group_by\n+    --group-by \'$plot_type.group_by\'\n+    #end if\n+\n+\n+    #if $plot_type.split_by\n+    --split-by \'$plot_type.split_by\'\n+    #end if\n+\n+\n+    #if $plot_type.shape_by\n+    --shape-by \'$plot_type.shape_by\'\n+    #end if\n+\n+\n+    #if $plot_type.order\n+    --order \'$plot_type.order\'\n+    #end if\n+\n+        $plot_type.shuffle\n+\n+\n+    --seed \'$plot_type.seed\'\n+\n+        $plot_type.label\n+\n+\n+    --label-size \'$plot_type.label_size\'\n+\n+\n+    --label-color \'$plot_type.label_color\'\n+\n+        $plot_type.label_box\n+\n+        $plot_type.repel\n+\n+\n+    #if $plot_type.cells_highlight\n+    --cells-highlight \'$plot_type.cells_highlight\'\n+    #end if\n+\n+\n+    #if $plot_type.cols_highlight\n+    --cols-highlight \'$plot_type.cols_highlight\'\n+    #end if\n+\n+\n+    #if $plot_type.sizes_highlight\n+    --sizes-highlight \'$plot_type.sizes_highlight\'\n+    #end if\n+\n+\n+    #if $plot_type.na_value\n+    --na-value \'$plot_type.na_value\'\n+    #end if\n+\n+\n+    #if $plot_type.ncol\n+    --ncol \'$plot_type.ncol\'\n+    #end if\n+\n+    #elif str($plot_type.plot_type_selector) == \'DoHeatmap\':\n+\n+    #if $plot_type.features\n+    --features \'$plot_type.features\'\n+    #end if\n+\n+\n+    #if $plot_type.cells\n+    --cells \'$plot_type.cells\'\n+    #end if\n+\n+\n+    #if $plot_type.group_by\n+    --group-by \'$plot_type.group_by\'\n+    #end if\n+\n+        $plot_type.group_bar\n+\n+\n+    #if $plot_type.group_colors\n+    --group-colors \'$plot_type.group_colors\'\n+    #end if\n+\n+\n+    #if $plot_type.disp_min\n+    --disp-min \'$plot_type.disp_min\'\n+    #end if\n+\n+\n+    #if $plot_type.disp_max\n+    --disp-max \'$plot_type.disp_max\'\n+    #end if\n+\n+\n+    --slot \'$plot_type.slot\'\n+\n+\n+    #if $plot_type.assay\n+    --assay \'$plot_type.assay\'\n+    #end if\n+\n+        $plot_type.label\n+\n+\n+    #if $plot_type.size\n+    --size \'$plot_type.size\'\n+    #end if\n+\n+\n+    #if $plot_type.hjust\n+    --hjust \'$plot_type.hjust\'\n+    #end if\n+\n+\n+    #if $plot_type.angle\n+    --angle \'$plot_type.angle\'\n+    #end if\n+\n+        $plot_type.raster\n+\n+        $plot_type.draw_lines\n+\n+\n+    #if $plot_type.lines_width\n+    --lines-width \'$plot_type.lines_width\'\n+    #end if\n+\n+\n+    #if $plot_type.group_bar_height\n+    --group-bar-height \'$plot_type.group_bar_height\'\n+    #end if\n+\n+        $plot_type.combine\n+\n+    #elif str($plot_type.plot_type_selector) == \'RidgePlot\':\n+\n+    --features \'$plot_type.features\'\n+\n+\n+    #if $plot_type.cols_ridgeplot\n+    --cols-ridgeplot \'$plot_type.cols_ridgeplot\'\n+    #end if\n+\n+\n+    #if $plot_type.idents\n+    --idents \'$plot_type.idents\'\n+    #end if\n+\n+        $plot_type.sort\n+\n+\n+    #if $plot_type.assay\n+    --assay \'$plot_type.assay\'\n+    #end if\n+\n+\n+    #if $plot_type.group_by\n+    --group-by \'$plot_type.group_by\'\n+    #end if\n+\n+        $plot_type.same_y_lims\n+\n+        $plot_type.log\n+\n+\n+    #if $plot_type.ncol\n+    --ncol \'$plot_type.ncol\'\n+    #end if\n+\n+\n+    #if $plot_type.slot\n+    --slot \'$plot_type.slot\'\n+    #end if\n+\n+        $plot_type.stack\n+\n+\n+    #if $plot_type.fill_by\n+    --fill-by \'$plot_type.fill_by\'\n+    #end if\n'..b'he plot.background fill value from the plot theme."/>\n+        <param label="Enable_output_rds_file" optional=\'true\' value=\'false\' name="enable_output_rds_file" argument="--enable_output_rds_file" type="boolean"  truevalue=\'--enable_output_rds_file\' falsevalue=\'\' checked=\'false\' help="Enable output output_rds_file"/>\n+\n+    </inputs>\n+    <outputs>\n+        <expand macro="plot_output_files_format" format="png"  />\n+        <expand macro="plot_output_files_format" format="pdf"  />\n+        <expand macro="plot_output_files_format" format="eps"  />\n+        <expand macro="plot_output_files_format" format="jpg"  />\n+        <expand macro="plot_output_files_format" format="ps"  />\n+        <expand macro="plot_output_files_format" format="tiff"  />\n+        <expand macro="plot_output_files_format" format="svg"  />\n+\n+        <data label="${tool.name} on ${on_string}: Output-rds-file" name="output_rds_file" format=\'?\'>\n+        <filter>enable_output_rds_file</filter>\n+    </data>\n+    </outputs>\n+    <tests>\n+      <!-- MANUAL TESTS -->\n+      <test>\n+        <param name="rds_seurat_file" ftype="rdata" value="UMAP_result_integrated.rds"/>\n+        <param name="plot_type_selector" value="FeaturePlot"/>\n+        <param name="features" value="GPC5-AS1,MAFB,FAP,PPY"/>\n+        <output name="plot_out_png" ftype="png" >\n+          <assert_contents>\n+            <has_size value="195414" delta="32000"/>\n+          </assert_contents>\n+        </output>\n+      </test>\n+      <test>\n+        <param name="rds_seurat_file" ftype="rdata" value="UMAP_result_integrated.rds"/>\n+        <param name="plot_type_selector" value="VlnPlot"/>\n+        <param name="features" value="GPC5-AS1,MAFB,FAP,PPY"/>\n+        <param name="plot_format" value="pdf"/>\n+        <output name="plot_out_pdf" ftype="pdf" >\n+          <assert_contents>\n+            <has_size value="1239200" delta="123000"/>\n+          </assert_contents>\n+        </output>\n+      </test>\n+      <test>\n+        <param name="rds_seurat_file" ftype="rdata" value="UMAP_result_integrated.rds"/>\n+        <param name="plot_type_selector" value="RidgePlot"/>\n+        <param name="features" value="GPC5-AS1,MAFB,FAP,PPY"/>\n+        <param name="plot_format" value="eps"/>\n+        <output name="plot_out_eps" ftype="eps" >\n+          <assert_contents>\n+            <has_size value="84892" delta="8400"/>\n+          </assert_contents>\n+        </output>\n+      </test>\n+      <test>\n+        <param name="rds_seurat_file" ftype="rdata" value="UMAP_result_integrated.rds"/>\n+        <param name="plot_type_selector" value="DotPlot"/>\n+        <param name="features" value="GPC5-AS1,MAFB,FAP,PPY"/>\n+        <param name="plot_format" value="ps"/>\n+        <output name="plot_out_ps" ftype="ps" >\n+          <assert_contents>\n+            <has_size value="16615" delta="1600"/>\n+          </assert_contents>\n+        </output>\n+      </test>\n+      <test>\n+        <param name="rds_seurat_file" ftype="rdata" value="UMAP_result_integrated.rds"/>\n+        <param name="plot_type_selector" value="DoHeatmap"/>\n+        <param name="features" value="GPC5-AS1,MAFB,FAP,PPY"/>\n+        <output name="plot_out_png" ftype="png" >\n+          <assert_contents>\n+            <has_size value="83227" delta="8600"/>\n+          </assert_contents>\n+        </output>\n+      </test>\n+      <!-- END MANUAL TESTS -->\n+    </tests>\n+<help>\n+<!-- MANUAL HELP -->\n+<![CDATA[\n+.. class:: infomark\n+\n+**What it does**\n+\n+@SEURAT_INTRO@\n+\n+This tool produces the different plots available on Seurat.\n+\n+-----\n+\n+**Inputs**\n+\n+* Seurat object or compatible (can be specified in different formats)\n+* Plot type (can be specified in different formats)\n+* Potential compulsory options for each plot type\n+\n+All the rest of the parameters are optional.\n+\n+-----\n+\n+**Outputs**\n+\n+* A plot in the specified format\n+* Optionally, an RDS object with the ggplo2 plot.\n+\n+@VERSION_HISTORY@\n+\n+]]>\n+<!-- END MANUAL HELP -->\n+</help>\n+    <expand macro="citations" />\n+</tool>\n'