changeset 1:aac805a9d2ae draft

planemo upload for repository https://github.com/galaxyproteomics/tools-galaxyp/tree/master/tools/cardinal commit d2f311f7fff24e54c565127c40414de708e31b3c
author galaxyp
date Thu, 25 Oct 2018 07:25:13 -0400
parents a2988d8d4b77
children 0c4579390f73
files filtering.xml macros.xml test-data/Heatmaps_LM8_file16.pdf test-data/Heatmaps_analyze75.pdf test-data/Heatmaps_imzml.pdf test-data/Heatmaps_rdata.pdf test-data/Plot_analyze75.pdf test-data/Plot_analyze75_allpixels.pdf test-data/Plot_empty_spectra.pdf test-data/Plot_imzml.pdf test-data/Plot_rdata.pdf test-data/QC_analyze75.pdf test-data/QC_empty_spectra.pdf test-data/QC_imzml.pdf test-data/QC_rdata.pdf test-data/analyze75.svg test-data/analyze75_filtered2.pdf test-data/analyze_filteredoutside.RData test-data/centroids_rdata.pdf test-data/cluster_skm.RData test-data/imzml_filtered2.RData test-data/imzml_filtered2.pdf test-data/imzml_filtered3.RData test-data/imzml_filtered3.pdf test-data/imzml_filtered4.RData test-data/imzml_filtered4.pdf test-data/imzml_filtered5.RData test-data/imzml_filtered5.pdf test-data/kmeans_analyze.pdf test-data/pca_imzml.pdf test-data/rdata_notfiltered.RData test-data/rdata_notfiltered.pdf test-data/test1.pdf test-data/test2.pdf test-data/test2.rdata test-data/test3.pdf test-data/test4.pdf test-data/test4.rdata test-data/test5.pdf test-data/test6.pdf test-data/test6.rdata test-data/test7.pdf test-data/test7.rdata
diffstat 42 files changed, 175 insertions(+), 140 deletions(-) [+]
line wrap: on
line diff
--- a/filtering.xml	Mon Oct 01 01:04:17 2018 -0400
+++ b/filtering.xml	Thu Oct 25 07:25:13 2018 -0400
@@ -1,21 +1,34 @@
-<tool id="cardinal_filtering" name="MSI filtering" version="@VERSION@.0">
+<tool id="cardinal_filtering" name="MSI filtering" version="@VERSION@.1">
     <description>tool for filtering mass spectrometry imaging data</description>
     <macros>
         <import>macros.xml</import>
     </macros>
     <expand macro="requirements">
-        <requirement type="package" version="2.2.1">r-gridextra</requirement>
-        <requirement type="package" version="2.2.1">r-ggplot2</requirement>
+        <requirement type="package" version="2.3">r-gridextra</requirement>
+        <requirement type="package" version="3.0">r-ggplot2</requirement>
     </expand>
+    <expand macro="print_version"/>
     <command detect_errors="exit_code">
     <![CDATA[
 
         @INPUT_LINKING@
         cat '${MSI_subsetting}' &&
-        Rscript '${MSI_subsetting}'
+        Rscript '${MSI_subsetting}' &&
+
+        #if $imzml_output:
+            mkdir $outfile_imzml.files_path &&
+            ls -l &&
+            mv ./out.imzML "${os.path.join($outfile_imzml.files_path, 'imzml')}" | true &&
+            mv ./out.ibd "${os.path.join($outfile_imzml.files_path, 'ibd')}" | true &&
+        #end if
+        echo "imzML file:" > $outfile_imzml &&
+        ls -l "$outfile_imzml.files_path" >> $outfile_imzml
+
 
     ]]>
     </command>
+
+
     <configfiles>
         <configfile name="MSI_subsetting"><![CDATA[
 
@@ -112,8 +125,9 @@
             msidata = msidata[, coord(msidata)\$x <= $pixels_cond.max_x_range & coord(msidata)\$x >= $pixels_cond.min_x_range]
             msidata = msidata[, coord(msidata)\$y <= $pixels_cond.max_y_range & coord(msidata)\$y >= $pixels_cond.min_y_range]
         }else{
-            msidata = msidata[,0]
-            print("no valid pixel found")}
+
+            print("no valid pixel found")
+            msidata = msidata[,0]}
 
         ## update position_df for filtered pixels
         position_df = cbind(coord(msidata)[,1:2], rep("$infile.element_identifier", times=ncol(msidata)))
