diff flexynesis_plot.xml @ 3:52b6f2ac38c7 draft default tip

planemo upload for repository https://github.com/bgruening/galaxytools/tree/master/tools/flexynesis commit 6b520305ec30e6dc37eba92c67a5368cea0fc5ad
author bgruening
date Wed, 23 Jul 2025 07:49:52 +0000
parents 3c5d82bf6e8a
children
line wrap: on
line diff
--- a/flexynesis_plot.xml	Fri Jul 04 14:57:52 2025 +0000
+++ b/flexynesis_plot.xml	Wed Jul 23 07:49:52 2025 +0000
@@ -10,134 +10,149 @@
     <command detect_errors="exit_code"><![CDATA[
         @CHECK_NON_COMMERCIAL_USE@
         mkdir -p inputs/ plots/ &&
-        ln -s '$plot_conditional.labels' 'inputs/$plot_conditional.labels.element_identifier.$plot_conditional.labels.ext' &&
+        #if str($plot_conditional.plot_type) != 'cox_plot':
+            ln -s '$plot_conditional.labels' inputs/labels.tabular &&
+        #end if
         #if $plot_conditional.plot_type == "dimred":
-            ln -s '$plot_conditional.embeddings' 'inputs/$plot_conditional.embeddings.element_identifier.$plot_conditional.embeddings.ext' &&
+            ln -s '$plot_conditional.embeddings' inputs/embeddings.tabular &&
+        #end if
+        #if $plot_conditional.plot_type == "km_plot":
+            ln -s '$plot_conditional.survival_data' inputs/survival_data.tabular &&
+            survival_event=`'$__tool_directory__/index_to_name.py' inputs/survival_data.tabular $plot_conditional.surv_event_var` &&
+            ## check if survival variable is numerical
+            echo "Survival event variable: \$survival_event" &&
+            python '$__tool_directory__/flexynesis_utils.py' --util validate_survival --clin inputs/survival_data.tabular --clin_variable \$survival_event &&
+            survival_time=`'$__tool_directory__/index_to_name.py' inputs/survival_data.tabular $plot_conditional.surv_time_var` &&
+            echo "Survival time variable: \$survival_time" &&
         #end if
-        cat '$flexynesis_plot_config' &&
-        python '$flexynesis_plot_config'
-    ]]></command>
-    <configfiles>
-        <configfile name="flexynesis_plot_config"><![CDATA[
-import sys
-sys.path.append('$__tool_directory__/')
+        #if $plot_conditional.plot_type == "cox_plot":
+            ln -s '$plot_conditional.important_features' inputs/important_features.tabular &&
+            ln -s '$plot_conditional.clinical_train' inputs/clinical_train.tabular &&
+            ln -s '$plot_conditional.clinical_test' inputs/clinical_test.tabular &&
+            ln -s '$plot_conditional.omics_train' inputs/omics_train.tabular &&
+            ln -s '$plot_conditional.omics_test' inputs/omics_test.tabular &&
+            survival_event=`'$__tool_directory__/index_to_name.py' inputs/clinical_train.tabular $plot_conditional.surv_event_var` &&
+            ## check if survival variable is numerical
+            echo "Survival event variable: \$survival_event" &&
+            python '$__tool_directory__/flexynesis_utils.py' --util validate_survival --clin inputs/clinical_train.tabular --clin_variable \$survival_event &&
+            survival_time=`'$__tool_directory__/index_to_name.py' inputs/clinical_train.tabular $plot_conditional.surv_time_var` &&
+            echo "Survival time variable: \$survival_time" &&
+            #if str($plot_conditional.clinical_variables) != 'None':
+                covars=`'$__tool_directory__/index_to_name.py' inputs/clinical_train.tabular $plot_conditional.clinical_variables` &&
+                ## check if survival variable is numerical
+                echo "Clinical variables: \$covars" &&
+                python '$__tool_directory__/flexynesis_utils.py' --util validate_covariate --clin inputs/clinical_train.tabular --clin_variable \$covars &&
+            #end if
+        #end if
+        #if $plot_conditional.plot_type == "dimred":
+            ## set target variables
+            color_col=`'$__tool_directory__/index_to_name.py' inputs/labels.tabular $plot_conditional.color` &&
+            echo "Color: \$color_col" &&
+            python '$__tool_directory__/flexynesis_plot.py'
+                --plot_type dimred
+                --embeddings inputs/embeddings.tabular
+                --labels inputs/labels.tabular
+                --method $plot_conditional.method
+                --color \$color_col
+                --output_dir plots
+                --format $plot_conditional.format
+                --dpi $plot_conditional.dpi
 
-import matplotlib.pyplot as plt
-import numpy as np
-import pandas as pd
-import seaborn as sns
-import torch
-from flexynesis import (
-    get_important_features,
-    plot_dim_reduced,
-    plot_hazard_ratios,
-    plot_kaplan_meier_curves,
-    plot_pr_curves,
-    plot_roc_curves,
-    plot_scatter
-)
-from scipy.stats import kruskal, mannwhitneyu
-from flexynesis_plot import (
-    plot_label_concordance_heatmap,
-    plot_boxplot,
-    detect_color_type,
-    load_labels,
-    load_embeddings,
-    match_samples_to_embeddings
-)
-#if $plot_conditional.plot_type == "dimred":
-@PLOT_COMMON_CONFIG@
-embeddings, sample_names = load_embeddings('inputs/$plot_conditional.embeddings.element_identifier.$plot_conditional.embeddings.ext')
-matched_labels = match_samples_to_embeddings(sample_names, label_data)
-
-label = matched_labels.columns[$plot_conditional.label-1]
-color_type = detect_color_type(matched_labels[label])
-
-fig = plot_dim_reduced(
-    matrix=embeddings,
-    labels=matched_labels[label],
-    method='$plot_conditional.method',
-    color_type=color_type
-)
-output_path = "plots/{label}_${plot_conditional.method}.${plot_conditional.format}"
-fig.save(output_path, dpi=$plot_conditional.dpi, bbox_inches='tight')
-#else if $plot_conditional.plot_type == "scatter":
-@PLOT_COMMON_CONFIG@
-
-true_label = label_data.columns[$plot_conditional.true_label-1]
-predicted_label = label_data.columns[$plot_conditional.predicted_label-1]
-true_values = pd.to_numeric(label_data[true_label], errors='coerce')
-predicted_values = pd.to_numeric(label_data[predicted_label], errors='coerce')
-
-if true_values.isna().all() or predicted_values.isna().all():
-    raise ValueError("No valid numeric values found for known or predicted labels")
-
-fig = plot_scatter(true_values, predicted_values)
+        #else if $plot_conditional.plot_type == "scatter":
+            #if $plot_conditional.true_label and $plot_conditional.predicted_label:
+                true_label_col=`'$__tool_directory__/index_to_name.py' inputs/labels.tabular $plot_conditional.true_label` &&
+                echo "True label: \$true_label_col" &&
+                python '$__tool_directory__/flexynesis_utils.py' --util validate_covariate --clin inputs/labels.tabular --clin_variable \$true_label_col &&
 
-output_path = "plots/${plot_conditional.true_label}_${plot_conditional.predicted_label}_scatter.${plot_conditional.format}"
-fig.save(output_path, dpi=$plot_conditional.dpi, bbox_inches='tight')
-
-#else if $plot_conditional.plot_type == "concordance_heatmap":
-@PLOT_COMMON_CONFIG@
-
-true_label = label_data.columns[$plot_conditional.true_label-1]
-predicted_label = label_data.columns[$plot_conditional.predicted_label-1]
-
-true_values = label_data[true_label].tolist()
-predicted_values = label_data[predicted_label].tolist()
-fig = plot_label_concordance_heatmap(true_values, predicted_values)
-plt.close(fig)
-output_path = "plots/{true_label}_{predicted_label}_concordance_heatmap.${plot_conditional.format}"
-fig.savefig(output_path, dpi=$plot_conditional.dpi, bbox_inches='tight')
-
-#else if $plot_conditional.plot_type == "pr_curve":
-@PR_ROC_CONFIG@
-
-fig = plot_pr_curves(y_true_np, y_probs_np)
-
-output_path = "plots/pr_curves.${plot_conditional.format}"
-fig.save(output_path, dpi=$plot_conditional.dpi, bbox_inches='tight')
-
-#else if $plot_conditional.plot_type == "roc_curve":
-@PR_ROC_CONFIG@
-fig = plot_roc_curves(y_true_np, y_probs_np)
-output_path = "plots/roc_curves.${plot_conditional.format}"
-fig.save(output_path, dpi=$plot_conditional.dpi, bbox_inches='tight')
-
-#else if $plot_conditional.plot_type == "box_plot":
-@PR_ROC_BOX_CONFIG@
-# Remove rows with missing data
-clean_data = label_data.dropna(subset=['known_label', 'probability'])
-
-if clean_data.empty:
-    raise ValueError("    No valid data after cleaning")
-
-# Get unique classes
-classes = clean_data['class_label'].unique()
-
-for class_label in classes:
-    print(f"    Generating box plot for class: {class_label}")
-
-    # Filter for current class
-    class_data = clean_data[clean_data['class_label'] == class_label]
-
-    # Create the box plot
-    fig = plot_boxplot(
-        categorical_x=class_data['known_label'],
-        numerical_y=class_data['probability'],
-        title_x='True Label',
-        title_y=f'Predicted Probability ({class_label})',
-    )
-
-    # Save the plot
-    safe_class_name = str(class_label).replace('/', '_').replace('\\', '_').replace(' ', '_').replace(':', '_')
-    plt.close(fig)
-
-    output_path = f"plots/box_plot_{safe_class_name}.${plot_conditional.format}"
-    fig.savefig(output_path, dpi=$plot_conditional.dpi, bbox_inches='tight')
-#end if
-        ]]></configfile>
-    </configfiles>
+                predicted_label_col=`'$__tool_directory__/index_to_name.py' inputs/labels.tabular $plot_conditional.predicted_label` &&
+                echo "Predicted label: \$predicted_label_col" &&
+                python '$__tool_directory__/flexynesis_utils.py' --util validate_covariate --clin inputs/labels.tabular --clin_variable \$predicted_label_col &&
+            #end if
+            python '$__tool_directory__/flexynesis_plot.py'
+                --plot_type scatter
+                --labels inputs/labels.tabular
+                #if $plot_conditional.true_label and $plot_conditional.predicted_label:
+                    --true_label \$true_label_col
+                    --predicted_label \$predicted_label_col
+                #end if
+                --output_dir plots
+                --format $plot_conditional.format
+                --dpi $plot_conditional.dpi
+        #else if $plot_conditional.plot_type == "concordance_heatmap":
+            #if $plot_conditional.true_label and $plot_conditional.predicted_label:
+                true_label_col=`'$__tool_directory__/index_to_name.py' inputs/labels.tabular $plot_conditional.true_label` &&
+                predicted_label_col=`'$__tool_directory__/index_to_name.py' inputs/labels.tabular $plot_conditional.predicted_label` &&
+                echo "True label: \$true_label_col" &&
+                echo "Predicted label: \$predicted_label_col" &&
+            #end if
+            python '$__tool_directory__/flexynesis_plot.py'
+                --plot_type concordance_heatmap
+                --labels inputs/labels.tabular
+                #if $plot_conditional.true_label and $plot_conditional.predicted_label:
+                    --true_label \$true_label_col
+                    --predicted_label \$predicted_label_col
+                #end if
+                --output_dir plots
+                --format $plot_conditional.format
+                --dpi $plot_conditional.dpi
+        #else if $plot_conditional.plot_type == "pr_curve":
+            python '$__tool_directory__/flexynesis_plot.py'
+                --plot_type pr_curve
+                --labels inputs/labels.tabular
+                --output_dir plots
+                --format $plot_conditional.format
+                --dpi $plot_conditional.dpi
+        #else if $plot_conditional.plot_type == "roc_curve":
+            python '$__tool_directory__/flexynesis_plot.py'
+                --plot_type roc_curve
+                --labels inputs/labels.tabular
+                --output_dir plots
+                --format $plot_conditional.format
+                --dpi $plot_conditional.dpi
+        #else if $plot_conditional.plot_type == "box_plot":
+            python '$__tool_directory__/flexynesis_plot.py'
+                --plot_type box_plot
+                --labels inputs/labels.tabular
+                --output_dir plots
+                --format $plot_conditional.format
+                --dpi $plot_conditional.dpi
+        #else if $plot_conditional.plot_type == "km_plot":
+            python '$__tool_directory__/flexynesis_plot.py'
+                --plot_type kaplan_meier
+                --labels inputs/labels.tabular
+                --survival_data inputs/survival_data.tabular
+                --surv_event_var \$survival_event
+                --surv_time_var \$survival_time
+                --output_dir plots
+                --format $plot_conditional.format
+                --dpi $plot_conditional.dpi
+        #else if $plot_conditional.plot_type == "cox_plot":
+            python '$__tool_directory__/flexynesis_plot.py'
+                --plot_type cox
+                --important_features inputs/important_features.tabular
+                --clinical_train inputs/clinical_train.tabular
+                --clinical_test inputs/clinical_test.tabular
+                --omics_train inputs/omics_train.tabular
+                --omics_test inputs/omics_test.tabular
+                --layer '$plot_conditional.layer'
+                --surv_time_var \$survival_time
+                --surv_event_var \$survival_event
+                #if str($plot_conditional.clinical_variables) != 'None':
+                    --clinical_variables \$covars
+                #end if
+                --top_features $plot_conditional.top_features
+                #if str($plot_conditional.crossval_conditional.crossval) == 'yes':
+                    --crossval
+                #end if
+                #if str($plot_conditional.crossval_conditional.crossval) == 'yes':
+                    --n_splits $plot_conditional.crossval_conditional.n_splits
+                #end if
+                --random_state 42
+                --output_dir plots
+                --format $plot_conditional.format
+                --dpi $plot_conditional.dpi
+        #end if
+    ]]></command>
     <inputs>
         <expand macro="commercial_use_param"/>
         <conditional name="plot_conditional">
