changeset 13:b24ca78a425b draft

planemo upload for repository https://github.com/HegemanLab/w4mclassfilter_galaxy_wrapper/tree/master commit 32cf96ed6c39a93eb9c6cf00494b128bd3c3febe
author eschen42
date Mon, 03 Sep 2018 22:28:03 -0400
parents 518cc205f289
children 1d36ecf93e67
files test-data/rangefilter_dataMatrix.tsv w4mclassfilter.xml w4mclassfilter_wrapper.R
diffstat 3 files changed, 574 insertions(+), 618 deletions(-) [+]
line wrap: on
line diff
--- a/test-data/rangefilter_dataMatrix.tsv	Fri Mar 02 08:29:53 2018 -0500
+++ b/test-data/rangefilter_dataMatrix.tsv	Mon Sep 03 22:28:03 2018 -0400
@@ -1,6 +1,6 @@
 	HU_017	HU_028	HU_034	HU_051	HU_060	HU_078	HU_091	HU_093	HU_099	HU_110	HU_130	HU_134	HU_138	HU_149	HU_152	HU_175	HU_178	HU_185	HU_208
-HMDB00191	560002	771533	575790	392284	888498	785428	645785	591569	960658	910201	639437	1092885	1409045	2292023	1246459	1945577	710519	773384	622898
-HMDB00208	747080	13420742	595872	1172376	7172632	3143654	4059767	1433702	5593888	5402629	2477288	3346077	4230072	7621236	8960828	10335722	7037373	1574738	2540044
-HMDB01032	2569205	26023086	1604999	430453	8103558	26222916	257139	675754	59906109	263055	31151730	18648127	14989438	1554658	20249262	5588731	871010	15920	44276
-HMDB01101.1	6877586	52217	3158	10789748	229568	4763576	3878773	976436	831937	608298	1605075	72021	442510	1107705	1464339	31250	2724553	72900	30689
-HMDB13189	2644620	727587	1661412	619181	136278	2755434	593863	837865	3526136	2003278	1608814	3446611	1941527	113937	3132404	2893445	2092753	1034666	841661
+HMDB00191	19.0950724540801	19.5573683394871	19.1351832076319	18.581538968171	19.7610090032025	19.5831195045026	19.3006944055142	19.1741869272827	19.8736633887651	19.7958256457729	19.2864427002132	20.0597101691826	20.4262862563728	21.1281900906526	20.2494039981067	20.8917666482316	19.438513703552	19.5608253922588	19.2486364146654
+HMDB00208	19.5109032146715	23.6779611010349	19.1846429313023	20.1610039089984	22.7740711828923	21.5840110083096	21.9529654992985	20.451313755289	22.4154199380002	22.3652301844309	21.2403301698498	21.6740392144135	22.0122507889717	22.8615935600174	23.0952006159265	23.3011358356974	22.746605551146	20.5866803867983	21.2764220576728
+HMDB01032	21.2928905785523	24.6332887213057	20.6141409677961	18.7154961966847	22.9501240553341	24.6443247870262	17.9721889132336	19.3661386209868	25.8361997953493	18.0050049466979	24.8928089492302	24.1525273990616	23.8374429574498	20.5681658146509	24.2713659930314	22.4140893053724	19.7323297568288	13.958552715431	15.4342372710269
+HMDB01101.1	22.7134708439962	15.6722319530667	11.6247954558602	23.3631578345615	17.8085620299575	22.183613575742	21.8871689158671	19.8971659609365	19.6661147561338	19.214418735272	20.6142092807528	16.1361300108053	18.7553505325418	20.079142288524	20.4818181509538	14.9315685693242	21.3775881248719	16.1536311941017	14.9054340159519
+HMDB13189	21.3346290086766	19.4727602406215	20.6639784491577	19.2400016764968	17.0561931543153	21.3938481405109	19.1797706242895	19.6763582845664	21.7496566885488	20.9339312108399	20.6175661105571	21.7167470481744	20.8887603396637	16.7978767996065	21.5788388647145	21.4643567902489	20.9969706149343	19.9807336965562	19.6828797432404
--- a/w4mclassfilter.xml	Fri Mar 02 08:29:53 2018 -0500
+++ b/w4mclassfilter.xml	Mon Sep 03 22:28:03 2018 -0400
@@ -1,461 +1,476 @@
-<tool id="w4mclassfilter" name="W4m Data Subset" version="0.98.8">
-  <description>Filter W4m data by values or metadata</description>
-
-  <!-- Here is the hyphenation standard that I *try* to apply consistently in my documentation: http://www.sandranoonan.com/dont-let-hyphenation-drive-crazy/ -->
-
-  <requirements>
-    <!-- <requirement type="package" version="6.2">readline</requirement> -->
-    <requirement type="package" version="3.4.1">r-base</requirement>
-    <requirement type="package" version="1.1_4">r-batch</requirement>
-    <requirement type="package" version="0.98.7">w4mclassfilter</requirement>
-  </requirements>
-
-  <stdio>
-    <exit_code range="1:" level="fatal" />
-  </stdio>
-
-
-  <command detect_errors="aggressive"><![CDATA[
-  Rscript $__tool_directory__/w4mclassfilter_wrapper.R
-  dataMatrix_in '$dataMatrix_in'
-  sampleMetadata_in '$sampleMetadata_in'
-  variableMetadata_in '$variableMetadata_in'
-  sampleclassNames '$sampleclassNames'
-  inclusive '$inclusive'
-  wildcards '$wildcards'
-  classnameColumn '$classnameColumn'
-  samplenameColumn 'sampleMetadata'
-  variable_range_filter '$variableRangeFilter'
-	transformation '$transformation'
-  dataMatrix_out '$dataMatrix_out'
-  sampleMetadata_out '$sampleMetadata_out'
-  variableMetadata_out '$variableMetadata_out'
-  ]]></command>
-
-  <inputs>
-    <param name="dataMatrix_in" label="Data matrix file" type="data" format="tabular" help="variable x sample, decimal: '.', missing: NA, mode: numerical, separator: tab" />
-    <param name="sampleMetadata_in" label="Sample metadata file" type="data" format="tabular" help="sample x metadata columns, separator: tab" />
-    <param name="variableMetadata_in" label="Variable metadata file" type="data" format="tabular" help="variable x metadata columns, separator: tab" />
-    <param name="classnameColumn" label="Column that names the sample-class" type="text" value = "class" help="name of the column in sample metadata that has the values to be tested against the 'Names of sample-classes' input parameter - defaults to 'class'">
-      <sanitizer>
-        <valid initial="string.letters">
-          <add preset="string.digits"/>
-          <add value="&#45;"  /> <!-- dash, hyphen -->
-          <add value="&#46;"  /> <!-- dot, period -->
-          <add value="&#95;"  /> <!-- underscore -->
-        </valid>
-      </sanitizer>
-    </param>
-    <param name="sampleclassNames" label="Names of sample-classes" type="text" value = "" help="comma-separated names (or regular expressions to match names) of sample-classes to filter in or out; defaults to no names">
-      <sanitizer>
-        <valid initial="string.letters">
-          <add preset="string.digits"/>
-          <add value="&#123;" /> <!-- l-cube, left-curly-bracket -->
-          <add value="&#124;" /> <!-- pipe -->
-          <add value="&#125;" /> <!-- r-cube, right-curly-bracket -->
-          <add value="&#36;"  /> <!-- dollar, dollar-sign -->
-          <add value="&#40;"  /> <!-- left-paren -->
-          <add value="&#41;"  /> <!-- right-paren -->
-          <add value="&#42;"  /> <!-- splat, asterisk -->
-          <add value="&#43;"  /> <!-- plus -->
-          <add value="&#44;"  /> <!-- comma -->
-          <add value="&#46;"  /> <!-- dot, period -->
-          <add value="&#58;"  /> <!-- colon -->
-          <add value="&#59;"  /> <!-- semi, semicolon -->
-          <add value="&#63;"  /> <!-- what, question mark -->
-          <add value="&#91;"  /> <!-- l-squib, left-squre-bracket -->
-          <add value="&#92;"  /> <!-- whack, backslash -->
-          <add value="&#93;"  /> <!-- r-squib, right-squre-bracket -->
-          <add value="&#94;"  /> <!-- hat, caret -->
-          <add value="&#95;"  /> <!-- underscore -->
-        </valid>
-      </sanitizer>
-    </param>
-
-    <param name="wildcards" label="Use 'wild cards' or 'regular expressions'" type="select" help="'wild-cards' (the default) - use '*' and '?' to match class names; 'regular-expressions' - use regular expressions to match class names">
-      <option value="TRUE" selected="true">wild-cards</option>
-      <option value="FALSE">regular-expressions</option>
-    </param>
-    <param name="inclusive" label="Exclude/include named classes" type="select" help="'filter-out' (the default) - exclude only the named sample-classes; 'filter-in' - include only the named sample-classes">
-      <option value="TRUE">filter-in</option>
-      <option value="FALSE" selected="true">filter-out</option>
-    </param>
-    
-    <param name="variableRangeFilter" label="Variable-range filters" type="text" value = "" help="comma-separated filters, each specified as 'variableMetadataColumnName:min:max'; default is no filters.  (See help below.)">
-      <sanitizer>
-        <valid initial="string.letters">
-          <add preset="string.digits"/>
-          <add value="&#44;"  /> <!-- comma -->
-          <add value="&#45;"  /> <!-- dash, hyphen -->
-          <add value="&#46;"  /> <!-- dot, period -->
-          <add value="&#58;"  /> <!-- colon -->
-          <add value="&#95;"  /> <!-- underscore -->
-        </valid>
-      </sanitizer>
-    </param>
-    <param name="transformation" label="Data-transformation" type="select" help="'none' (the default) - do not transform data; 'log10' - log base 10 of data; in both cases, negative and missing values are imputed to zero">
-      <option value="none" selected="true">none</option>
-      <option value="log10">log10</option>
-    </param>
-    
-  </inputs>
-  <outputs>
-    <data name="dataMatrix_out" label="${dataMatrix_in.name}.subset" format="tabular" ></data>
-    <data name="sampleMetadata_out" label="${sampleMetadata_in.name}.subset" format="tabular" ></data>
-    <data name="variableMetadata_out" label="${variableMetadata_in.name}.subset" format="tabular" ></data>
-  </outputs>
-
-  <tests>
-    <test>
-      <param name="dataMatrix_in" value="input_dataMatrix.tsv"/>
-      <param name="sampleMetadata_in" value="input_sampleMetadata.tsv"/>
-      <param name="variableMetadata_in" value="input_variableMetadata.tsv"/>
-      <param name="classnameColumn" value="gender"/>
-      <param name="sampleclassNames" value="M"/>
-      <param name="wildcards" value="FALSE"/>
-      <param name="inclusive" value="filter-in"/>
-      <param name="variableRangeFilter" value="FEATMAX:6.30103:,mz:200:,rt::800"/>
-      <param name="transformation" value="log10"/>
-      <output name="sampleMetadata_out">
-        <assert_contents>
-          <not_has_text text="HU_028" />
-          <not_has_text text="HU_051" />
-          <not_has_text text="HU_060" />
-          <not_has_text text="HU_110" />
-          <not_has_text text="HU_149" />
-          <not_has_text text="HU_152" />
-          <not_has_text text="HU_175" />
-          <not_has_text text="HU_178" />
-          <not_has_text text="HU_185" />
-          <not_has_text text="HU_204" />
-          <not_has_text text="HU_208" />
-          <has_text text="HU_017" />
-          <has_text text="HU_034" />
-          <has_text text="HU_078" />
-          <has_text text="HU_091" />
-          <has_text text="HU_093" />
-          <has_text text="HU_099" />
-          <has_text text="HU_130" />
-          <has_text text="HU_134" />
-          <has_text text="HU_138" />
-        </assert_contents>
-      </output>
-      <output name="variableMetadata_out">
-        <assert_contents>
-          <not_has_text text="HMDB00191" />
-          <has_text     text="HMDB00208" />
-          <not_has_text text="HMDB00251" />
-          <not_has_text text="HMDB00299" />
-          <not_has_text text="HMDB00512" />
-          <not_has_text text="HMDB00518" />
-          <not_has_text text="HMDB00715" />
-          <not_has_text text="HMDB00822" />
-          <has_text     text="HMDB01032" />
-          <has_text     text="HMDB01101.1" />
-          <not_has_text text="HMDB03193" />
-          <not_has_text text="HMDB04824" />
-          <not_has_text text="HMDB10348" />
-          <has_text     text="HMDB13189" />
-          <not_has_text text="HMDB59717" />
-        </assert_contents>
-      </output>
-    </test>
-    <test>
-      <param name="dataMatrix_in" value="input_dataMatrix.tsv"/>
-      <param name="sampleMetadata_in" value="input_sampleMetadata.tsv"/>
-      <param name="variableMetadata_in" value="input_variableMetadata.tsv"/>
-      <param name="classnameColumn" value="class"/>
-      <param name="sampleclassNames" value=""/>
-      <param name="wildcards" value="FALSE"/>
-      <param name="inclusive" value="filter-out"/>
-      <param name="variableRangeFilter" value="FEATMAX:2e6:,mz:200:,rt::800"/>
-      <output name="sampleMetadata_out">
-        <assert_contents>
-          <has_text text="HU_028" />
-          <has_text text="HU_051" />
-          <has_text text="HU_060" />
-          <has_text text="HU_110" />
-          <has_text text="HU_149" />
-          <has_text text="HU_152" />
-          <has_text text="HU_175" />
-          <has_text text="HU_178" />
-          <has_text text="HU_185" />
-          <not_has_text text="HU_204" />
-          <has_text text="HU_208" />
-          <has_text text="HU_017" />
-          <has_text text="HU_034" />
-          <has_text text="HU_078" />
-          <has_text text="HU_091" />
-          <has_text text="HU_093" />
-          <has_text text="HU_099" />
-          <has_text text="HU_130" />
-          <has_text text="HU_134" />
-          <has_text text="HU_138" />
-        </assert_contents>
-      </output>
-      <output name="variableMetadata_out">
-        <assert_contents>
-          <has_text     text="HMDB00191" />
-          <has_text     text="HMDB00208" />
-          <not_has_text text="HMDB00251" />
-          <not_has_text text="HMDB00299" />
-          <not_has_text text="HMDB00512" />
-          <not_has_text text="HMDB00518" />
-          <not_has_text text="HMDB00715" />
-          <not_has_text text="HMDB00822" />
-          <has_text     text="HMDB01032" />
-          <has_text     text="HMDB01101.1" />
-          <not_has_text text="HMDB03193" />
-          <not_has_text text="HMDB04824" />
-          <not_has_text text="HMDB10348" />
-          <has_text     text="HMDB13189" />
-          <not_has_text text="HMDB59717" />
-        </assert_contents>
-      </output>
-    </test>
-    <test>
-      <param name="dataMatrix_in" value="input_dataMatrix.tsv"/>
-      <param name="sampleMetadata_in" value="input_sampleMetadata.tsv"/>
-      <param name="variableMetadata_in" value="input_variableMetadata.tsv"/>
-      <param name="classnameColumn" value="gender"/>
-      <param name="sampleclassNames" value="M"/>
-      <param name="inclusive" value="filter-in"/>
-      <output name="dataMatrix_out">
-        <assert_contents>
-          <not_has_text text="HU_028" />
-          <not_has_text text="HU_051" />
-          <not_has_text text="HU_060" />
-          <not_has_text text="HU_110" />
-          <not_has_text text="HU_149" />
-          <not_has_text text="HU_152" />
-          <not_has_text text="HU_175" />
-          <not_has_text text="HU_178" />
-          <not_has_text text="HU_185" />
-          <not_has_text text="HU_204" />
-          <not_has_text text="HU_208" />
-          <has_text     text="HU_017" />
-          <has_text     text="HU_034" />
-          <has_text     text="HU_078" />
-          <has_text     text="HU_091" />
-          <has_text     text="HU_093" />
-          <has_text     text="HU_099" />
-          <has_text     text="HU_130" />
-          <has_text     text="HU_134" />
-          <has_text     text="HU_138" />
-          <has_text     text="HMDB03193" />
-          <not_has_text text="HMDB00822" />
-          <has_text     text="HMDB01101" />
-          <has_text     text="HMDB01101.1" />
-          <has_text     text="HMDB10348" />
-          <has_text     text="HMDB59717" />
-          <has_text     text="HMDB13189" />
-          <has_text     text="HMDB00299" />
-          <has_text     text="HMDB00191" />
-          <has_text     text="HMDB00518" />
-          <has_text     text="HMDB00715" />
-          <has_text     text="HMDB01032" />
-          <has_text     text="HMDB00208" />
-          <has_text     text="HMDB04824" />
-          <has_text     text="HMDB00512" />
-          <has_text     text="HMDB00251" />
-        </assert_contents>
-      </output>
-    </test>
-    <test>
-      <param name="dataMatrix_in" value="input_dataMatrix.tsv"/>
-      <param name="sampleMetadata_in" value="input_sampleMetadata.tsv"/>
-      <param name="variableMetadata_in" value="input_variableMetadata.tsv"/>
-      <param name="classnameColumn" value="gender"/>
-      <param name="sampleclassNames" value="*"/>
-      <param name="wildcards" value="TRUE"/>
-      <param name="inclusive" value="filter-in"/>
-      <output name="sampleMetadata_out">
-        <assert_contents>
-          <not_has_text text="HU_204" />
-          <has_text text="HU_028" />
-          <has_text text="HU_051" />
-          <has_text text="HU_060" />
-          <has_text text="HU_110" />
-          <has_text text="HU_149" />
-          <has_text text="HU_152" />
-          <has_text text="HU_175" />
-          <has_text text="HU_178" />
-          <has_text text="HU_185" />
-          <has_text text="HU_208" />
-          <has_text text="HU_017" />
-          <has_text text="HU_034" />
-          <has_text text="HU_078" />
-          <has_text text="HU_091" />
-          <has_text text="HU_093" />
-          <has_text text="HU_099" />
-          <has_text text="HU_130" />
-          <has_text text="HU_134" />
-          <has_text text="HU_138" />
-        </assert_contents>
-      </output>
-    </test>
-    <test>
-      <param name="dataMatrix_in" value="input_dataMatrix.tsv"/>
-      <param name="sampleMetadata_in" value="input_sampleMetadata.tsv"/>
-      <param name="variableMetadata_in" value="input_variableMetadata.tsv"/>
-      <param name="classnameColumn" value="gender"/>
-      <param name="sampleclassNames" value="M"/>
-      <param name="wildcards" value="FALSE"/>
-      <param name="inclusive" value="filter-in"/>
-      <output name="sampleMetadata_out">
-        <assert_contents>
-          <not_has_text text="HU_028" />
-          <not_has_text text="HU_051" />
-          <not_has_text text="HU_060" />
-          <not_has_text text="HU_110" />
-          <not_has_text text="HU_149" />
-          <not_has_text text="HU_152" />
-          <not_has_text text="HU_175" />
-          <not_has_text text="HU_178" />
-          <not_has_text text="HU_185" />
-          <not_has_text text="HU_204" />
-          <not_has_text text="HU_208" />
-          <has_text     text="HU_017" />
-          <has_text     text="HU_034" />
-          <has_text     text="HU_078" />
-          <has_text     text="HU_091" />
-          <has_text     text="HU_093" />
-          <has_text     text="HU_099" />
-          <has_text     text="HU_130" />
-          <has_text     text="HU_134" />
-          <has_text     text="HU_138" />
-        </assert_contents>
-      </output>
-    </test>
-    <test>
-      <param name="dataMatrix_in" value="input_dataMatrix.tsv"/>
-      <param name="sampleMetadata_in" value="input_sampleMetadata.tsv"/>
-      <param name="variableMetadata_in" value="input_variableMetadata.tsv"/>
-      <param name="classnameColumn" value="gender"/>
-      <param name="sampleclassNames" value="M"/>
-      <param name="wildcards" value="FALSE"/>
-      <param name="inclusive" value="filter-in"/>
-      <output name="variableMetadata_out">
-        <assert_contents>
-          <has_text     text="HMDB03193" />
-          <not_has_text text="HMDB00822" />
-          <has_text     text="HMDB01101" />
-          <has_text     text="HMDB01101.1" />
-          <has_text     text="HMDB10348" />
-          <has_text     text="HMDB59717" />
-          <has_text     text="HMDB13189" />
-          <has_text     text="HMDB00299" />
-          <has_text     text="HMDB00191" />
-          <has_text     text="HMDB00518" />
-          <has_text     text="HMDB00715" />
-          <has_text     text="HMDB01032" />
-          <has_text     text="HMDB00208" />
-          <has_text     text="HMDB04824" />
-          <has_text     text="HMDB00512" />
-          <has_text     text="HMDB00251" />
-        </assert_contents>
-      </output>
-    </test>
-    <test>
-      <param name="dataMatrix_in" value="input_nofilter_dataMatrix.tsv"/>
-      <param name="sampleMetadata_in" value="input_sampleMetadata.tsv"/>
-      <param name="variableMetadata_in" value="input_variableMetadata.tsv"/>
-      <param name="classnameColumn" value="gender"/>
-      <param name="sampleclassNames" value="M"/>
-      <param name="wildcards" value="FALSE"/>
-      <param name="inclusive" value="filter-in"/>
-      <output name="variableMetadata_out">
-        <assert_contents>
-          <has_text     text="HMDB03193" />
-          <not_has_text text="HMDB00822" />
-          <has_text     text="HMDB01101" />
-          <has_text     text="HMDB01101.1" />
-          <has_text     text="HMDB10348" />
-          <has_text     text="HMDB59717" />
-          <not_has_text text="HMDB13189" />
-          <has_text     text="HMDB00299" />
-          <has_text     text="HMDB00191" />
-          <has_text     text="HMDB00518" />
-          <has_text     text="HMDB00715" />
-          <has_text     text="HMDB01032" />
-          <has_text     text="HMDB00208" />
-          <has_text     text="HMDB04824" />
-          <has_text     text="HMDB00512" />
-          <has_text     text="HMDB00251" />
-        </assert_contents>
-      </output>
-    </test>
-    <test>
-      <param name="dataMatrix_in" value="input_dataMatrix.tsv"/>
-      <param name="sampleMetadata_in" value="input_sampleMetadata.tsv"/>
-      <param name="variableMetadata_in" value="input_variableMetadata.tsv"/>
-      <param name="classnameColumn" value="gender"/>
-      <param name="sampleclassNames" value="[Mm],[fF]"/>
-      <param name="wildcards" value="FALSE"/>
-      <param name="inclusive" value="filter-in"/>
-      <output name="sampleMetadata_out">
-        <assert_contents>
-          <has_text text="HU_028" />
-          <has_text text="HU_051" />
-          <has_text text="HU_060" />
-          <has_text text="HU_110" />
-          <has_text text="HU_149" />
-          <has_text text="HU_152" />
-          <has_text text="HU_175" />
-          <has_text text="HU_178" />
-          <has_text text="HU_185" />
-          <not_has_text text="HU_204" />
-          <has_text text="HU_208" />
-          <has_text text="HU_017" />
-          <has_text text="HU_034" />
-          <has_text text="HU_078" />
-          <has_text text="HU_091" />
-          <has_text text="HU_093" />
-          <has_text text="HU_099" />
-          <has_text text="HU_130" />
-          <has_text text="HU_134" />
-          <has_text text="HU_138" />
-        </assert_contents>
-      </output>
-    </test>
-    <test>
-      <param name="dataMatrix_in" value="input_dataMatrix.tsv"/>
-      <param name="sampleMetadata_in" value="input_sampleMetadata.tsv"/>
-      <param name="variableMetadata_in" value="input_variableMetadata.tsv"/>
-      <param name="classnameColumn" value=""/>
-      <param name="sampleclassNames" value="M"/>
-      <param name="wildcards" value="FALSE"/>
-      <param name="inclusive" value="filter-in"/>
-      <output name="sampleMetadata_out">
-        <assert_contents>
-          <has_text text="HU_028" />
-          <has_text text="HU_051" />
-          <has_text text="HU_060" />
-          <has_text text="HU_110" />
-          <has_text text="HU_149" />
-          <has_text text="HU_152" />
-          <has_text text="HU_175" />
-          <has_text text="HU_178" />
-          <has_text text="HU_185" />
-          <not_has_text text="HU_204" />
-          <has_text text="HU_208" />
-          <has_text text="HU_017" />
-          <has_text text="HU_034" />
-          <has_text text="HU_078" />
-          <has_text text="HU_091" />
-          <has_text text="HU_093" />
-          <has_text text="HU_099" />
-          <has_text text="HU_130" />
-          <has_text text="HU_134" />
-          <has_text text="HU_138" />
-        </assert_contents>
-      </output>
-    </test>
-  </tests>
-
-
-
-  <help><![CDATA[
+<tool id="w4mclassfilter" name="W4m Data Subset" version="0.98.11">
+    <description>Filter W4m data by values or metadata</description>
+    <!-- Here is the hyphenation standard that I *try* to apply consistently in my documentation: http://www.sandranoonan.com/dont-let-hyphenation-drive-crazy/ -->
+    <requirements>
+        <!-- <requirement type="package" version="6.2">readline</requirement> -->
+        <requirement type="package" version="3.4.1">r-base</requirement>
+        <requirement type="package" version="1.1_4">r-batch</requirement>
+        <requirement type="package" version="0.98.8">w4mclassfilter</requirement>
+    </requirements>
+    <command detect_errors="aggressive"><![CDATA[
+    Rscript $__tool_directory__/w4mclassfilter_wrapper.R
+    dataMatrix_in '$dataMatrix_in'
+    sampleMetadata_in '$sampleMetadata_in'
+    variableMetadata_in '$variableMetadata_in'
+    sampleclassNames '$sampleclassNames'
+    inclusive '$inclusive'
+    wildcards '$wildcards'
+    classnameColumn '$classnameColumn'
+    samplenameColumn 'sampleMetadata'
+    variable_range_filter '$variableRangeFilter'
+    transformation '$transformation'
+    dataMatrix_out '$dataMatrix_out'
+    sampleMetadata_out '$sampleMetadata_out'
+    variableMetadata_out '$variableMetadata_out'
+    ]]></command>
+    <inputs>
+        <param name="dataMatrix_in" format="tabular" label="Data matrix file" type="data"
+            help="variables &#10006; samples" />
+        <param name="sampleMetadata_in" format="tabular" label="Sample metadata file" type="data"
+            help="sample metadata, one row per sample" />
+        <param name="variableMetadata_in" format="tabular" label="Variable metadata file" type="data"
+            help="variable metadata, one row per variable" />
+        <param name="classnameColumn" label="Column that names the sample-class" type="text" value = "class"
+            help="name of the column in sample metadata that has the values to be tested against the 'Names of sample-classes' input parameter - defaults to 'class'">
+            <sanitizer>
+                <valid initial="string.letters">
+                    <add preset="string.digits"/>
+                    <add value="&#46;"    /> <!-- dot, period -->
+                    <add value="&#95;"    /> <!-- underscore -->
+                </valid>
+            </sanitizer>
+        </param>
+        <param name="sampleclassNames" label="Names of sample-classes" type="text" value = ""
+            help="comma-separated names (or regular expressions to match names) of sample-classes to filter in or out; defaults to no names">
+            <sanitizer>
+                <valid initial="string.letters">
+                    <add preset="string.digits"/>
+                    <add value="&#123;"   /> <!-- l-cube, left-curly-bracket -->
+                    <add value="&#124;"   /> <!-- pipe -->
+                    <add value="&#125;"   /> <!-- r-cube, right-curly-bracket -->
+                    <add value="&#36;"    /> <!-- dollar, dollar-sign -->
+                    <add value="&#40;"    /> <!-- left-paren -->
+                    <add value="&#41;"    /> <!-- right-paren -->
+                    <add value="&#42;"    /> <!-- splat, asterisk -->
+                    <add value="&#43;"    /> <!-- plus -->
+                    <add value="&#45;"    /> <!-- dash, hyphen -->
+                    <add value="&#44;"    /> <!-- comma -->
+                    <add value="&#46;"    /> <!-- dot, period -->
+                    <add value="&#58;"    /> <!-- colon -->
+                    <add value="&#59;"    /> <!-- semi, semicolon -->
+                    <add value="&#63;"    /> <!-- what, question mark -->
+                    <add value="&#91;"    /> <!-- l-squib, left-squre-bracket -->
+                    <add value="&#92;"    /> <!-- whack, backslash -->
+                    <add value="&#93;"    /> <!-- r-squib, right-squre-bracket -->
+                    <add value="&#94;"    /> <!-- hat, caret -->
+                    <add value="&#95;"    /> <!-- underscore -->
+                </valid>
+            </sanitizer>
+        </param>
+        <param name="wildcards" label="Use 'wild cards' or 'regular expressions'" type="select"
+            help="'wild-cards' (the default) - use '*' and '?' to match class names; 'regular-expressions' - use regular expressions to match class names">
+            <option value="TRUE" selected="true">wild-cards</option>
+            <option value="FALSE">regular-expressions</option>
+        </param>
+        <param name="inclusive" label="Exclude/include named classes" type="select"
+            help="'filter-out' (the default) - exclude only the named sample-classes; 'filter-in' - include only the named sample-classes">
+            <option value="TRUE">filter-in</option>
+            <option value="FALSE" selected="true">filter-out</option>
+        </param>
+        <param name="variableRangeFilter" label="Variable-range filters" type="text" value = ""
+            help="comma-separated filters, each specified as 'variableMetadataColumnName:min:max'; default is no filters.    (See help below.)">
+            <sanitizer>
+                <valid initial="string.letters">
+                    <add preset="string.digits"/>
+                    <add value="&#44;"    /> <!-- comma -->
+                    <add value="&#46;"    /> <!-- dot, period -->
+                    <add value="&#58;"    /> <!-- colon -->
+                    <add value="&#95;"    /> <!-- underscore -->
+                </valid>
+            </sanitizer>
+        </param>
+        <param name="transformation" label="Data-transformation" type="select"
+            help="'none' (the default) - do not transform data; 'log2' - log base 2 of data; 'log10' - log base 10 of data; in all cases, negative and missing values are imputed to zero">
+            <option value="none" selected="true">none</option>
+            <option value="log2">log2</option>
+            <option value="log10">log10</option>
+        </param>
+    </inputs>
+    <outputs>
+        <data name="dataMatrix_out" format="tabular" label="${dataMatrix_in.name}.subset" ></data>
+        <data name="sampleMetadata_out" format="tabular" label="${sampleMetadata_in.name}.subset" ></data>
+        <data name="variableMetadata_out" format="tabular" label="${variableMetadata_in.name}.subset" ></data>
+    </outputs>
+    <tests>
+      <!-- test 1 -->
+      <test>
+        <param name="dataMatrix_in" value="input_dataMatrix.tsv"/>
+        <param name="sampleMetadata_in" value="input_sampleMetadata.tsv"/>
+        <param name="variableMetadata_in" value="input_variableMetadata.tsv"/>
+        <param name="classnameColumn" value="gender"/>
+        <param name="sampleclassNames" value="M"/>
+        <param name="wildcards" value="FALSE"/>
+        <param name="inclusive" value="filter-in"/>
+        <param name="variableRangeFilter" value="FEATMAX:6.30103:,mz:200:,rt::800"/>
+        <param name="transformation" value="log10"/>
+        <output name="dataMatrix_out">
+          <assert_contents>
+            <has_text text="5.87336711011293" />
+          </assert_contents>
+        </output>
+        <output name="sampleMetadata_out">
+          <assert_contents>
+            <not_has_text text="HU_028" />
+            <not_has_text text="HU_051" />
+            <not_has_text text="HU_060" />
+            <not_has_text text="HU_110" />
+            <not_has_text text="HU_149" />
+            <not_has_text text="HU_152" />
+            <not_has_text text="HU_175" />
+            <not_has_text text="HU_178" />
+            <not_has_text text="HU_185" />
+            <not_has_text text="HU_204" />
+            <not_has_text text="HU_208" />
+            <has_text text="HU_017" />
+            <has_text text="HU_034" />
+            <has_text text="HU_078" />
+            <has_text text="HU_091" />
+            <has_text text="HU_093" />
+            <has_text text="HU_099" />
+            <has_text text="HU_130" />
+            <has_text text="HU_134" />
+            <has_text text="HU_138" />
+          </assert_contents>
+        </output>
+        <output name="variableMetadata_out">
+          <assert_contents>
+            <not_has_text text="HMDB00191" />
+            <has_text     text="HMDB00208" />
+            <not_has_text text="HMDB00251" />
+            <not_has_text text="HMDB00299" />
+            <not_has_text text="HMDB00512" />
+            <not_has_text text="HMDB00518" />
+            <not_has_text text="HMDB00715" />
+            <not_has_text text="HMDB00822" />
+            <has_text     text="HMDB01032" />
+            <has_text     text="HMDB01101.1" />
+            <not_has_text text="HMDB03193" />
+            <not_has_text text="HMDB04824" />
+            <not_has_text text="HMDB10348" />
+            <has_text     text="HMDB13189" />
+            <not_has_text text="HMDB59717" />
+          </assert_contents>
+        </output>
+      </test>
+      <!-- test 2 -->
+      <test>
+        <param name="dataMatrix_in" value="input_dataMatrix.tsv"/>
+        <param name="sampleMetadata_in" value="input_sampleMetadata.tsv"/>
+        <param name="variableMetadata_in" value="input_variableMetadata.tsv"/>
+        <param name="classnameColumn" value="sampleMetadata"/>
+        <!-- test that hyphens in regular expressions work -->
+        <param name="sampleclassNames" value="HU_[0-9][0-9][0-9]"/>
+        <param name="wildcards" value="FALSE"/>
+        <param name="inclusive" value="filter-in"/>
+        <param name="variableRangeFilter" value="FEATMAX:20.93157:,mz:200:,rt::800"/>
+        <param name="transformation" value="log2"/>
+        <output name="dataMatrix_out">
+          <assert_contents>
+            <has_text text="19.5109032146715" />
+          </assert_contents>
+        </output>
+        <output name="sampleMetadata_out">
+          <assert_contents>
+            <has_text text="HU_028" />
+            <has_text text="HU_051" />
+            <has_text text="HU_060" />
+            <has_text text="HU_110" />
+            <has_text text="HU_149" />
+            <has_text text="HU_152" />
+            <has_text text="HU_175" />
+            <has_text text="HU_178" />
+            <has_text text="HU_185" />
+            <not_has_text text="HU_204" />
+            <has_text text="HU_208" />
+            <has_text text="HU_017" />
+            <has_text text="HU_034" />
+            <has_text text="HU_078" />
+            <has_text text="HU_091" />
+            <has_text text="HU_093" />
+            <has_text text="HU_099" />
+            <has_text text="HU_130" />
+            <has_text text="HU_134" />
+            <has_text text="HU_138" />
+          </assert_contents>
+        </output>
+        <output name="variableMetadata_out">
+          <assert_contents>
+            <has_text     text="HMDB00191" />
+            <has_text     text="HMDB00208" />
+            <not_has_text text="HMDB00251" />
+            <not_has_text text="HMDB00299" />
+            <not_has_text text="HMDB00512" />
+            <not_has_text text="HMDB00518" />
+            <not_has_text text="HMDB00715" />
+            <not_has_text text="HMDB00822" />
+            <has_text     text="HMDB01032" />
+            <has_text     text="HMDB01101.1" />
+            <not_has_text text="HMDB03193" />
+            <not_has_text text="HMDB04824" />
+            <not_has_text text="HMDB10348" />
+            <has_text     text="HMDB13189" />
+            <not_has_text text="HMDB59717" />
+          </assert_contents>
+        </output>
+      </test>
+      <!-- test 3 -->
+      <test>
+        <param name="dataMatrix_in" value="input_dataMatrix.tsv"/>
+        <param name="sampleMetadata_in" value="input_sampleMetadata.tsv"/>
+        <param name="variableMetadata_in" value="input_variableMetadata.tsv"/>
+        <param name="classnameColumn" value="gender"/>
+        <param name="sampleclassNames" value="M"/>
+        <param name="inclusive" value="filter-in"/>
+        <param name="transformation" value="none"/>
+        <output name="dataMatrix_out">
+          <assert_contents>
+            <not_has_text text="HU_028" />
+            <not_has_text text="HU_051" />
+            <not_has_text text="HU_060" />
+            <not_has_text text="HU_110" />
+            <not_has_text text="HU_149" />
+            <not_has_text text="HU_152" />
+            <not_has_text text="HU_175" />
+            <not_has_text text="HU_178" />
+            <not_has_text text="HU_185" />
+            <not_has_text text="HU_204" />
+            <not_has_text text="HU_208" />
+            <has_text     text="HU_017" />
+            <has_text     text="HU_034" />
+            <has_text     text="HU_078" />
+            <has_text     text="HU_091" />
+            <has_text     text="HU_093" />
+            <has_text     text="HU_099" />
+            <has_text     text="HU_130" />
+            <has_text     text="HU_134" />
+            <has_text     text="HU_138" />
+            <has_text     text="HMDB03193" />
+            <not_has_text text="HMDB00822" />
+            <has_text     text="HMDB01101" />
+            <has_text     text="HMDB01101.1" />
+            <has_text     text="HMDB10348" />
+            <has_text     text="HMDB59717" />
+            <has_text     text="HMDB13189" />
+            <has_text     text="HMDB00299" />
+            <has_text     text="HMDB00191" />
+            <has_text     text="HMDB00518" />
+            <has_text     text="HMDB00715" />
+            <has_text     text="HMDB01032" />
+            <has_text     text="HMDB00208" />
+            <has_text     text="HMDB04824" />
+            <has_text     text="HMDB00512" />
+            <has_text     text="HMDB00251" />
+          </assert_contents>
+        </output>
+      </test>
+      <!-- test 4 -->
+      <test>
+        <param name="dataMatrix_in" value="input_dataMatrix.tsv"/>
+        <param name="sampleMetadata_in" value="input_sampleMetadata.tsv"/>
+        <param name="variableMetadata_in" value="input_variableMetadata.tsv"/>
+        <param name="classnameColumn" value="gender"/>
+        <param name="sampleclassNames" value="*"/>
+        <param name="wildcards" value="TRUE"/>
+        <param name="inclusive" value="filter-in"/>
+        <output name="sampleMetadata_out">
+          <assert_contents>
+            <not_has_text text="HU_204" />
+            <has_text text="HU_028" />
+            <has_text text="HU_051" />
+            <has_text text="HU_060" />
+            <has_text text="HU_110" />
+            <has_text text="HU_149" />
+            <has_text text="HU_152" />
+            <has_text text="HU_175" />
+            <has_text text="HU_178" />
+            <has_text text="HU_185" />
+            <has_text text="HU_208" />
+            <has_text text="HU_017" />
+            <has_text text="HU_034" />
+            <has_text text="HU_078" />
+            <has_text text="HU_091" />
+            <has_text text="HU_093" />
+            <has_text text="HU_099" />
+            <has_text text="HU_130" />
+            <has_text text="HU_134" />
+            <has_text text="HU_138" />
+          </assert_contents>
+        </output>
+      </test>
+      <!-- test 5 -->
+      <test>
+        <param name="dataMatrix_in" value="input_dataMatrix.tsv"/>
+        <param name="sampleMetadata_in" value="input_sampleMetadata.tsv"/>
+        <param name="variableMetadata_in" value="input_variableMetadata.tsv"/>
+        <param name="classnameColumn" value="gender"/>
+        <param name="sampleclassNames" value="M"/>
+        <param name="wildcards" value="FALSE"/>
+        <param name="inclusive" value="filter-in"/>
+        <output name="sampleMetadata_out">
+          <assert_contents>
+            <not_has_text text="HU_028" />
+            <not_has_text text="HU_051" />
+            <not_has_text text="HU_060" />
+            <not_has_text text="HU_110" />
+            <not_has_text text="HU_149" />
+            <not_has_text text="HU_152" />
+            <not_has_text text="HU_175" />
+            <not_has_text text="HU_178" />
+            <not_has_text text="HU_185" />
+            <not_has_text text="HU_204" />
+            <not_has_text text="HU_208" />
+            <has_text     text="HU_017" />
+            <has_text     text="HU_034" />
+            <has_text     text="HU_078" />
+            <has_text     text="HU_091" />
+            <has_text     text="HU_093" />
+            <has_text     text="HU_099" />
+            <has_text     text="HU_130" />
+            <has_text     text="HU_134" />
+            <has_text     text="HU_138" />
+          </assert_contents>
+        </output>
+      </test>
+      <!-- test 6 -->
+      <test>
+        <param name="dataMatrix_in" value="input_dataMatrix.tsv"/>
+        <param name="sampleMetadata_in" value="input_sampleMetadata.tsv"/>
+        <param name="variableMetadata_in" value="input_variableMetadata.tsv"/>
+        <param name="classnameColumn" value="gender"/>
+        <param name="sampleclassNames" value="M"/>
+        <param name="wildcards" value="FALSE"/>
+        <param name="inclusive" value="filter-in"/>
+        <output name="variableMetadata_out">
+          <assert_contents>
+            <has_text     text="HMDB03193" />
+            <not_has_text text="HMDB00822" />
+            <has_text     text="HMDB01101" />
+            <has_text     text="HMDB01101.1" />
+            <has_text     text="HMDB10348" />
+            <has_text     text="HMDB59717" />
+            <has_text     text="HMDB13189" />
+            <has_text     text="HMDB00299" />
+            <has_text     text="HMDB00191" />
+            <has_text     text="HMDB00518" />
+            <has_text     text="HMDB00715" />
+            <has_text     text="HMDB01032" />
+            <has_text     text="HMDB00208" />
+            <has_text     text="HMDB04824" />
+            <has_text     text="HMDB00512" />
+            <has_text     text="HMDB00251" />
+          </assert_contents>
+        </output>
+      </test>
+      <!-- test 7 -->
+      <test>
+        <param name="dataMatrix_in" value="input_nofilter_dataMatrix.tsv"/>
+        <param name="sampleMetadata_in" value="input_sampleMetadata.tsv"/>
+        <param name="variableMetadata_in" value="input_variableMetadata.tsv"/>
+        <param name="classnameColumn" value="gender"/>
+        <param name="sampleclassNames" value="M"/>
+        <param name="wildcards" value="FALSE"/>
+        <param name="inclusive" value="filter-in"/>
+        <output name="variableMetadata_out">
+          <assert_contents>
+            <has_text     text="HMDB03193" />
+            <not_has_text text="HMDB00822" />
+            <has_text     text="HMDB01101" />
+            <has_text     text="HMDB01101.1" />
+            <has_text     text="HMDB10348" />
+            <has_text     text="HMDB59717" />
+            <not_has_text text="HMDB13189" />
+            <has_text     text="HMDB00299" />
+            <has_text     text="HMDB00191" />
+            <has_text     text="HMDB00518" />
+            <has_text     text="HMDB00715" />
+            <has_text     text="HMDB01032" />
+            <has_text     text="HMDB00208" />
+            <has_text     text="HMDB04824" />
+            <has_text     text="HMDB00512" />
+            <has_text     text="HMDB00251" />
+          </assert_contents>
+        </output>
+      </test>
+      <!-- test 8 -->
+      <test>
+        <param name="dataMatrix_in" value="input_dataMatrix.tsv"/>
+        <param name="sampleMetadata_in" value="input_sampleMetadata.tsv"/>
+        <param name="variableMetadata_in" value="input_variableMetadata.tsv"/>
+        <param name="classnameColumn" value="gender"/>
+        <param name="sampleclassNames" value="[Mm],[fF]"/>
+        <param name="wildcards" value="FALSE"/>
+        <param name="inclusive" value="filter-in"/>
+        <output name="sampleMetadata_out">
+          <assert_contents>
+            <has_text text="HU_028" />
+            <has_text text="HU_051" />
+            <has_text text="HU_060" />
+            <has_text text="HU_110" />
+            <has_text text="HU_149" />
+            <has_text text="HU_152" />
+            <has_text text="HU_175" />
+            <has_text text="HU_178" />
+            <has_text text="HU_185" />
+            <not_has_text text="HU_204" />
+            <has_text text="HU_208" />
+            <has_text text="HU_017" />
+            <has_text text="HU_034" />
+            <has_text text="HU_078" />
+            <has_text text="HU_091" />
+            <has_text text="HU_093" />
+            <has_text text="HU_099" />
+            <has_text text="HU_130" />
+            <has_text text="HU_134" />
+            <has_text text="HU_138" />
+          </assert_contents>
+        </output>
+      </test>
+      <!-- test 9 -->
+      <test>
+        <param name="dataMatrix_in" value="input_dataMatrix.tsv"/>
+        <param name="sampleMetadata_in" value="input_sampleMetadata.tsv"/>
+        <param name="variableMetadata_in" value="input_variableMetadata.tsv"/>
+        <param name="classnameColumn" value=""/>
+        <param name="sampleclassNames" value="M"/>
+        <param name="wildcards" value="FALSE"/>
+        <param name="inclusive" value="filter-in"/>
+        <output name="sampleMetadata_out">
+          <assert_contents>
+            <has_text text="HU_028" />
+            <has_text text="HU_051" />
+            <has_text text="HU_060" />
+            <has_text text="HU_110" />
+            <has_text text="HU_149" />
+            <has_text text="HU_152" />
+            <has_text text="HU_175" />
+            <has_text text="HU_178" />
+            <has_text text="HU_185" />
+            <not_has_text text="HU_204" />
+            <has_text text="HU_208" />
+            <has_text text="HU_017" />
+            <has_text text="HU_034" />
+            <has_text text="HU_078" />
+            <has_text text="HU_091" />
+            <has_text text="HU_093" />
+            <has_text text="HU_099" />
+            <has_text text="HU_130" />
+            <has_text text="HU_134" />
+            <has_text text="HU_138" />
+          </assert_contents>
+        </output>
+      </test>
+    </tests>
+    <help><![CDATA[
 
 
 **Author** Arthur Eschenlauer (University of Minnesota, esch0041@umn.edu)
@@ -489,7 +504,7 @@
 Data for a sample are collected as MS intensities, each of which is associated with a position on a 2D plane with dimensions of rt and m/z.
 Ideally, features would be sufficiently reproducible among sample-runs to distinguish features that are commmon among samples from those that differ.
 
-The chromatographic retention-time for a chemical can vary from one chromatography run to the next.  
+The chromatographic retention-time for a chemical can vary from one chromatography run to the next.
 Workflow4Metabolomics (W4m, [Giacomoni *et al.*, 2014, Guitton *et al.* 2017]) is a "flavor" of Galaxy that uses the XCMS preprocessing tools for "retention-time correction" to align features among samples.
 Features may be better aligned if pooled samples and blanks are included.
 
@@ -570,7 +585,7 @@
 	|
 
 Column that names the sample-class (default = '``class``')
-	| name of the column in **sampleMetadata** that has the values to be tested against the '``Names of sample-classes``' input parameter
+	| name of the column in **sampleMetadata** that has the values to be tested against the '``Names of sample-classes``' input parameter; only letters, digits, periods, and underscores are permitted.
 	|
 
 Names of sample-classes (default = no names)
@@ -593,6 +608,7 @@
 
 Data-transformation (default = '``none``')
 	| '``none``' - do not transform data matrix values
+	| '``log2``' - take the log base 2 of the values in the data matrix
 	| '``log10``' - take the log base 10 of the values in the data matrix
 	| In both cases, negative and missing values are imputed to zero.
 	|
@@ -681,11 +697,11 @@
 in the output.  Each range is a string of three colon-separated values (e.g., "mz:200:800") in the
 following order:
 
-- the **name of a column of `variableMetadata`** which must have numerical data (e.g., "mz");
-- the **minimum allowed value** in that column for the feature to be retained (e.g., 200);
-- the **maximum allowed value** (e.g., 800).
+- the **name of a column of `variableMetadata`** which must have numerical data (only letters, digits, periods, and underscores are permitted in the name itself), e.g., 'mz';
+- the **minimum allowed value** in that column for the feature to be retained, e.g., '200';
+- the **maximum allowed value**, e.g., '800'.
 
-Note for the range specification strings: 
+Note for the range specification strings:
 
 - **If the "maximum" is less than the "minimum", then the range is exclusive**  (e.g., "mz:800:200" means retain only features whose mz is NOT in the range 200-800)
 - **If the name supplied in the first field is 'FEATMAX',**  then the string is defining the minimum (and possibly, though less useful, maximum) intensity for each feature in the dataMatrix.  For example, "FEATMAX:1e6:" would specify  that any feature would be excluded if no sample had an intensity for that feature greater than 1000000.
@@ -704,15 +720,15 @@
 Input Files
 -----------
 
-+------------------------------------------------------------------------------------------------------------------------+
-| Input File URL                                                                                                         |
-+========================================================================================================================+
-| https://raw.githubusercontent.com/HegemanLab/w4mclassfilter_galaxy_wrapper/master/test-data/input_dataMatrix.tsv       |
-+------------------------------------------------------------------------------------------------------------------------+
-| https://raw.githubusercontent.com/HegemanLab/w4mclassfilter_galaxy_wrapper/master/test-data/input_sampleMetadata.tsv   |
-+------------------------------------------------------------------------------------------------------------------------+
-| https://raw.githubusercontent.com/HegemanLab/w4mclassfilter_galaxy_wrapper/master/test-data/input_variableMetadata.tsv |
-+------------------------------------------------------------------------------------------------------------------------+
++------------------------------------------------------------------------------------------------------------------------------------------------------+
+| Input File URL                                                                                                                                       |
++======================================================================================================================================================+
+| https://raw.githubusercontent.com/HegemanLab/w4mclassfilter_galaxy_wrapper/master/tools/w4mclassfilter/test-data/input_dataMatrix.tsv                |
++------------------------------------------------------------------------------------------------------------------------------------------------------+
+| https://raw.githubusercontent.com/HegemanLab/w4mclassfilter_galaxy_wrapper/master/tools/w4mclassfilter/test-data/input_sampleMetadata.tsv            |
++------------------------------------------------------------------------------------------------------------------------------------------------------+
+| https://raw.githubusercontent.com/HegemanLab/w4mclassfilter_galaxy_wrapper/master/tools/w4mclassfilter/test-data/input_variableMetadata.tsv          |
++------------------------------------------------------------------------------------------------------------------------------------------------------+
 
 .. class:: infomark
 
@@ -724,27 +740,31 @@
 
 **Input parameters**
 
-+------------------------------------+-----------------+
-| Input Parameter                    | Value           |
-+====================================+=================+
-| Names of sample-classes            | M               |
-+------------------------------------+-----------------+
-| Include named classes              | filter-in       |
-+------------------------------------+-----------------+
-| Column that names the sample-class | gender          |
-+------------------------------------+-----------------+
++------------------------------------+-------------------------------+
+| Input Parameter                    | Value                         |
++====================================+===============================+
+| Names of sample-classes            | M                             |
++------------------------------------+-------------------------------+
+| Include named classes              | filter-in                     |
++------------------------------------+-------------------------------+
+| Column that names the sample-class | gender                        |
++------------------------------------+-------------------------------+
+| Variable range-filters             | (Leave this field empty.)     |
++------------------------------------+-------------------------------+
+| Data transforamtion                | none                          |
++------------------------------------+-------------------------------+
 
 **Expected outputs**
 
-+-------------------+---------------------------------------------------------------------------------------------------------------------------+
-| Expected Output   | Download from URL                                                                                                         |
-+===================+===========================================================================================================================+
-| Data matrix       | https://raw.githubusercontent.com/HegemanLab/w4mclassfilter_galaxy_wrapper/master/test-data/expected_dataMatrix.tsv       |
-+-------------------+---------------------------------------------------------------------------------------------------------------------------+
-| Sample metadata   | https://raw.githubusercontent.com/HegemanLab/w4mclassfilter_galaxy_wrapper/master/test-data/expected_sampleMetadata.tsv   |
-+-------------------+---------------------------------------------------------------------------------------------------------------------------+
-| Variable metadata | https://raw.githubusercontent.com/HegemanLab/w4mclassfilter_galaxy_wrapper/master/test-data/expected_variableMetadata.tsv |
-+-------------------+---------------------------------------------------------------------------------------------------------------------------+
++-------------------+-------------------------------------------------------------------------------------------------------------------------------------------------+
+| Expected Output   | Download from URL                                                                                                                               |
++===================+=================================================================================================================================================+
+| Data matrix       | https://raw.githubusercontent.com/HegemanLab/w4mclassfilter_galaxy_wrapper/master/tools/w4mclassfilter/test-data/expected_dataMatrix.tsv        |
++-------------------+-------------------------------------------------------------------------------------------------------------------------------------------------+
+| Sample metadata   | https://raw.githubusercontent.com/HegemanLab/w4mclassfilter_galaxy_wrapper/master/tools/w4mclassfilter/test-data/expected_sampleMetadata.tsv    |
++-------------------+-------------------------------------------------------------------------------------------------------------------------------------------------+
+| Variable metadata | https://raw.githubusercontent.com/HegemanLab/w4mclassfilter_galaxy_wrapper/master/tools/w4mclassfilter/test-data/expected_variableMetadata.tsv  |
++-------------------+-------------------------------------------------------------------------------------------------------------------------------------------------+
 
 .. class:: infomark
 
@@ -757,121 +777,44 @@
 
 **Input parameters**
 
-+------------------------------------+-------------------------------+
-| Input Parameter                    | Value                         |
-+====================================+===============================+
-| Names of sample-classes            | (Leave this field empty.)     |
-+------------------------------------+-------------------------------+
-| Include named classes              | filter-out                    |
-+------------------------------------+-------------------------------+
-| Column that names the sample-class | class                         |
-+------------------------------------+-------------------------------+
-| Variable range-filters             | FEATMAX:2e6:,mz:200:,rt::800  |
-+------------------------------------+-------------------------------+
++------------------------------------+------------------------------------+
+| Input Parameter                    | Value                              |
++====================================+====================================+
+| Names of sample-classes            | (Leave this field empty.)          |
++------------------------------------+------------------------------------+
+| Include named classes              | filter-out                         |
++------------------------------------+------------------------------------+
+| Column that names the sample-class | gender                             |
++------------------------------------+------------------------------------+
+| Variable range-filters             | FEATMAX:20.93157:,mz:200:,rt::800  |
++------------------------------------+------------------------------------+
+| Data transforamtion                | log2                               |
++------------------------------------+------------------------------------+
 
 **Expected outputs**
 
-+-------------------+------------------------------------------------------------------------------------------------------------------------------+
-| Expected Output   | Download from URL                                                                                                            |
-+===================+==============================================================================================================================+
-| Data matrix       | https://raw.githubusercontent.com/HegemanLab/w4mclassfilter_galaxy_wrapper/master/test-data/rangefilter_dataMatrix.tsv       |
-+-------------------+------------------------------------------------------------------------------------------------------------------------------+
-| Sample metadata   | https://raw.githubusercontent.com/HegemanLab/w4mclassfilter_galaxy_wrapper/master/test-data/rangefilter_sampleMetadata.tsv   |
-+-------------------+------------------------------------------------------------------------------------------------------------------------------+
-| Variable metadata | https://raw.githubusercontent.com/HegemanLab/w4mclassfilter_galaxy_wrapper/master/test-data/rangefilter_variableMetadata.tsv |
-+-------------------+------------------------------------------------------------------------------------------------------------------------------+
-
------------------------------------------------------------------------------
-
-----
-NEWS
-----
-
-Changes in version 0.98.8
-=========================
-
-New features
-
-- The tool now appears in Galaxy with a new, more representative name: "W4m Data Subset". (Earlier versions of this tool appeared in Galaxy with the name "Sample Subset".)
-- Option was added to log-transform data matrix values.
-- Output datasets are named in conformance with the W4m convention of appending the name of each preprocessing tool to the input dataset name.
-- Superflous "Column that names the sample" input parameter was eliminated.
-- Some documentation was updated or clarified.
-
-Internal modifications
-
-- None
-
-Changes in version 0.98.7
-=========================
-
-New features
-
-- First column of output variableMetadata (that has feature names) now is always named "variableMetadata".
-- First column of output sampleMetadata now (that has sample names) now is always named "sampleMetadata".
-
-Internal modifications
-
-- Now uses w4mclassfilter R package v0.98.7.
-
-Changes in version 0.98.6
-=========================
-
-New features
-
-- Added support for filtering out features whose attributes fall outside specified ranges.
-  For more detail, see "Variable-range filters" above.
-  
-Internal modifications
-
-- Now uses w4mclassfilter R package v0.98.6.
-- Now sorts sample names and feature names in output files because some statistical tools expect the same order in `dataMatrix` row and column names as in the corresponding metadata files.
-
-Changes in version 0.98.3
-=========================
-
-Internal modifications
-
-- Improved input handling.
-- Now uses w4mclassfilter R package v0.98.3, although that version has no functional implications for this tool.
-- Improved reference-list.
-
-Changes in version 0.98.2
-=========================
-
-New features
-
-- Added support for R-flavored regular expression pattern-matching when selecting names of sample-classes.
-- Empty classes argument or zero-length class_column result in no samples filtered out.
-
-Internal modifications
-
-- Support and tests for new features.
-
-Changes in version 0.98.1
-=========================
-
-First release - Wrap the w4mclassfilter R package that implements filtering of W4m data matrix, variable metadata, and sample metadata by class of sample.
-
-New features
-
-- Output *dataMatrix*       is input dataMatrix       as modified by the tool
-- Output *sampleMetadata*   is input sampleMetadata   as modified by the tool
-- Output *variableMetadata* is input variableMetadata as modified by the tool
-
-  ]]></help>
-  <citations>
-    <!-- Giacomoni_2014 W4m 2.5 -->
-    <citation type="doi">10.1093/bioinformatics/btu813</citation>
-    <!-- Guitton_2017 W4m 3.0 -->
-    <citation type="doi">10.1016/j.biocel.2017.07.002</citation>
-    <!-- Kuhl_2012 CAMERA -->
-    <citation type="doi">10.1021/ac202450g</citation>
-    <!-- Smith_2006 XCMS -->
-    <citation type="doi">10.1021/ac051437y</citation>
-    <!-- Thevenot_2015 Urinary metabolome statistics -->
-    <citation type="doi">10.1021/acs.jproteome.5b00354</citation>
-  </citations>
-  <!--
-     vim:noet:sw=2:ts=2
++-------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+
+| Expected Output   | Download from URL                                                                                                                                 |
++===================+===================================================================================================================================================+
+| Data matrix       | https://raw.githubusercontent.com/HegemanLab/w4mclassfilter_galaxy_wrapper/master/tools/w4mclassfilter/test-data/rangefilter_dataMatrix.tsv       |
++-------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+
+| Sample metadata   | https://raw.githubusercontent.com/HegemanLab/w4mclassfilter_galaxy_wrapper/master/tools/w4mclassfilter/test-data/rangefilter_sampleMetadata.tsv   |
++-------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+
+| Variable metadata | https://raw.githubusercontent.com/HegemanLab/w4mclassfilter_galaxy_wrapper/master/tools/w4mclassfilter/test-data/rangefilter_variableMetadata.tsv |
++-------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+
+    ]]></help>
+    <citations>
+        <!-- Giacomoni_2014 W4m 2.5 -->
+        <citation type="doi">10.1093/bioinformatics/btu813</citation>
+        <!-- Guitton_2017 W4m 3.0 -->
+        <citation type="doi">10.1016/j.biocel.2017.07.002</citation>
+        <!-- Kuhl_2012 CAMERA -->
+        <citation type="doi">10.1021/ac202450g</citation>
+        <!-- Smith_2006 XCMS -->
+        <citation type="doi">10.1021/ac051437y</citation>
+        <!-- Thevenot_2015 Urinary metabolome statistics -->
+        <citation type="doi">10.1021/acs.jproteome.5b00354</citation>
+    </citations>
+    <!--
+     vim:noet:sw=4:ts=4
 --> </tool>