@@ -138,103 +152,121 @@
     ####################### Keep m/z from tabular file #########################
 
 ## feature filtering only when pixels/features/intensities are left
+
+if (ncol(msidata) > 0){
     npeaks_before_filtering= sum(spectra(msidata)[]>0, na.rm=TRUE)
+    if (npeaks_before_filtering > 0)
+    {
+
+        #if str($features_cond.features_filtering) == "features_list":
+            print("feature list")
+
+            ## read tabular file, define starting row, extract and count valid features
+            input_features = read.delim("$mz_tabular", header = $features_cond.feature_header, stringsAsFactors = FALSE)
+            extracted_features = input_features[,$features_cond.feature_column]
+            numberfeatures = length(extracted_features)
+            if (class(extracted_features) == "numeric"){
+                ### max digits given in the input file will be used to match m/z but the maximum is 4
+                   max_digits = max(nchar(sapply(strsplit(as.character(extracted_features), "\\."),`[`,2)), na.rm=TRUE)
+
+                   if (max_digits >4)
+                   {
+                   max_digits = 4
+                   }
+
+                validfeatures = round(extracted_features, max_digits) %in% round(mz(msidata),max_digits)
+                featuresofinterest = features(msidata)[round(mz(msidata), digits = max_digits) %in% round(extracted_features[validfeatures], max_digits)]
+                validmz = length(unique(featuresofinterest))
+            }else{
+                    validmz = 0
+                    featuresofinterest = 0}
+
+            ### filter msidata for valid features
+            msidata = msidata[featuresofinterest,]
+
+        ############### features within a given range are kept #####################
+
+        #elif str($features_cond.features_filtering) == "features_range":
+            print("feature range")
+
+            numberfeatures = "range"
+            validmz = "range"
+
+            if (sum(mz(msidata) >= $features_cond.min_mz & mz(msidata) <= $features_cond.max_mz)> 0){
+                msidata = msidata[mz(msidata) >= $features_cond.min_mz & mz(msidata) <= $features_cond.max_mz,]
+            }else{ 
+                msidata = msidata[0,]
+                print("no valid mz range")}
+
+        ############### Remove m/z from tabular file #########################
+
+        #elif str($features_cond.features_filtering) == "remove_features":
+            print("remove features")
+
+            ## read tabular file, define starting row, extract and count valid features
+            input_features = read.delim("$mz_tabular", header = $features_cond.removal_header, stringsAsFactors = FALSE) 
+            extracted_features = input_features[,$features_cond.removal_column]
+            numberfeatures = length(extracted_features)
+            if (class(extracted_features) == "numeric"){
+                print("input is numeric")
+                featuresofinterest = extracted_features
+                validmz = sum(featuresofinterest <= max(mz(msidata))& featuresofinterest >= min(mz(msidata)))
+            }else{featuresofinterest = 0
+                    validmz = 0}
+
+        ### Here starts removal of features: 
+            plusminus = $features_cond.removal_plusminus
+
+            mass_to_remove = numeric()
+            if (sum(featuresofinterest) > 0){
+                for (masses in featuresofinterest){
+                    #if str($features_cond.units_removal) == "ppm": 
+                        plusminus = masses * $features_cond.removal_plusminus/1000000
+                    #end if 
+                    current_mass = which(c(mz(msidata) <= masses + plusminus & mz(msidata) >= masses - plusminus))
+                    mass_to_remove = append(mass_to_remove, current_mass)}
+                msidata= msidata[-mass_to_remove, ]
+            }else{print("No features were removed as they were not fitting to m/z values and/or range")}
 
 
-if (npeaks_before_filtering > 0)
-
-{
-
-    #if str($features_cond.features_filtering) == "features_list":
-        print("feature list")
+        #elif str($features_cond.features_filtering) == "none":
 
-        ## read tabular file, define starting row, extract and count valid features
-        input_features = read.delim("$mz_tabular", header = $features_cond.feature_header, stringsAsFactors = FALSE)
-        extracted_features = input_features[,$features_cond.feature_column]
-        numberfeatures = length(extracted_features)
-        if (class(extracted_features) == "numeric"){
-            ### max digits given in the input file will be used to match m/z but the maximum is 4
-               max_digits = max(nchar(matrix(unlist(strsplit(as.character(extracted_features), "\\.")), ncol=2, byrow=TRUE)[,2]))
-               if (max_digits >4)
-               {
-               max_digits = 4
-               }
+            print("no feature filtering")
+            validmz = 0
+            numberfeatures = 0
 
-            validfeatures = round(extracted_features, max_digits) %in% round(mz(msidata),max_digits)
-            featuresofinterest = features(msidata)[round(mz(msidata), digits = max_digits) %in% round(extracted_features[validfeatures], max_digits)]
-            validmz = length(unique(featuresofinterest))
-        }else{
-                validmz = 0
-                featuresofinterest = 0}
-
-        ### filter msidata for valid features
-        msidata = msidata[featuresofinterest,]
-
-    ############### features within a given range are kept #####################
-
-    #elif str($features_cond.features_filtering) == "features_range":
-        print("feature range")
+        #end if
 
-        numberfeatures = "range"
-        validmz = "range"
-
-        if (sum(mz(msidata) >= $features_cond.min_mz & mz(msidata) <= $features_cond.max_mz)> 0){
-            msidata = msidata[mz(msidata) >= $features_cond.min_mz & mz(msidata) <= $features_cond.max_mz,]
-        }else{ 
-            msidata = msidata[0,]
-            print("no valid mz range")}
-
-    ############### Remove m/z from tabular file #########################
-
-    #elif str($features_cond.features_filtering) == "remove_features":
-        print("remove features")
+        ## save msidata as Rfile
+        save(msidata, file="$msidata_filtered")
 
-        ## read tabular file, define starting row, extract and count valid features
-        input_features = read.delim("$mz_tabular", header = $features_cond.removal_header, stringsAsFactors = FALSE) 
-        extracted_features = input_features[,$features_cond.removal_column]
-        numberfeatures = length(extracted_features)
-        if (class(extracted_features) == "numeric"){
-            print("input is numeric")
-            featuresofinterest = extracted_features
-            validmz = sum(featuresofinterest <= max(mz(msidata))& featuresofinterest >= min(mz(msidata)))
-        }else{featuresofinterest = 0
-                validmz = 0}
-
-    ### Here starts removal of features: 
-        plusminus = $features_cond.removal_plusminus
-
-        mass_to_remove = numeric()
-        if (sum(featuresofinterest) > 0){
-            for (masses in featuresofinterest){
-                #if str($features_cond.units_removal) == "ppm": 
-                    plusminus = masses * $features_cond.removal_plusminus/1000000
-                #end if 
-                current_mass = which(c(mz(msidata) <= masses + plusminus & mz(msidata) >= masses - plusminus))
-                mass_to_remove = append(mass_to_remove, current_mass)}
-            msidata= msidata[-mass_to_remove, ]
-        }else{print("No features were removed as they were not fitting to m/z values and/or range")}
+        ## Number of empty TICs
+        TICs2 = colSums(spectra(msidata)[], na.rm=TRUE)
+        ## Number of intensities > 0
+        npeaks2= sum(spectra(msidata)[]>0, na.rm=TRUE)
+        ## Spectra multiplied with m/z (potential number of peaks)
+        numpeaks2 = ncol(spectra(msidata)[])*nrow(spectra(msidata)[])
 
 
-    #elif str($features_cond.features_filtering) == "none":
 
-        print("no feature filtering")
-        validmz = 0
-        numberfeatures = 0
-
-    #end if
-
-    ## save msidata as Rfile
-    save(msidata, file="$msidata_filtered")
+    }else{
+        print("Inputfile or file filtered for pixels has no intensities > 0")
+        numberfeatures = NA
+        validmz = NA
         ## Number of empty TICs
-        TICs2 = colSums(spectra(msidata)[], na.rm=TRUE)
+        TICs2 = 0
+        npeaks2 = 0
+        numpeaks2 = 0
+    }
 }else{
-    print("Inputfile or file filtered for pixels has no intensities > 0")
-    numberfeatures = NA
-    validmz = NA
-    ## Number of empty TICs
-    TICs2 = NA
+        print("Inputfile or file filtered for pixels has no pixels left")
+        numberfeatures = NA
+        validmz = NA
+        ## Number of empty TICs
+        TICs2 = 0
+        npeaks2 = 0
+        numpeaks2 = 0
 }
-
     #################### QC numbers #######################
 
 
@@ -251,10 +283,7 @@
         ## Range y coordinates
         minimumy2 = min(coord(msidata)[,2])
         maximumy2 = max(coord(msidata)[,2])
-        ## Number of intensities > 0
-        npeaks2= sum(spectra(msidata)[]>0, na.rm=TRUE)
-        ## Spectra multiplied with m/z (potential number of peaks)
-        numpeaks2 = ncol(spectra(msidata)[])*nrow(spectra(msidata)[])
+
         ## Percentage of intensities > 0
         percpeaks2 = round(npeaks2/numpeaks2*100, digits=2)
         ## Number of empty TICs
@@ -296,9 +325,9 @@
                    paste0("valid mz: ", validmz))
 
         property_df = data.frame(properties, before, filtered)