@@ -148,12 +163,14 @@
                 <option value="pr_curve">Precision-recall curves</option>
                 <option value="roc_curve">ROC curves</option>
                 <option value="box_plot">Box plot</option>
+                <option value="km_plot">Kaplan-Meier plot</option>
+                <option value="cox_plot">Cox proportional hazards plot</option>
             </param>
             <when value="dimred">
-                <expand macro="plots_common_param">
+                <expand macro="plots_common_param_svg">
                     <expand macro="plots_common_input"/>
                     <param argument="--embeddings" type="data" format="tabular" label="Embeddings" help="Generated by flexynesis"/>
-                    <param argument="--label" type="data_column" data_ref="labels" label="Column in the labels file to use for coloring the points in the plot"/>
+                    <param argument="--color" type="data_column" data_ref="labels" label="Column in the labels file to use for coloring the points in the plot"/>
                     <param name="method" type="select" label="Transformation method">
                         <option value="pca" selected="true">PCA</option>
                         <option value="umap">UMAP</option>
@@ -161,43 +178,79 @@
                 </expand>
             </when>
             <when value="scatter">
-                <expand macro="plots_common_param">
+                <expand macro="plots_common_param_svg">
                     <expand macro="plots_common_input"/>
-                    <param name="true_label" type="data_column" data_ref="labels" label="Column name in the labels file to use for the true labels"/>
-                    <param name="predicted_label" type="data_column" data_ref="labels" label="Column name in the labels file to use for the predicted labels"/>
+                    <param argument="--true_label" type="data_column" data_ref="labels" optional="true" label="Column in the labels file to use for true labels"/>
+                    <param argument="--predicted_label" type="data_column" data_ref="labels" optional="true" label="Column in the labels file to use for predicted labels"/>
                 </expand>
             </when>
             <when value="concordance_heatmap">
