Mercurial > repos > galaxyp > msi_ion_images
view msi_ion_images.xml @ 8:6cd561bbb7ee draft
planemo upload for repository https://github.com/galaxyproteomics/tools-galaxyp/tree/master/tools/msi_ion_images commit 620a469e20836b921b6c0147421c8a4268b66ebd
author | galaxyp |
---|---|
date | Wed, 15 Aug 2018 05:40:16 -0400 |
parents | db0cf8eb4395 |
children | 3aac627bd3ee |
line wrap: on
line source
<tool id="mass_spectrometry_imaging_ion_images" name="MSI ion images" version="1.10.0.4"> <description> mass spectrometry imaging m/z heatmaps </description> <requirements> <requirement type="package" version="1.10.0">bioconductor-cardinal</requirement> <requirement type="package" version="2.2.1">r-gridextra</requirement> <requirement type="package" version="0.20-35">r-lattice</requirement> </requirements> <command detect_errors="aggressive"> <![CDATA[ #if $infile.ext == 'imzml' ln -s '${infile.extra_files_path}/imzml' infile.imzML && ln -s '${infile.extra_files_path}/ibd' infile.ibd && #elif $infile.ext == 'analyze75' ln -s '${infile.extra_files_path}/hdr' infile.hdr && ln -s '${infile.extra_files_path}/img' infile.img && ln -s '${infile.extra_files_path}/t2m' infile.t2m && #else ln -s $infile infile.RData && #end if cat '${MSI_heatmaps}' && Rscript '${MSI_heatmaps}' ]]> </command> <configfiles> <configfile name="MSI_heatmaps"><![CDATA[ ################################# load libraries and read file ################# library(Cardinal) library(gridExtra) library(lattice) ## Read MALDI Imaging dataset #if $infile.ext == 'imzml' #if str($processed_cond.processed_file) == "processed": msidata <- readImzML('infile', mass.accuracy=$processed_cond.accuracy, units.accuracy = "$processed_cond.units") #else msidata <- readImzML('infile', attach.only=TRUE) #end if #elif $infile.ext == 'analyze75' msidata = readAnalyze('infile', attach.only=TRUE) #else load('infile.RData') #end if ###################################### file properties in numbers ############## ## Number of features (m/z) maxfeatures = length(features(msidata)) ## Range m/z minmz = round(min(mz(msidata)), digits=2) maxmz = round(max(mz(msidata)), digits=2) ## Number of spectra (pixels) pixelcount = length(pixels(msidata)) ## Range x coordinates minimumx = min(coord(msidata)[,1]) maximumx = max(coord(msidata)[,1]) ## Range y coordinates minimumy = min(coord(msidata)[,2]) maximumy = max(coord(msidata)[,2]) ## Range of intensities minint = round(min(spectra(msidata)[], na.rm=TRUE), digits=2) maxint = round(max(spectra(msidata)[], na.rm=TRUE), digits=2) medint = round(median(spectra(msidata)[], na.rm=TRUE), digits=2) ## Number of intensities > 0 npeaks= sum(spectra(msidata)[]>0, na.rm=TRUE) ## 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) ## Number of empty TICs TICs = colSums(spectra(msidata)[], na.rm=TRUE) NumemptyTIC = sum(TICs == 0) ## Processing informations processinginfo = processingData(msidata) centroidedinfo = processinginfo@centroided # TRUE or FALSE ## if TRUE write processinginfo if no write FALSE ## normalization if (length(processinginfo@normalization) == 0) { normalizationinfo='FALSE' } else { normalizationinfo=processinginfo@normalization } ## smoothing if (length(processinginfo@smoothing) == 0) { smoothinginfo='FALSE' } else { smoothinginfo=processinginfo@smoothing } ## baseline if (length(processinginfo@baselineReduction) == 0) { baselinereductioninfo='FALSE' } else { baselinereductioninfo=processinginfo@baselineReduction } ## peak picking if (length(processinginfo@peakPicking) == 0) { peakpickinginfo='FALSE' } else { peakpickinginfo=processinginfo@peakPicking } ##################################### read and filter input m/z ############## input_list = read.delim("$massfile", header = FALSE, stringsAsFactors = FALSE) ### 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)} ### 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]) ############################## 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 #################################### properties = c("Number of m/z features", "Range of m/z values", "Number of pixels", "Range of x coordinates", "Range of y coordinates", "Range of intensities", "Median of intensities", "Intensities > 0", "Number of zero TICs", "Preprocessing", "Normalization", "Smoothing", "Baseline reduction", "Peak picking", "Centroided", paste0("# valid m/z in \n", "$massfile.display_name")) values = c(paste0(maxfeatures), paste0(minmz, " - ", maxmz), paste0(pixelcount), paste0(minimumx, " - ", maximumx), paste0(minimumy, " - ", maximumy), paste0(minint, " - ", maxint), paste0(medint), paste0(percpeaks, " %"), paste0(NumemptyTIC), paste0(" "), paste0(normalizationinfo), paste0(smoothinginfo), paste0(baselinereductioninfo), paste0(peakpickinginfo), paste0(centroidedinfo), paste0(length(inputmz), "/", length(input_list[,1]))) property_df = data.frame(properties, values) grid.table(property_df, rows= NULL) ############################# II) images #################################### ### 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,ylim= c(maximumy+0.1*maximumy,minimumy-0.1*minimumy), main= paste0(inputnames[mass], " (", round(inputmz[mass], digits = 2)," ± ", $plusminus_dalton, " Da)")))} ###lattice image #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,ylim= c(maximumy+0.1*maximumy,minimumy-0.1*minimumy), 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 ## optional svg output with original coordinates #if str($svg_cond.svg_pixelimage) == "yes_svg": print("svg pixel image") svg(file="svg_pixel_output.svg") par(mar=c(0,0,0,0)) image(msidata, mz = inputmz[1],strip=FALSE, ylim=c(maximumy, minimumy), plusminus = $plusminus_dalton,colorkey = FALSE,axes=FALSE, xlab=NA, ylab=NA,contrast.enhance = "$image_contrast", smooth.image = "$image_smoothing") dev.off() #end if } else {print("The input m/z were invalid")} dev.off() }else{ print("inputfile has no intensities > 0") dev.off() } ]]></configfile> </configfiles> <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)"/> <conditional name="processed_cond"> <param name="processed_file" type="select" label="Is the input file a processed imzML file "> <option value="no_processed" selected="True">not a processed imzML</option> <option value="processed">processed imzML</option> </param> <when value="no_processed"/> <when value="processed"> <param name="accuracy" type="float" value="50" label="Mass accuracy to which the m/z values will be binned" help="This should be set to the native accuracy of the mass spectrometer, if known"/> <param name="units" display="radio" type="select" label="Unit of the mass accuracy" help="either m/z or ppm"> <option value="mz" >mz</option> <option value="ppm" selected="True" >ppm</option> </param> </when> </conditional> <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> <option value="histogram">histogram</option> </param> <param name="image_smoothing" type="select" label="Select an image smoothing function for the heatmap images" help="The 'gaussian' smoothing method smooths images with a simple gaussian kernel. The 'adaptive' method uses bilateral filtering to preserve edges"> <option value="none" selected="True">none</option> <option value="gaussian">gaussian</option> <option value="adaptive">adaptive</option> </param> <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> <conditional name="svg_cond"> <param name="svg_pixelimage" type="select" label="Do you want to export a heatmap with the original coordinates as svg image, the first valid m/z from tabular file is used"> <option value="no_svg" selected="True">No svg image export</option> <option value="yes_svg">Export svg image</option> </param> <when value="no_svg"/> <when value="yes_svg"/> </conditional> </inputs> <outputs> <data format="pdf" name="plots" from_work_dir="heatmaps.pdf" label = "$infile.display_name heatmaps"/> <data format="svg" name="svg_output" from_work_dir="svg_pixel_output.svg" label="$infile.display_name svg"> <filter>svg_cond['svg_pixelimage'] == 'yes_svg'</filter> </data> </outputs> <tests> <test> <param name="infile" value="" ftype="imzml"> <composite_data value="Example_Continuous.imzML"/> <composite_data value="Example_Continuous.ibd"/> </param> <param name="massfile" value="inputpeptides.tabular" ftype="tabular"/> <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"/> </test> <test> <param name="infile" value="" ftype="analyze75"> <composite_data value="Analyze75.hdr"/> <composite_data value="Analyze75.img"/> <composite_data value="Analyze75.t2m"/> </param> <param name="massfile" value="inputpeptides2.tabular" ftype="tabular"/> <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"/> <conditional name="svg_cond"> <param name="svg_pixelimage" value="yes_svg"/> </conditional> <output name="plots" file="Heatmaps_analyze75.pdf" compare="sim_size" delta="20000"/> <output name="svg_output" file="analyze75.svg" compare="sim_size" delta="20000"/> </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"/> </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"/> </test> </tests> <help><![CDATA[ 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 m/z of mass spectrometry imaging data. Input data: 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 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 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 - optional svg file of a mass-spectrometry imaging m/z heatmap 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 - 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> <citations> <citation type="doi">10.1093/bioinformatics/btv146</citation> </citations> </tool>