diff evaluation.xml @ 0:0c1b0a3b19df draft default tip

planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/spapros/ commit aed7fe13fa0ed09d77a31eeecaf3ec3fba7eed3b
author iuc
date Mon, 16 Sep 2024 11:37:34 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/evaluation.xml	Mon Sep 16 11:37:34 2024 +0000
@@ -0,0 +1,598 @@
+<tool id="spapros_evaluation" name="Evaluation" version="@TOOL_VERSION@+galaxy@VERSION_SUFFIX@" profile="@profile@">
+    <description>of marker genes with spapros</description>
+    <macros>
+        <import>macros.xml</import>
+    </macros>
+    <expand macro="requirements">
+    </expand>
+    <expand macro="version_command"/>
+    <command detect_errors="exit_code"><![CDATA[
+@CMD@
+      ]]></command>
+    <configfiles>
+        <configfile name="script_file"><![CDATA[
+@CMD_imports@
+@CMD_read_inputs@
+
+mpl.rcParams['figure.dpi'] = $figure_options.dpi
+plt.rcParams["font.size"] = $figure_options.fontsize
+
+header_probeset='infer'
+#if $header_probeset == 'not_included':
+header_probeset=None
+#end if
+
+## Probe set generation
+probeset = pd.read_csv('$probeset', sep='\t', index_col=0, header=header_probeset)
+probeset = [x for x in probeset.values.flatten().tolist() if not pd.isna(x)]
+
+## Reference set generation
+methods_pre="#echo ','.join(["%s" % $s for $i, $s in enumerate($methods_reference)])#"
+methods=methods_pre.split(',')
+
+reference_sets = sp.se.select_reference_probesets(
+adata, 
+n=$nreference,
+#if $genes_key != '':
+genes_key='$genes_key',
+#else:
+genes_key=None,
+#end if
+#if $obs_key != '':
+obs_key='$obs_key',
+#end if
+#if $seeds != '':
+seeds=[$seeds],
+#end if
+methods=methods,
+verbosity=0
+)
+
+## Parameter setting
+
+custom_params = {
+'data': {
+'name': '$probeset_name', 
+'celltype_key': '$celltype_key'
+}, 
+'metrics': {
+#if $method.method == 'plot_summary' or $method.method == 'plot_cluster_similarity':
+'cluster_similarity': {
+'ns': [$method.ns_start, $method.ns_end],
+'AUC_borders': [#echo ",".join(["[%s, %s]" % ($s.auc_borders_start, $s.auc_borders_end) for $i, $s in enumerate($method.series_auc_borders)])#]
+},
+#end if
+#if $method.method == 'plot_summary' or $method.method == 'plot_knn_overlap':
+'knn_overlap': {
+'ks': [#echo ",".join([ "%s" % $s.k for $i, $s in enumerate($method.knn) ])#]
+},
+#end if
+#if $method.method == 'plot_confusion_matrix':
+'forest_clfs': {
+'ct_key': '$celltype_key',
+#if $method.method == 'plot_summary':
+'threshold': $method.forest_clfs_threshold
+#end if
+},
+#end if
+#if $method.method == 'plot_summary':
+#if $method.select_marker_corr.use_marker_corr == 'True':
+'marker_corr': {
+'per_celltype': $method.select_marker_corr.per_celltype,
+'per_marker': $method.select_marker_corr.per_marker,
+#if $method.select_marker_corr.select_per_celltype_min_mean.use_per_celltype_min_mean == 'True'
+'per_celltype_min_mean': $method.select_marker_corr.select_per_celltype_min_mean.per_celltype_min_mean,
+#end if
+#if $method.select_marker_corr.select_per_marker_min_mean.use_per_marker_min_mean == 'True'
+'per_marker_min_mean': $method.select_marker_corr.select_per_marker_min_mean.per_marker_min_mean
+#end if
+},
+#end if
+#end if
+#if $method.method == 'plot_marker_corr':
+'marker_corr': {
+'per_celltype': $method.per_celltype,
+'per_marker': $method.per_marker,
+#if $method.select_per_celltype_min_mean.use_per_celltype_min_mean == 'True'
+'per_celltype_min_mean': $method.select_per_celltype_min_mean.per_celltype_min_mean,
+#else:
+'per_celltype_min_mean': None,
+#end if
+#if $method.select_per_marker_min_mean.use_per_marker_min_mean == 'True'
+'per_marker_min_mean': $method.select_per_marker_min_mean.per_marker_min_mean
+#else:
+'per_marker_min_mean': None
+#end if
+},
+#end if
+#if $method.method == 'plot_summary':
+'gene_corr': {
+'threshold': $method.gene_corr_threshold
+}
+#end if
+}
+}
+
+## Setup evaluator
+
+#if $method.method == 'plot_summary' or $method.method == 'plot_marker_corr':
+
+header_markerset='infer'
+feature_marker=dict()
+
+#if $method.method == 'plot_summary':
+#if $method.select_marker_corr.header_markerset == 'not_included' :
+header_markerset=None
+#end if
+feature_marker = {key: [v for v in list(value.values()) if pd.notna(v)] for key, value in pd.read_csv('$method.select_marker_corr.markerset', sep='\t', index_col=0, header=header_markerset).to_dict(orient='index').items()}
+#end if
+#if $method.method == 'plot_marker_corr':
+#if $method.header_markerset == 'not_included':
+header_markerset=None
+#end if
+feature_marker = {key: [v for v in list(value.values()) if pd.notna(v)] for key, value in pd.read_csv('$method.markerset', sep='\t', index_col=0, header=header_markerset).to_dict(orient='index').items()}
+#end if
+
+#end if
+
+evaluator = sp.ev.ProbesetEvaluator(
+adata, 
+metrics_params=custom_params, 
+scheme="full", 
+verbosity=0,
+#if $method.method == 'plot_summary' or $method.method == 'plot_marker_corr':
+marker_list=feature_marker,
+#end if
+results_dir=None
+)
+
+## Evaluation reference set
+for set_id, df in reference_sets.items():
+    gene_set = df[df["selection"]].index.to_list()
+    evaluator.evaluate_probeset(gene_set, set_id=set_id)
+
+## Evaluation probe set
+evaluator.evaluate_probeset(probeset, set_id='$probeset_name')
+
+## Execution of method ##
+
+#if $method.method == 'plot_summary':
+evaluator.plot_summary(
+@CMD_plot@
+)
+#end if
+
+#if $method.method == 'plot_confusion_matrix':
+evaluator.plot_confusion_matrix(
+@CMD_plot@
+)
+#end if
+
+#if $method.method == 'plot_coexpression':
+evaluator.plot_coexpression(
+@CMD_plot@
+)
+#end if
+
+#if $method.method == 'plot_cluster_similarity':
+evaluator.plot_cluster_similarity(
+@CMD_plot@
+)
+#end if
+
+#if $method.method == 'plot_knn_overlap':
+evaluator.plot_knn_overlap(
+@CMD_plot@
+)
+#end if
+
+## plot_marker_corr does not allow for the show keyword
+#if $method.method == 'plot_marker_corr':
+evaluator.plot_marker_corr(
+#if $method.set_ids != 'all' and $method.set_ids != '':
+set_ids=[$method.set_ids],
+#end if
+save='plot.$format'
+)
+#end if
+
+]]></configfile>
+    </configfiles>
+    <inputs>
+        <expand macro="inputs_anndata"/>
+        <expand macro="param_plot_format"/>
+        <param name="probeset" type="data" format="tabular" label="Probeset tabular file with rows=conditions (e.g., celltypes) and column=features (e.g., genes)"/>
+        <param name="header_probeset" type="select" optional="false" label="Header in the list of probes?">
+            <option value="included">Header incldued</option>
+            <option value="not_included">Header not included</option>
+        </param>
+        <param argument="nreference" type="integer" value="10" min="1" optional="false" label="Number of selected genes to generate a reference set"/> 
+        <param name="methods_reference" type="select" multiple="True" optional="false" label="Select the methods to genereate a reference probeset">
+            <option value="random" selected="true">Random</option>
+            <option value="PCA" selected="false">PCA</option>
+            <option value="DE" selected="false">Differential expressed features based on wilxocon rank genes test (DE)</option>
+            <option value="HVG" selected="false">Highly variable features (HVG)</option>
+        </param>
+        <param name="genes_key" type="text" optional="true" label="adata.var key for subset of preselected genes to run the selections" help="This is typically highly_variable_genes. Leave empty to not subset genes."/>
+        <param name="obs_key" type="text" optional="true" label="Column name of adata.obs for which marker scores are calculated" help="Only required for method DE."/>
+        <param name="seeds" type="text" optional="true" label="List of random integer seeds (comma seperated, e.g., 123,999,22)" help="For each seed, one random gene set is selected if random in methods. Leave it empty to for one random set with a random seed."/>
+        <param name="probeset_name" type="text" value="probeset" optional="false" label="Name for your probeset that should be displayed in plots"/>
+        <param name="celltype_key" type="text" value="celltype" optional="false" label="Column name of adata.obs that represents groups of your cells (e.g., celltype)"/>
+        <conditional name="method">
+            <param argument="method" type="select" optional="false" label="Method of spapros">
+                <option value="plot_summary">Plot statistic summary, using 'evaluator.plot_summary'</option>
+                <option value="plot_confusion_matrix">Plot confusion matrix, using 'evaluator.plot_confusion_matrix'</option>
+                <option value="plot_coexpression">Plot coexpression heatmap, using 'evaluator.plot_coexpression'</option>
+                <option value="plot_cluster_similarity">Plot cluster similariy, using 'evaluator.plot_cluster_similarity'</option>
+                <option value="plot_knn_overlap">Plot knn overlap, using 'evaluator.plot_knn_overlap'</option>
+                <option value="plot_marker_corr">Plot featue marker correlation, using 'evaluator.plot_marker_corr'</option>
+            </param>
+            <when value="plot_summary">
+                <expand macro="set_ids"/>
+                <param name="forest_clfs_threshold" type="float" value="0.8" min="0.0" max="1.0" label="Assesses how many cell types (%) can be predicted with an accuracy of at least threshold" help="The metric gives an idea about how many cell types can be identified with high confidence with the given gene set."/>
+                <param name="gene_corr_threshold" type="float" value="0.8" min="0.0" max="1.0" label="Percentage of features (e.g., genes) that have a maximum correlation of less than threshold with all other features" help="This metric gives an idea about how many features show unique expression profiles in the gene set."/>
+                <param name="ns_start" type="integer" value="5" min="1" label="The minimum number of leiden clusters clusters" help="Clusterings are calculated with different leiden resolutions to genertate clusterings of n = ns_start to ns_end clusters."/>
+                <param name="ns_end" type="integer" value="21" min="1" label="The maximum number of leiden clusters clusters" help="Clusterings are calculated with different leiden resolutions to genertate clusterings of n = ns_start to ns_end clusters."/>
+                <repeat name="series_auc_borders" title="Calculates nmi AUCs over given borders">
+                    <param name="auc_borders_start" type="integer" value="15" min="1" label="Calculates nmi over n ranges auc_borders_start to auc_borders_end" help="Defined border shouldn't exceed values in nmis."/>
+                    <param name="auc_borders_end" type="integer" value="20" min="1" label="Calculates nmi over n ranges auc_borders_start to auc_borders_end" help="Defined border shouldn't exceed values in nmis."/>
+                </repeat>
+                <repeat name="knn" title="Calculate knn graphs for each k">
+                    <param name="k" type="integer" value="10" min="1" label="Includes nearest neighbors for all k"/>
+                </repeat>
+                <conditional name="select_marker_corr">
+                    <param name="use_marker_corr" type="select" label="Do you want to calculate the correlation between your probeset and marker features?">
+                        <option value="False">No</option>
+                        <option value="True">Yes</option>
+                    </param>
+                    <when value="True">
+                        <expand macro="param_markerset"/>
+                        <param name="per_celltype" type="boolean" truevalue="True" falsevalue="False" label="Wether to return columns with per cell type max correlations" checked="true"/>
+                        <param name="per_marker" type="boolean" truevalue="True" falsevalue="False" label="Wether to return columns with per marker max correlations" checked="true"/>
+                        <conditional name="select_per_celltype_min_mean">
+                            <param name="use_per_celltype_min_mean" type="select" label="Add a column for correlation per cell type that only takes into accounts markers with mean expression > per_celltype_min_mean">
+                                <option value="False">No</option>
+                                <option value="True">Yes</option>
+                            </param>
+                            <when value="True">
+                                <param name="per_celltype_min_mean" type="float" value="0.0" min="0.0" label="Set per_celltype_min_mean"/>
+                            </when>
+                            <when value="False"/>
+                        </conditional>
+                        <conditional name="select_per_marker_min_mean">
+                            <param name="use_per_marker_min_mean" type="select" label="Add a column for correlation per cell type that only takes into accounts markers with mean expression > per_celltype_min_mean">
+                                <option value="False">No</option>
+                                <option value="True">Yes</option>
+                            </param>
+                            <when value="True">
+                                <param name="per_marker_min_mean" type="float" value="0.0" min="0.0" label="Set per_marker_min_mean"/>
+                            </when>
+                            <when value="False"/>
+                        </conditional>
+                    </when>
+                    <when value="False"/>
+                </conditional>
+            </when>
+            <when value="plot_confusion_matrix">
+                <expand macro="set_ids"/>
+            </when>
+            <when value="plot_coexpression">
+                <expand macro="set_ids"/>
+            </when>
+            <when value="plot_cluster_similarity">
+                <expand macro="set_ids"/>
+                <param name="ns_start" type="integer" value="5" min="1" label="The minimum number of leiden clusters clusters" help="Clusterings are calculated with different leiden resolutions to genertate clusterings of n = ns_start to ns_end clusters."/>
+                <param name="ns_end" type="integer" value="21" min="1" label="The maximum number of leiden clusters clusters" help="Clusterings are calculated with different leiden resolutions to genertate clusterings of n = ns_start to ns_end clusters."/>
+                <repeat name="series_auc_borders" title="Calculates nmi AUCs over given borders">
+                    <param name="auc_borders_start" type="integer" value="15" min="1" label="Calculates nmi over n ranges auc_borders_start to auc_borders_end" help="Defined border shouldn't exceed values in nmis."/>
+                    <param name="auc_borders_end" type="integer" value="20" min="1" label="Calculates nmi over n ranges auc_borders_start to auc_borders_end" help="Defined border shouldn't exceed values in nmis."/>
+                </repeat>
+            </when>
+            <when value="plot_knn_overlap">
+                <expand macro="set_ids"/>
+                <repeat name="knn" title="Calculate knn graphs for each k">
+                    <param name="k" type="integer" value="10" min="1" label="Includes nearest neighbors for all k"/>
+                </repeat>
+            </when>
+            <when value="plot_marker_corr">
+                <expand macro="param_markerset"/>
+                <expand macro="set_ids"/>
+                <param name="per_celltype" type="boolean" truevalue="True" falsevalue="False" label="Wether to return columns with per cell type max correlations" checked="true"/>
+                <param name="per_marker" type="boolean" truevalue="True" falsevalue="False" label="Wether to return columns with per marker max correlations" checked="true"/>
+                <conditional name="select_per_celltype_min_mean">
+                    <param name="use_per_celltype_min_mean" type="select" label="Add a column for correlation per cell type that only takes into accounts markers with mean expression > per_celltype_min_mean">
+                        <option value="False">No</option>
+                        <option value="True">Yes</option>
+                    </param>
+                    <when value="True">
+                        <param name="per_celltype_min_mean" type="float" value="0.0" min="0.0" label="Set per_celltype_min_mean"/>
+                    </when>
+                    <when value="False"/>
+                </conditional>
+                <conditional name="select_per_marker_min_mean">
+                    <param name="use_per_marker_min_mean" type="select" label="Add a column for correlation per cell type that only takes into accounts markers with mean expression > per_celltype_min_mean">
+                        <option value="False">No</option>
+                        <option value="True">Yes</option>
+                    </param>
+                    <when value="True">
+                        <param name="per_marker_min_mean" type="float" value="0.0" min="0.0" label="Set per_marker_min_mean"/>
+                    </when>
+                    <when value="False"/>
+                </conditional>
+            </when>
+        </conditional>
+        <section name="figure_options" title="Figure Output Options" expanded="false">
+            <param argument="dpi" type="integer" value="300" min="1" label="Dpi of figures"/> 
+            <param argument="fontsize" type="integer" value="100" min="1" label="Font size of figures"/> 
+        </section>
+        <expand macro="inputs_common_advanced"/>
+    </inputs>
+    <outputs>
+        <data name="out_png" format="png" from_work_dir="*.png" label="PNG plot from ${tool.name} (${method.method}) on ${on_string}">
+            <filter>format == 'png'</filter>
+        </data>
+        <data name="out_pdf" format="pdf" from_work_dir="*.pdf" label="PDF plot from ${tool.name} (${method.method}) on ${on_string}">
+            <filter>format == 'pdf'</filter>
+        </data>
+        <data name="out_svg" format="svg" from_work_dir="*.svg" label="SVG plot from ${tool.name} (${method.method}) on ${on_string}">
+            <filter>format == 'svg'</filter>
+        </data>
+        <expand macro="hidden_outputs"/>
+    </outputs>
+    <tests>
+        <test expect_num_outputs="2">
+            <param name="adata" value="tl.rank_genes_groups.newton-cg.pbmc68k_reduced_240cells.h5ad"/>
+            <param name="format" value="png"/>
+            <param name="probeset" value="tl.rank_genes_groups.newton-cg.pbmc68k_highly_reduced_marker_filtered_1.tsv"/>
+            <param name="header_probeset" value="included"/>
+            <param name="nreference" value="30"/>
+            <param name="methods_reference" value="random,PCA,DE,HVG"/>
+            <param name="genes_key" value="highly_variable"/>
+            <param name="obs_key" value="celltype"/>
+            <param name="seeds" value="123,124"/>
+            <conditional name="method">
+                <param name="method" value="plot_summary"/>
+                <param name="set_ids" value="all"/>
+                <param name="forest_clfs_threshold" value="0.8"/>
+                <param name="gene_corr_threshold" value="0.8"/>
+                <param name="ns_start" value="5"/>
+                <param name="ns_end" value="21"/>
+                <repeat name="series_auc_borders">
+                    <param name="auc_borders_start" value="7"/>
+                    <param name="auc_borders_end" value="14"/>
+                </repeat>
+                <repeat name="series_auc_borders">
+                    <param name="auc_borders_start" value="15"/>
+                    <param name="auc_borders_end" value="20"/>
+                </repeat>
+                <repeat name="knn">
+                    <param name="k" value="5"/>
+                </repeat>
+                <repeat name="knn">
+                    <param name="k" value="10"/>
+                </repeat>
+                <conditional name="select_marker_corr">
+                    <param name="use_marker_corr" value="True"/>
+                    <param name="markerset" value="marker.tsv"/>
+                    <param name="header_markerset" value="not_included"/>
+                    <param name="per_celltype" value="True"/>
+                    <param name="per_marker" value="True"/>
+                    <conditional name="select_per_celltype_min_mean">
+                        <param name="use_per_celltype_min_mean" value="False"/>
+                    </conditional>
+                    <conditional name="select_per_marker_min_mean">
+                        <param name="use_per_marker_min_mean" value="True"/>
+                        <param name="per_marker_min_mean" value="0.025"/>
+                    </conditional>
+                </conditional>
+            </conditional>
+            <param name="show_log" value="true" />
+            <output name="hidden_output">
+                <assert_contents>
+                    <has_text_matching expression="'name': 'probeset',"/>
+                    <has_text_matching expression="'per_celltype': True,"/>
+                    <has_text_matching expression="'per_marker': True,"/>
+                    <has_text_matching expression="'per_marker_min_mean': 0.025"/>
+                    <has_text_matching expression="evaluator.plot_summary"/>
+                    <has_text_matching expression="save='plot.png',"/>
+                </assert_contents>
+            </output>
+            <output name="out_png">
+                <assert_contents>
+                    <has_image_width width="3253" delta="2"/>
+                    <has_image_height height="1446" delta="2"/>
+                </assert_contents>
+            </output>
+        </test>
+        <test expect_num_outputs="2">
+            <param name="adata" value="tl.rank_genes_groups.newton-cg.pbmc68k_reduced_240cells.h5ad"/>
+            <param name="format" value="png"/>
+            <param name="probeset" value="tl.rank_genes_groups.newton-cg.pbmc68k_highly_reduced_marker_filtered_1.tsv"/>
+            <param name="header_probeset" value="included"/>
+            <param name="nreference" value="30"/>
+            <param name="methods_reference" value="random,PCA,DE,HVG"/>
+            <param name="genes_key" value="highly_variable"/>
+            <param name="obs_key" value="celltype"/>
+            <param name="seeds" value="123,124"/>
+            <conditional name="method">
+                <param name="method" value="plot_confusion_matrix"/>
+                <param name="set_ids" value="all"/>
+            </conditional>
+            <param name="show_log" value="true" />
+            <output name="hidden_output">
+                <assert_contents>
+                    <has_text_matching expression="'name': 'probeset',"/>
+                    <has_text_matching expression="'ct_key': 'celltype',"/>
+                    <has_text_matching expression="evaluator.plot_confusion_matrix"/>
+                    <has_text_matching expression="save='plot.png',"/>
+                </assert_contents>
+            </output>
+            <output name="out_png">
+                <assert_contents>
+                    <has_image_width width="4560" delta="2"/>
+                    <has_image_height height="1859" delta="2"/>
+                </assert_contents>
+            </output>
+        </test>
+        <test expect_num_outputs="2">
+            <param name="adata" value="tl.rank_genes_groups.newton-cg.pbmc68k_reduced_240cells.h5ad"/>
+            <param name="format" value="png"/>
+            <param name="probeset" value="tl.rank_genes_groups.newton-cg.pbmc68k_highly_reduced_marker_filtered_1.tsv"/>
+            <param name="header_probeset" value="included"/>
+            <param name="nreference" value="30"/>
+            <param name="methods_reference" value="random,PCA,DE,HVG"/>
+            <param name="genes_key" value="highly_variable"/>
+            <param name="obs_key" value="celltype"/>
+            <param name="seeds" value="123,124"/>
+            <conditional name="method">
+                <param name="method" value="plot_coexpression"/>
+                <param name="set_ids" value="all"/>
+            </conditional>
+            <param name="show_log" value="true" />
+            <output name="hidden_output">
+                <assert_contents>
+                    <has_text_matching expression="'name': 'probeset',"/>
+                    <has_text_matching expression="evaluator.plot_coexpression"/>
+                    <has_text_matching expression="save='plot.png',"/>
+                </assert_contents>
+            </output>
+            <output name="out_png">
+                <assert_contents>
+                    <has_image_width width="5412" delta="2"/>
+                    <has_image_height height="3463" delta="2"/>
+                </assert_contents>
+            </output>
+        </test>
+        <test expect_num_outputs="2">
+            <param name="adata" value="tl.rank_genes_groups.newton-cg.pbmc68k_reduced_240cells.h5ad"/>
+            <param name="format" value="png"/>
+            <param name="probeset" value="tl.rank_genes_groups.newton-cg.pbmc68k_highly_reduced_marker_filtered_1.tsv"/>
+            <param name="header_probeset" value="included"/>
+            <param name="nreference" value="30"/>
+            <param name="methods_reference" value="random,PCA,DE,HVG"/>
+            <param name="genes_key" value="highly_variable"/>
+            <param name="obs_key" value="celltype"/>
+            <param name="seeds" value="123,124"/>
+            <conditional name="method">
+                <param name="method" value="plot_cluster_similarity"/>
+                <param name="set_ids" value="all"/>
+                <param name="ns_start" value="3"/>
+                <param name="ns_end" value="20"/>
+                <repeat name="series_auc_borders">
+                    <param name="auc_borders_start" value="7"/>
+                    <param name="auc_borders_end" value="14"/>
+                </repeat>
+                <repeat name="series_auc_borders">
+                    <param name="auc_borders_start" value="15"/>
+                    <param name="auc_borders_end" value="20"/>
+                </repeat>
+            </conditional>
+            <param name="show_log" value="true" />
+            <output name="hidden_output">
+                <assert_contents>
+                    <has_text_matching expression="'name': 'probeset',"/>
+                    <has_text_matching expression="evaluator.plot_cluster_similarity"/>
+                    <has_text_matching expression="save='plot.png',"/>
+                </assert_contents>
+            </output>
+            <output name="out_png">
+                <assert_contents>
+                    <has_image_width width="3223" delta="2"/>
+                    <has_image_height height="1406" delta="2"/>
+                </assert_contents>
+            </output>
+        </test>
+        <test expect_num_outputs="2">
+            <param name="adata" value="tl.rank_genes_groups.newton-cg.pbmc68k_reduced_240cells.h5ad"/>
+            <param name="format" value="png"/>
+            <param name="probeset" value="tl.rank_genes_groups.newton-cg.pbmc68k_highly_reduced_marker_filtered_1.tsv"/>
+            <param name="header_probeset" value="included"/>
+            <param name="nreference" value="30"/>
+            <param name="methods_reference" value="random,PCA,DE,HVG"/>
+            <param name="genes_key" value="highly_variable"/>
+            <param name="obs_key" value="celltype"/>
+            <param name="seeds" value="123,124"/>
+            <conditional name="method">
+                <param name="method" value="plot_knn_overlap"/>
+                <param name="set_ids" value="all"/>
+                <repeat name="knn">
+                    <param name="k" value="6"/>
+                </repeat>
+                <repeat name="knn">
+                    <param name="k" value="11"/>
+                </repeat>
+            </conditional>
+            <param name="show_log" value="true" />
+            <output name="hidden_output">
+                <assert_contents>
+                    <has_text_matching expression="'name': 'probeset',"/>
+                    <has_text_matching expression="evaluator.plot_knn_overlap"/>
+                    <has_text_matching expression="save='plot.png',"/>
+                </assert_contents>
+            </output>
+            <output name="out_png">
+                <assert_contents>
+                    <has_image_width width="3223" delta="2"/>
+                    <has_image_height height="1406" delta="2"/>
+                </assert_contents>
+            </output>
+        </test>
+        <test expect_num_outputs="2">
+            <param name="adata" value="tl.rank_genes_groups.newton-cg.pbmc68k_reduced_240cells.h5ad"/>
+            <param name="format" value="png"/>
+            <param name="probeset" value="tl.rank_genes_groups.newton-cg.pbmc68k_highly_reduced_marker_filtered_1.tsv"/>
+            <param name="header_probeset" value="included"/>
+            <param name="nreference" value="50"/>
+            <param name="methods_reference" value="random,PCA,DE,HVG"/>
+            <param name="genes_key" value="highly_variable"/>
+            <param name="obs_key" value="celltype"/>
+            <conditional name="method">
+                <param name="method" value="plot_marker_corr"/>
+                <param name="set_ids" value="all"/>
+                <param name="use_marker_corr" value="True"/>
+                <param name="markerset" value="marker.tsv"/>
+                <param name="header_markerset" value="not_included"/>
+                <param name="per_celltype" value="True"/>
+                <param name="per_marker" value="True"/>
+                <conditional name="select_per_celltype_min_mean">
+                    <param name="use_per_celltype_min_mean" value="False"/>
+                </conditional>
+                <conditional name="select_per_marker_min_mean">
+                    <param name="use_per_marker_min_mean" value="True"/>
+                    <param name="per_marker_min_mean" value="0.025"/>
+                </conditional>
+            </conditional>
+            <param name="show_log" value="true" />
+            <output name="hidden_output">
+                <assert_contents>
+                    <has_text_matching expression="'name': 'probeset',"/>
+                    <has_text_matching expression="'per_celltype': True,"/>
+                    <has_text_matching expression="'per_marker': True,"/>
+                    <has_text_matching expression="'per_marker_min_mean': 0.025"/>
+                    <has_text_matching expression="evaluator.plot_marker_corr"/>
+                    <has_text_matching expression="save='plot.png'"/>
+                </assert_contents>
+            </output>
+            <output name="out_png">
+                <assert_contents>
+                    <has_image_width width="5064" delta="2"/>
+                    <has_image_height height="4554" delta="2"/>
+                </assert_contents>
+            </output>
+        </test>
+    </tests>
+    <help><![CDATA[
+Probe set evaluation for single-cell sequencing data using spapros.
+============================================================================================================
+
+Spapros is a python package that provides a pipeline for probe set selection and evaluation for targeted spatial transcriptomics data.
+
+Key Features:
+* Select probe sets for spatial transcriptomics which identify cell types of interest, capture general transcriptomic variation, and incorporate prior knowledge
+* Evaluate probe sets with an extensive pipeline
+
+Further documentation can be found here: https://spapros.readthedocs.io/en/latest/index.html.
+
+    ]]></help>
+    <expand macro="citations"/>
+</tool>