-                <expand macro="plots_common_param">
+                <expand macro="plots_common_param_svg">
                     <expand macro="plots_common_input"/>
-                    <param name="true_label" type="data_column" data_ref="labels" label="Column name in the labels file to use for the true labels"/>
-                    <param name="predicted_label" type="data_column" data_ref="labels" label="Column name in the labels file to use for the predicted labels"/>
+                    <param argument="--true_label" type="data_column" data_ref="labels" optional="true" label="Column in the labels file to use for true labels"/>
+                    <param argument="--predicted_label" type="data_column" data_ref="labels" optional="true" label="Column in the labels file to use for predicted labels"/>
                 </expand>
             </when>
             <when value="pr_curve">
-                <expand macro="plots_common_param">
+                <expand macro="plots_common_param_svg">
                     <expand macro="plots_common_input"/>
                 </expand>
             </when>
             <when value="roc_curve">
-                <expand macro="plots_common_param">
+                <expand macro="plots_common_param_svg">
                     <expand macro="plots_common_input"/>
                 </expand>
             </when>
             <when value="box_plot">
-                <expand macro="plots_common_param">
+                <expand macro="plots_common_param_svg">
+                    <expand macro="plots_common_input"/>
+                </expand>
+            </when>
+            <when value="km_plot">
+                <expand macro="plots_common_param_svg">
                     <expand macro="plots_common_input"/>
