diff msi_ion_images.xml @ 5:2b9fa240e261 draft

planemo upload for repository https://github.com/galaxyproteomics/tools-galaxyp/tree/master/tools/msi_ion_images commit a7be47698f53eb4f00961192327d93e8989276a7
author galaxyp
date Mon, 11 Jun 2018 17:33:52 -0400
parents 9746576123c9
children 5a5b5a8fa8a0
line wrap: on
line diff
--- a/msi_ion_images.xml	Mon May 28 12:37:17 2018 -0400
+++ b/msi_ion_images.xml	Mon Jun 11 17:33:52 2018 -0400
@@ -1,6 +1,6 @@
-<tool id="mass_spectrometry_imaging_ion_images" name="MSI ion images" version="1.10.0.0">
+<tool id="mass_spectrometry_imaging_ion_images" name="MSI ion images" version="1.10.0.1">
     <description>
-        mass spectrometry imaging heatmaps
+        mass spectrometry imaging m/z heatmaps
     </description>
     <requirements>
         <requirement type="package" version="1.10.0">bioconductor-cardinal</requirement>
@@ -45,9 +45,9 @@
 
 ###################################### file properties in numbers ##############
 
-## Number of features (mz)
+## Number of features (m/z)
 maxfeatures = length(features(msidata))
-## Range mz
+## Range m/z
 minmz = round(min(mz(msidata)), digits=2)
 maxmz = round(max(mz(msidata)), digits=2)
 ## Number of spectra (pixels)
@@ -64,7 +64,7 @@
 medint = round(median(spectra(msidata)[]), digits=2)
 ## Number of intensities > 0
 npeaks= sum(spectra(msidata)[]>0)
-## Spectra multiplied with mz (potential number of peaks)
+## Spectra multiplied with m/z (potential number of peaks)
 numpeaks = ncol(spectra(msidata)[])*nrow(spectra(msidata)[])
 ## Percentage of intensities > 0
 percpeaks = round(npeaks/numpeaks*100, digits=2)
@@ -103,43 +103,34 @@
     peakpickinginfo=processinginfo@peakPicking
 }
 
-##################################### read and filter input masses ##############
+##################################### read and filter input m/z ##############
 
 input_list = read.delim("$massfile", header = FALSE, stringsAsFactors = FALSE)
 
-### in case input file had only one column with mz values but not names, duplicate mz values and use as names:
+### in case input file had only one column with m/z values but not names, duplicate m/z values and use as names:
+if (ncol(input_list) == 1){
+    input_list = cbind(input_list, input_list)}
 
-if (ncol(input_list) == 1)
-{
-    input_list = cbind(input_list, input_list)
-}
+### calculate how many input m/z are valid: 
+inputmasses = input_list[input_list[,1]>minmz & input_list[,1]<maxmz,]
+inputmz = as.numeric(inputmasses[,1])
+inputnames = as.character(inputmasses[,2])
 
-### calculate how many input masses are valid: 
-inputmasses = input_list[input_list[,1]>minmz & input_list[,1]<maxmz,]
-
-inputmz = inputmasses[,1]
-inputnames = inputmasses[,2]
 
-if (length(inputmz) == 1)
-{
-    countpixels = sum(spectra(msidata)[features(msidata, mz = inputmz), ] >0)
-    percentpixels = round(countpixels/pixelcount*100, digits=1)
-    valuesdataframe = cbind(inputmz, cbind(countpixels, percentpixels))
-    write.table(valuesdataframe, file="$pixel_count", quote = FALSE, row.names = FALSE, col.names=TRUE, sep = "\t")
-}else if (length(inputmz) >1) {
-    countpixels = rowSums(spectra(msidata)[features(msidata, mz=inputmz),] >0)
-    percentpixels = round(countpixels/pixelcount*100, digits=1)
-    valuesdataframe = cbind(inputmz, cbind(countpixels, percentpixels))
-    write.table(valuesdataframe, file="$pixel_count", quote = FALSE, row.names = FALSE, col.names=TRUE, sep = "\t")
-}else{
-    valuesdataframe = data.frame(0,0)
-    write.table(valuesdataframe, file="$pixel_count", quote = FALSE, row.names = FALSE, col.names=TRUE, sep = "\t")
-}
+############################## PDF #############################################
+################################################################################
 
