comparison segmentation.xml @ 17:91f0f5922011 draft default tip

planemo upload for repository https://github.com/galaxyproteomics/tools-galaxyp/tree/master/tools/cardinal commit 91e77c139cb3b7c6d67727dc39140dd79355fa0c
author galaxyp
date Thu, 04 Jul 2024 13:36:52 +0000
parents 050bcc806da2
children
comparison
equal deleted inserted replaced
16:df2187f9013b 17:91f0f5922011
1 <tool id="cardinal_segmentations" name="MSI segmentation" version="@VERSION@.0"> 1 <tool id="cardinal_segmentations" name="MSI segmentation" version="@TOOL_VERSION@+galaxy@VERSION_SUFFIX@" profile="22.05">
2 <description>mass spectrometry imaging spatial clustering</description> 2 <description>mass spectrometry imaging spatial clustering</description>
3 <macros> 3 <macros>
4 <import>macros.xml</import> 4 <import>macros.xml</import>
5 </macros> 5 </macros>
6 <expand macro="requirements"> 6 <expand macro="requirements"/>
7 <requirement type="package" version="2.3">r-gridextra</requirement>
8 </expand>
9 <command detect_errors="exit_code"> 7 <command detect_errors="exit_code">
10 <![CDATA[ 8 <![CDATA[
11 9
12 @INPUT_LINKING@ 10 @INPUT_LINKING@
13 cat '${MSI_segmentation}' && 11 cat '${MSI_segmentation}' &&
20 18
21 ################################# load libraries and read file ################# 19 ################################# load libraries and read file #################
22 20
23 library(Cardinal) 21 library(Cardinal)
24 library(gridExtra) 22 library(gridExtra)
23 library(ggplot2)
24 library(scales)
25 25
26 @READING_MSIDATA@ 26 @READING_MSIDATA@
27 27
28 msidata = as(msidata, "MSImageSet") ##coercion to MSImageSet 28 msidata = as(msidata, "MSImagingExperiment")
29 29
30 ## remove duplicated coordinates 30 ## remove duplicated coordinates
31 msidata <- msidata[,!duplicated(coord(msidata))] 31 msidata <- msidata[,!duplicated(coord(msidata))]
32 32
33 33
47 47
48 ############################# I) numbers #################################### 48 ############################# I) numbers ####################################
49 ############################################################################# 49 #############################################################################
50 grid.table(property_df, rows= NULL) 50 grid.table(property_df, rows= NULL)
51 51
52 if (npeaks > 0 && sum(is.na(spectra(msidata)))==0) 52
53 if (npeaks > 0 && NAcount==0)
53 { 54 {
54 55
55 ######################## II) segmentation tools ############################# 56 ######################## II) segmentation tools #############################
56 ############################################################################# 57 #############################################################################
57 #set $color_string = ','.join(['"%s"' % $color.feature_color for $color in $colours]) 58
58 colourvector = c($color_string) 59 #if str( $segm_cond.segmentationtool ) == 'kmeans':
60 number_colors = max(c($segm_cond.kmeans_k))
61
62 #elif str( $segm_cond.segmentationtool ) == 'centroids':
63 number_colors = max(c($segm_cond.centroids_k))
64
65 #end if
66
67 #if str($colour_conditional.colour_type) == "manual_colour"
68 #set $color_string = ','.join(['"%s"' % $color.annotation_color for $color in $colour_conditional.colours])
69 colourvector = c($color_string)
70
71 #elif str($colour_conditional.colour_type) == "colourpalette"
72 number_levels = (number_colors)
73 colourvector = noquote($colour_conditional.palettes)(number_levels)
74
75 #end if
76
59 77
60 ## set seed to make analysis reproducible 78 ## set seed to make analysis reproducible
61 set.seed($setseed) 79 set.seed($setseed)
62 80
63 #if str( $segm_cond.segmentationtool ) == 'pca': 81 #if str( $segm_cond.segmentationtool ) == 'kmeans':
64 print('pca') 82 print('kmeans')
65 ##pca 83 ##k-means
66 84 skm = spatialKMeans(msidata, r=c($segm_cond.kmeans_r), k=c($segm_cond.kmeans_k), method="gaussian")
67 component_vector = character()
68 for (numberofcomponents in 1:$segm_cond.pca_ncomp)
69 {component_vector[numberofcomponents]= paste0("PC", numberofcomponents)}
70
71 pca_result = PCA(msidata, ncomp=$segm_cond.pca_ncomp, column = component_vector, superpose = FALSE,
72 method = "$segm_cond.pca_method", scale = $segm_cond.pca_scale, layout = c(ncomp, 1))
73 85
74 ## remove msidata to clean up RAM space 86 ## remove msidata to clean up RAM space
75 rm(msidata) 87 rm(msidata)
76 gc() 88 gc()
77 89
78 ### table in pdf file 90 k_value = c($segm_cond.kmeans_k)
79 plot(0,type='n',axes=FALSE,ann=FALSE) 91 r_value = c($segm_cond.kmeans_r)
80 sd_table = as.data.frame(round(pca_result@resultData\$ncomp\$sdev, digits=2)) 92
81 colnames(sd_table) = "Standard deviation" 93 for (k in k_value) {
82 PC_vector = character() 94 for (r in r_value) {
83 for (PCs in 1:$segm_cond.pca_ncomp){ 95 print(image(skm, key=TRUE, model = list(k = k, r = r),
84 PC_vector[[PCs]] = c(paste0("PC",PCs))} 96 main = paste("K-means clustering (r =", r, ", k =", k, ")"),
85 sd_table = cbind(PC_vector, sd_table) 97 strip = FALSE, col = colourvector, layout = c(1, 1), ylim = c(maximumy+2, minimumy-2)))
86 colnames(sd_table)[1] = "Principal components" 98
87 grid.table(sd_table, rows=NULL) 99 print(plot(skm, model = list(k = k, r = r), key = TRUE,
88 ### images in pdf file 100 main = paste("K-means plot (r =", r, ", k =", k, ")"),
89 print(image(pca_result, main="PCA image", strip = FALSE, col=colourvector, ylim=c(maximumy+2, minimumy-2))) 101 strip = FALSE, col = colourvector, layout = c(1, 1)))
90 for (PCs in 1:$segm_cond.pca_ncomp){ 102 }
91 print(image(pca_result, column = c(paste0("PC",PCs)),strip = FALSE, superpose = FALSE, main=paste0("PC", PCs), col.regions = risk.colors(100), ylim=c(maximumy+2, minimumy-2)))} 103 }
92 ### plots in pdf file 104
93 print(plot(pca_result, main="PCA plot", col= colourvector, strip = FALSE)) 105 skm_clusters = data.frame(matrix(NA, nrow = pixelcount, ncol = 0))
94 for (PCs in 1:$segm_cond.pca_ncomp){ 106 for (iteration in 1:length(skm@resultData)){
95 print(plot(pca_result, column = c(paste0("PC",PCs)),main=paste0("PC", PCs),strip = FALSE,superpose = FALSE))} 107 skm_cluster = ((skm@resultData)[[iteration]]\$cluster)
96 108 skm_clusters = cbind(skm_clusters, skm_cluster) }
97 ### values in tabular files 109
98 pcaloadings = formatC(pca_result@resultData\$ncomp\$loadings, format = "e", digits = 6)### loading for each m/z value 110 skm.coordinates = coord(skm)
99 pcaloadings2 = cbind(matrix(unlist(strsplit(rownames(pcaloadings), " = ")), ncol=2, byrow=TRUE)[,2], pcaloadings) 111 x_coords = skm.coordinates@listData[["x"]]
100 colnames(pcaloadings2) = c("mz", colnames(pcaloadings)) 112 y_coords = skm.coordinates@listData[["y"]]
101 pcascores = round(pca_result@resultData\$ncomp\$scores, digits=6) ### scores for each pixel 113 pixel_names = paste0("xy_", x_coords, "_", y_coords)
102 114
103 ## pixel names and coordinates 115 skm_clusters2 = data.frame(pixel_names, x_coords, y_coords, skm_clusters)
104 ## to remove potential sample names and z dimension, split at comma and take only x and y 116 r_values = skm@modelData@listData[["r"]]
105 x_coords = unlist(lapply(strsplit(rownames(pcascores), ","), `[[`, 1)) 117 k_values = skm@modelData@listData[["k"]]
106 y_coords = unlist(lapply(strsplit(rownames(pcascores), ","), `[[`, 2)) 118 new_names = paste0("r=", r_values, ", k=", k_values)
107 x_coordinates = gsub("x = ","",x_coords) 119 colnames(skm_clusters2) = c("pixel names", "x", "y", new_names)
108 y_coordinates = gsub(" y = ","",y_coords) 120
109 121 skm_toplabels = topFeatures(skm, n=$segm_cond.kmeans_toplabels)
110 pixel_names = paste0("xy_", x_coordinates, "_", y_coordinates) 122
111 pcascores2 = data.frame(pixel_names, x_coordinates, y_coordinates, pcascores) 123 write.table(skm_toplabels, file="$mzfeatures", quote = FALSE, row.names = FALSE, col.names=TRUE, sep = "\t")
112 colnames(pcascores2) = c("pixel names", "x", "y", colnames(pcascores)) 124 write.table(skm_clusters2, file="$pixeloutput", quote = FALSE, row.names = FALSE, col.names=TRUE, sep = "\t")
113 write.table(pcaloadings2, file="$mzfeatures", quote = FALSE, row.names = FALSE, col.names=TRUE, sep = "\t")
114 write.table(pcascores2, file="$pixeloutput", quote = FALSE, row.names = FALSE, col.names=TRUE, sep = "\t")
115 125
116 ## optional output as .RData 126 ## optional output as .RData
117 #if $output_rdata: 127 #if $output_rdata:
128
118 ## save as (.RData) 129 ## save as (.RData)
119 save(pca, file="$segmentation_rdata") 130 save(skm, file="$segmentation_rdata")
120 131
121 #end if 132 #end if
122 133
123 #elif str( $segm_cond.segmentationtool ) == 'kmeans': 134 #elif str( $segm_cond.segmentationtool ) == 'centroids':
124 print('kmeans') 135 print('centroids')
125 ##k-means 136 ##centroids
126 137
127 skm = spatialKMeans(msidata, r=c($segm_cond.kmeans_r), k=c($segm_cond.kmeans_k), method="$segm_cond.kmeans_method") 138 ssc = spatialShrunkenCentroids(msidata, r=c($segm_cond.centroids_r), k=c($segm_cond.centroids_k), s=c($segm_cond.centroids_s), method="gaussian")
128 139
129 ## remove msidata to clean up RAM space 140 ## remove msidata to clean up RAM space
130 rm(msidata) 141 rm(msidata)
131 gc() 142 gc()
132 143
133 print(image(skm, key=TRUE, main="K-means clustering", strip=FALSE, col= colourvector, layout=c(1,1), ylim=c(maximumy+2, minimumy-2))) 144 ## new plots and summary table
134 print(plot(skm, main="K-means plot", col= colourvector, strip=FALSE, layout=c(1,1))) 145
135 146 summary_df = summary(ssc)
136 skm_clusters = data.frame(matrix(NA, nrow = pixelcount, ncol = 0)) 147 summary_df = as.data.frame(summary_df@listData)
137 for (iteration in 1:length(skm@resultData)){ 148 colnames(summary_df) = c("r", "initial_k", "s", "k", "features_per_k")
138 skm_cluster = ((skm@resultData)[[iteration]]\$cluster) 149
139 skm_clusters = cbind(skm_clusters, skm_cluster) } 150 opar <- par()
140 151 par(opar)
141 ## pixel names and coordinates 152 plot(0,type='n',axes=FALSE,ann=FALSE)
142 ## to remove potential sample names and z dimension, split at comma and take only x and y 153 title(main="\n Summary for the different parameters\n", adj=0.5)
143 x_coords = unlist(lapply(strsplit(rownames(skm_clusters), ","), `[[`, 1)) 154 ## 20 rows fits in one page:
144 y_coords = unlist(lapply(strsplit(rownames(skm_clusters), ","), `[[`, 2)) 155 if (nrow(summary_df)<=20){
145 x_coordinates = gsub("x = ","",x_coords) 156 grid.table(summary_df, rows= NULL)
146 y_coordinates = gsub(" y = ","",y_coords) 157 }else{
147 pixel_names = paste0("xy_", x_coordinates, "_", y_coordinates) 158 grid.table(summary_df[1:20,], rows= NULL)
148 skm_clusters2 = data.frame(pixel_names, x_coordinates, y_coordinates, skm_clusters) 159 mincount = 21
149 colnames(skm_clusters2) = c("pixel names", "x", "y",names(skm@resultData)) 160 maxcount = 40
150 161 for (count20 in 1:(ceiling(nrow(summary_df)/20)-1)){
151 skm_toplabels = topFeatures(skm, n=$segm_cond.kmeans_toplabels) 162 plot(0,type='n',axes=FALSE,ann=FALSE)
152 163 if (maxcount <= nrow(summary_df)){
153 write.table(skm_toplabels, file="$mzfeatures", quote = FALSE, row.names = FALSE, col.names=TRUE, sep = "\t") 164 grid.table(summary_df[mincount:maxcount,], rows= NULL)
154 write.table(skm_clusters2, file="$pixeloutput", quote = FALSE, row.names = FALSE, col.names=TRUE, sep = "\t") 165 mincount = mincount+20
155 166 maxcount = maxcount+20
156 ## optional output as .RData 167 }else{### stop last page with last sample otherwise NA in table
157 #if $output_rdata: 168 grid.table(summary_df[mincount:nrow(summary_df),], rows= NULL)}
158 169 }
159 ## save as (.RData) 170 }
160 save(skm, file="$segmentation_rdata") 171
161 172 ## plot
162 #end if 173 summary_df\$r <- factor(summary_df\$r)
163 174 summary_df\$initial_k <- factor(summary_df\$initial_k)
164 #elif str( $segm_cond.segmentationtool ) == 'centroids': 175
165 print('centroids') 176 cluster_plot = ggplot(summary_df, aes(x = s, y = k, color = initial_k)) +
166 ##centroids 177 geom_point(size = 3) + ### Add points
167 178 geom_line() +
168 ssc = spatialShrunkenCentroids(msidata, r=c($segm_cond.centroids_r), k=c($segm_cond.centroids_k), s=c($segm_cond.centroids_s), method="$segm_cond.centroids_method") 179 theme_bw() +
169 ## remove msidata to clean up RAM space 180 facet_wrap(~ paste("r =", r)) +
170 rm(msidata) 181 labs(title = "Number of segments", y = "predicted number of k", x = "shrinkage parameter (s)")
171 gc() 182
172 print(image(ssc, key=TRUE, main="Spatial shrunken centroids", strip = TRUE, col= colourvector,layout=c(1,1), ylim=c(maximumy+2, minimumy-2))) 183 print(cluster_plot)
173 print(plot(ssc, main="Spatial shrunken centroids plot", col= colourvector, strip = TRUE,layout=c(1,1))) 184
174 print(plot(ssc, mode = "tstatistics",key = TRUE, layout = c(1,1), main="t-statistics", col=colourvector)) 185 s_value = c($segm_cond.centroids_s)
175 186 k_value = c($segm_cond.centroids_k)
176 plot(summary(ssc), main = "Number of segments") 187 r_value = c($segm_cond.centroids_r)
188
189 to_remove = subset(summary_df, features_per_k == 0)
190 s_to_remove = unique(c(to_remove\$s))
191 s_value = s_value[!s_value %in% s_to_remove]
192
193 for (s in s_value) {
194 for (k in k_value) {
195 for (r in r_value) {
196 print(image(ssc, model = list(s = s, k = k, r = r), key = TRUE, values = "class",
197 main = paste("Spatial shrunken centroids (s =", s, ", k =", k, ", r =", r, ")"),
198 strip = FALSE, col = colourvector, layout = c(1, 1), ylim = c(maximumy+2, minimumy-2)))
199
200 print(image(ssc, model = list(s = s, k = k, r = r), key = TRUE, values = "probability",
201 main = paste("Class Probability (s =", s, ", k =", k, ", r =", r, ")"),
202 strip = FALSE, col = colourvector, layout = c(1, 1), ylim = c(maximumy+2, minimumy-2)))
203
204 print(plot(ssc, model = list(s = s, k = k, r = r), key = TRUE,
205 main = paste("Spatial shrunken centroids features (s =", s, ", k =", k, ", r =", r, ")"),
206 col = colourvector, strip = TRUE, layout = c(1, 1)))
207
208 print(plot(ssc, model = list(s = s, k = k, r = r), values = "statistic", key = TRUE,
209 layout = c(1, 1),
210 main = paste("t-statistics (s =", s, ", k =", k, ", r =", r, ")"),
211 col = colourvector))
212 }
213 }
214 }
215
216
217 new_s_value = s_to_remove
218
219 for (s in new_s_value) {
220 for (k in k_value) {
221 for (r in r_value) {
222 print(image(ssc, model = list(s = s, k = k, r = r), key = TRUE, values = "class",
223 main = paste("Spatial shrunken centroids (s =", s, ", k =", k, ", r =", r, ")"),
224 strip = FALSE, col = colourvector, layout = c(1, 1), ylim = c(maximumy+2, minimumy-2)))
225
226 print(image(ssc, model = list(s = s, k = k, r = r), key = TRUE, values = "probability",
227 main = paste("Class Probability (s =", s, ", k =", k, ", r =", r, ")"),
228 strip = FALSE, col = colourvector, layout = c(1, 1), ylim = c(maximumy+2, minimumy-2)))
229
230 print(plot(ssc, model = list(s = s, k = k, r = r), key = TRUE,
231 main = paste("Spatial shrunken centroids features (s =", s, ", k =", k, ", r =", r, ")"),
232 col = colourvector, strip = TRUE, layout = c(1, 1)))
233
234 plot(0, 0, type = "n", xlab = "", ylab = "", xlim = c(0, 10), ylim = c(0, 10), xaxt = "n", yaxt = "n")
235 ## Add the text to the plot
236 text(5, 5, "t-statistics plot can not be drawn.\nS (shrinkage parameter) is too small to result\n in meaningful segmentation.",
237 cex = 1.5, adj = c(0.5, 0.5))
238
239 }
240 }
241 }
177 242
178 ssc_classes = data.frame(matrix(NA, nrow = pixelcount, ncol = 0)) 243 ssc_classes = data.frame(matrix(NA, nrow = pixelcount, ncol = 0))
179 for (iteration in 1:length(ssc@resultData)){ 244 for (iteration in 1:length(ssc@resultData@listData)){
180 ssc_class = ((ssc@resultData)[[iteration]]\$classes) 245 ssc_class = ((ssc@resultData@listData)[[iteration]]\$class)
181 ssc_classes = cbind(ssc_classes, ssc_class) } 246 ssc_classes = cbind(ssc_classes, ssc_class) }
182 247
183 ## pixel names and coordinates 248 ## coordinates and topFeatures of results
184 ## to remove potential sample names and z dimension, split at comma and take only x and y 249 s_values = ssc@modelData@listData[["s"]]
185 x_coords = unlist(lapply(strsplit(rownames(ssc_classes), ","), `[[`, 1)) 250 r_values = ssc@modelData@listData[["r"]]
186 y_coords = unlist(lapply(strsplit(rownames(ssc_classes), ","), `[[`, 2)) 251 k_values = ssc@modelData@listData[["k"]]
187 x_coordinates = gsub("x = ","",x_coords) 252 new_names = paste0("r=", r_values, ", s=", s_values, ", k=", k_values)
188 y_coordinates = gsub(" y = ","",y_coords) 253
189 pixel_names = paste0("xy_", x_coordinates, "_", y_coordinates) 254 ssc.coordinates = coord(ssc)
190 ssc_classes2 = data.frame(pixel_names, x_coordinates, y_coordinates, ssc_classes) 255 x_coords = ssc.coordinates@listData[["x"]]
191 colnames(ssc_classes2) = c("pixel names", "x", "y", names(ssc@resultData)) 256 y_coords = ssc.coordinates@listData[["y"]]
257 pixel_names = paste0("xy_", x_coords, "_", y_coords)
258
259 ssc_classes2 = data.frame(pixel_names, x_coords, y_coords, ssc_classes)
260 colnames(ssc_classes2) = c("pixel names", "x", "y", new_names)
192 261
193 ssc_toplabels = topFeatures(ssc, n=$segm_cond.centroids_toplabels) 262 ssc_toplabels = topFeatures(ssc, n=$segm_cond.centroids_toplabels)
194 263
195 write.table(ssc_toplabels, file="$mzfeatures", quote = FALSE, row.names = FALSE, col.names=TRUE, sep = "\t") 264 write.table(ssc_toplabels, file="$mzfeatures", quote = FALSE, row.names = FALSE, col.names=TRUE, sep = "\t")
196 write.table(ssc_classes2, file="$pixeloutput", quote = FALSE, row.names = FALSE, col.names=TRUE, sep = "\t") 265 write.table(ssc_classes2, file="$pixeloutput", quote = FALSE, row.names = FALSE, col.names=TRUE, sep = "\t")
266
197 267
198 ## optional output as .RData 268 ## optional output as .RData
199 #if $output_rdata: 269 #if $output_rdata:
200 270
201 ## save as (.RData) 271 ## save as (.RData)
209 279
210 ## optional svg output with original coordinates 280 ## optional svg output with original coordinates
211 #if $svg_pixelimage: 281 #if $svg_pixelimage:
212 print("svg image") 282 print("svg image")
213 ## reverse y axis for svg output = correct order and nice svg image 283 ## reverse y axis for svg output = correct order and nice svg image
214
215 284
216 svg(file="svg_pixel_output.svg", width=maximumx, height=maximumy) 285 svg(file="svg_pixel_output.svg", width=maximumx, height=maximumy)
217 par(mar=c(0,0,0,0)) 286 par(mar=c(0,0,0,0))
218 #if str( $segm_cond.segmentationtool ) == 'pca': 287 #if str( $segm_cond.segmentationtool ) == 'pca':
219 coord(pca_result)\$y <- max(coord(pca_result)\$y) - coord(pca_result)\$y + 1 288 coord(pca_result)\$y <- max(coord(pca_result)\$y) - coord(pca_result)\$y + 1
228 dev.off() 297 dev.off()
229 #end if 298 #end if
230 299
231 300
232 }else{ 301 }else{
302 plot.new()
303 text(0.5, 0.5, "Inputfile has no intensities > 0 \n or contains NA values.", cex = 1.5)
233 print("Inputfile has no intensities > 0") 304 print("Inputfile has no intensities > 0")
234 dev.off() 305 dev.off()
235 } 306 }
236 307
237 ]]></configfile> 308 ]]></configfile>
238 </configfiles> 309 </configfiles>
239 <inputs> 310 <inputs>
240 <expand macro="reading_msidata"/> 311 <expand macro="reading_msidata"/>
241 <conditional name="segm_cond"> 312 <conditional name="segm_cond">
242 <param name="segmentationtool" type="select" label="Select the tool for spatial clustering"> 313 <param name="segmentationtool" type="select" label="Select the tool for spatial clustering">
243 <option value="pca" selected="True">pca</option>
244 <option value="kmeans">k-means</option> 314 <option value="kmeans">k-means</option>
245 <option value="centroids">spatial shrunken centroids</option> 315 <option value="centroids">spatial shrunken centroids</option>
246 </param> 316 </param>
247 <when value="pca">
248 <param name="pca_ncomp" type="integer" value="2"
249 label="The number of principal components to calculate"/>
250 <param name="pca_method" type="select"
251 label="The function used to calculate the singular value decomposition">
252 <option value="irlba" selected="True">irlba</option>
253 <option value="svd">svd</option>
254 </param>
255 <param name="pca_scale" type="boolean" truevalue="TRUE" falsevalue="FALSE" label="Scaling of data before analysis"/>
256 </when>
257 <when value="kmeans"> 317 <when value="kmeans">
258 <param name="kmeans_r" type="text" value="2" 318 <param name="kmeans_r" type="text" value="2"
259 label="The spatial neighborhood radius of nearby pixels to consider (r)" help="Multiple values are allowed (e.g. 1,2,3 or 2:5)"> 319 label="The spatial neighborhood radius of nearby pixels to consider (r)" help="Multiple values are allowed (e.g. 1,2,3 or 2:5)">
260 <expand macro="sanitizer_multiple_digits"/> 320 <expand macro="sanitizer_multiple_digits"/>
261 </param> 321 </param>
262 <param name="kmeans_k" type="text" value="3" 322 <param name="kmeans_k" type="text" value="3"
263 label="The number of clusters (k)" help="Multiple values are allowed (e.g. 1,2,3 or 2:5)"> 323 label="The number of clusters (k)" help="Multiple values are allowed (e.g. 1,2,3 or 2:5)">
264 <expand macro="sanitizer_multiple_digits"/> 324 <expand macro="sanitizer_multiple_digits"/>
265 </param> 325 </param>
266 <param name="kmeans_method" type="select" display="radio" 326 <param name="kmeans_toplabels" type="integer" value="500"
267 label="The method to use to calculate the spatial smoothing kernels for the embedding. The 'gaussian' method refers to spatially-aware (SA) clustering, and 'adaptive' refers to spatially-aware structurally-adaptive (SASA) clustering">
268 <option value="gaussian">gaussian</option>
269 <option value="adaptive" selected="True">adaptive</option>
270 </param>
271 <param name="kmeans_toplabels" type="integer" value="500"
272 label="Number of toplabels (m/z) which should be written in tabular output"/> 327 label="Number of toplabels (m/z) which should be written in tabular output"/>
273 </when> 328 </when>
274 329
275 <when value="centroids"> 330 <when value="centroids">
276 <param name="centroids_r" type="text" value="2" 331 <param name="centroids_r" type="text" value="2"
284 <param name="centroids_s" type="text" value="2" 339 <param name="centroids_s" type="text" value="2"
285 label="The sparsity thresholding parameter by which to shrink the t-statistics (s)" 340 label="The sparsity thresholding parameter by which to shrink the t-statistics (s)"
286 help="As s increases, fewer m/z features (m/z values) will be used in the spatial segmentation, and only the informative m/z features will be retained. Multiple values are allowed (e.g. 1,2,3 or 2:5)"> 341 help="As s increases, fewer m/z features (m/z values) will be used in the spatial segmentation, and only the informative m/z features will be retained. Multiple values are allowed (e.g. 1,2,3 or 2:5)">
287 <expand macro="sanitizer_multiple_digits"/> 342 <expand macro="sanitizer_multiple_digits"/>
288 </param> 343 </param>
289 <param name="centroids_method" type="select" display="radio" label="The method to use to calculate the spatial smoothing kernels for the embedding. The 'gaussian' method refers to spatially-aware (SA) weights, and 'adaptive' refers to spatially-aware structurally-adaptive (SASA) weights"> 344
290 <option value="gaussian">gaussian</option>
291 <option value="adaptive" selected="True">adaptive</option>
292 </param>
293 <param name="centroids_toplabels" type="integer" value="500" 345 <param name="centroids_toplabels" type="integer" value="500"
294 label="Number of toplabels (m/z) which should be written in tabular output"/> 346 label="Number of toplabels (m/z) which should be written in tabular output"/>
295 </when> 347 </when>
296 </conditional> 348 </conditional>
297 <param name="svg_pixelimage" type="boolean" label="Export first segmentation image as svg"/> 349 <param name="svg_pixelimage" type="boolean" label="Export first segmentation image as svg"/>
298 <repeat name="colours" title="Colours for the plots" min="1" max="50"> 350
299 <param name="feature_color" type="color" label="Colours" value="#ff00ff" help="Numbers of colours should be the same as number of components"> 351 <conditional name="colour_conditional">
300 <sanitizer> 352 <param name="colour_type" type="select" label="Choose a colour scheme">
301 <valid initial="string.letters,string.digits"> 353 <option value="colourpalette" selected="True" >Colour palette</option>
302 <add value="#" /> 354 <option value="manual_colour">Manual selection</option>
303 </valid> 355 </param>
304 </sanitizer> 356 <when value="manual_colour">
357 <repeat name="colours" title="Colours for the plots" min="1" max="50">
358 <param name="annotation_color" type="color" label="Colours" value="#ff00ff" help="Numbers of colours should be the same as number of components">
359 <sanitizer>
360 <valid initial="string.letters,string.digits">
361 <add value="#" />
362 </valid>
363 </sanitizer>
364 </param>
365 </repeat>
366 </when>
367 <when value="colourpalette">
368 <param name="palettes" type="select" display="radio" label="Select a colourpalette">
369 <option value="hue_pal()" selected="True">hue</option>
370 <option value="rainbow">rainbow</option>
371 <option value="heat.colors">heat colors</option>
372 <option value="terrain.colors">terrain colors</option>
373 <option value="topo.colors">topo colors</option>
374 <option value="cm.colors">cm colors</option>
305 </param> 375 </param>
306 </repeat> 376 </when>
307 <param name="output_rdata" type="boolean" label="Results as .RData output"/> 377 </conditional>
308 <param name="setseed" type="integer" value="1" label="set seed" help="Use same value to reproduce previous results"/> 378 <param name="output_rdata" type="boolean" label="Results as .RData output"/>
379 <param name="setseed" type="integer" value="1" label="set seed" help="Use same value to reproduce previous results"/>
309 </inputs> 380 </inputs>
310 <outputs> 381 <outputs>
311 <data format="pdf" name="segmentationimages" from_work_dir="segmentationpdf.pdf" label = "${tool.name} on ${on_string}: results"/> 382 <data format="pdf" name="segmentationimages" from_work_dir="segmentationpdf.pdf" label = "${tool.name} on ${on_string}: results"/>
312 <data format="tabular" name="mzfeatures" label="${tool.name} on ${on_string}: features"/> 383 <data format="tabular" name="mzfeatures" label="${tool.name} on ${on_string}: features"/>
313 <data format="tabular" name="pixeloutput" label="${tool.name} on ${on_string}: pixels"/> 384 <data format="tabular" name="pixeloutput" label="${tool.name} on ${on_string}: pixels"/>
317 <data format="svg" name="svg_output" from_work_dir="svg_pixel_output.svg" label="${tool.name} on ${on_string}: image.svg"> 388 <data format="svg" name="svg_output" from_work_dir="svg_pixel_output.svg" label="${tool.name} on ${on_string}: image.svg">
318 <filter>svg_pixelimage</filter> 389 <filter>svg_pixelimage</filter>
319 </data> 390 </data>
320 </outputs> 391 </outputs>
321 <tests> 392 <tests>
322 <test> 393 <test expect_num_outputs="4">
323 <expand macro="infile_imzml"/>
324 <param name="segmentationtool" value="pca"/>
325 <repeat name="colours">
326 <param name="feature_color" value="#ff00ff"/>
327 </repeat>
328 <repeat name="colours">
329 <param name="feature_color" value="#0000FF"/>
330 </repeat>
331 <output name="segmentationimages" file="pca_imzml.pdf" compare="sim_size"/>
332 <output name="mzfeatures">
333 <assert_contents>
334 <has_text text="300.1667" />
335 <has_text text="300.25" />
336 <has_text text="-4.234458e-04" />
337 <has_text text="3.878545e-10" />
338 <has_n_columns n="3" />
339 </assert_contents>
340 </output>
341 <output name="pixeloutput" file="scores_pca.tabular"/>
342 </test>
343 <test>
344 <expand macro="infile_imzml"/> 394 <expand macro="infile_imzml"/>
345 <param name="segmentationtool" value="kmeans"/> 395 <param name="segmentationtool" value="kmeans"/>
346 <param name="kmeans_r" value="1:3"/> 396 <param name="kmeans_r" value="1:3"/>
347 <param name="kmeans_k" value="2,3"/> 397 <param name="kmeans_k" value="2,3"/>
348 <param name="kmeans_toplabels" value="20"/> 398 <param name="kmeans_toplabels" value="20"/>
359 <output name="segmentationimages" file="kmeans_analyze.pdf" compare="sim_size"/> 409 <output name="segmentationimages" file="kmeans_analyze.pdf" compare="sim_size"/>
360 <output name="mzfeatures" file="toplabels_skm.tabular"/> 410 <output name="mzfeatures" file="toplabels_skm.tabular"/>
361 <output name="pixeloutput" file="cluster_skm.tabular"/> 411 <output name="pixeloutput" file="cluster_skm.tabular"/>
362 <output name="segmentation_rdata" file="cluster_skm.RData" compare="sim_size"/> 412 <output name="segmentation_rdata" file="cluster_skm.RData" compare="sim_size"/>
363 </test> 413 </test>
364 <test> 414 <test expect_num_outputs="3">
365 <param name="infile" value="preprocessed.RData" ftype="rdata"/> 415 <param name="infile" value="preprocessed.RData" ftype="rdata"/>
366 <param name="segmentationtool" value="centroids"/> 416 <param name="segmentationtool" value="centroids"/>
367 <param name="centroids_r" value="1,2"/> 417 <param name="centroids_r" value="1,2"/>
368 <param name="centroids_k" value="3"/> 418 <param name="centroids_k" value="3"/>
369 <param name="centroids_toplabels" value="50"/> 419 <param name="centroids_toplabels" value="50"/>
378 </repeat> 428 </repeat>
379 <output name="segmentationimages" file="centroids_rdata.pdf" compare="sim_size"/> 429 <output name="segmentationimages" file="centroids_rdata.pdf" compare="sim_size"/>
380 <output name="mzfeatures" file="toplabels_ssc.tabular"/> 430 <output name="mzfeatures" file="toplabels_ssc.tabular"/>
381 <output name="pixeloutput" file="classes_ssc.tabular"/> 431 <output name="pixeloutput" file="classes_ssc.tabular"/>
382 </test> 432 </test>
383 <test> 433 <test expect_num_outputs="3">
384 <expand macro="processed_infile_imzml"/> 434 <expand macro="processed_infile_imzml"/>
385 <conditional name="processed_cond"> 435 <conditional name="processed_cond">
386 <param name="processed_file" value="processed"/> 436 <param name="processed_file" value="processed"/>
387 <param name="accuracy" value="200"/> 437 <param name="accuracy" value="200"/>
388 <param name="units" value="ppm"/> 438 <param name="units" value="ppm"/>
399 <param name="feature_color" value="#00C957"/> 449 <param name="feature_color" value="#00C957"/>
400 </repeat> 450 </repeat>
401 <repeat name="colours"> 451 <repeat name="colours">
402 <param name="feature_color" value="#B0171F"/> 452 <param name="feature_color" value="#B0171F"/>
403 </repeat> 453 </repeat>
404 <output name="segmentationimages" file="centroids_proc.pdf" compare="sim_size"/> 454 <output name="segmentationimages" ftype="pdf">
455 <assert_contents>
456 <has_size value="1206464" delta="100"/>
457 </assert_contents>
458 </output>
405 <output name="pixeloutput" file="classes_proc.tabular"/> 459 <output name="pixeloutput" file="classes_proc.tabular"/>
406 <output name="mzfeatures"> 460 <output name="mzfeatures">
407 <assert_contents> 461 <assert_contents>
408 <has_text text="100.642" /> 462 <has_text text="177.926436700994"/>
409 <has_text text="101.816297645089" /> 463 <has_text text="192.976841249583"/>
410 <has_text text="1.34687866193417" /> 464 <has_text text="0.818218808031712"/>
411 <has_text text="6.43855724908388" /> 465 <has_text text="0.469980133537009"/>
412 <has_n_columns n="9" /> 466 <has_n_columns n="7"/>
413 <has_n_lines n="101" /> 467 <has_n_lines n="101"/>
414 </assert_contents> 468 </assert_contents>
415 </output> 469 </output>
416 </test> 470 </test>
417 </tests> 471 </tests>
418 <help> 472 <help>