+                    <param argument="--survival_data" type="data" format="tabular" label="Survival data"/>
+                    <param argument="--surv_event_var" type="data_column" data_ref="survival_data" label="Column in the survival data to use as survival event"/>
+                    <param argument="--surv_time_var" type="data_column" data_ref="survival_data" label="Column in the survival data to use as survival time"/>
+                </expand>
+            </when>
+            <when value="cox_plot">
+                <expand macro="plots_common_param_svg">
+                    <param argument="--important_features" type="data" format="tabular" label="Important features file"/>
+                    <param argument="--clinical_train" type="data" format="tabular" label="Clinical training data"/>
+                    <param argument="--clinical_test" type="data" format="tabular" label="Clinical test data"/>
+                    <param argument="--omics_train" type="data" format="tabular" label="Omics training data"/>
+                    <param argument="--omics_test" type="data" format="tabular" label="Omics test data"/>
+                    <param name="layer" type="text" optional="false" label="The class label to use from important features file" help="This corresponds to assay name in flexynesis tool.">
+                        <expand macro="sanitizer_letters"/>
+                    </param>
+                    <param argument="--surv_event_var" type="data_column" data_ref="clinical_train" label="Column in the clinical training data to use as survival event"/>
+                    <param argument="--surv_time_var" type="data_column" data_ref="clinical_train" label="Column in the clinical training data to use as survival time"/>
+                    <param argument="--clinical_variables" type="data_column" data_ref="clinical_train" optional="true" multiple="true" label="Columns in the train clinical data to use as clinical covariates and include in the Cox model (e.g SEX, AGE, ...), multiple covariates are allowed"/>
+                    <param argument="--top_features" type="integer" min="1" value="20" label="Number of top important features to include in Cox model"/>
+                    <conditional name="crossval_conditional">
+                        <param name="crossval" type="select" label="Performs K-fold cross-validation?">
+                            <option value="yes">Yes</option>
+                            <option value="no" selected="true">No</option>
+                        </param>
+                        <when value="yes">
+                            <param name="n_splits" type="integer" min="2" value="5" label="Number of folds for cross-validation"/>
+                        </when>
+                        <when value="no"/>
+                    </conditional>
                 </expand>
             </when>
         </conditional>
     </inputs>
     <outputs>
