diff msi_preprocessing.xml @ 4:42580292d381 draft

planemo upload for repository https://github.com/galaxyproteomics/tools-galaxyp/tree/master/tools/msi_preprocessing commit a7be47698f53eb4f00961192327d93e8989276a7
author galaxyp
date Mon, 11 Jun 2018 17:34:07 -0400
parents b9523950e79d
children 2fccfd11360d
line wrap: on
line diff
--- a/msi_preprocessing.xml	Mon May 28 12:38:04 2018 -0400
+++ b/msi_preprocessing.xml	Mon Jun 11 17:34:07 2018 -0400
@@ -1,4 +1,4 @@
-<tool id="mass_spectrometry_imaging_preprocessing" name="MSI preprocessing" version="1.10.0.0">
+<tool id="mass_spectrometry_imaging_preprocessing" name="MSI preprocessing" version="1.10.0.1">
     <description>
         mass spectrometry imaging preprocessing
     </description>
@@ -6,6 +6,7 @@
         <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>
+        <requirement type="package" version="3.34.9">bioconductor-limma</requirement>
     </requirements>
     <command detect_errors="exit_code">
     <![CDATA[
@@ -27,9 +28,13 @@
     </command>
     <configfiles>
         <configfile name="cardinal_preprocessing"><![CDATA[
+
+################################# load libraries and read file #################
+
 library(Cardinal)
 library(gridExtra)
 library(lattice)
+library(limma)
 
 #if $infile.ext == 'imzml'
     msidata = readImzML('infile')
@@ -39,12 +44,20 @@
     load('infile.RData')
 #end if
 
+## function to later read RData reference files in
 
-##################################### Preparations for QC report ###############
+loadRData <- function(fileName){
+#loads an RData file, and returns it
+load(fileName)
+get(ls()[ls() != "fileName"])
+}
+
+######################### preparations for optional QC report #################
 
 #if $outputs.outputs_select == "quality_control":
 
     ### values for QC table:
+
     maxfeatures = length(features(msidata))
     medianpeaks = median(colSums(spectra(msidata)[]>0))
     medint = round(median(spectra(msidata)[]), digits=2)
@@ -52,54 +65,50 @@
     QC_numbers= data.frame(rawdata = c(maxfeatures, medianpeaks, medint, TICs))
     vectorofactions = "rawdata"
 
+    ### Read tabular file with calibrant m/z: 
 
-        ### Read tabular file with calibrant masses: 
-        calibrant_list = read.delim("$outputs.calibrant_file", header = FALSE, stringsAsFactors = FALSE)
+    calibrant_list = read.delim("$outputs.calibrant_file", header = FALSE, stringsAsFactors = FALSE)
 
-            ### calculate how many input calibrant masses are valid: 
-            inputcalibrants = calibrant_list[calibrant_list[,$outputs.calibrants_column]>min(mz(msidata)) & calibrant_list[,$outputs.calibrants_column]<max(mz(msidata)),$outputs.calibrants_column]
-            number_calibrants_in = length(calibrant_list[,$outputs.calibrants_column])
-            number_calibrants_valid = length(inputcalibrants)
+    ### calculate how many input calibrant m/z are valid: 
 
-
-
+    inputcalibrants = calibrant_list[calibrant_list[,$outputs.calibrants_column]>min(mz(msidata)) & calibrant_list[,$outputs.calibrants_column]<max(mz(msidata)),$outputs.calibrants_column]
+    number_calibrants_in = length(calibrant_list[,$outputs.calibrants_column])
+    number_calibrants_valid = length(inputcalibrants)
 
     ### Quality control report
 
-
     pdf("Preprocessing.pdf", fonts = "Times", pointsize = 12)
     plot(0,type='n',axes=FALSE,ann=FALSE)
     title(main=paste("Quality control during preprocessing \n", "Filename:", "$infile.display_name"))
-    title(main=paste0("\n\n\n\n Number valid masses in ", "$outputs.calibrant_file.display_name",": ", number_calibrants_valid, "/", number_calibrants_in))
-
-
+    title(main=paste0("\n\n\n\n Number valid m/z in ", "$outputs.calibrant_file.display_name",": ", number_calibrants_valid, "/", number_calibrants_in))
 
     for (calibrant in inputcalibrants)
-    {
-
-        currentimage = image(msidata , mz=calibrant, strip = strip.custom(bg="lightgrey",
+        {currentimage = image(msidata , mz=calibrant, strip = strip.custom(bg="lightgrey",
                        par.strip.text=list(col="black", cex=.9)),lattice=TRUE, 
                        scales = list(draw = FALSE), plusminus = $outputs.plusminus_dalton, main="raw")
-      
-        assign(paste("rawdata",calibrant, sep="_"), currentimage)
-    }
-
+        assign(paste("rawdata",calibrant, sep="_"), currentimage)}
 
         current_plot_raw = vector(length(inputcalibrants), mode='list')
 
-
 #end if
 
 ############################### Preprocessing steps ###########################
+###############################################################################
+
 #for $method in $methods:
 
+############################### Normalization ###########################
+
     #if str( $method.methods_conditional.preprocessing_method ) == 'Normalization':
         print('Normalization')
         ##normalization
 
         msidata = normalize(msidata, method="tic")
 
+        ############################### optional QC ###########################
+
         #if $outputs.outputs_select == "quality_control":
+
             ### values for QC table:
             maxfeatures = length(features(msidata))
             medianpeaks = median(colSums(spectra(msidata)[]>0))
@@ -107,316 +116,390 @@
             TICs = round(mean(colSums(spectra(msidata)[])), digits=1)
             normalized = c(maxfeatures, medianpeaks, medint, TICs)
             QC_numbers= cbind(QC_numbers, normalized)
+
             ### preparation for QC plots
             vectorofactions = append(vectorofactions, "normalized")
-
             for (calibrant in inputcalibrants)
-            {
-                currentimage = image(msidata , mz=calibrant, strip = strip.custom(bg="lightgrey",
+                {currentimage = image(msidata , mz=calibrant, strip = strip.custom(bg="lightgrey",
                                par.strip.text=list(col="black", cex=.9)),lattice=TRUE, 
                                scales = list(draw = FALSE), plusminus = $outputs.plusminus_dalton, main="normalized")
-              
-               assign(paste("normalized",calibrant, sep="_"), currentimage)
-            }
-
+                assign(paste("normalized",calibrant, sep="_"), currentimage)}
 
         #end if
 
+############################### Baseline reduction ###########################
+
     #elif str( $method.methods_conditional.preprocessing_method ) == 'Baseline_reduction':
         print('Baseline_reduction')
         ##baseline reduction
+
         msidata = reduceBaseline(msidata, method="median", blocks=$method.methods_conditional.blocks_baseline)
 
+        ############################### optional QC ###########################
+
         #if $outputs.outputs_select == "quality_control":
+
+            ### values for QC table:
             maxfeatures = length(features(msidata))
             medianpeaks = median(colSums(spectra(msidata)[]>0))
             medint = round(median(spectra(msidata)[]), digits=2)
             TICs = round(mean(colSums(spectra(msidata)[])), digits=1)
             baseline= c(maxfeatures, medianpeaks, medint, TICs)
             QC_numbers= cbind(QC_numbers, baseline)
+
             ### preparation for QC plots
             vectorofactions = append(vectorofactions, "baseline_rem")
 
             for (calibrant in inputcalibrants)
-            {
-                currentimage = image(msidata , mz=calibrant, strip = strip.custom(bg="lightgrey",
+            {currentimage = image(msidata , mz=calibrant, strip = strip.custom(bg="lightgrey",
                                par.strip.text=list(col="black", cex=.9)),lattice=TRUE, 
                                scales = list(draw = FALSE), plusminus = $outputs.plusminus_dalton, main="baseline removed")
-              
-               assign(paste("baseline_rem",calibrant, sep="_"), currentimage)
-            }
+            assign(paste("baseline_rem",calibrant, sep="_"), currentimage)}
+
         #end if
 
+############################### Smoothing ###########################
+
     #elif str( $method.methods_conditional.preprocessing_method ) == 'Smoothing':
         print('Smoothing')
         ## Smoothing
 
         #if str( $method.methods_conditional.methods_for_smoothing.smoothing_method) == 'gaussian':
             print('gaussian smoothing')
+
             msidata = smoothSignal(msidata, method="$method.methods_conditional.methods_for_smoothing.smoothing_method", window=$method.methods_conditional.window_smoothing, sd = $method.methods_conditional.methods_for_smoothing.sd_gaussian)
+
         #elif str( $method.methods_conditional.methods_for_smoothing.smoothing_method) == 'sgolay':
             print('sgolay smoothing')
+
             msidata = smoothSignal(msidata, method="$method.methods_conditional.methods_for_smoothing.smoothing_method", window=$method.methods_conditional.window_smoothing, order = $method.methods_conditional.methods_for_smoothing.order_of_filters)
         #elif str($method.methods_conditional.methods_for_smoothing.smoothing_method) == 'ma':
             print('sgolay smoothing')
+
             msidata = smoothSignal(msidata, method="$method.methods_conditional.methods_for_smoothing.smoothing_method", window=$method.methods_conditional.window_smoothing, coef = $method.methods_conditional.methods_for_smoothing.coefficients_ma_filter)
+
         #end if
 
+        ############################### optional QC ###########################
+
         #if $outputs.outputs_select == "quality_control":
+            
+            ### values for QC table:
             maxfeatures = length(features(msidata))
             medianpeaks = median(colSums(spectra(msidata)[]>0))
             medint = round(median(spectra(msidata)[]), digits=2)
             TICs = round(mean(colSums(spectra(msidata)[])), digits=1)
             smoothed= c(maxfeatures, medianpeaks, medint, TICs)
             QC_numbers= cbind(QC_numbers, smoothed)
+
             ### preparation for QC plots
             vectorofactions = append(vectorofactions, "smoothed")
 
             for (calibrant in inputcalibrants)
-            {
-                currentimage = image(msidata , mz=calibrant, strip = strip.custom(bg="lightgrey",
+                {currentimage = image(msidata , mz=calibrant, strip = strip.custom(bg="lightgrey",
                                par.strip.text=list(col="black", cex=.9)),lattice=TRUE, 
                                scales = list(draw = FALSE), plusminus = $outputs.plusminus_dalton, main="smoothed")
-              
-               assign(paste("smoothed",calibrant, sep="_"), currentimage)
-            }
+                assign(paste("smoothed",calibrant, sep="_"), currentimage)}
+
         #end if
 
+############################### Peak picking ###########################
+
     #elif str( $method.methods_conditional.preprocessing_method) == 'Peak_picking':
         print('Peak_picking')
         ## Peakpicking
 
         #if str( $method.methods_conditional.methods_for_picking.picking_method) == 'adaptive':
             print('adaptive peakpicking')
+
             msidata = peakPick(msidata, window = $method.methods_conditional.window_picking, blocks = $method.methods_conditional.blocks_picking, method='$method.methods_conditional.methods_for_picking.picking_method', SNR=$method.methods_conditional.SNR_picking_method, spar=$method.methods_conditional.methods_for_picking.spar_picking)
 
         #elif str( $method.methods_conditional.methods_for_picking.picking_method) == 'limpic':
             print('limpic peakpicking')
+
             msidata = peakPick(msidata, window = $method.methods_conditional.window_picking, blocks = $method.methods_conditional.blocks_picking, method='$method.methods_conditional.methods_for_picking.picking_method', SNR=$method.methods_conditional.SNR_picking_method, thresh=$method.methods_conditional.methods_for_picking.tresh_picking)
 
         #elif str( $method.methods_conditional.methods_for_picking.picking_method) == 'simple':
             print('simple peakpicking')
+
             msidata = peakPick(msidata, window = $method.methods_conditional.window_picking, blocks = $method.methods_conditional.blocks_picking, method='$method.methods_conditional.methods_for_picking.picking_method', SNR=$method.methods_conditional.SNR_picking_method)
+
         #end if
 
+        ############################### optional QC ###########################
+
         #if $outputs.outputs_select == "quality_control":
+
+            ### values for QC table:
             maxfeatures = length(features(msidata))
             medianpeaks = median(colSums(spectra(msidata)[]>0))
             medint = round(median(spectra(msidata)[]), digits=2)
             TICs = round(mean(colSums(spectra(msidata)[])), digits=1)
             picked= c(maxfeatures, medianpeaks, medint, TICs)
             QC_numbers= cbind(QC_numbers, picked)
+
             ### preparation for QC plots
             vectorofactions = append(vectorofactions, "picked")
 
             for (calibrant in inputcalibrants)
-            {
-                currentimage = image(msidata , mz=calibrant, strip = strip.custom(bg="lightgrey",
+                {currentimage = image(msidata , mz=calibrant, strip = strip.custom(bg="lightgrey",
                                par.strip.text=list(col="black", cex=.9)),lattice=TRUE, 
                                scales = list(draw = FALSE), plusminus = $outputs.plusminus_dalton, main="picked")
-              
-               assign(paste("picked",calibrant, sep="_"), currentimage)
-            }
+                assign(paste("picked",calibrant, sep="_"), currentimage)}
+
         #end if
 
+############################### Peak alignment ###########################
+
     #elif str( $method.methods_conditional.preprocessing_method ) == 'Peak_alignment':
         print('Peak_alignment')
         ## Peakalignment
 
         #if str( $method.methods_conditional.align_ref_type.align_reference_datatype) == 'align_noref':
+
             align_peak_reference = msidata
 
         #elif str( $method.methods_conditional.align_ref_type.align_reference_datatype) == 'align_table':
+
             align_reference_table = read.delim("$method.methods_conditional.align_ref_type.align_peaks_table", header = FALSE, stringsAsFactors = FALSE)
-
             align_reference_column = align_reference_table[,$method.methods_conditional.align_ref_type.align_mass_column]
-
             align_peak_reference = align_reference_column[align_reference_column>=min(mz(msidata)) & align_reference_column<=max(mz(msidata))]
             if (length(align_peak_reference) == 0)
-            {align_peak_reference = 0
-            }
-
-
-
-#### if length <0: align_peak_reference = 0
+                {align_peak_reference = 0}
+       
+        #elif str( $method.methods_conditional.align_ref_type.align_reference_datatype) == 'align_msidata_ref':
 
-        
-        #elif str( $method.methods_conditional.align_ref_type.align_reference_datatype) == 'align_msidata_ref':
-                  loadRData <- function(fileName){
-                  #loads an RData file, and returns it
-                  load(fileName)
-                  get(ls()[ls() != "fileName"])
-                }
                 align_peak_reference = loadRData('$method.methods_conditional.align_ref_type.align_peaks_msidata')
+
         #end if
 
         #if str( $method.methods_conditional.methods_for_alignment.alignment_method) == 'diff':
             print('diff peakalignment')
+
             msidata = peakAlign(msidata, method='$method.methods_conditional.methods_for_alignment.alignment_method',diff.max =$method.methods_conditional.methods_for_alignment.value_diffalignment, units = "$method.methods_conditional.methods_for_alignment.units_diffalignment", ref=align_peak_reference)
 
        #elif str( $method.methods_conditional.methods_for_alignment.alignment_method) == 'DP':
             print('DPpeakalignment')
+
         msidata = peakAlign(msidata, method='$method.methods_conditional.methods_for_alignment.alignment_method',gap = $method.methods_conditional.methods_for_alignment.gap_DPalignment, ref=align_peak_reference)
+
        #end if
 
+        ############################### optional QC ###########################
         #if $outputs.outputs_select == "quality_control":
+
+            ### values for QC table:
             maxfeatures = length(features(msidata))
             medianpeaks = median(colSums(spectra(msidata)[]>0))
             medint = round(median(spectra(msidata)[]), digits=2)
             TICs = round(mean(colSums(spectra(msidata)[])), digits=1)
             aligned= c(maxfeatures, medianpeaks, medint, TICs)
             QC_numbers= cbind(QC_numbers, aligned)
+
             ### preparation for QC plots
             vectorofactions = append(vectorofactions, "aligned")
 
             for (calibrant in inputcalibrants)
-            {
-                currentimage = image(msidata , mz=calibrant, strip = strip.custom(bg="lightgrey",
+                {currentimage = image(msidata , mz=calibrant, strip = strip.custom(bg="lightgrey",
                                par.strip.text=list(col="black", cex=.9)),lattice=TRUE, 
                                scales = list(draw = FALSE), plusminus = $outputs.plusminus_dalton, main="aligned")
-              
-               assign(paste("aligned",calibrant, sep="_"), currentimage)
-            }
+                assign(paste("aligned",calibrant, sep="_"), currentimage)}
+
         #end if
 
+############################### Peak filtering ###########################
+
     #elif str( $method.methods_conditional.preprocessing_method) == 'Peak_filtering':
         print('Peak_filtering')
+
         msidata = peakFilter(msidata, method='freq', freq.min = $method.methods_conditional.frequ_filtering)
 
+        ############################### optional QC ###########################
+
         #if $outputs.outputs_select == "quality_control":
+
+            ### values for QC table:
             maxfeatures = length(features(msidata))
             medianpeaks = median(colSums(spectra(msidata)[]>0))
             medint = round(median(spectra(msidata)[]), digits=2)
             TICs = round(mean(colSums(spectra(msidata)[])), digits=1)
             filtered= c(maxfeatures, medianpeaks, medint, TICs)
             QC_numbers= cbind(QC_numbers, filtered)
+
             ### preparation for QC plots
             vectorofactions = append(vectorofactions, "filtered")
 
             for (calibrant in inputcalibrants)
-            {
-                currentimage = image(msidata , mz=calibrant, strip = strip.custom(bg="lightgrey",
+                {currentimage = image(msidata , mz=calibrant, strip = strip.custom(bg="lightgrey",
                                par.strip.text=list(col="black", cex=.9)),lattice=TRUE, 
                                scales = list(draw = FALSE), plusminus = $outputs.plusminus_dalton, main="filtered")
-              
-               assign(paste("filtered",calibrant, sep="_"), currentimage)
-            }
+                assign(paste("filtered",calibrant, sep="_"), currentimage)}
+
         #end if
 
+############################### Data reduction ###########################
+
     #elif str( $method.methods_conditional.preprocessing_method) == 'Data_reduction':
         print('Data_reduction')
 
         #if str( $method.methods_conditional.methods_for_reduction.reduction_method) == 'bin':
             print('bin reduction')
+
             msidata = reduceDimension(msidata, method="bin", width=$method.methods_conditional.methods_for_reduction.bin_width, units="$method.methods_conditional.methods_for_reduction.bin_units", fun=$method.methods_conditional.methods_for_reduction.bin_fun)
 
         #elif str( $method.methods_conditional.methods_for_reduction.reduction_method) == 'resample':
             print('resample reduction')
+
             msidata = reduceDimension(msidata, method="resample", step=$method.methods_conditional.methods_for_reduction.resample_step)
 
         #elif str( $method.methods_conditional.methods_for_reduction.reduction_method) == 'peaks':
             print('peaks reduction')
 
             #if str( $method.methods_conditional.methods_for_reduction.ref_type.reference_datatype) == 'table':
+
                 reference_table = read.delim("$method.methods_conditional.methods_for_reduction.ref_type.peaks_table", header = FALSE, stringsAsFactors = FALSE)
                 reference_column = reference_table[,$method.methods_conditional.methods_for_reduction.ref_type.mass_column]
                 peak_reference = reference_column[reference_column>min(mz(msidata)) & reference_column<max(mz(msidata))]
 
             #elif str( $method.methods_conditional.methods_for_reduction.ref_type.reference_datatype) == 'msidata_ref':
-                      loadRData <- function(fileName){
-                      #loads an RData file, and returns it
-                      load(fileName)
-                      get(ls()[ls() != "fileName"])
-                    }
+
                     peak_reference = loadRData('$method.methods_conditional.methods_for_reduction.ref_type.peaks_msidata')
+
             #end if
+
             msidata = reduceDimension(msidata, method="peaks", ref=peak_reference, type="$method.methods_conditional.methods_for_reduction.peaks_type")
+
         #end if
 
+        ############################### optional QC ###########################
+
         #if $outputs.outputs_select == "quality_control":
+
+            ### values for QC table:
             maxfeatures = length(features(msidata))
             medianpeaks = median(colSums(spectra(msidata)[]>0))
             medint = round(median(spectra(msidata)[]), digits=2)
             TICs = round(mean(colSums(spectra(msidata)[])), digits=1)
             reduced= c(maxfeatures, medianpeaks, medint, TICs)
             QC_numbers= cbind(QC_numbers, reduced)
+
             ### preparation for QC plots
             vectorofactions = append(vectorofactions, "reduced")
 
             for (calibrant in inputcalibrants)
-            {
-                currentimage = image(msidata , mz=calibrant, strip = strip.custom(bg="lightgrey",
+                {currentimage = image(msidata , mz=calibrant, strip = strip.custom(bg="lightgrey",
                                par.strip.text=list(col="black", cex=.9)),lattice=TRUE, 
                                scales = list(draw = FALSE), plusminus = $outputs.plusminus_dalton, main="reduced")
-              
-               assign(paste("reduced",calibrant, sep="_"), currentimage)
-            }
+                assign(paste("reduced",calibrant, sep="_"), currentimage)}
+
         #end if
 
-    #elif str( $method.methods_conditional.preprocessing_method) == 'Transformation':
-        print('Transformation')
+    ############################### Transformation ###########################
+
+    ####elif str( $method.methods_conditional.preprocessing_method) == 'Transformation':
+        ###print('Transformation')
+
+        ####if str( $method.methods_conditional.transf_conditional.trans_type) == 'log2':
+            ####print('log2 transformation')
+
+            ###spectra(msidata)[spectra(msidata) ==0] = NA
+            ###print(paste0("Number of 0 which were converted into NA:",sum(is.na(spectra(msidata)))))
+            ###spectra(msidata) = log2(spectra(msidata))
+
+        ####elif str( $method.methods_conditional.transf_conditional.trans_type) == 'sqrt':
+            ###print('squareroot transformation')
+
+            ###spectra(msidata) = sqrt(spectra(msidata))
+
+       ###end if
+
+        ############################### optional QC ###########################
+
+        #if $outputs.outputs_select == "quality_control":
+
+            ### values for QC table:
+            maxfeatures = length(features(msidata))
+            medianpeaks = median(colSums(spectra(msidata)[]>0), na.rm=TRUE)
+            medint = round(median(spectra(msidata)[], na.rm=TRUE), digits=2)
+            TICs = round(mean(colSums(spectra(msidata)[]), na.rm=TRUE), digits=1)
+            transformed= c(maxfeatures, medianpeaks, medint, TICs)
+            QC_numbers= cbind(QC_numbers, transformed)
 
-            #if str( $method.methods_conditional.transf_conditional.trans_type) == 'log2':
-                print('log2 transformation')
-                spectra(msidata)[spectra(msidata) ==0] = NA
-                print(paste0("Number of 0 which were converted into NA:",sum(is.na(spectra(msidata)))))
-                spectra(msidata) = log2(spectra(msidata))
+            ### preparation for QC plots
+            vectorofactions = append(vectorofactions, "transformed")
+
+            for (calibrant in inputcalibrants)
+                {currentimage = image(msidata , mz=calibrant, strip = strip.custom(bg="lightgrey",
+                               par.strip.text=list(col="black", cex=.9)),lattice=TRUE, 
+                               scales = list(draw = FALSE), plusminus = $outputs.plusminus_dalton, main="transformed")
+                assign(paste("transformed",calibrant, sep="_"), currentimage)}
+
+        #end if
+
+     ############################### optional QC ###########################
+
+        #if $outputs.outputs_select == "quality_control":
 
-            #elif str( $method.methods_conditional.transf_conditional.trans_type) == 'sqrt':
-                print('squareroot transformation')
-                spectra(msidata) = sqrt(spectra(msidata))
+            ### values for QC table:
+            maxfeatures = length(features(msidata))
+            medianpeaks = median(colSums(spectra(msidata)[]>0))
+            medint = round(median(spectra(msidata)[]), digits=2)
+            TICs = round(mean(colSums(spectra(msidata)[])), digits=1)
+            sample_norm= c(maxfeatures, medianpeaks, medint, TICs)
+            QC_numbers= cbind(QC_numbers, sample_norm)
 
-            #end if
+            ### preparation for QC plots
+            vectorofactions = append(vectorofactions, "sample_norm")
+
+            for (calibrant in inputcalibrants)
+                {currentimage = image(msidata , mz=calibrant, strip = strip.custom(bg="lightgrey",
+                               par.strip.text=list(col="black", cex=.9)),lattice=TRUE, 
+                               scales = list(draw = FALSE), plusminus = $outputs.plusminus_dalton, main="sample normalized")
+                assign(paste("sample_norm",calibrant, sep="_"), currentimage)}
+
+        #end if
+
     #end if
 #end for
 
 ###################### Outputs: RData, tabular and QC report ###################
-
+###############################################################################
 
 ## save as (.RData)
 save(msidata, file="$msidata_preprocessed")
 
+print(paste0("Number of NAs in intensity matrix: ", sum(is.na(spectra(msidata)))))
 
+## save output matrix
 #if $output_matrix:
 
 
     if (length(features(msidata))> 0)
-    {
-
+        {
         ## save as intensity matrix
-
         spectramatrix = spectra(msidata)
         rownames(spectramatrix) = mz(msidata)
         newmatrix = rbind(pixels(msidata), spectramatrix)
         write.table(newmatrix[2:nrow(newmatrix),], file="$matrixasoutput", quote = FALSE, row.names = TRUE, col.names=NA, sep = "\t")
 
-    }else{
-        print("file has no features left")
-        write.table(matrix(rownames(coord(msidata)), ncol=ncol(msidata), nrow=1), file="$matrixasoutput", quote = FALSE, row.names = FALSE, col.names=FALSE, sep = "\t")
-    }
+        }else{
+            print("file has no features left")
+            write.table(matrix(rownames(coord(msidata)), ncol=ncol(msidata), nrow=1), file="$matrixasoutput", quote = FALSE, row.names = FALSE, col.names=FALSE, sep = "\t")
+        }
 
 #end if
 
-
+## save QC report
 #if $outputs.outputs_select == "quality_control":
 
     rownames(QC_numbers) = c("# features", "median # peaks", "median intensity", "median TIC")
     grid.table(t(QC_numbers))
 
     for (calibrant in inputcalibrants)
-    {
-        imagelist = list()
-      
+        {imagelist = list()
         for (numberprepro in 1:length(vectorofactions)){
-        
-            imagelist[[numberprepro]] = get(paste(vectorofactions[numberprepro],calibrant, sep="_"))
-        
-        
-        }
-      
-      do.call(grid.arrange,imagelist)
-    }
-
+            imagelist[[numberprepro]] = get(paste(vectorofactions[numberprepro],calibrant, sep="_"))}
+            do.call(grid.arrange,imagelist)}
 
     dev.off()
 
@@ -439,7 +522,8 @@
                     <option value="Peak_alignment">Peak alignment</option>
                     <option value="Peak_filtering">Peak filtering</option>
                     <option value="Data_reduction">Data reduction</option>
-                    <option value="Transformation">Transformation</option>
+                    <!--option value="Transformation">Transformation</option-->
+
                 </param>
                 <when value="Normalization"/>
                 <when value="Baseline_reduction">
@@ -506,7 +590,7 @@
                             <param name="value_diffalignment" type="integer" value="200"
                                    label="diff.max" help="Peaks that differ less than this value will be aligned together"/>
                             <param name="units_diffalignment" type="select" display = "radio" optional = "False"
-                                   label="units" help="The coefficients for the moving average filter">
+                                   label="units">
                                     <option value="ppm" selected="True">ppm</option>
                                     <option value="Da">Da</option>
                             </param>
@@ -525,8 +609,8 @@
                         <when value="align_noref"/>
                         <when value="align_table">
                             <param name="align_peaks_table" type="data" format="tabular" 
-                                label="Reference mz values to use for alignment - only these will be kept" help="One column with mz values (without empty cells or letters)"/>
-                            <param name="align_mass_column" data_ref="align_peaks_table" label="Column with reference mz" type="data_column"/>
+                                label="Reference m/z values to use for alignment - only these will be kept" help="One column with m/z values (without empty cells or letters)"/>
+                            <param name="align_mass_column" data_ref="align_peaks_table" label="Column with reference m/z" type="data_column"/>
                         </when>
                         <when value="align_msidata_ref">
                             <param name="align_peaks_msidata" type="data" format="rdata," label="Picked and aligned Cardinal MSImageSet saved as RData"/>
@@ -546,7 +630,7 @@
                         </param>
                         <when value="bin">
                             <param name="bin_width" type="float" value="1"
-                                   label="The width of a bin in mz or ppm" help="Width must be greater than range of mz values divided by number of mz features"/>
+                                   label="The width of a bin in m/z or ppm" help="Width must be greater than range of m/z values divided by number of m/z features"/>
                             <param name="bin_units" type="select" display="radio"
                                    label="Unit for bin">
                                     <option value="mz" selected="True">mz</option>
@@ -560,7 +644,7 @@
                         </when>
                         <when value="resample">
                             <param name="resample_step" type="float" value="1"
-                                   label="The step size in mz" help="Step size must be greater than range of mz values divided by number of mz features"/>
+                                   label="The step size in m/z" help="Step size must be greater than range of m/z values divided by number of m/z features"/>
                         </when>
                         <when value="peaks">
                             <param name="peaks_type" type="select" display="radio"
@@ -575,8 +659,8 @@
                                 </param>
                                 <when value="table">
                                     <param name="peaks_table" type="data" format="tabular" 
-                                        label="Reference mz values to use to reduce the dimension" help="One column with mz values (without empty cells or letters, mz outside mz range are not used for filtering)"/>
-                                    <param name="mass_column" data_ref="peaks_table" label="Column with reference mz" type="data_column"/>
+                                        label="Reference m/z values to use to reduce the dimension" help="One column with m/z values (without empty cells or letters, m/z outside m/z range are not used for filtering)"/>
+                                    <param name="mass_column" data_ref="peaks_table" label="Column with reference m/z" type="data_column"/>
                                 </when>
                                 <when value="msidata_ref">
                                     <param name="peaks_msidata" type="data" format="rdata," label="Picked and aligned Cardinal MSImageSet saved as RData"/>
@@ -585,7 +669,7 @@
                         </when>
                     </conditional>
                 </when>
-                <when value="Transformation">
+                <!--when value="Transformation">
                     <conditional name="transf_conditional">
                         <param name="trans_type" type="select" label="Choose which intensity transformation you want to apply" help="logarithm base 2 (log2) or squareroot (sqrt)">
                             <option value="log2" selected="True">log2</option>
@@ -594,7 +678,7 @@
                             <when value="log2"/>
                             <when value="sqrt"/>
                     </conditional>
-                </when>
+                </when-->
             </conditional>
         </repeat>
         <conditional name="outputs">
@@ -604,21 +688,21 @@
             </param>
             <when value="quality_control">
                 <param name="calibrant_file" type="data" format="tabular"
-                 label="Provide a list of masses which will be plotted in the quality control report"
-                 help="Use internal calibrant masses"/>
-                 <param name="calibrants_column" data_ref="calibrant_file" label="Column with masses" type="data_column"/>
-                 <param name="plusminus_dalton" value="0.25" type="text" label="Mass range" help="Plusminus mass window in Dalton"/>
+                 label="Provide a list of m/z, which will be plotted in the quality control report"
+                 help="Use internal calibrant m/z"/>
+                 <param name="calibrants_column" data_ref="calibrant_file" label="Column with m/z" type="data_column"/>
+                 <param name="plusminus_dalton" value="0.25" type="text" label="M/z range" help="Plusminus m/z window in Dalton"/>
             </when>
             <when value="no_quality_control"/>
         </conditional>
         <param name="output_matrix" type="boolean" display="radio" label="Intensity matrix output"/>
     </inputs>
     <outputs>
-        <data format="rdata" name="msidata_preprocessed" label="Preprocessed ${on_string}"/>
-        <data format="pdf" name="QC_plots" from_work_dir="Preprocessing.pdf" label = "QC preprocessing report on ${on_string}">
+        <data format="rdata" name="msidata_preprocessed" label="$infile.display_name preprocessed"/>
+        <data format="pdf" name="QC_plots" from_work_dir="Preprocessing.pdf" label = "$infile.display_name preprocessed_QC">
             <filter>outputs["outputs_select"] == "quality_control"</filter>
         </data>
-        <data format="tabular" name="matrixasoutput" label="Intensity matrix ${on_string}">
+        <data format="tabular" name="matrixasoutput" label="$infile.display_name preprocessed_matrix">
             <filter>output_matrix</filter>
         </data>
     </outputs>
@@ -665,28 +749,29 @@
                     <param name="frequ_filtering" value="2"/>
                 </conditional>
             </repeat>
-            <repeat name="methods">
+            <!--repeat name="methods">
                 <conditional name="methods_conditional">
                     <param name="preprocessing_method" value="Transformation"/>
                         <conditional name="transf_conditional">
                             <param name="trans_type" value="sqrt"/>
                         </conditional>
                 </conditional>
-            </repeat>
+            </repeat-->
             <param name="outputs_select" value="no_quality_control"/>
             <param name="output_matrix" value="True"/>
             <output name="msidata_preprocessed" file="preprocessing_results1.RData" compare="sim_size"/>
             <output name="matrixasoutput" file="preprocessing_results1.txt"/>
         </test>
         <test expect_num_outputs="3">
-            <param name="infile" value="example_continous.RData" ftype="rdata"/>
+            <param name="infile" value="preprocessed.RData" ftype="rdata"/>
             <repeat name="methods">
                 <conditional name="methods_conditional">
                     <param name="preprocessing_method" value="Peak_picking"/>
                     <param name="blocks_picking" value="3"/>
                     <param name="window_picking" value="5"/>
+                    <param name="SNR_picking_method" value="2"/>
                     <conditional name="methods_for_picking">
-                        <param name="picking_method" value="simple"/>
+                        <param name="picking_method" value="adaptive"/>
                     </conditional>
                 </conditional>
             </repeat>
@@ -699,7 +784,7 @@
                 </conditional>
             </repeat>
             <param name="outputs_select" value="quality_control"/>
-            <param name="calibrant_file" ftype="tabular" value="inputcalibrantfile2.tabular"/>
+            <param name="calibrant_file" ftype="tabular" value="inputcalibrantfile1.tabular"/>
             <param name="calibrants_column" value="1"/>
             <param name="plusminus_dalton" value="0.25"/>
             <param name="output_matrix" value="True"/>
@@ -723,9 +808,7 @@
                     <param name="preprocessing_method" value="Peak_picking"/>
                     <param name="blocks_picking" value="100"/>
                     <param name="window_picking" value="5"/>
-                    <conditional name="methods_for_picking">
                         <param name="picking_method" value="limpic"/>
-                    </conditional>
                 </conditional>
             </repeat>
             <repeat name="methods">
@@ -779,14 +862,6 @@
                         </conditional>
                 </conditional>
             </repeat>
-            <repeat name="methods">
-                <conditional name="methods_conditional">
-                    <param name="preprocessing_method" value="Transformation"/>
-                        <conditional name="transf_conditional">
-                            <param name="trans_type" value="log2"/>
-                        </conditional>
-                </conditional>
-            </repeat>
             <param name="outputs_select" value="quality_control"/>
             <param name="calibrant_file" ftype="tabular" value="inputcalibrantfile1.tabular"/>
             <param name="calibrants_column" value="1"/>
@@ -802,7 +877,7 @@
 
 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 provides provides multiple Cardinal functions to preprocess mass-spectrometry imaging data. 
+This tool provides provides multiple Cardinal functions to preprocess mass spectrometry imaging data. 
 
 Input data: 3 types of input data can be used:
 
@@ -814,18 +889,18 @@
 
 - Normalization: Normalization of intensities to total ion current (TIC)
 - Baseline reduction: Baseline  reduction removes backgroundintensity generated by chemical noise (common in MALDI datasets)
-- Smoothening: Smoothing of the mass peaks reduces noise and improves peak detection
+- Smoothening: Smoothing of the peaks reduces noise and improves peak detection
 - Peak picking: relevant peaks are picked while noise-peaks are removed (needs peak alignment afterwards)
-- Peak alignment: only possible after peak picking, mz inaccuracies are removed by alignment of same peaks to a common mz value
+- Peak alignment: only possible after peak picking, m/z inaccuracies are removed by alignment of same peaks to a common m/z value
 - Peak filtering: works only on centroided data (after peak picking and alignment or data reduction with peak filtering), removes peaks that occur only in a small proportion of pixels. If not sure which cutoff to chose run qualitycontrol first and decide according to the zero value plot.
 - Data reduction: binning, resampling or peak filtering to reduce data
-- Transformation: log2 or squareroot transformation of all intensities
+
 
 Output: 
 
 - imzML file, preprocessed
-- optional: pdf with heatmap of masses of interest after each preprocessing step
-- optional: intensity matrix as tabular file (intensities for masses in rows and pixel in columns)
+- optional: pdf with heatmap of m/z of interest after each preprocessing step
+- optional: intensity matrix as tabular file (intensities for m/z in rows and pixel in columns)
 
 Tip: