Mercurial > repos > galaxyp > msi_filtering
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"/> |