-############################ summarize file properties in numbers ##############
+pdf("heatmaps.pdf", fonts = "Times", pointsize = 12)
+plot(0,type='n',axes=FALSE,ann=FALSE)
+#if not $filename:
+    #set $filename = $infile.display_name
+#end if
+title(main=paste("\nHeatmap images\n\n", "Filename:\n", "$filename"))
 
-properties = c("Number of mz features",
-               "Range of mz values [Da]",
+############################# I) numbers ####################################
+
+properties = c("Number of m/z features",
+               "Range of m/z values [Da]",
                "Number of pixels", 
                "Range of x coordinates", 
                "Range of y coordinates",
@@ -153,7 +144,7 @@
                "Baseline reduction",
                "Peak picking",
                "Centroided", 
-                paste0("# valid masses in \n", "$massfile.display_name"))
+                paste0("# valid m/z in \n", "$massfile.display_name"))
 
 values = c(paste0(maxfeatures), 
            paste0(minmz, " - ", maxmz), 
@@ -174,38 +165,53 @@
 
 property_df = data.frame(properties, values)
 
-
-############################## PDF #############################################
-
-pdf("heatmaps.pdf", fonts = "Times", pointsize = 12)
-plot(0,type='n',axes=FALSE,ann=FALSE)
-#if not $filename:
-    #set $filename = $infile.display_name
-#end if
-title(main=paste("\nHeatmap images\n\n", "Filename:\n", "$filename"))
-
-############################# I) numbers ####################################
-
 grid.table(property_df, rows= NULL)
 
 ############################# II) images ####################################
 
-### only plot images when file has peaks and valid input mz: 
+### only plot images when file has peaks and valid input m/z: 
+
+if (npeaks > 0){
+    if (length(inputmz) != 0){
+      for (mass in 1:length(inputmz)){
+
+###standard image
+
+#if str($image_cond.image_type) == "standard_image":
+    print("standard image")
+
+    print(image(msidata, mz=inputmz[mass],plusminus = $plusminus_dalton, contrast.enhance = "$image_contrast", 
+    smooth.image = "$image_smoothing", strip=$strip, colorkey=$colorkey,
+    main= paste0(inputnames[mass], " (", round(inputmz[mass], digits = 2)," ± ", $plusminus_dalton, " Da)")))}
+
+
+###lattice image
 
-if (npeaks > 0)
-{
-    if (length(inputmz) != 0)
-    {
-      for (mass in 1:length(inputmz))
-      {
-      print(image(msidata, mz=inputmz[mass], strip = strip.custom(bg="lightgrey", par.strip.text=list(col="black", cex=.9)),
-              lattice=TRUE, plusminus = $plusminus_dalton, contrast.enhance = "$image_contrast", smooth.image = "$image_smoothing", 
-              main= paste0(mass, ") ", inputnames[mass], " (", round(inputmz[mass], digits = 2)," ± ", $plusminus_dalton, " Da)")))
-      }
-    } else {print("The input masses were invalid")}
+#elif str($image_cond.image_type) == "lattice_image":
+    print("lattice image")
+
+    #if str($strip) =="TRUE": 
+
+    print(image(msidata, mz=inputmz[mass], strip = strip.custom(bg="lightgrey", par.strip.text=list(col="black", cex=.9)),
+    lattice=TRUE, plusminus = $plusminus_dalton, contrast.enhance = "$image_contrast", smooth.image = "$image_smoothing", 
+    colorkey=$colorkey,
+    main= paste0(inputnames[mass], " (", round(inputmz[mass], digits = 2)," ± ", $plusminus_dalton, " Da)")))}
+
+    #elif str($strip) =="FALSE": 
+
+    print(image(msidata, mz=inputmz[mass], strip = $strip,
+    lattice=TRUE, plusminus = $plusminus_dalton, contrast.enhance = "$image_contrast", smooth.image = "$image_smoothing", 
+    colorkey=$colorkey,
+    main= paste0(inputnames[mass], " (", round(inputmz[mass], digits = 2)," ± ", $plusminus_dalton, " Da)")))}
+
+    #end if
+
+#end if 
+
+    } else {print("The input m/z were invalid")}
     dev.off()
 }else{
-  print("inputfile has no intensities > 0")
+    print("inputfile has no intensities > 0")
 dev.off()
 }
     ]]></configfile>