-        <data name="plot_out" auto_format="true" from_work_dir="plots/*" label="${tool.name} on ${on_string}: ${plot_conditional.plot_type}">
-            <filter>plot_conditional['plot_type'] != "box_plot"</filter>
-        </data>
-        <collection name="boxplot_out" type="list" label="${tool.name} on ${on_string}: box_plot">
+        <collection name="plot_out" type="list" label="${tool.name} on ${on_string}: ${plot_conditional.plot_type} - ${plot_conditional.format}">
             <discover_datasets pattern="__name_and_ext__" directory="plots/"/>
-            <filter>plot_conditional['plot_type'] == "box_plot"</filter>
+            <filter>plot_conditional['format'] != 'svg'</filter>
+        </collection>
+        <!-- other types can be sniffed correctly by galaxy -->
+        <collection name="plot_out_svg" format="svg" type="list" label="${tool.name} on ${on_string}: ${plot_conditional.plot_type} - svg">
+            <discover_datasets pattern="__name_and_ext__" directory="plots/"/>
+            <filter>plot_conditional['format'] == 'svg'</filter>
         </collection>
     </outputs>
     <tests>
@@ -207,20 +260,22 @@
             <conditional name="plot_conditional">
                 <param name="plot_type" value="dimred"/>
                 <param name="embeddings" value="embeddings.tabular"/>
-                <param name="label" value="6"/>
+                <param name="color" value="6"/>
                 <param name="method" value="pca"/>
                 <param name="labels" value="labels.tabular"/>
                 <param name="format" value="jpg"/>
                 <param name="dpi" value="300"/>
             </conditional>
-            <output name="plot_out">
-                <assert_contents>
-                    <has_image_center_of_mass center_of_mass="970,733" eps="50"/>
-                    <has_image_channels channels="3"/>
-                    <has_image_height height="1461" delta="50"/>
-                    <has_image_width width="1941" delta="50"/>
-                </assert_contents>
-            </output>
+            <output_collection name="plot_out" type="list" count="1">
+                <element name="embeddings_pca_predicted_label">
+                    <assert_contents>
+                        <has_image_center_of_mass center_of_mass="970,731" eps="20"/>
+                        <has_image_channels channels="3"/>
+                        <has_image_height height="1460" delta="20"/>
+                        <has_image_width width="1940" delta="20"/>
+                    </assert_contents>
+                </element>
+            </output_collection>
         </test>
         <!-- test 2: scatter -->
         <test expect_num_outputs="1">
@@ -228,19 +283,19 @@
             <conditional name="plot_conditional">
                 <param name="plot_type" value="scatter"/>
                 <param name="labels" value="labels_scatter.tabular"/>
-                <param name="true_label" value="5"/>
-                <param name="predicted_label" value="6"/>
                 <param name="format" value="jpg"/>
                 <param name="dpi" value="300"/>
             </conditional>
-            <output name="plot_out">
-                <assert_contents>
-                    <has_image_center_of_mass center_of_mass="970,733" eps="50"/>
-                    <has_image_channels channels="3"/>
-                    <has_image_height height="1461" delta="50"/>
-                    <has_image_width width="1941" delta="50"/>
-                </assert_contents>
-            </output>
+            <output_collection name="plot_out" type="list" count="1">
+                <element name="labels_scatter_CLAUDIN_SUBTYPE">
+                    <assert_contents>
+                        <has_image_center_of_mass center_of_mass="969,732" eps="20"/>
+                        <has_image_channels channels="3"/>
+                        <has_image_height height="1460" delta="20"/>
+                        <has_image_width width="1941" delta="20"/>
+                    </assert_contents>
+                </element>
+            </output_collection>
         </test>
         <!-- test 3: concordance_heatmap -->
         <test expect_num_outputs="1">
@@ -248,19 +303,19 @@
             <conditional name="plot_conditional">
                 <param name="plot_type" value="concordance_heatmap"/>
                 <param name="labels" value="labels.tabular"/>
-                <param name="true_label" value="5"/>
-                <param name="predicted_label" value="6"/>
                 <param name="format" value="jpg"/>
                 <param name="dpi" value="300"/>
             </conditional>
-            <output name="plot_out">
-                <assert_contents>
-                    <has_image_center_of_mass center_of_mass="1450,1310" eps="50"/>
-                    <has_image_channels channels="3"/>
-                    <has_image_height height="2558" delta="50"/>
-                    <has_image_width width="2770" delta="50"/>
-                </assert_contents>
-            </output>
+            <output_collection name="plot_out" type="list" count="1">
+                <element name="labels_concordance_CLAUDIN_SUBTYPE">
+                    <assert_contents>
+                        <has_image_center_of_mass center_of_mass="1450,1306" eps="20"/>
+                        <has_image_channels channels="3"/>
+                        <has_image_height height="2558" delta="20"/>
+                        <has_image_width width="2768" delta="20"/>
+                    </assert_contents>
+                </element>
+            </output_collection>
         </test>
         <!-- test 4: pr_curve -->
         <test expect_num_outputs="1">