+print(property_df)
 
-    ############################### PDF QC ################################
-
+    ########################### PDF QC and imzml output ###########################
 
         pdf("filtertool_QC.pdf", fonts = "Times", pointsize = 12)
         plot(0,type='n',axes=FALSE,ann=FALSE)
@@ -308,6 +337,14 @@
 ## QC report with more than value-table: only when pixels/features/intensities are left
 if (npeaks2 > 0)
 {
+
+    ## save msidata as imzML file, will only work if there is at least 1 m/z left
+    #if $imzml_output:
+        if (maxfeatures2 > 0){
+        writeImzML(msidata, "out")}
+    #end if
+
+
         ### visual pixel control
 
             levels(position_df\$annotation) = factor(paste(1:length(levels(position_df\$annotation)), levels(position_df\$annotation), sep="_"))
@@ -346,6 +383,7 @@
 
         dev.off()
 
+
 }else{
     print("Inputfile or filtered file has no intensities > 0")
     dev.off()
@@ -364,17 +402,6 @@
             <when value="two_columns">
                 <expand macro="reading_pixel_annotations"/>
 
-
-                <param name="two_columns_pixel" type="data" format="tabular" label="Tabular file with pixel coordinates"
-                    help="Column with x values, another with y values, another with pixel annotations"/>
-                <param name="pixel_column_x" data_ref="two_columns_pixel" label="Column with x values" type="data_column"/>
-                <param name="pixel_column_y" data_ref="two_columns_pixel" label="Column with y values" type="data_column"/>
-                <param name="annotation_column_xy" data_ref="two_columns_pixel" label="Column with annotations" type="data_column"/>
-                <param name="pixel_header" type="boolean" label="Tabular file contains a header line" truevalue="TRUE" falsevalue="FALSE"/>
-
-
-
-
             </when> 
             <when value="pixel_range">
                 <param name="min_x_range" type="integer" value="0" label="Minimum value for x"/>
@@ -408,26 +435,21 @@
                 </param>
             </when>
         </conditional>
+        <param name="imzml_output" type="boolean" label="Output of imzML file" truevalue="TRUE" falsevalue="FALSE"/>
+
     </inputs>
 
     <outputs>
         <data format="rdata" name="msidata_filtered" label="${tool.name} on ${on_string}"/>
         <data format="pdf" name="QC_overview" from_work_dir="filtertool_QC.pdf" label = "${tool.name} on ${on_string}: QC"/>
+        <data format="imzml" name="outfile_imzml" label="${tool.name} on ${on_string}: imzML">
+            <filter>imzml_output</filter>
+       </data>
     </outputs>
     <tests>
         <test>
             <expand macro="infile_imzml"/>
             <param name="pixel_filtering" value="pixel_range"/>
-            <param name="min_x_range" value="10"/>
-            <param name="max_x_range" value="20"/>
-            <param name="min_y_range" value="2"/>
-            <param name="max_y_range" value="2"/>
-            <output name="QC_overview" file="imzml_filtered2.pdf" compare="sim_size"/>
-            <output name="msidata_filtered" file="imzml_filtered2.RData" compare="sim_size"/>
-        </test>
-        <test>
-            <expand macro="infile_imzml"/>
-            <param name="pixel_filtering" value="pixel_range"/>
             <param name="min_x_range" value="1"/>
             <param name="max_x_range" value="20"/>
             <param name="min_y_range" value="2"/>
@@ -447,6 +469,10 @@
             <param name="column_names" value="2"/>
             <output name="QC_overview" file="imzml_filtered4.pdf" compare="sim_size"/>
             <output name="msidata_filtered" file="imzml_filtered4.RData" compare="sim_size"/>
+            <!--imzml output test not yet working: output name="outfile_imzml" file="filtering_imzmls/summary" compare="sim_size" delta="10000">
+                <extra_files type="file" name="imzml" value="filtering_imzmls/out4.imzML" compare="sim_size" delta="10000"/>
+                <extra_files type="file" name="ibd" value="filtering_imzmls/out4.ibd" compare="sim_size" delta="10000"/>
+            </output-->
         </test>
         <test>
             <expand macro="infile_imzml"/>
@@ -493,8 +519,8 @@
 
 **Options**
 
-- pixel filtering/annotation: either with a tabular file containing x and y coordinates and pixel annotations or by defining a range for x and y by hand (for the latter no annotation is possible). Pixel that are not present in the dataset are ignored. In case all pixels are not present in the dataset the output file will be empty and no further mz filtering will be performed. 
-- m/z feature filtering: m/z values for filtering should be either imported as a tabular file containing containing m/z of interest or by defining a range for the m/z values. m/z that are not present in the dataset are ignored. If all given m/z values or the m/z range is outside the dataset, the output file will be empty. 
+- pixel filtering/annotation: either with a tabular file containing x and y coordinates and pixel annotations or by defining a range for x and y by hand (for the latter no annotation is possible). Pixel that are not present in the dataset are ignored. It is not possible to filter only for pixels that are not present in the dataset. 
+- m/z feature filtering: m/z values for filtering should be either imported as a tabular file containing containing m/z of interest or by defining a range for the m/z values. m/z that are not present in the dataset are ignored. It is not possible to filter only for m/z that are not present in the dataset. 
 - m/z feature removing: perturbing m/z features such as matrix contaminants can be removed by specifying their m/z in a tabular file, optionally with a half window size in ppm or m/z for the window in which peaks should be removed.
 
 
@@ -506,7 +532,8 @@
 
 **Output**
 
-- imzML file filtered for pixels and/or m/z
+- MSI data as .RData output (can be read with the Cardinal package in R)
+- optional: MSI data as imzML file
 - pdf with heatmap showing the pixels that are left after filtering and histograms of kept and removed m/z
 
 
--- a/macros.xml	Mon Oct 01 01:04:17 2018 -0400
+++ b/macros.xml	Thu Oct 25 07:25:13 2018 -0400
@@ -4,10 +4,17 @@
     <xml name="requirements">
         <requirements>
             <requirement type="package" version="@VERSION@">bioconductor-cardinal</requirement>
+            <requirement type="package" version="3.5.1">r-base</requirement>
             <yield/>
         </requirements>
     </xml>
 
+    <xml name="print_version">
+        <version_command><![CDATA[
+echo $(R --version | grep version | grep -v GNU)", Cardinal version" $(R --vanilla --slave -e "library(Cardinal); cat(sessionInfo()\$otherPkgs\$Cardinal\$Version)" 2> /dev/null | grep -v -i "WARNING: ")
+        ]]></version_command>
+    </xml>
+
     <token name="@INPUT_LINKING@"><![CDATA[
         #if $infile.ext == 'imzml'
             ln -s '${infile.extra_files_path}/imzml' infile.imzML &&
@@ -33,14 +40,14 @@
 
         #if $infile.ext == 'imzml'
             #if str($processed_cond.processed_file) == "processed":
-                msidata <- readImzML('infile', mass.accuracy=$processed_cond.accuracy, units.accuracy = "$processed_cond.units")
+                msidata <- readImzML('infile', mass.accuracy=$processed_cond.accuracy, units.accuracy = "$processed_cond.units", attach.only=TRUE)
                 centroided(msidata) = $centroids
             #else
-                msidata <- readImzML('infile')
+                msidata <- readImzML('infile', attach.only=TRUE)
                 centroided(msidata) = $centroids
             #end if
         #elif $infile.ext == 'analyze75'
-            msidata = readAnalyze('infile')
+            msidata = readAnalyze('infile', attach.only=TRUE)
             centroided(msidata) = $centroids
         #else
             msidata = loadRData('infile.RData')
@@ -177,7 +184,8 @@
         <param name="filename" type="text" value="" label="Title" help="Will appear in the pdf output, if nothing given it will take the dataset name">
             <sanitizer invalid_char="">
                 <valid initial="string.ascii_letters,string.digits">
-                    <add value="_" />
+                    <add value="_"/>
+                    <add value=" "/>
                 </valid>
             </sanitizer>
         </param>
@@ -198,12 +206,12 @@
         <param name="feature_header" type="boolean" label="Tabular file contains a header line" truevalue="TRUE" falsevalue="FALSE"/>
     </xml>
 
-    <xml name="reading_2_column_mz_tabular">
-        <param name="calibrant_file" type="data" optional="true" format="tabular"
+    <xml name="reading_2_column_mz_tabular" token_optional="false">
+        <param name="calibrant_file" type="data" optional="@OPTIONAL@" format="tabular"
             label="m/z of interest (e.g. internal Calibrants)" help="one column with m/z values, optional second column with names (m/z values can also be selected as name)"/>
-        <param name="mz_column" data_ref="calibrant_file" label="Column with m/z values" type="data_column"/>
-        <param name="name_column" data_ref="calibrant_file" label="Column with name of m/z values" type="data_column"/>
-        <param name="calibrant_header" type="boolean" label="Tabular file contains a header line" truevalue="TRUE" falsevalue="FALSE"/>
+        <param name="mz_column" data_ref="calibrant_file" optional="@OPTIONAL@" label="Column with m/z values" type="data_column"/>
+        <param name="name_column" data_ref="calibrant_file" optional="@OPTIONAL@" label="Column with name of m/z values" type="data_column"/>
+        <param name="calibrant_header" type="boolean" optional="@OPTIONAL@" label="Tabular file contains a header line" truevalue="TRUE" falsevalue="FALSE"/>
     </xml>
 
     <xml name="reading_pixel_annotations">
Binary file test-data/Heatmaps_LM8_file16.pdf has changed
Binary file test-data/Heatmaps_analyze75.pdf has changed
Binary file test-data/Heatmaps_imzml.pdf has changed
Binary file test-data/Heatmaps_rdata.pdf has changed
Binary file test-data/Plot_analyze75.pdf has changed
Binary file test-data/Plot_analyze75_allpixels.pdf has changed
Binary file test-data/Plot_empty_spectra.pdf has changed
Binary file test-data/Plot_imzml.pdf has changed
Binary file test-data/Plot_rdata.pdf has changed
Binary file test-data/QC_analyze75.pdf has changed
Binary file test-data/QC_empty_spectra.pdf has changed
Binary file test-data/QC_imzml.pdf has changed
Binary file test-data/QC_rdata.pdf has changed
--- a/test-data/analyze75.svg	Mon Oct 01 01:04:17 2018 -0400
+++ b/test-data/analyze75.svg	Thu Oct 25 07:25:13 2018 -0400
@@ -1,15 +1,15 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="216pt" height="216pt" viewBox="0 0 216 216" version="1.1">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="504pt" height="504pt" viewBox="0 0 504 504" version="1.1">
 <g id="surface1">
-<rect x="0" y="0" width="216" height="216" style="fill:rgb(100%,100%,100%);fill-opacity:1;stroke:none;"/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,100%,80%);fill-opacity:1;" d="M 0 0 L 72 0 L 72 72 L 0 72 Z M 0 0 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,100%,32.156863%);fill-opacity:1;" d="M 0 72 L 72 72 L 72 144 L 0 144 Z M 0 72 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,3.921569%,0%);fill-opacity:1;" d="M 0 144 L 72 144 L 72 216 L 0 216 Z M 0 144 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 72 0 L 144 0 L 144 72 L 72 72 Z M 72 0 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0.392157%,33.333333%);fill-opacity:1;" d="M 72 72 L 144 72 L 144 144 L 72 144 Z M 72 72 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,1.568627%,93.72549%);fill-opacity:1;" d="M 72 144 L 144 144 L 144 216 L 72 216 Z M 72 144 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0.784314%,54.509804%);fill-opacity:1;" d="M 144 0 L 216 0 L 216 72 L 144 72 Z M 144 0 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,1.568627%,81.568627%);fill-opacity:1;" d="M 144 72 L 216 72 L 216 144 L 144 144 Z M 144 72 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,1.960784%,100%);fill-opacity:1;" d="M 144 144 L 216 144 L 216 216 L 144 216 Z M 144 144 "/>
+<rect x="0" y="0" width="504" height="504" style="fill:rgb(100%,100%,100%);fill-opacity:1;stroke:none;"/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,100%,80%);fill-opacity:1;" d="M 0 504 L 168 504 L 168 336 L 0 336 Z M 0 504 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,100%,32.156863%);fill-opacity:1;" d="M 0 336 L 168 336 L 168 168 L 0 168 Z M 0 336 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,3.921569%,0%);fill-opacity:1;" d="M 0 168 L 168 168 L 168 0 L 0 0 Z M 0 168 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 168 504 L 336 504 L 336 336 L 168 336 Z M 168 504 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0.392157%,33.333333%);fill-opacity:1;" d="M 168 336 L 336 336 L 336 168 L 168 168 Z M 168 336 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,1.568627%,93.72549%);fill-opacity:1;" d="M 168 168 L 336 168 L 336 0 L 168 0 Z M 168 168 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0.784314%,54.509804%);fill-opacity:1;" d="M 336 504 L 504 504 L 504 336 L 336 336 Z M 336 504 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,1.568627%,81.568627%);fill-opacity:1;" d="M 336 336 L 504 336 L 504 168 L 336 168 Z M 336 336 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,1.960784%,100%);fill-opacity:1;" d="M 336 168 L 504 168 L 504 0 L 336 0 Z M 336 168 "/>
 </g>
 </svg>
