diff seurat.xml @ 15:fab6ff46e019 draft default tip

planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/seurat commit b437a46efb50e543b6d7c9988f954efe2caa9046
author iuc
date Fri, 07 Jul 2023 01:43:02 +0000
parents c0fd285eb553
children
line wrap: on
line diff
--- a/seurat.xml	Mon Nov 21 14:35:28 2022 +0000
+++ b/seurat.xml	Fri Jul 07 01:43:02 2023 +0000
@@ -1,119 +1,322 @@
-<tool id="seurat" name="Seurat" version="@TOOL_VERSION@+galaxy0">
+<tool id="seurat" name="Seurat" version="@TOOL_VERSION@+galaxy1">
     <description>- toolkit for exploration of single-cell RNA-seq data</description>
     <macros>
-        <token name="@TOOL_VERSION@">4.3.0</token>
+        <import>macros.xml</import>
     </macros>
-    <requirements>
-        <requirement type="package" version="@TOOL_VERSION@">r-seurat</requirement>
-        <requirement type="package" version="2.18">r-rmarkdown</requirement>
-    </requirements>
+    <expand macro="requirements"/>
     <command detect_errors="exit_code"><![CDATA[
-#if "vln" in $meta.plots:
-    #set $vln = 'T'
-#else
-    #set $vln = 'F'
-#end if
-#if "feat" in $meta.plots:
-    #set $feat = 'T'
-#else
-    #set $feat = 'F'
-#end if
-#if "PCs" in $meta.plots:
-    #set $PCs = 'T'
-#else
-    #set $PCs = 'F'
-#end if
-#if "tsne" in $meta.plots:
-    #set $tsne = 'T'
-#else
-    #set $tsne = 'F'
-#end if
-#if "heat" in $meta.plots:
-    #set $heatmaps = 'T'
-#else
-    #set $heatmaps = 'F'
-#end if
-#if not str($adv.perplexity):
-    #set $adv_perplexity = -1
-#else:
-    #set $adv_perplexity = $adv.perplexity
-#end if
-Rscript -e "library(\"rmarkdown\"); render(\"$__tool_directory__/Seurat.R\",
-    params = list(counts = \"${counts}\",
-        min_cells = \"${adv.min_cells}\",
-        min_genes = \"${adv.min_genes}\",
-        low_thresholds = \"${adv.low_thresholds}\",
-        high_thresholds = \"${adv.high_thresholds}\",
-        numPCs = \"${adv.num_PCs}\",
-        cells_use = \"${adv.cells_use}\",
-        resolution = \"${adv.resolution}\",
-        perplexity = \"${adv_perplexity}\",
-        min_pct = \"${adv.min_pct}\",
-        logfc_threshold = \"${adv.logfc_threshold}\",
+    #if $function.function_select == "base": 
+        Rscript -e "library(\"rmarkdown\"); render(\"$__tool_directory__/Seurat.R\",
+        params = list(counts = \"${function.input}\",
+        min_cells = \"${function.min_cells}\",
+        min_genes = \"${function.min_genes}\",
+        low_thresholds = \"${function.low_thresholds}\",
+        high_thresholds = \"${function.high_thresholds}\",
+        vlnfeat = \"${function.vlnfeat}\",
+        norm_out = \"${function.norm_file}\",
+        #if $function.variable_continue.variable_continue == "yes":
+            featplot = \"${function.variable_continue.featplot}\",
+            variable_out = \"${function.variable_continue.var_file}\",
+            #if $function.variable_continue.pca_continue.pca_continue == "yes":
+                numPCs = \"${function.variable_continue.pca_continue.num_PCs}\",
+                PCplots = \"${function.variable_continue.pca_continue.pc_plots}\",
+                pca_out = \"${function.variable_continue.pca_continue.pca_file}\",
+                #if $function.variable_continue.pca_continue.clusters_continue.clusters_continue == "yes":
+                    perplexity = \"${function.variable_continue.pca_continue.clusters_continue.perplexity}\",
+                    resolution = \"${function.variable_continue.pca_continue.clusters_continue.resolution}\",
+                    nmds = \"${function.variable_continue.pca_continue.clusters_continue.nmds}\",
+                    clusters_out = \"${function.variable_continue.pca_continue.clusters_continue.clusters_file}\",
+                    #if $function.variable_continue.pca_continue.clusters_continue.markers_continue.markers_continue == "yes":
+                        min_pct = \"${function.variable_continue.pca_continue.clusters_continue.markers_continue.min_pct}\",
+                        logfc_threshold = \"${function.variable_continue.pca_continue.clusters_continue.markers_continue.logfc_threshold}\",
+                        heatmaps = \"${function.variable_continue.pca_continue.clusters_continue.markers_continue.heatmaps}\",
+                        markers_out = \"${function.variable_continue.pca_continue.clusters_continue.markers_continue.markers_file}\",
+                        end_step="\"5"\",
+                    #else:
+                        end_step="\"4"\",
+                    #end if
+                #else:
+                    end_step="\"3"\",
+                #end if
+            #else:
+                end_step="\"2"\",
+            #end if
+        #else:
+            end_step="\"1"\",
+        #end if
+        varstate = \"${meta.varstate}\",
         warn = \"${meta.warn}\",
+        showcode = \"${meta.showcode}\"),
+        intermediates_dir = \".\",
+        output_format = html_document(),
+        output_dir = \".\",
+        output_file = \"out.html\")"
+    #else:
+        Rscript -e "library(\"rmarkdown\"); render(\"$__tool_directory__/citeseq_Seurat.R\",
+        params = list(rna = \"${function.rna}\",
+        prot = \"${function.prot}\",
+        cite_markers = \"${function.cite_markers}\",
+
+
+        #if $function.comparison.comparison == "yes"
+            comparison="\"T"\",
+            feat_comp=\"${function.comparison.feat_comp}\",
+        #else:
+            comparison="\"F"\",
+            feat_comp="\""\",
+        #end if
+        #if $function.marker_compare.marker_compare == "yes"
+            marker_compare="\"T"\",
+            top_x=\"${function.marker_compare.top_x}\",
+        #else:
+            marker_compare="\"F"\",
+            top_x="\""\",
+        #end if
+        min_cells = \"${function.min_cells}\",
+        min_genes = \"${function.min_genes}\",
+        low_thresholds = \"${function.low_thresholds}\",
+        high_thresholds = \"${function.high_thresholds}\",
+        vlnfeat = \"${function.vlnfeat}\",
+        norm_out = \"${function.norm_file}\",
+        featplot = \"${function.featplot}\",
+        variable_out = \"${function.var_file}\",
+        numPCs = \"${function.num_PCs}\",
+        PCplots = \"${function.pc_plots}\",
+        pca_out = \"${function.pca_file}\",
+        perplexity = \"${function.perplexity}\",
+        resolution = \"${function.resolution}\",
+        nmds = \"${function.nmds}\",
+        clusters_out = \"${function.clusters_file}\",
+        min_pct = \"${function.min_pct}\",
+        logfc_threshold = \"${function.logfc_threshold}\",
+        heatmaps = \"${function.heatmaps}\",
+        markers_out = \"${function.markers_file}\",
         varstate = \"${meta.varstate}\",
-        showcode = \"${meta.showcode}\",
-        vlnfeat = \"$vln\",
-        featplot = \"$feat\",
-        PCplots = \"$PCs\",
-        tsne = \"$tsne\",
-        heatmaps = \"$heatmaps\"),
-    intermediates_dir = \".\",
-    output_format = html_document(),
-    output_dir = \".\",
-    output_file = \"out.html\")"
+        warn = \"${meta.warn}\",
+        showcode = \"${meta.showcode}\"),
+        intermediates_dir = \".\",
+        output_format = html_document(),
+        output_dir = \".\",
+        output_file = \"out.html\")"
+    #end if
     ]]></command>
     <inputs>
-        <param name="counts" type="data" format="tabular,tsv" label="Counts file" help="The should be a TAB-separated count matrix with gene identifers in the first column and a header row"/>
-        <section name="adv" title="Advanced Options" 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="min_cells" type="integer" min="0" value="0" label="Minimum cells" help="Include genes with detected expression in at least this many cells" />
-            <param name="min_genes" type="integer" min="0"  value="0" label="Minimum genes" help="Include cells where at least this many genes are detected" />
-            <param name="low_thresholds" type="integer" value="1" label="Low threshold for filtering cells" />
-            <param name="high_thresholds" type="integer" value="20000000" label="High threshold for filtering cells" />
-            <param name="cells_use" type="integer" min="1" value="500" label="Cells to use for PCHeatmap" help="Plots this number of top ‘extreme’ cells on both ends of the spectrum, which dramatically speeds plotting for large datasets" />
-            <param name="resolution" type="float" value="0.6" 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="perplexity" type="integer" value="" optional="true" label="Perplexity parameter" help="Parameter for the tSNE dimensionality reduction" />
-            <param name="min_pct" type="float" value="0.1" 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" />
-        </section>
+        <conditional name="function">
+            <param name="function_select" type="select" label="Which Seurat method should be run?">
+                <option value="base">Base</option>
+                <option value="cite">Cite-seq</option>
+            </param>
+            <when value="base">
+                <param name="input" type="data" format="tabular,tsv" label="Counts file" help="The should be a TAB-separated count matrix with gene identifers in the first column and a header row"/>
+                <param name="min_cells" type="integer" min="0" value="0" label="Minimum cells" help="Include genes with detected expression in at least this many cells" />
+                <param name="min_genes" type="integer" min="0"  value="0" label="Minimum genes" help="Include cells where at least this many genes are detected"/>
+                <expand macro="norm"/>
+                <conditional name="variable_continue">
+                    <param name="variable_continue" type="select" label="Continue workflow after Normalization step?">
+                        <option value="yes">Yes</option>
+                        <option value="no" selected="true">No</option>
+                    </param>
+                    <when value="yes">
+                        <expand macro="variable"/>
+                        <conditional name="pca_continue">
+                            <param name="pca_continue" type="select" label="Continue workflow after scaling step?">
+                                <option value="yes">Yes</option>
+                                <option value="no" selected="true">No</option>
+                            </param>
+                            <when value="yes">
+                                <expand macro="pca"/>
+                                <conditional name="clusters_continue">
+                                    <param name="clusters_continue" type="select" label="Continue workflow after PCA step?">
+                                        <option value="yes">Yes</option>
+                                        <option value="no" selected="true">No</option>
+                                    </param>
+                                    <when value="yes">
+                                        <expand macro="clusters"/>
+                                        <conditional name="markers_continue">
+                                            <param name="markers_continue" type="select" label="Continue workflow after TSNE and UMAP step?">
+                                                <option value="yes">Yes</option>
+                                                <option value="no" selected="true">No</option>
+                                            </param>
+                                            <when value="yes">
+                                                <expand macro="markers"/>
+                                            </when>
+                                            <when value="no"/>
+                                        </conditional>
+                                    </when>
+                                    <when value="no"/>
+                                </conditional>
+                            </when>
+                            <when value="no"/>
+                        </conditional>
+                    </when>
+                    <when value="no"/>
+                </conditional>
+            </when>
+            <when value="cite">
+                <param name="rna" type="data" format="tabular,tsv" label="RNA counts file" help="The should be a TAB-separated count matrix with gene identifers in the first column and a header row"/>
+                <param name="prot" type="data" format="tabular,tsv" label="Protein counts file" help="The should be a TAB-separated count matrix with gene identifers in the first column and a header row"/>
+                <param name="min_cells" type="integer" min="0" value="0" label="Minimum cells" help="Include genes with detected expression in at least this many cells" />
+                <param name="min_genes" type="integer" min="0"  value="0" label="Minimum genes" help="Include cells where at least this many genes are detected"/>
+                <expand macro="norm"/>
+                <expand macro="variable"/>
+                <expand macro="pca"/>
+                <expand macro="clusters"/>
+                <expand macro="markers"/>
+                <expand macro="cite-seq"/>
+            </when>
+        </conditional>
         <section name="meta" title="Output options" expanded="true">
             <param name="showcode" type="boolean" truevalue="T" falsevalue="F" checked="false" label="Show code alongside outputs?"/>
             <param name="warn" type="boolean" truevalue="T" falsevalue="F" checked="false" label="Include warnings in the output file (Yes) or pipe to stdout (No)"/>
             <param name="varstate" type="boolean" truevalue="T" falsevalue="F" checked="false" label="Display variable values used in code at the beginning of output file?"/>
-            <param name="plots" type="select" optional="true" multiple="true" display="checkboxes" label="Which plots should be output?">
-                <option value="vln" selected="true">Violin and Scatter plots</option>
-                <option value="feat" selected="true">Feature counts plots</option>
-                <option value="PCs" selected="true">PC plots</option>
-                <option value="tsne" selected="true">tSNE plots</option>
-                <option value="heat" selected="true">Heatmap plots</option>
-            </param>
         </section>
     </inputs>
     <outputs>
         <data name="out_html" format="html" from_work_dir="out.html" label="${tool.name} on ${on_string}" />
+        <data name="norm_out" format="rdata" from_work_dir="norm_out.rds" label="${tool.name} on ${on_string}: normalization intermediate output">
+            <filter>@FUNCTION_BASE@</filter>
+            <filter>function['norm_file']</filter>
+        </data>
+        <data name="var_out" format="rdata" from_work_dir="var_out.rds" label="${tool.name} on ${on_string}: normalization and scaling intermediate output">
+            <filter>@FUNCTION_BASE@</filter>
+            <filter>@VARIABLE_CONTINUE@</filter>
+            <filter>function['variable_continue']['var_file']</filter>
+        </data>
+        <data name="pca_out" format="rdata" from_work_dir="pca_out.rds" label="${tool.name} on ${on_string}: PCA embedding data">
+            <filter>@FUNCTION_BASE@</filter>
+            <filter>@VARIABLE_CONTINUE@</filter>
+            <filter>@PCA_CONTINUE@</filter>
+            <filter>function['variable_continue']['pca_continue']['pca_file']</filter>
+        </data>
+        <data name="cluters_out" format="rdata" from_work_dir="tsne_out.rds" label="${tool.name} on ${on_string}: TSNE embedding data">
+            <filter>@FUNCTION_BASE@</filter>
+            <filter>@VARIABLE_CONTINUE@</filter>
+            <filter>@PCA_CONTINUE@</filter>
+            <filter>@CLUSTERS_CONTINUE@</filter>
+            <filter>function['variable_continue']['pca_continue']['clusters_continue']['clusters_file']</filter>
+        </data>
+        <data name="umap_out" format="rdata" from_work_dir="umap_out.rds" label="${tool.name} on ${on_string}: UMAP embedding data">
+            <filter>@FUNCTION_BASE@</filter>
+            <filter>@VARIABLE_CONTINUE@</filter>
+            <filter>@PCA_CONTINUE@</filter>
+            <filter>@CLUSTERS_CONTINUE@</filter>
+            <filter>function['variable_continue']['pca_continue']['clusters_continue']['clusters_file']</filter>
+        </data>
+        <data name="markers_out" format="rdata" from_work_dir="markers_out.rds" label="${tool.name} on ${on_string}: Markers data">
+            <filter>@FUNCTION_BASE@</filter>
+            <filter>@VARIABLE_CONTINUE@</filter>
+            <filter>@PCA_CONTINUE@</filter>
+            <filter>@CLUSTERS_CONTINUE@</filter>
+            <filter>@MARKERS_CONTINUE@</filter>
+            <filter>function['variable_continue']['pca_continue']['clusters_continue']['markers_continue']['markers_file']</filter>
+        </data>
+        <data name="markers_tabular" format="tabular" from_work_dir="markers_out.tsv" label="${tool.name} on ${on_string}: Markers list">
+            <filter>@FUNCTION_BASE@</filter>
+            <filter>@VARIABLE_CONTINUE@</filter>
+            <filter>@PCA_CONTINUE@</filter>
+            <filter>@CLUSTERS_CONTINUE@</filter>
+            <filter>@MARKERS_CONTINUE@</filter>
+            <filter>function['variable_continue']['pca_continue']['clusters_continue']['markers_continue']['markers_file']</filter>
+            <actions>
+                <action name="column_names" type="metadata" default="\\,p_val,avg_log2FC,pct.1,pct.2,p_val_adj,cluster,gene" />
+                <action name="column_types" type="metadata" default="str,float,float,float,float,float,int,str" />
+            </actions>
+        </data>
+        <!-- cite-seq out -->
+        <data name="protmarkerst" format="tabular" from_work_dir="protein_out.tsv" label="${tool.name} cite-seq on ${on_string}: Protein markers">
+            <filter>@FUNCTION_CITE@</filter>
+            <filter>function['cite_markers']</filter>
+            <actions>
+                <action name="column_names" type="metadata" default="\\,p_val,avg_log2FC,pct.1,pct.2,p_val_adj,cluster,gene" />
+                <action name="column_types" type="metadata" default="str,float,float,float,float,float,int,str" />
+            </actions>
+        </data>
+        <data name="rnamarkerst" format="tabular" from_work_dir="rna_out.tsv" label="${tool.name} cite-seq on ${on_string}: RNA markers">
+            <filter>@FUNCTION_CITE@</filter>
+            <filter>function['cite_markers']</filter>
+            <actions>
+                <action name="column_names" type="metadata" default="\\,p_val,avg_log2FC,pct.1,pct.2,p_val_adj,cluster,gene" />
+                <action name="column_types" type="metadata" default="str,float,float,float,float,float,int,str" />
+            </actions>
+        </data>
+        <data name="cite_graps" format="pdf" from_work_dir="citeseq_out.pdf" label="${tool.name} cite-seq on ${on_string}: Citeseq graphs">
+            <filter>@FUNCTION_CITE@</filter>
+            <filter>function['marker_compare']['marker_compare'] == "yes"</filter>
+        </data>
+        <data name="norm_cite" format="rdata" from_work_dir="norm_out.rds" label="${tool.name} cite-seq on ${on_string}: normalization intermediate output">
+            <filter>@FUNCTION_CITE@</filter>
+            <filter>function['norm_file']</filter>
+        </data>
+        <data name="var_cite" format="rdata" from_work_dir="var_out.rds" label="${tool.name} cite-seq on ${on_string}: normalization and scaling intermediate output">
+            <filter>@FUNCTION_CITE@</filter>
+            <filter>function['var_file']</filter>
+        </data>
+        <data name="pca_cite" format="rdata" from_work_dir="pca_out.rds" label="${tool.name} cite-seq on ${on_string}: PCA embedding data">
+            <filter>@FUNCTION_CITE@</filter>
+            <filter>function['pca_file']</filter>
+        </data>
+        <data name="cluters_cite" format="rdata" from_work_dir="tsne_out.rds" label="${tool.name} cite-seq on ${on_string}: TSNE embedding data">
+            <filter>@FUNCTION_CITE@</filter>
+            <filter>function['clusters_file']</filter>
+        </data>
+        <data name="umap_cite" format="rdata" from_work_dir="umap_out.rds" label="${tool.name} cite-seq on ${on_string}: UMAP embedding data">
+            <filter>@FUNCTION_CITE@</filter>
+
+            <filter>function['clusters_file']</filter>
+        </data>
+        <data name="markers_cite" format="rdata" from_work_dir="markers_out.rds" label="${tool.name} cite-seq on ${on_string}: Markers data">
+            <filter>@FUNCTION_CITE@</filter>
+            <filter>function['markers_file']</filter>
+        </data>
+        <data name="markers_cite_tabular" format="tabular" from_work_dir="markers_out.tsv" label="${tool.name} cite-seq on ${on_string}: Markers list">
+            <filter>@FUNCTION_CITE@</filter>
+            <filter>function['markers_file']</filter>
+            <actions>
+                <action name="column_names" type="metadata" default="\\,p_val,avg_log2FC,pct.1,pct.2,p_val_adj,cluster,gene" />
+                <action name="column_types" type="metadata" default="str,float,float,float,float,float,int,str" />        
+            </actions>
+        </data>
     </outputs>
-
     <tests>
-        <test>
-            <param name="counts" ftype="tabular" value="counts.tab.gz"/>
-            <section name="adv">
-                <param name="numPCs" value="10" />
+        <test expect_num_outputs="8">
+            <conditional name="function">
+                <param name="function_select" value="base"/>
+                <param name="input" ftype="tabular" value="counts.tab.gz"/>
                 <param name="min_cells" value="3"/>
                 <param name="min_genes" value="200"/>
                 <param name="low_thresholds" value="1" />
                 <param name="high_thresholds" value="20000000" />
-                <param name="cells_use" value="500"/>
-                <param name="resolution" value="0.6" />
-                <param name="min_pct" value="0.25" />
-                <param name="logfc_threshold" value="0.25" />
-            </section>
+                <param name="vlnfeat" value="T"/>
+                <param name="norm_file" value="T"/>
+                <conditional name="variable_continue">
+                    <param name="variable_continue" value="yes"/>
+                    <param name="featplot" value="T"/>
+                    <param name="var_file" value="T"/>
+                    <conditional name="pca_continue">
+                        <param name="pca_continue" value="yes"/>
+                        <param name="numPCs" value="10" />
+                        <param name="pc_plots" value="T"/>
+                        <param name="pca_file" value="T"/>
+                        <conditional name="clusters_continue">
+                            <param name="clusters_continue" value="yes"/>
+                            <param name="resolution" value="0.6" />
+                            <param name="nmds" value="T"/>
+                            <param name="clusters_file" value="T"/>
+                            <conditional name="markers_continue">
+                                <param name="markers_continue" value="yes"/>
+                                <param name="min_pct" value="0.25" />
+                                <param name="logfc_threshold" value="0.25" />
+                                <param name="heatmaps" value="T"/>
+                                <param name="markers_file" value="T"/>
+                            </conditional>
+                        </conditional>
+                    </conditional>
+                </conditional>
+            </conditional>
             <section name="meta">
                 <param name="showcode" value="T"/>
                 <param name="warn" value="F"/>
                 <param name="varstate" value="F"/>
-                <param name="plots" value="feat"/>
             </section>
             <output name="out_html" ftype="html">
                 <assert_contents>
@@ -122,26 +325,49 @@
                     <has_text text="img src=&quot;data:image/png;base64" />
                 </assert_contents>
             </output>
+            <output name="markers_tabular" file="markers.tsv" compare="sim_size" delta="500"/>
         </test>
-        <test> <!-- perplexity test -->
-            <param name="counts" ftype="tabular" value="counts.tab.gz"/>
-            <section name="adv">
-                <param name="numPCs" value="10" />
+        <test expect_num_outputs="1">
+            <!-- test perplexity and output filters -->
+            <conditional name="function">
+                <param name="function_select" value="base"/>
+                <param name="input" ftype="tabular" value="counts.tab.gz"/>
                 <param name="min_cells" value="3"/>
                 <param name="min_genes" value="200"/>
                 <param name="low_thresholds" value="1" />
                 <param name="high_thresholds" value="20000000" />
-                <param name="cells_use" value="500"/>
-                <param name="resolution" value="0.6" />
-                <param name="perplexity" value="16" />
-                <param name="min_pct" value="0.25" />
-                <param name="logfc_threshold" value="0.25" />
-            </section>
+                <param name="vlnfeat" value="T"/>
+                <param name="norm_file" value="F"/>
+                <conditional name="variable_continue">
+                    <param name="variable_continue" value="yes"/>
+                    <param name="featplot" value="T"/>
+                    <param name="var_file" value="F"/>
+                    <conditional name="pca_continue">
+                        <param name="pca_continue" value="yes"/>
+                        <param name="numPCs" value="10" />
+                        <param name="pc_plots" value="T"/>
+                        <param name="pca_file" value="F"/>
+                        <conditional name="clusters_continue">
+                            <param name="clusters_continue" value="yes"/>
+                            <param name="perplexity" value="16"/>
+                            <param name="resolution" value="0.6" />
+                            <param name="nmds" value="T"/>
+                            <param name="clusters_file" value="F"/>
+                            <conditional name="markers_continue">
+                                <param name="markers_continue" value="yes"/>
+                                <param name="min_pct" value="0.25" />
+                                <param name="logfc_threshold" value="0.25" />
+                                <param name="heatmaps" value="T"/>
+                                <param name="markers_file" value="F"/>
+                            </conditional>
+                        </conditional>
+                    </conditional>
+                </conditional>
+            </conditional>
             <section name="meta">
                 <param name="showcode" value="T"/>
                 <param name="warn" value="F"/>
                 <param name="varstate" value="F"/>
-                <param name="plots" value="feat"/>
             </section>
             <output name="out_html" ftype="html">
                 <assert_contents>
@@ -150,6 +376,86 @@
                     <has_text text="img src=&quot;data:image/png;base64" />
                 </assert_contents>
             </output>
+        </test>    
+        <test expect_num_outputs="4">
+            <conditional name="function">
+                <param name="function_select" value="cite"/>
+                <param name="rna" ftype="tabular" value="rna.tab.gz"/>
+                <param name="prot" ftype="tabular" value="adt.tab.gz"/>
+                <param name="min_cells" value="0"/>
+                <param name="min_genes" value="0"/>
+                <param name="low_thresholds" value="1" />
+                <param name="high_thresholds" value="20000000" />
+                <param name="vlnfeat" value="F"/>
+                <param name="norm_file" value="F"/>
+                <param name="featplot" value="T"/>
+                <param name="var_file" value="F"/>
+                <param name="num_PCs" value="20" />
+                <param name="pc_plots" value="T"/>
+                <param name="pca_file" value="F"/>
+                <param name="resolution" value="0.6" />
+                <param name="nmds" value="F"/>
+                <param name="clusters_file" value="F"/>
+                <param name="min_pct" value="0.25" />
+                <param name="logfc_threshold" value="0.25" />
+                <param name="heatmaps" value="T"/>
+                <param name="markers_file" value="F"/>
+                <param name="cite_markers" value="T"/>
+                <conditional name="comparison">
+                    <param name="comparison" value="yes"/>
+                    <param name="feat_comp" value="CD4,CD19"/>
+                </conditional>
+                <conditional name="marker_compare">
+                    <param name="marker_compare" value="yes"/>
+                    <param name="top_x" value="3"/>
+                </conditional>
+            </conditional>
+            <section name="meta">
+                <param name="showcode" value="T"/>
+                <param name="warn" value="F"/>
+                <param name="varstate" value="F"/>
+            </section>
+            <output name="rnamarkerst" ftype="tabular" file="rna_out.tsv" compare="sim_size" delta="500" />
+            <output name="protmarkerst" ftype="tabular" file="protein_out.tsv" compare="sim_size" delta="500" />
+        </test>
+        <test expect_num_outputs="9">
+            <conditional name="function">
+                <param name="function_select" value="cite"/>
+                <param name="rna" ftype="tabular" value="rna.tab.gz"/>
+                <param name="prot" ftype="tabular" value="adt.tab.gz"/>
+                <param name="min_cells" value="0"/>
+                <param name="min_genes" value="0"/>
+                <param name="low_thresholds" value="1" />
+                <param name="high_thresholds" value="20000000" />
+                <param name="vlnfeat" value="F"/>
+                <param name="norm_file" value="T"/>
+                <param name="featplot" value="T"/>
+                <param name="var_file" value="T"/>
+                <param name="num_PCs" value="20" />
+                <param name="pc_plots" value="T"/>
+                <param name="pca_file" value="T"/>
+                <param name="resolution" value="0.6" />
+                <param name="nmds" value="T"/>
+                <param name="clusters_file" value="T"/>
+                <param name="min_pct" value="0.25" />
+                <param name="logfc_threshold" value="0.25" />
+                <param name="heatmaps" value="T"/>
+                <param name="markers_file" value="T"/>
+                <param name="cite_markers" value="F"/>
+                <conditional name="comparison">
+                    <param name="comparison" value="yes"/>
+                    <param name="feat_comp" value="CD4,CD19"/>
+                </conditional>
+                <conditional name="marker_compare">
+                    <param name="marker_compare" value="yes"/>
+                    <param name="top_x" value="3"/>
+                </conditional>
+            </conditional>
+            <section name="meta">
+                <param name="showcode" value="T"/>
+                <param name="warn" value="F"/>
+                <param name="varstate" value="F"/>
+            </section>
         </test>
     </tests>
     <help><![CDATA[
@@ -167,6 +473,8 @@
 **Inputs**
 
     * Gene count matrix in TAB-separated format
+        or
+    * RNA and Protein count matrices in TAB-separated formats
 
 -----