@@ -271,14 +326,16 @@
                 <param name="format" value="jpg"/>
                 <param name="dpi" value="300"/>
             </conditional>
-            <output name="plot_out">
-                <assert_contents>
-                    <has_image_center_of_mass center_of_mass="970,733" eps="50"/>
-                    <has_image_channels channels="3"/>
-                    <has_image_height height="1461" delta="50"/>
-                    <has_image_width width="1941" delta="50"/>
-                </assert_contents>
-            </output>
+            <output_collection name="plot_out" type="list" count="1">
+                <element name="labels_pr_curves_CLAUDIN_SUBTYPE">
+                    <assert_contents>
+                        <has_image_center_of_mass center_of_mass="965,733" eps="20"/>
+                        <has_image_channels channels="3"/>
+                        <has_image_height height="1461" delta="20"/>
+                        <has_image_width width="1941" delta="20"/>
+                    </assert_contents>
+                </element>
+            </output_collection>
         </test>
         <!-- test 5: roc_curve -->
         <test expect_num_outputs="1">
@@ -289,14 +346,16 @@
                 <param name="format" value="jpg"/>
                 <param name="dpi" value="300"/>
             </conditional>
-            <output name="plot_out">
-                <assert_contents>
-                    <has_image_center_of_mass center_of_mass="970,733" eps="50"/>
-                    <has_image_channels channels="3"/>
-                    <has_image_height height="1461" delta="50"/>
-                    <has_image_width width="1941" delta="50"/>
-                </assert_contents>
-            </output>
+            <output_collection name="plot_out" type="list" count="1">
+                <element name="labels_roc_curves_CLAUDIN_SUBTYPE">
+                    <assert_contents>
+                        <has_image_center_of_mass center_of_mass="971,732" eps="20"/>
+                        <has_image_channels channels="3"/>
+                        <has_image_height height="1461" delta="20"/>
+                        <has_image_width width="1941" delta="20"/>
+                    </assert_contents>
+                </element>
+            </output_collection>
         </test>
         <!-- test 6: box_plot -->
         <test expect_num_outputs="1">
@@ -307,16 +366,56 @@
                 <param name="format" value="jpg"/>
                 <param name="dpi" value="300"/>
             </conditional>
-            <output_collection name="boxplot_out" type="list" count="7">
-                <element name="box_plot_Basal">
+            <output_collection name="plot_out" type="list" count="7">
+                <element name="labels_box_plot_CLAUDIN_SUBTYPE_Basal">
+                    <assert_contents>
+                        <has_image_center_of_mass center_of_mass="1485,882" eps="20"/>
+                        <has_image_channels channels="3"/>
+                        <has_image_height height="1766" delta="20"/>
+                        <has_image_width width="2967" delta="20"/>
+                    </assert_contents>
+                </element>
+                <element name="labels_box_plot_CLAUDIN_SUBTYPE_Her2">
+                    <assert_contents>
+                        <has_image_center_of_mass center_of_mass="1485,882" eps="20"/>
+                        <has_image_channels channels="3"/>
+                        <has_image_height height="1766" delta="20"/>
+                        <has_image_width width="2967" delta="20"/>
+                    </assert_contents>
+                </element>
+                <element name="labels_box_plot_CLAUDIN_SUBTYPE_LumA">
                     <assert_contents>
                         <has_image_center_of_mass center_of_mass="1485,882" eps="20"/>
                         <has_image_channels channels="3"/>
-                        <has_image_height height="1783" delta="20"/>
+                        <has_image_height height="1766" delta="20"/>
+                        <has_image_width width="2967" delta="20"/>
+                    </assert_contents>
+                </element>
+                <element name="labels_box_plot_CLAUDIN_SUBTYPE_LumB">
+                    <assert_contents>
+                        <has_image_center_of_mass center_of_mass="1485,882" eps="20"/>
+                        <has_image_channels channels="3"/>
+                        <has_image_height height="1766" delta="20"/>
                         <has_image_width width="2967" delta="20"/>
                     </assert_contents>
                 </element>