@@ -213,9 +219,9 @@
     <inputs>
         <param name="infile" type="data" format="imzml,rdata,analyze75" label="Inputfile as imzML, Analyze7.5 or Cardinal MSImageSet saved as RData"
             help="Upload composite datatype imzml (ibd+imzML) or analyze75 (hdr+img+t2m) or regular upload .RData (Cardinal MSImageSet)"/>
-        <param name="filename" type="text" value="" label="Title" help="will appear in the quality report. If nothing given it will take the dataset name"/>
-        <param name="massfile" type="data" format="tabular" label="Tabular file with masses and names"
-            help="first column mass (m/z), second column mass name, tab separated file"/>
+        <param name="filename" type="text" value="" label="Title" help="will appear in the pdf output. If nothing given it will take the dataset name"/>
+        <param name="massfile" type="data" format="tabular" label="Tabular file with m/z and names"
+            help="first column m/z, second column m/z name, tab separated file"/>
         <param name="image_contrast" type="select" label="Select a contrast enhancement function for the heatmap images" help="The 'histogram' equalization method flatterns the distribution of intensities. The hotspot 'suppression' method uses thresholding to reduce the intensities of hotspots">
             <option value="none" selected="True">none</option>
             <option value="suppression">suppression</option>
@@ -226,11 +232,20 @@
             <option value="gaussian">gaussian</option>
             <option value="adaptive">adaptive</option>
         </param>
-        <param name="plusminus_dalton" value="0.25" type="float" label="Mass range" help="plusminus mass window in Dalton"/>
+        <param name="plusminus_dalton" value="0.25" type="float" label="M/z range" help="plusminus m/z window in Dalton"/>
+        <param name="strip" type="boolean" checked="True" display="radio" truevalue="TRUE" falsevalue="FALSE" label="Display m/z value in plot"/>
+        <param name="colorkey" type="boolean" checked="True" display="radio"  truevalue="TRUE" falsevalue="FALSE" label="Display colorkey in plot"/>
+        <conditional name="image_cond">
+            <param name="image_type" type="select" label="Select the image type">
+                <option value="standard_image" selected="True">standard</option>
+                <option value="lattice_image">lattice</option>
+            </param>
+        <when value="standard_image"/>
+        <when value="lattice_image"/>
+        </conditional>
     </inputs>
     <outputs>
-        <data format="pdf" name="plots" from_work_dir="heatmaps.pdf" label = "${tool.name} ${on_string}"/>
-        <data format="tabular" name="pixel_count" label="Number of peaks (intensity > 0) per mz"/>
+        <data format="pdf" name="plots" from_work_dir="heatmaps.pdf" label = "$infile.display_name heatmaps"/>
     </outputs>
     <tests>
         <test>
@@ -242,8 +257,10 @@
             <param name="plusminus_dalton" value="0.25"/>
             <param name="filename" value="Testfile_imzml"/>
             <param name="image_contrast" value="histogram"/>
+            <param name="strip" value="True"/>
+            <param name="colorkey" value="True"/>
+            <param name="image_type" value="lattice_image"/>
             <output name="plots" file="Heatmaps_imzml.pdf" compare="sim_size" delta="20000"/>
-            <output name="pixel_count" file="tabular_imzml.tabular"/>
         </test>
         <test>
             <param name="infile" value="" ftype="analyze75">