--- a/w4mclassfilter_wrapper.R	Fri Mar 02 08:29:53 2018 -0500
+++ b/w4mclassfilter_wrapper.R	Mon Sep 03 22:28:03 2018 -0400
@@ -102,18 +102,31 @@
 ## -----------------------------
 my_w4m_filter_imputation <- if (transformation == "log10") {
   function(m) {
+    if (!is.matrix(m))
+      stop("Cannot impute and transform data - the supplied data is not in matrix form")
+    if (nrow(m) == 0)
+      stop("Cannot impute and transform data - data matrix has no rows")
+    if (ncol(m) == 0)
+      stop("Cannot impute and transform data - data matrix has no columns")
     suppressWarnings(
       # suppress warnings here since non-positive values will produce NaN's that will be fixed in the next step
       m <- log10(m)
     )
-    # replace NaN values with zero
-    m[is.nan(m)] <- 0
-    # replace NA values with zero
-    m[is.na(m)] <- 0
-    # replace negative values with zero, if applicable (It should never be applicable!)
-    m[m<0] <- 0
-    # return matrix as the result
-    return (m)
+    return ( w4m_filter_imputation(m) )
+  }
+} else if (transformation == "log2") {
+  function(m) {
+    if (!is.matrix(m))
+      stop("Cannot impute and transform data - the supplied data is not in matrix form")
+    if (nrow(m) == 0)
+      stop("Cannot impute and transform data - data matrix has no rows")
+    if (ncol(m) == 0)
+      stop("Cannot impute and transform data - data matrix has no columns")
+    suppressWarnings(
+      # suppress warnings here since non-positive values will produce NaN's that will be fixed in the next step
+      m <- log2(m)
+    )
+    return ( w4m_filter_imputation(m) )
   }
 } else {
   # use the method from the w4mclassfilter class