-                <element name="box_plot_Her2">
+                <element name="labels_box_plot_CLAUDIN_SUBTYPE_NC">
+                    <assert_contents>
+                        <has_image_center_of_mass center_of_mass="1485,875" eps="20"/>
+                        <has_image_channels channels="3"/>
+                        <has_image_height height="1766" delta="20"/>
+                        <has_image_width width="2967" delta="20"/>
+                    </assert_contents>
+                </element>
+                <element name="labels_box_plot_CLAUDIN_SUBTYPE_Normal">
+                    <assert_contents>
+                        <has_image_center_of_mass center_of_mass="1485,878" eps="20"/>
+                        <has_image_channels channels="3"/>
+                        <has_image_height height="1766" delta="20"/>
+                        <has_image_width width="2967" delta="20"/>
+                    </assert_contents>
+                </element>
+                <element name="labels_box_plot_CLAUDIN_SUBTYPE_claudin-low">
                     <assert_contents>
                         <has_image_center_of_mass center_of_mass="1485,882" eps="20"/>
                         <has_image_channels channels="3"/>
@@ -324,44 +423,179 @@
                         <has_image_width width="2967" delta="20"/>
                     </assert_contents>
                 </element>
-                <element name="box_plot_LumA">
+            </output_collection>
+        </test>
+        <!-- test 7: dimred png-->
+        <test expect_num_outputs="1">
+            <param name="non_commercial_use" value="True"/>
+            <conditional name="plot_conditional">
+                <param name="plot_type" value="dimred"/>
+                <param name="embeddings" value="embeddings.tabular"/>
+                <param name="color" value="6"/>
+                <param name="method" value="pca"/>
+                <param name="labels" value="labels.tabular"/>
+                <param name="format" value="png"/>
+                <param name="dpi" value="300"/>
+            </conditional>
+            <output_collection name="plot_out" type="list" count="1">
+                <element name="embeddings_pca_predicted_label">
                     <assert_contents>
-                        <has_image_center_of_mass center_of_mass="1485,882" eps="20"/>
-                        <has_image_channels channels="3"/>
-                        <has_image_height height="1783" delta="20"/>
-                        <has_image_width width="2967" delta="20"/>
+                        <has_image_center_of_mass center_of_mass="970,730" eps="20"/>
+                        <has_image_channels channels="4"/>
+                        <has_image_height height="1461" delta="20"/>
+                        <has_image_width width="1941" delta="20"/>
                     </assert_contents>
                 </element>
-                <element name="box_plot_LumB">
+            </output_collection>
+        </test>
+        <!-- test 8: roc_curve svg-->
+        <test expect_num_outputs="1">
+            <param name="non_commercial_use" value="True"/>
+            <conditional name="plot_conditional">
+                <param name="plot_type" value="roc_curve"/>
+                <param name="labels" value="labels_pr.tabular"/>
+                <param name="format" value="svg"/>
+                <param name="dpi" value="300"/>
+            </conditional>
+            <output_collection name="plot_out_svg" type="list" count="1">
+                <element name="labels_roc_curves_CLAUDIN_SUBTYPE">
                     <assert_contents>
-                        <has_image_center_of_mass center_of_mass="1485,882" eps="20"/>
+                        <has_text_matching expression="ROC Curve"/>
+                        <has_text_matching expression="True Positive Rate"/>
+                    </assert_contents>
+                </element>
+            </output_collection>
+        </test>
+        <!-- test 9: km_plot -->
+        <test expect_num_outputs="1">
+            <param name="non_commercial_use" value="True"/>
+            <conditional name="plot_conditional">
+                <param name="plot_type" value="km_plot"/>
+                <param name="labels" value="labels_survival.tabular"/>
+                <param name="survival_data" value="test/clin"/>
+                <param name="surv_event_var" value="15"/>
+                <param name="surv_time_var" value="14"/>
+                <param name="format" value="jpg"/>
+                <param name="dpi" value="300"/>
+            </conditional>
+            <output_collection name="plot_out" type="list" count="1">
+                <element name="survival_data_km_km_risk_subtypes">
+                    <assert_contents>
+                        <has_image_center_of_mass center_of_mass="970,730" eps="20"/>
                         <has_image_channels channels="3"/>
-                        <has_image_height height="1783" delta="20"/>
-                        <has_image_width width="2967" delta="20"/>
+                        <has_image_height height="1460" delta="20"/>
+                        <has_image_width width="1940" delta="20"/>
                     </assert_contents>
                 </element>
-                <element name="box_plot_NC">
+            </output_collection>
+        </test>
+        <!-- test 10: cox_plot -->
+        <test expect_num_outputs="1">
+            <param name="non_commercial_use" value="True"/>
+            <conditional name="plot_conditional">
+                <param name="plot_type" value="cox_plot"/>
+                <param name="important_features" value="feature_importance.tabular"/>
+                <param name="clinical_train" value="train/clin"/>
+                <param name="clinical_test" value="test/clin"/>
+                <param name="omics_train" value="train/gex"/>
+                <param name="omics_test" value="test/gex"/>
+                <param name="layer" value="gex"/>
+                <param name="surv_event_var" value="15"/>
+                <param name="surv_time_var" value="14"/>
+                <param name="clinical_variables" value="3,4"/>
+                <param name="top_features" value="10"/>
+                <param name="format" value="jpg"/>
+                <param name="dpi" value="300"/>
+            </conditional>
+            <output_collection name="plot_out" type="list" count="1">
+                <element name="important_features_cox_hazard_ratios">
                     <assert_contents>