Binary file test-data/analyze75_filtered2.pdf has changed
Binary file test-data/analyze_filteredoutside.RData has changed
Binary file test-data/centroids_rdata.pdf has changed
Binary file test-data/cluster_skm.RData has changed
Binary file test-data/imzml_filtered2.pdf has changed
Binary file test-data/imzml_filtered3.RData has changed
Binary file test-data/imzml_filtered3.pdf has changed
Binary file test-data/imzml_filtered4.RData has changed
Binary file test-data/imzml_filtered4.pdf has changed
Binary file test-data/imzml_filtered5.RData has changed
Binary file test-data/imzml_filtered5.pdf has changed
Binary file test-data/kmeans_analyze.pdf has changed
Binary file test-data/pca_imzml.pdf has changed
Binary file test-data/rdata_notfiltered.RData has changed
Binary file test-data/rdata_notfiltered.pdf has changed
Binary file test-data/test1.pdf has changed
Binary file test-data/test2.pdf has changed
Binary file test-data/test2.rdata has changed
Binary file test-data/test3.pdf has changed
Binary file test-data/test4.pdf has changed
Binary file test-data/test4.rdata has changed
Binary file test-data/test5.pdf has changed
Binary file test-data/test6.pdf has changed
Binary file test-data/test6.rdata has changed
Binary file test-data/test7.pdf has changed
Binary file test-data/test7.rdata has changed