@@ -255,24 +272,28 @@
             <param name="plusminus_dalton" value="0.5"/>
             <param name="filename" value="Testfile_analyze75"/>
             <param name="image_smoothing" value="gaussian"/>
+            <param name="strip" value="False"/>
+            <param name="colorkey" value="True"/>
             <output name="plots" file="Heatmaps_analyze75.pdf" compare="sim_size" delta="20000"/>
-            <output name="pixel_count" file="tabular_analyze75.tabular"/>
         </test>
         <test>
             <param name="infile" value="preprocessed.rdata" ftype="rdata"/>
             <param name="massfile" value="inputpeptides.tabular" ftype="tabular"/>
             <param name="plusminus_dalton" value="0.5"/>
+            <param name="strip" value="True"/>
+            <param name="colorkey" value="True"/>
+            <param name="image_type" value="lattice_image"/>
             <param name="filename" value="Testfile_rdata"/>
             <output name="plots" file="Heatmaps_rdata.pdf" compare="sim_size" delta="20000"/>
-            <output name="pixel_count" file="tabular_rdata.tabular"/>
         </test>
         <test>
             <param name="infile" value="empty_spectra.rdata" ftype="rdata"/>
             <param name="massfile" value="inputpeptides2.tabular" ftype="tabular"/>
             <param name="plusminus_dalton" value="0.5"/>
+            <param name="strip" value="True"/>
+            <param name="colorkey" value="False"/>
             <param name="filename" value="Testfile_rdata"/>
             <output name="plots" file="Heatmaps_LM8_file16.pdf" compare="sim_size" delta="20000"/>
-            <output name="pixel_count" file="tabular_LM8file16.tabular"/>
         </test>
     </tests>
     <help><![CDATA[
@@ -280,32 +301,32 @@
 
 Cardinal is an R package that implements statistical & computational tools for analyzing mass spectrometry imaging datasets. `More information on Cardinal <http://cardinalmsi.org//>`_
 
-This tool uses the Cardinal image function to plot the intensity distribution of interesting masses of mass-spectrometry imaging data. 
+This tool uses the Cardinal image function to plot the intensity distribution of interesting m/z of mass spectrometry imaging data. 
 Input data: 
 
-3 types of mass-spectrometry imaging data can be used:
+3 types of mass spectrometry imaging data can be used:
 
 - imzml file (upload imzml and ibd file via the "composite" function) `Introduction to the imzml format <https://ms-imaging.org/wp/imzml/>`_
 - Analyze7.5 (upload hdr, img and t2m file via the "composite" function)
 - Cardinal "MSImageSet" data (with variable name "msidata", saved as .RData)
 
-Tabular file with masses:
+Tabular file with m/z:
 
 - tab separated file (.tabular), datatype in Galaxy must be tabular otherwise file will not appear in selection window (if Galaxy auto-detection was wrong, datatype can be changed by pressing button with the pen (edit attributes))
-- first column must contain masses (separate point numbers by point, not comma)
-- optionally a second column with names for the masses can be provided
+- first column must contain m/z (separate point numbers by point, not comma)
+- optionally a second column with names for the m/z can be provided
 - no empty fields or letters are allowed in the first column
 
 Output:
 
 - Pdf with the heatmap images
-- Tabular with masses that were in the mass range and their occurence over all pixels (absolute and in %)
 
 Troubleshooting:
 
 - no heatmaps are plotted when tabular file doesn't fulfill the criteria described above
 - no heatmaps are plotted when the input mass spectrometry imaging file has no intensities > 0
-- out of thetabular file only masses with > 1.5-2% pixel coverage can be used with the contrast enhance and image smoothing functions, as both crash when a mass has not enough intensity values
+- the contrast enhance and image smoothing functions require a certain number of m/z with intensities > 0 (empirical value > 2% of spectra)
+- the standard image function should work for all files while the lattice function works not on every file (nicely)
 
     ]]>
     </help>