comparison msi_filtering.xml @ 7:73b5a754f35c draft

planemo upload for repository https://github.com/galaxyproteomics/tools-galaxyp/tree/master/tools/msi_filtering commit 620a469e20836b921b6c0147421c8a4268b66ebd
author galaxyp
date Wed, 15 Aug 2018 05:40:01 -0400
parents bab12ded74a5
children 262db9893c6f
comparison
equal deleted inserted replaced
6:bab12ded74a5 7:73b5a754f35c
1 <tool id="mass_spectrometry_imaging_filtering" name="MSI filtering" version="1.10.0.4"> 1 <tool id="mass_spectrometry_imaging_filtering" name="MSI filtering" version="1.10.0.5">
2 <description>tool for filtering mass spectrometry imaging data</description> 2 <description>tool for filtering mass spectrometry imaging data</description>
3 <requirements> 3 <requirements>
4 <requirement type="package" version="1.10.0">bioconductor-cardinal</requirement> 4 <requirement type="package" version="1.10.0">bioconductor-cardinal</requirement>
5 <requirement type="package" version="2.2.1">r-gridextra</requirement> 5 <requirement type="package" version="2.2.1">r-gridextra</requirement>
6 <requirement type="package" version="2.2.1">r-ggplot2</requirement> 6 <requirement type="package" version="2.2.1">r-ggplot2</requirement>
30 30
31 ################################# load libraries and read file ################# 31 ################################# load libraries and read file #################
32 32
33 33
34 library(Cardinal) 34 library(Cardinal)
35 library(ggplot2)
35 library(gridExtra) 36 library(gridExtra)
36 library(ggplot2)
37
38 37
39 #if $infile.ext == 'imzml' 38 #if $infile.ext == 'imzml'
40 #if str($processed_cond.processed_file) == "processed": 39 #if str($processed_cond.processed_file) == "processed":
41 msidata <- readImzML('infile', mass.accuracy=$processed_cond.accuracy, units.accuracy = "$processed_cond.units") 40 msidata <- readImzML('infile', mass.accuracy=$processed_cond.accuracy, units.accuracy = "$processed_cond.units")
42 #else 41 #else
84 { 83 {
85 84
86 85
87 ## prepare dataframe for QC of pixel distribution (will be overwritten in filtering of pixels condition) 86 ## prepare dataframe for QC of pixel distribution (will be overwritten in filtering of pixels condition)
88 position_df = cbind(coord(msidata)[,1:2], rep("$infile.element_identifier", times=ncol(msidata))) 87 position_df = cbind(coord(msidata)[,1:2], rep("$infile.element_identifier", times=ncol(msidata)))
89 88 colnames(position_df)[3] = "annotation"
90 89
91 ###################################### Filtering of pixels ##################### 90 ###################################### Filtering of pixels #####################
92 ################################################################################ 91 ################################################################################
93 92
94 #################### Pixels in the one column format "x=,y=" ##################### 93 #################### Pixels in the one column format "x=,y=" #####################
101 startingrow = $pixels_cond.pixel_header+1 100 startingrow = $pixels_cond.pixel_header+1
102 numberpixels = length(startingrow:nrow(input_list)) 101 numberpixels = length(startingrow:nrow(input_list))
103 valid_entries = input_list[startingrow:nrow(input_list),$pixels_cond.pixel_column] %in% names(pixels(msidata)) 102 valid_entries = input_list[startingrow:nrow(input_list),$pixels_cond.pixel_column] %in% names(pixels(msidata))
104 validpixels = sum(valid_entries) 103 validpixels = sum(valid_entries)
105 valid_annotations = input_list[valid_entries,c($pixels_cond.pixel_column, $pixels_cond.annotation_column)] 104 valid_annotations = input_list[valid_entries,c($pixels_cond.pixel_column, $pixels_cond.annotation_column)]
105 colnames(valid_annotations) = c("pixel_coordinates", "annotation")
106 106
107 ## for valid pixels: filter file for pixels and create dataframe with x,y,annotation for QC 107 ## for valid pixels: filter file for pixels and create dataframe with x,y,annotation for QC
108 if (validpixels != 0){ 108 if (validpixels != 0){
109 ## filter file for pixels 109 ## filter file for pixels
110 pixelsofinterest = pixels(msidata)[names(pixels(msidata)) %in% valid_annotations[,1]] 110 pixelsofinterest = pixels(msidata)[names(pixels(msidata)) %in% valid_annotations[,1]]
111 msidata = msidata[,pixelsofinterest] 111 msidata = msidata[,pixelsofinterest]
112 ## position_df for QC 112 ## position_df for QC
113 pixel_coords = coord(msidata)[names(pixels(msidata)) %in% valid_annotations[,1],1:2] 113
114 position_df = cbind(pixel_coords, valid_annotations[,2]) 114
115 ###pixel_coords = coord(msidata)[names(pixels(msidata)) %in% valid_annotations[,1],1:2]
116 pixel_coords = cbind(rownames(coord(msidata)), coord(msidata))
117 colnames(pixel_coords)[1] = "pixel_coordinates"
118
119 ###position_df = cbind(pixel_coords, valid_annotations[,2])
120 position_df = merge(pixel_coords, valid_annotations)
121 position_df\$annotation = factor(position_df\$annotation)
122
115 }else{ 123 }else{
116 msidata = msidata[,0] 124 msidata = msidata[,0]
117 validpixels=0} 125 validpixels=0}
118 126
119 ############ Pixels in two columns format: x and y in different columns ############# 127 ############ Pixels in two columns format: x and y in different columns #############
127 startingrow = $pixels_cond.pixel_header+1 135 startingrow = $pixels_cond.pixel_header+1
128 numberpixels = length(startingrow:nrow(input_list)) 136 numberpixels = length(startingrow:nrow(input_list))
129 inputpixels = input_list[startingrow:nrow(input_list),c($pixels_cond.pixel_column_x, $pixels_cond.pixel_column_y, $pixels_cond.annotation_column_xy)] 137 inputpixels = input_list[startingrow:nrow(input_list),c($pixels_cond.pixel_column_x, $pixels_cond.pixel_column_y, $pixels_cond.annotation_column_xy)]
130 colnames(inputpixels) = c("x", "y", "annotation") 138 colnames(inputpixels) = c("x", "y", "annotation")
131 position_df = merge(coord(msidata)[,1:2], inputpixels, by=c("x", "y"), all.x=TRUE) 139 position_df = merge(coord(msidata)[,1:2], inputpixels, by=c("x", "y"), all.x=TRUE)
132
133 validpixels = nrow(position_df) 140 validpixels = nrow(position_df)
141 colnames(position_df)[3] = "annotation"
142 position_df\$annotation = factor(position_df\$annotation)
134 143
135 ## for valid pixels: filter file for pixels 144 ## for valid pixels: filter file for pixels
136 if (validpixels != 0){ 145 if (validpixels != 0){
137 pixelvector = character() 146 pixelvector = character()
138 for (pixel in 1:nrow(position_df)){ 147 for (pixel in 1:nrow(position_df)){
157 msidata = msidata[, coord(msidata)\$y <= $pixels_cond.max_y_range & coord(msidata)\$y >= $pixels_cond.min_y_range] 166 msidata = msidata[, coord(msidata)\$y <= $pixels_cond.max_y_range & coord(msidata)\$y >= $pixels_cond.min_y_range]
158 }else{ 167 }else{
159 msidata = msidata[,0] 168 msidata = msidata[,0]
160 print("no valid pixel found")} 169 print("no valid pixel found")}
161 170
171 ## update position_df for filtered pixels
172 position_df = cbind(coord(msidata)[,1:2], rep("$infile.element_identifier", times=ncol(msidata)))
173 colnames(position_df)[3] = "annotation"
174 position_df\$annotation = factor(position_df\$annotation)
175
162 #elif str($pixels_cond.pixel_filtering) == "none": 176 #elif str($pixels_cond.pixel_filtering) == "none":
163 print("no pixel filtering") 177 print("no pixel filtering")
164 178
165 numberpixels = 0 179 numberpixels = 0
166 validpixels = 0 180 validpixels = 0
175 ############################################################################## 189 ##############################################################################
176 190
177 ####################### Keep m/z from tabular file ######################### 191 ####################### Keep m/z from tabular file #########################
178 192
179 ## feature filtering only when pixels/features/intensities are left 193 ## feature filtering only when pixels/features/intensities are left
180 if (sum(spectra(msidata)[], na.rm=TRUE) > 0) 194 npeaks_before_filtering= sum(spectra(msidata)[]>0, na.rm=TRUE)
195
196
197
198 if (npeaks_before_filtering > 0)
199
181 { 200 {
182 201
183 #if str($features_cond.features_filtering) == "features_list": 202 #if str($features_cond.features_filtering) == "features_list":
184 print("feature list") 203 print("feature list")
185 204
367 plot(0,type='n',axes=FALSE,ann=FALSE) 386 plot(0,type='n',axes=FALSE,ann=FALSE)
368 title(main=paste0("Qualitycontrol of filtering tool for file: \n\n", "$infile.display_name")) 387 title(main=paste0("Qualitycontrol of filtering tool for file: \n\n", "$infile.display_name"))
369 grid.table(property_df, rows= NULL) 388 grid.table(property_df, rows= NULL)
370 389
371 ## QC report with more than value-table: only when pixels/features/intensities are left 390 ## QC report with more than value-table: only when pixels/features/intensities are left
372 if (sum(spectra(msidata)[], na.rm=TRUE) > 0) 391 if (npeaks2 > 0)
373 { 392 {
374 ### visual pixel control 393 ### visual pixel control
375 394
376 colnames(position_df)[3] = "annotation_name" 395 pixel_image = ggplot(position_df, aes(x=x, y=y, fill=annotation))+
377 pixel_image = ggplot(position_df, aes(x=x, y=y, fill=annotation_name))+ 396 geom_tile(height = 1, width=1)+
378 geom_tile() +
379 coord_fixed()+ 397 coord_fixed()+
380 ggtitle("Spatial orientation of combined data")+ 398 ggtitle("Spatial orientation of filtered pixels")+
381 theme_bw()+ 399 theme_bw()+
382 theme(text=element_text(family="ArialMT", face="bold", size=15))+ 400 theme(plot.title = element_text(hjust = 0.5))+
401 theme(text=element_text(family="ArialMT", face="bold", size=12))+
383 theme(legend.position="bottom",legend.direction="vertical")+ 402 theme(legend.position="bottom",legend.direction="vertical")+
384 guides(fill=guide_legend(ncol=4,byrow=TRUE)) 403 guides(fill=guide_legend(ncol=4,byrow=TRUE))
385 coord_labels = aggregate(cbind(x,y)~annotation_name, data=position_df, mean, na.rm=TRUE, na.action="na.pass")
386 coord_labels\$file_number = gsub( "_.*$", "", coord_labels\$annotation_name)
387 404
388 print(pixel_image) 405 print(pixel_image)
389 406
390 ### control features which are removed 407 ### control features which are removed
391 hist(mz(msidata), xlab="m/z", main="Kept m/z values") 408 hist(mz(msidata), xlab="m/z", main="Kept m/z values")
513 <composite_data value="Example_Continuous.ibd"/> 530 <composite_data value="Example_Continuous.ibd"/>
514 </param> 531 </param>
515 <param name="pixel_filtering" value="single_column"/> 532 <param name="pixel_filtering" value="single_column"/>
516 <param name="single_pixels" ftype="tabular" value = "inputpixels.tabular"/> 533 <param name="single_pixels" ftype="tabular" value = "inputpixels.tabular"/>
517 <param name="pixel_column" value="1"/> 534 <param name="pixel_column" value="1"/>
535 <param name="annotation_column" value="2"/>
518 <param name="features_filtering" value="features_list"/> 536 <param name="features_filtering" value="features_list"/>
519 <param name="inputfeatures" ftype="tabular" value = "inputfeatures.tabular"/> 537 <param name="inputfeatures" ftype="tabular" value = "inputfeatures.tabular"/>
520 <param name="feature_column" value="2"/> 538 <param name="feature_column" value="2"/>
521 <param name="feature_header" value="1"/> 539 <param name="feature_header" value="1"/>
522 <output name="filtering_qc" file="imzml_filtered.pdf" compare="sim_size" delta="20000"/> 540 <output name="filtering_qc" file="imzml_filtered.pdf" compare="sim_size" delta="20000"/>
523 <output name="msidata_filtered" file="imzml_filtered.RData" compare="sim_size" /> 541 <output name="msidata_filtered" file="imzml_filtered.RData" compare="sim_size"/>
524 </test> 542 </test>
525 <test expect_num_outputs="2"> 543 <test expect_num_outputs="2">
526 <param name="infile" value="" ftype="imzml"> 544 <param name="infile" value="" ftype="imzml">
527 <composite_data value="Example_Continuous.imzML"/> 545 <composite_data value="Example_Continuous.imzML"/>
528 <composite_data value="Example_Continuous.ibd"/> 546 <composite_data value="Example_Continuous.ibd"/>
531 <param name="min_x_range" value="10"/> 549 <param name="min_x_range" value="10"/>
532 <param name="max_x_range" value="20"/> 550 <param name="max_x_range" value="20"/>
533 <param name="min_y_range" value="2"/> 551 <param name="min_y_range" value="2"/>
534 <param name="max_y_range" value="2"/> 552 <param name="max_y_range" value="2"/>
535 <output name="filtering_qc" file="imzml_filtered2.pdf" compare="sim_size" delta="20000"/> 553 <output name="filtering_qc" file="imzml_filtered2.pdf" compare="sim_size" delta="20000"/>
536 <output name="msidata_filtered" file="imzml_filtered2.RData" compare="sim_size" /> 554 <output name="msidata_filtered" file="imzml_filtered2.RData" compare="sim_size"/>
537 </test> 555 </test>
538 <test expect_num_outputs="3"> 556 <test expect_num_outputs="3">
539 <param name="infile" value="" ftype="imzml"> 557 <param name="infile" value="" ftype="imzml">
540 <composite_data value="Example_Continuous.imzML"/> 558 <composite_data value="Example_Continuous.imzML"/>
541 <composite_data value="Example_Continuous.ibd"/> 559 <composite_data value="Example_Continuous.ibd"/>
548 <param name="features_filtering" value="features_range"/> 566 <param name="features_filtering" value="features_range"/>
549 <param name="min_mz" value="350" /> 567 <param name="min_mz" value="350" />
550 <param name="max_mz" value="500"/> 568 <param name="max_mz" value="500"/>
551 <param name="output_matrix" value="True"/> 569 <param name="output_matrix" value="True"/>
552 <output name="filtering_qc" file="imzml_filtered3.pdf" compare="sim_size" delta="20000"/> 570 <output name="filtering_qc" file="imzml_filtered3.pdf" compare="sim_size" delta="20000"/>
553 <output name="msidata_filtered" file="imzml_filtered3.RData" compare="sim_size" /> 571 <output name="msidata_filtered" file="imzml_filtered3.RData" compare="sim_size"/>
554 <output name="matrixasoutput" file="imzml_matrix3.tabular"/> 572 <output name="matrixasoutput" file="imzml_matrix3.tabular"/>
555 </test> 573 </test>
556 <test expect_num_outputs="2"> 574 <test expect_num_outputs="2">
557 <param name="infile" value="" ftype="imzml"> 575 <param name="infile" value="" ftype="imzml">
558 <composite_data value="Example_Continuous.imzML"/> 576 <composite_data value="Example_Continuous.imzML"/>
561 <param name="pixel_filtering" value="two_columns"/> 579 <param name="pixel_filtering" value="two_columns"/>
562 <param name="two_columns_pixel" ftype="tabular" value = "inputpixels_2column.tabular"/> 580 <param name="two_columns_pixel" ftype="tabular" value = "inputpixels_2column.tabular"/>
563 <param name="pixel_column_x" value="1"/> 581 <param name="pixel_column_x" value="1"/>
564 <param name="pixel_column_y" value="3"/> 582 <param name="pixel_column_y" value="3"/>
565 <param name="annotation_column_xy" value="2"/> 583 <param name="annotation_column_xy" value="2"/>
566 <param name="features_filtering" value="features_list"/>
567 <param name="inputfeatures" ftype="tabular" value = "inputcalibrantfile2.txt"/>
568 <param name="feature_column" value="1"/>
569 <param name="feature_header" value="0"/>
570 <output name="filtering_qc" file="imzml_filtered4.pdf" compare="sim_size" delta="20000"/> 584 <output name="filtering_qc" file="imzml_filtered4.pdf" compare="sim_size" delta="20000"/>
571 <output name="msidata_filtered" file="imzml_filtered4.RData" compare="sim_size" /> 585 <output name="msidata_filtered" file="imzml_filtered4.RData" compare="sim_size"/>
572 </test> 586 </test>
573 <test expect_num_outputs="2"> 587 <test expect_num_outputs="2">
574 <param name="infile" value="" ftype="imzml"> 588 <param name="infile" value="" ftype="imzml">
575 <composite_data value="Example_Continuous.imzML"/> 589 <composite_data value="Example_Continuous.imzML"/>
576 <composite_data value="Example_Continuous.ibd"/> 590 <composite_data value="Example_Continuous.ibd"/>