Mercurial > repos > galaxyp > msi_spectra_plot
diff msi_spectra_plots.xml @ 0:c93ae3463b30 draft
planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/msi_spectra_plot commit 6d271de132f364b1e16b0222ad2d6e315586f0dd
author | galaxyp |
---|---|
date | Mon, 27 Nov 2017 13:50:11 -0500 |
parents | |
children | 7caaf84a8a51 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/msi_spectra_plots.xml Mon Nov 27 13:50:11 2017 -0500 @@ -0,0 +1,383 @@ +<tool id="mass_spectrometry_imaging_mzplots" name="MSI massspectra" version="1.7.0"> + <description> + mass spectrometry imaging mass spectra plots + </description> + <requirements> + <requirement type="package" version="1.7.0">bioconductor-cardinal</requirement> + <requirement type="package" version="2.2.1">r-gridextra</requirement> + <requirement type="package" version="2.23-15">r-kernsmooth</requirement> + </requirements> + <command detect_errors="exit_code"> + <![CDATA[ + #if $infile.ext == 'imzml' + cp '${infile.extra_files_path}/imzml' infile.imzML && + cp '${infile.extra_files_path}/ibd' infile.ibd && + #elif $infile.ext == 'analyze75' + cp '${infile.extra_files_path}/hdr' infile.hdr && + cp '${infile.extra_files_path}/img' infile.img && + cp '${infile.extra_files_path}/t2m' infile.t2m && + #else + ln -s $infile infile.RData && + #end if + cat '${MSI_mzplots}' && + Rscript '${MSI_mzplots}' + ]]> + </command> + <configfiles> + <configfile name="MSI_mzplots"><![CDATA[ +################################# load libraries and read file ######################### + +library(Cardinal) +library(gridExtra) +library(KernSmooth) + +## Read MALDI Imaging dataset + +#if $infile.ext == 'imzml' + msidata <- readMSIData('infile.imzML') +#elif $infile.ext == 'analyze75' + msidata <- readMSIData('infile.hdr') +#else + load('infile.RData') +#end if + +###################################### file properties in numbers ###################### + +## Number of features (mz) +maxfeatures = length(features(msidata)) +## Range mz +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)[]), digits=2) +maxint = round(max(spectra(msidata)[]), digits=2) +medint = round(median(spectra(msidata)[]), digits=2) +## Number of intensities > 0 +npeaks= sum(spectra(msidata)[]>0) +## Spectra multiplied with mz (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)[]) +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 +} + +properties = c("Number of mz features", + "Range of mz values [Da]", + "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") + +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)) + +property_df = data.frame(properties, values) + + +######################################## PDF ############################################# +########################################################################################## +########################################################################################## + + +pdf("mzplots.pdf", fonts = "Times", pointsize = 12) +plot(0,type='n',axes=FALSE,ann=FALSE) + +title(main=paste0("Plotted mass spectra for file: \n\n", "$infile.display_name")) + + +############################# I) numbers #################################### +############################################################################# +grid.table(property_df, rows= NULL) + +counting = 2 + + outputmatrix = matrix(mz(msidata), ncol=1, byrow=TRUE) + colnames(outputmatrix) = "m/z" + +if (npeaks > 0) +{ + pixeldf = data.frame(matrix(ncol = 2, nrow=0)) + + #for $chosenpixel in $repeatpixel: + + + ### is x and y which was put in to define pixel valid coordinates? + pixelisvalid = as.character($chosenpixel.inputx %in% coord(msidata)\$x & $chosenpixel.inputy %in% coord(msidata)\$y) + pixelname = paste0("x=", $chosenpixel.inputx,", ", "y=", $chosenpixel.inputy) + pixeldf = rbind(pixeldf, cbind(pixelname, pixelisvalid)) + + +############################# II) control image ############################# +############################################################################# + + + if (pixelisvalid == "TRUE") + { + + + image(msidata, mz=$chosenpixel.inputmz, + ylim = c(maximumy+(0.2*maximumy),minimumy-1),colorkey=FALSE, plusminus = $chosenpixel.plusminusinDalton, contrast.enhance = "histogram", + main= paste0("x= ",$chosenpixel.inputx, ", y= ", $chosenpixel.inputy)) + + abline(v=$chosenpixel.inputx, col ="$chosenpixel.inputcolour", lty="$chosenpixel.inputtype", lwd=$chosenpixel.inputwidth) + abline(h=$chosenpixel.inputy, col ="$chosenpixel.inputcolour", lty="$chosenpixel.inputtype", lwd=$chosenpixel.inputwidth) + + + ##################### III) plot full mass spectrum ########################## + ############################################################################# + + plot(msidata, coord=list(x=$chosenpixel.inputx, y=$chosenpixel.inputy)) + + + + ##################### IV) plot zoom-in mass spectrum ########################## + ############################################################################# + + #if $chosenpixel.zoomedplot: + #for $token in $chosenpixel.zoomedplot: + + minmasspixel = features(msidata, mz=$token.xlimmin) + maxmasspixel = features(msidata, mz=$token.xlimmax) + + plot(msidata[minmasspixel:maxmasspixel,], coord=list(x=$chosenpixel.inputx, y=$chosenpixel.inputy), + xlim= c($token.xlimmin,$token.xlimmax)) + + #end for + #end if + + ##################### V) Output with mz and intensities ##################### + ############################################################################# + + + ### for each repeat a new intensity column for the new pixel is added + outputmatrix = cbind(outputmatrix, spectra(msidata)[,pixels(msidata, coord=list(x=$chosenpixel.inputx, y=$chosenpixel.inputy))]) + colnames(outputmatrix)[counting] = paste0("x= ",$chosenpixel.inputx, ", y= ", $chosenpixel.inputy, " intensity") + counting = counting+1 + + }else{ + print("These pixel coordinates did not correspond to a real pixel")} + +#end for + + colnames(pixeldf) = c("pixel coordinates", "coordinates were found in this file") + plot(0,type='n',axes=FALSE,ann=FALSE) + title(main=paste0("Overview of chosen pixel for file:\n", "$infile.display_name")) + grid.table(pixeldf, rows= NULL) + + dev.off() + + write.table(outputmatrix, file="$tabularmatrix", quote = FALSE, row.names = FALSE, col.names=TRUE, sep = "\t") +}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)"/> + <repeat name="repeatpixel" title="Plot mass spectra for pixel of interest" min="1" max="20"> + <param name="inputx" type="integer" value="" label="x-coordinate of pixel of interest" help="x-value of the pixel of interest"/> + <param name="inputy" type="integer" value="" label="y-coordinate of pixel of interest" help="y-value of the pixel of interest"/> + <param name="inputmz" type="float" value="1296.7" label="Next parameters are to control heatmap image which will be plotted, here mz in Dalton" help="mz will be displayed as heatmap and the pixel of interest will be visualized by the intersection of two lines"/> + <param name="plusminusinDalton" value="0.25" type="float" label="mass range for this mz value" help="plusminus mass window in Dalton"/> + <param name="inputcolour" type="select" label="select the colour for the lines at x and y position"> + <option value="white" selected="True">white</option> + <option value="black">black</option> + <option value="grey">grey</option> + <option value="blue">blue</option> + <option value="red">red</option> + <option value="green">green</option> + </param> + <param name="inputtype" type="select" label="select the line type for the lines at x and y position"> + <option value="solid" selected="True">solid</option> + <option value="dashed">dashed</option> + <option value="dotted">dotted</option> + <option value="longdash">longdash</option> + </param> + <param name="inputwidth" type="integer" value="2" label="select the width of the lines at x and y position"/> + <repeat name="zoomedplot" title="Zoomed in plots with mz min and mz max to define the plot window" min="0" max="50"> + <param name="xlimmin" type="integer" value="" label="lower boundary in Dalton for plotting window" help="minimum mz for zoomed in window"/> + <param name="xlimmax" type="integer" value="" label="upper boundary in Dalton for plotting window" help="maximum mz for zoomed in window"/> + </repeat> + </repeat> + </inputs> + <outputs> + <data format="pdf" name="plots" from_work_dir="mzplots.pdf" label = "${tool.name} on $infile.display_name"/> + <data format="tabular" name="tabularmatrix" label="${tool.name} on $infile.display_name" /> + </outputs> + <tests> + <test> + <param name="infile" value="" ftype="imzml"> + <composite_data value="Example_Continuous.imzML"/> + <composite_data value="Example_Continuous.ibd"/> + </param> + <repeat name="repeatpixel"> + <param name="plusminusinDalton" value="0.25"/> + <param name="inputx" value="3"/> + <param name="inputy" value="3"/> + <repeat name="zoomedplot"> + <param name="xlimmin" value="550"/> + <param name="xlimmax" value="555"/> + </repeat> + <repeat name="zoomedplot"> + <param name="xlimmin" value="750"/> + <param name="xlimmax" value="800"/> + </repeat> + <repeat name="zoomedplot"> + <param name="xlimmin" value="400"/> + <param name="xlimmax" value="420"/> + </repeat> + </repeat> + <repeat name="repeatpixel"> + <param name="plusminusinDalton" value="0.25"/> + <param name="inputx" value="2"/> + <param name="inputy" value="2"/> + </repeat> + <repeat name="repeatpixel"> + <param name="plusminusinDalton" value="0.25"/> + <param name="inputx" value="1"/> + <param name="inputy" value="1"/> + </repeat> + <output name="plots" file="Plot_imzml.pdf" compare="sim_size" delta="20000"/> + <output name="tabularmatrix" file="Matrix_imzml.txt"/> + </test> + + <test> + <param name="infile" value="" ftype="analyze75"> + <composite_data value="Analyze75.hdr"/> + <composite_data value="Analyze75.img"/> + <composite_data value="Analyze75.t2m"/> + </param> + <repeat name="repeatpixel"> + <param name="plusminusinDalton" value="0.25"/> + <param name="inputx" value="5"/> + <param name="inputy" value="2"/> + <repeat name="zoomedplot"> + <param name="xlimmin" value="840"/> + <param name="xlimmax" value="850"/> + </repeat> + </repeat> + <repeat name="repeatpixel"> + <param name="plusminusinDalton" value="0.25"/> + <param name="inputx" value="2"/> + <param name="inputy" value="2"/> + </repeat> + <output name="plots" file="Plot_analyze75.pdf" compare="sim_size" delta="20000"/> + <output name="tabularmatrix" file="Matrix_analyze75.txt"/> + </test> + + <test> + <param name="infile" value="preprocessing_results1.RData" ftype="rdata"/> + <repeat name="repeatpixel"> + <param name="plusminusinDalton" value="0.25"/> + <param name="inputx" value="2"/> + <param name="inputy" value="2"/> + <repeat name="zoomedplot"> + <param name="xlimmin" value="222"/> + <param name="xlimmax" value="244"/> + </repeat> + </repeat> + <output name="plots" file="Plot_rdata.pdf" compare="sim_size" delta="20000"/> + <output name="tabularmatrix" file="Matrix_rdata.txt"/> + </test> + <test> + <param name="infile" value="LM8_file16.rdata" ftype="rdata"/> + <param name="plusminusinDalton" value="0.1"/> + <param name="inputx" value="1"/> + <param name="inputy" value="1"/> + <repeat name="repeatpixel"> + <param name="plusminusinDalton" value="0.25"/> + <param name="inputx" value="2"/> + <param name="inputy" value="2"/> + <repeat name="zoomedplot"> + <param name="xlimmin" value="1000"/> + <param name="xlimmax" value="1050"/> + </repeat> + </repeat> + <output name="plots" file="Plot_LM8_file16.pdf" compare="sim_size" delta="20000"/> + <output name="tabularmatrix" file="Matrix_LM8.txt"/> + </test> + </tests> + <help><![CDATA[ + +Returns a full mass-spectrum plot and peaklist output with masses and intensities for the chosen pixel. Input needs the x and the y coordinates of the pixel of interest. +Additionally zoom into mass-spectra plots is possible by providing the minimum and maximum mz value to define the limits of the plot. +To have a visual control that the right pixel was chosen, a heatmap of a mass in Dalton which can be specified will be plotted and two intersecting lines will show where the chosen pixel is located in the ion image. + +Input data: 3 types of input data can be used: + +- imzml file (upload imzml and ibd file via the "composite" function) `Introduction to the imzml format <http://ms-imaging.org/wp/introduction/>`_ +- Analyze7.5 (upload hdr, img and t2m file via the "composite" function) +- Cardinal "MSImageSet" data (with variable name "msidata", saved as .RData) + +The output of this tool contains a heatmap of the mass of interest with two lines intersecting at the pixel of interest. Then the full mass-spectrum plot is obtained and if chosen also several zoomed in mass spectra. A peaklist with masses and intensities for this pixel is exported as tabular file. + +]]> + </help> + <citations> + <citation type="doi">10.1093/bioinformatics/btv146</citation> + </citations> +</tool>