-                        <has_image_center_of_mass center_of_mass="1485,882" eps="20"/>
+                        <has_image_center_of_mass center_of_mass="970,730" eps="20"/>
                         <has_image_channels channels="3"/>
-                        <has_image_height height="1783" delta="20"/>
-                        <has_image_width width="2967" delta="20"/>
+                        <has_image_height height="1460" delta="20"/>
+                        <has_image_width width="1940" delta="20"/>
                     </assert_contents>
                 </element>
-                <element name="box_plot_Normal">
+            </output_collection>
+        </test>
+        <!-- test 11: km_plot should fail because of non numeric target -->
+        <test expect_failure="true">
+            <param name="non_commercial_use" value="True"/>
+            <conditional name="plot_conditional">
+                <param name="plot_type" value="km_plot"/>
+                <param name="labels" value="labels_survival.tabular"/>
+                <param name="survival_data" value="test/clin"/>
+                <param name="surv_event_var" value="16"/>
+                <param name="surv_time_var" value="14"/>
+                <param name="format" value="jpg"/>
+                <param name="dpi" value="300"/>
+            </conditional>
+            <assert_stderr>
+                <has_text_matching expression="Error: Non-numeric values found in column 'class': Unable to parse string &quot;buz&quot; at position 0"/>
+            </assert_stderr>
+        </test>
+        <!-- test 12: cox_plot should fail because of non numeric target -->
+        <test expect_failure="true">
+            <param name="non_commercial_use" value="True"/>
+            <conditional name="plot_conditional">
+                <param name="plot_type" value="cox_plot"/>
+                <param name="important_features" value="feature_importance.tabular"/>
+                <param name="clinical_train" value="train/clin"/>
+                <param name="clinical_test" value="test/clin"/>
+                <param name="omics_train" value="train/gex"/>
+                <param name="omics_test" value="test/gex"/>
+                <param name="layer" value="gex"/>
+                <param name="surv_event_var" value="15"/>
+                <param name="surv_time_var" value="14"/>
+                <param name="clinical_variables" value="3,4,16"/>
+                <param name="top_features" value="10"/>
+                <param name="format" value="jpg"/>
+                <param name="dpi" value="300"/>
+            </conditional>
+            <assert_stderr>
+                <has_text_matching expression="Error: Non-numeric values found in column 'class': Unable to parse string &quot;buz&quot; at position 0"/>
+            </assert_stderr>
+        </test>
+        <!-- test 13: scatter unsupervised -->
+        <test expect_num_outputs="1">
+            <param name="non_commercial_use" value="True"/>
+            <conditional name="plot_conditional">
+                <param name="plot_type" value="scatter"/>
+                <param name="labels" value="non_flexy_label.tabular"/>
+                <param name="true_label" value="11"/>
+                <param name="predicted_label" value="12"/>
+                <param name="format" value="jpg"/>
+                <param name="dpi" value="300"/>
+            </conditional>
+            <output_collection name="plot_out" type="list" count="1">
+                <element name="labels_scatter">
                     <assert_contents>
-                        <has_image_center_of_mass center_of_mass="1485,882" eps="20"/>
+                        <has_image_center_of_mass center_of_mass="970,730" eps="20"/>
                         <has_image_channels channels="3"/>
-                        <has_image_height height="1783" delta="20"/>
-                        <has_image_width width="2967" delta="20"/>
+                        <has_image_height height="1460" delta="20"/>
+                        <has_image_width width="1941" delta="20"/>
                     </assert_contents>
                 </element>
-                <element name="box_plot_claudin-low">
+            </output_collection>
+        </test>
+        <!-- test 14: concordance_heatmap unsupervised -->
+        <test expect_num_outputs="1">
+            <param name="non_commercial_use" value="True"/>
+            <conditional name="plot_conditional">
+                <param name="plot_type" value="concordance_heatmap"/>
+                <param name="labels" value="non_flexy_label.tabular"/>
+                <param name="true_label" value="10"/>
+                <param name="predicted_label" value="12"/>
+                <param name="format" value="jpg"/>
+                <param name="dpi" value="300"/>
+            </conditional>
+            <output_collection name="plot_out" type="list" count="1">
+                <element name="labels_concordance">
                     <assert_contents>
-                        <has_image_center_of_mass center_of_mass="1485,882" eps="20"/>
+                        <has_image_center_of_mass center_of_mass="1445,1306" eps="20"/>
                         <has_image_channels channels="3"/>
-                        <has_image_height height="1783" delta="20"/>
-                        <has_image_width width="2967" delta="20"/>
+                        <has_image_height height="2558" delta="20"/>
+                        <has_image_width width="3051" delta="20"/>
                     </assert_contents>
                 </element>
             </output_collection>