changeset 13:9ff14d340f84 draft

"planemo upload for repository https://github.com/galaxyproteomics/tools-galaxyp/tree/master/tools/openms commit 020906fb54bde7fc143c356f41975c378a741315"
author galaxyp
date Wed, 09 Sep 2020 20:02:43 +0000
parents c7af42f1eae5
children 8a205687e384
files ConsensusMapNormalizer.xml OMSSAAdapter.patch PepNovoAdapter.patch filetypes.txt fill_ctd.py fill_ctd_clargs.py generate-foo.sh generate.sh hardcoded_params.json macros.xml macros_autotest.xml macros_discarded_auto.xml macros_test.xml prepare_test_data.sh prepare_test_data_manual.sh readme.md test-data.sh tool-data/pepnovo_models.loc.sample tool.conf tool_data_table_conf.xml.sample tool_data_table_conf.xml.test tools_blacklist.txt
diffstat 22 files changed, 30080 insertions(+), 417 deletions(-) [+]
line wrap: on
line diff
--- a/ConsensusMapNormalizer.xml	Fri May 17 10:03:28 2019 -0400
+++ b/ConsensusMapNormalizer.xml	Wed Sep 09 20:02:43 2020 +0000
@@ -1,80 +1,84 @@
 <?xml version='1.0' encoding='UTF-8'?>
 <!--This is a configuration file for the integration of a tools into Galaxy (https://galaxyproject.org/). This file was automatically generated using CTDConverter.-->
 <!--Proposed Tool Section: [Map Alignment]-->
-<tool id="ConsensusMapNormalizer" name="ConsensusMapNormalizer" version="2.3.0">
+<tool id="ConsensusMapNormalizer" name="ConsensusMapNormalizer" version="@TOOL_VERSION@+galaxy@GALAXY_VERSION@" profile="20.05">
   <description>Normalizes maps of one consensusXML file</description>
   <macros>
     <token name="@EXECUTABLE@">ConsensusMapNormalizer</token>
     <import>macros.xml</import>
+    <import>macros_autotest.xml</import>
+    <import>macros_test.xml</import>
   </macros>
-  <expand macro="references"/>
+  <expand macro="requirements"/>
   <expand macro="stdio"/>
-  <expand macro="requirements"/>
-  <command detect_errors="aggressive"><![CDATA[ConsensusMapNormalizer
+  <command detect_errors="exit_code"><![CDATA[@QUOTE_FOO@
+@EXT_FOO@
+#import re
+
+## Preprocessing
+mkdir in &&
+ln -s '$in' 'in/${re.sub("[^\w\-_]", "_", $in.element_identifier)}.$gxy2omsext($in.ext)' &&
+mkdir out &&
+
+## Main program call
 
-#if $param_in:
-  -in $param_in
-#end if
-#if $param_out:
-  -out $param_out
-#end if
-#if $param_algorithm_type:
-  -algorithm_type
-  #if " " in str($param_algorithm_type):
-    "$param_algorithm_type"
-  #else
-    $param_algorithm_type
-  #end if
-#end if
-#if $param_ratio_threshold:
-  -ratio_threshold $param_ratio_threshold
-#end if
-#if $adv_opts.adv_opts_selector=='advanced':
-    #if $adv_opts.param_accession_filter:
-  -accession_filter     "$adv_opts.param_accession_filter"
-#end if
-    #if $adv_opts.param_description_filter:
-  -description_filter     "$adv_opts.param_description_filter"
-#end if
-    #if $adv_opts.param_force:
-  -force
-#end if
-#end if
-]]></command>
+set -o pipefail &&
+@EXECUTABLE@ -write_ctd ./ &&
+python3 '$__tool_directory__/fill_ctd.py' '@EXECUTABLE@.ctd' '$args_json' '$hardcoded_json' &&
+@EXECUTABLE@ -ini @EXECUTABLE@.ctd
+-in
+'in/${re.sub("[^\w\-_]", "_", $in.element_identifier)}.$gxy2omsext($in.ext)'
+-out
+'out/output.${gxy2omsext("consensusxml")}'
+
+## Postprocessing
+&& mv 'out/output.${gxy2omsext("consensusxml")}' '$out'
+#if "ctd_out_FLAG" in $OPTIONAL_OUTPUTS
+  && mv '@EXECUTABLE@.ctd' '$ctd_out'
+#end if]]></command>
+  <configfiles>
+    <inputs name="args_json" data_style="paths"/>
+    <configfile name="hardcoded_json"><![CDATA[{"log": "log.txt", "threads": "\${GALAXY_SLOTS:-1}", "no_progress": true}]]></configfile>
+  </configfiles>
   <inputs>
-    <param name="param_in" type="data" format="consensusxml" optional="False" label="input file" help="(-in) "/>
-    <param name="param_algorithm_type" display="radio" type="select" optional="False" value="robust_regression" label="The normalization algorithm that is applied" help="(-algorithm_type) 'robust_regression' scales each map by a fator computed from the ratios of non-differential background features (as determined by the ratio_threshold parameter), 'quantile' performs quantile normalization, 'median' scales all maps to the same median intensity, 'median_shift' shifts the median instead of scaling (WARNING: if you have regular, log-normal MS data, 'median_shift' is probably the wrong choice. Use only if you know what you're doing!)">
+    <param name="in" argument="-in" type="data" format="consensusxml" optional="false" label="input file" help=" select consensusxml data sets(s)"/>
+    <param name="algorithm_type" argument="-algorithm_type" display="radio" type="select" optional="false" label="The normalization algorithm that is applied" help="'robust_regression' scales each map by a fator computed from the ratios of non-differential background features (as determined by the ratio_threshold parameter), 'quantile' performs quantile normalization, 'median' scales all maps to the same median intensity, 'median_shift' shifts the median instead of scaling (WARNING: if you have regular, log-normal MS data, 'median_shift' is probably the wrong choice. Use only if you know what you're doing!)">
       <option value="robust_regression" selected="true">robust_regression</option>
       <option value="median">median</option>
       <option value="median_shift">median_shift</option>
       <option value="quantile">quantile</option>
+      <expand macro="list_string_san"/>
     </param>
-    <param name="param_ratio_threshold" type="float" min="0.001" max="1.0" optional="True" value="0.67" label="Only for 'robust_regression': the parameter is used to distinguish between non-outliers (ratio_threshold &lt; intensity ratio &lt; 1/ratio_threshold) and outliers" help="(-ratio_threshold) "/>
-    <expand macro="advanced_options">
-      <param name="param_accession_filter" type="text" size="30" label="Use only features with accessions (partially) matching this regular expression for computing the normalization factors. Useful," help="(-accession_filter) e.g., if you have known house keeping proteins in your samples. When this parameter is empty or the regular expression matches the empty string, all features are used (even those without an ID). No effect if quantile normalization is used">
-        <sanitizer>
-          <valid initial="string.printable">
-            <remove value="'"/>
-            <remove value="&quot;"/>
-          </valid>
-        </sanitizer>
+    <param name="ratio_threshold" argument="-ratio_threshold" type="float" optional="true" min="0.001" max="1.0" value="0.67" label="Only for 'robust_regression': the parameter is used to distinguish between non-outliers (ratio_threshold &lt; intensity ratio &lt; 1/ratio_threshold) and outliers" help=""/>
+    <expand macro="adv_opts_macro">
+      <param name="accession_filter" argument="-accession_filter" type="text" optional="true" value="" label="Use only features with accessions (partially) matching this regular expression for computing the normalization factors" help="Useful, e.g., if you have known house keeping proteins in your samples. When this parameter is empty or the regular expression matches the empty string, all features are used (even those without an ID). No effect if quantile normalization is used">
+        <expand macro="list_string_san"/>
       </param>
-      <param name="param_description_filter" type="text" size="30" label="Use only features with description (partially) matching this regular expression for computing the normalization factors. Useful," help="(-description_filter) e.g., if you have known house keeping proteins in your samples. When this parameter is empty or the regular expression matches the empty string, all features are used (even those without an ID). No effect if quantile normalization is used">
-        <sanitizer>
-          <valid initial="string.printable">
-            <remove value="'"/>
-            <remove value="&quot;"/>
-          </valid>
-        </sanitizer>
+      <param name="description_filter" argument="-description_filter" type="text" optional="true" value="" label="Use only features with description (partially) matching this regular expression for computing the normalization factors" help="Useful, e.g., if you have known house keeping proteins in your samples. When this parameter is empty or the regular expression matches the empty string, all features are used (even those without an ID). No effect if quantile normalization is used">
+        <expand macro="list_string_san"/>
       </param>
-      <param name="param_force" display="radio" type="boolean" truevalue="-force" falsevalue="" checked="false" optional="True" label="Overwrite tool specific checks" help="(-force) "/>
+      <param name="force" argument="-force" type="boolean" truevalue="true" falsevalue="false" checked="false" label="Overwrite tool specific checks" help=""/>
+      <param name="test" argument="-test" type="hidden" optional="true" value="False" label="Enables the test mode (needed for internal use only)" help="">
+        <expand macro="list_string_san"/>
+      </param>
     </expand>
+    <param name="OPTIONAL_OUTPUTS" type="select" multiple="true" label="Optional outputs" optional="true">
+      <option value="ctd_out_FLAG">Output used ctd (ini) configuration file</option>
+    </param>
   </inputs>
   <outputs>
-    <data name="param_out" format="consensusxml"/>
+    <data name="out" label="${tool.name} on ${on_string}: out" format="consensusxml"/>
+    <data name="ctd_out" format="xml" label="${tool.name} on ${on_string}: ctd">
+      <filter>OPTIONAL_OUTPUTS is not None and "ctd_out_FLAG" in OPTIONAL_OUTPUTS</filter>
+    </data>
   </outputs>
-  <help>Normalizes maps of one consensusXML file
+  <tests>
+    <expand macro="autotest_ConsensusMapNormalizer"/>
+    <expand macro="manutest_ConsensusMapNormalizer"/>
+  </tests>
+  <help><![CDATA[Normalizes maps of one consensusXML file
 
 
-For more information, visit https://abibuilder.informatik.uni-tuebingen.de/archive/openms/Documentation/release/2.3.0/html/TOPP_ConsensusMapNormalizer.html</help>
+For more information, visit http://www.openms.de/documentation/TOPP_ConsensusMapNormalizer.html]]></help>
+  <expand macro="references"/>
 </tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/OMSSAAdapter.patch	Wed Sep 09 20:02:43 2020 +0000
@@ -0,0 +1,10 @@
+--- OMSSAAdapter.xml	2020-06-16 15:51:40.315400730 +0200
++++ /tmp/OMSSAAdapter.xml	2020-06-16 15:50:23.536086074 +0200
+@@ -22,6 +22,7 @@
+ mkdir database &&
+ ln -s '$database' 'database/${re.sub("[^\w\-_]", "_", $database.element_identifier)}.$gxy2omsext($database.ext)' &&
+ 
++makeblastdb -dbtype prot -in 'database/${re.sub("[^\w\-_]", "_", $database.element_identifier)}.$gxy2omsext($database.ext)' &&
+ ## Main program call
+ 
+ set -o pipefail &&
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PepNovoAdapter.patch	Wed Sep 09 20:02:43 2020 +0000
@@ -0,0 +1,35 @@
+--- PepNovoAdapter.xml	2020-05-12 15:55:24.712831518 +0200
++++ /tmp/PepNovoAdapter.xml	2020-05-12 15:36:31.267276757 +0200
+@@ -42,8 +42,13 @@
+   </configfiles>
+   <inputs>
+     <param name="in" argument="-in" type="data" format="mzml" optional="false" label="input file" help=" select mzml data sets(s)"/>
+-    <param name="model_directory" argument="-model_directory" type="text" optional="false" value="" label="Name of the directory where the model files are kept" help="">
+-      <expand macro="list_string_san"/>
++    <param name="model_directory" argument="-model_directory" type="select" optional="false" label="Name of the directory where the model files are kept" help="">
++        <options from_data_table="pepnovo_models">
++            <column name="name" index="0"/>
++            <column name="value" index="2"/>
++            <filter type="unique_value" name="unique_set" column="0"/>
++            <validator type="no_options" message="No model directory available"/>
++        </options>
+     </param>
+     <param name="correct_pm" argument="-correct_pm" type="boolean" truevalue="true" falsevalue="false" checked="false" label="Find optimal precursor mass and charge values" help=""/>
+     <param name="use_spectrum_charge" argument="-use_spectrum_charge" type="boolean" truevalue="true" falsevalue="false" checked="false" label="Do not correct charge" help=""/>
+@@ -51,8 +56,14 @@
+     <param name="no_quality_filter" argument="-no_quality_filter" type="boolean" truevalue="true" falsevalue="false" checked="false" label="Do not remove low quality spectra" help=""/>
+     <param name="fragment_tolerance" argument="-fragment_tolerance" type="float" optional="true" value="-1.0" label="The fragment tolerance (between 0 and 0.75 Da" help="Set to -1.0 to use model's default setting)"/>
+     <param name="pm_tolerance" argument="-pm_tolerance" type="float" optional="true" value="-1.0" label="The precursor mass tolerance (between 0 and 5.0 Da" help="Set to -1.0 to use model's default setting)"/>
+-    <param name="model" argument="-model" type="text" optional="true" value="CID_IT_TRYP" label="Name of the model that should be used" help="">
+-      <expand macro="list_string_san"/>
++    <param name="model" argument="-model" type="select" label="Name of the model that should be used" help="">
++        <options from_data_table="pepnovo_models">
++            <column name="name" index="1"/>
++            <column name="value" index="1"/>
++            <filter type="param_value" ref="model_directory" column="2"/>
++            <filter type="unique_value" column="1"/>
++            <validator type="no_options" message="No model available"/>
++        </options>
+     </param>
+     <param name="digest" argument="-digest" display="radio" type="select" optional="false" label="Enzyme used for digestion (default TRYPSIN)" help="">
+       <option value="TRYPSIN" selected="true">TRYPSIN</option>
--- a/filetypes.txt	Fri May 17 10:03:28 2019 -0400
+++ b/filetypes.txt	Wed Sep 09 20:02:43 2020 +0000
@@ -1,29 +1,85 @@
-# CTD type    # Galaxy type     # Long Galaxy data type                    # Mimetype
-csv           tabular           galaxy.datatypes.tabular:Tabular
-fasta         fasta             galaxy.datatypes.sequence:Fasta
-FASTA         fasta             galaxy.datatypes.sequence:Fasta
-ini           txt               galaxy.datatypes.data:Text
-txt           txt               galaxy.datatypes.data:Text
-options       txt               galaxy.datatypes.data:Text
-grid          grid              galaxy.datatypes.data:Grid
-html          html              galaxy.datatypes.text:Html                  text/html
-HTML          html              galaxy.datatypes.text:Html                  text/html
-TraML         traml             galaxy.datatypes.proteomics:TraML           application/xml
-traML         traml             galaxy.datatypes.proteomics:TraML           application/xml
-XML           xml               galaxy.datatypes.xml:GenericXml             application/xml
-consensusXML  consensusxml      galaxy.datatypes.proteomics:ConsensusXML    application/xml
-edta          tabular           galaxy.datatypes.tabular:Tabular 
-featureXML    featurexml        galaxy.datatypes.proteomics:FeatureXML      application/xml
-idXML         idxml             galaxy.datatypes.proteomics:IdXML           application/xml
-mzML          mzml              galaxy.datatypes.proteomics:MzML            application/xml
-mzXML         mzxml             galaxy.datatypes.proteomics:MzXML           application/xml
-pepXML        pepxml            galaxy.datatypes.proteomics:PepXml          application/xml
-qcML          qcml              galaxy.datatypes.xml:GenericXml             application/xml
-trafoXML      trafoxml          galaxy.datatypes.xml:GenericXml             application/xml
-tsv           tabular           galaxy.datatypes.tabular:Tabular
-xsd           txt               galaxy.datatypes.data:Text
-mzq           mzq               galaxy.datatypes.proteomics:MzQuantML       application/xml
-msp           msp               galaxy.datatypes.proteomics:Msp
-mzid          mzid              galaxy.datatypes.proteomics:MzIdentML       application/xml
-png           png               galaxy.datatypes.images:Png                 image/png
-mgf           mgf               galaxy.datatypes.proteomics:Mgf
+# CTD type    # Galaxy type
+# the following lines need to be at the top in order to ensure 
+# correct translation Galaxy->CTD type for the ambiguous cases
+# (should only be relevant for the autogenerated tests [which 
+# do not set the ftype of the inputs])
+txt           txt
+tsv           tabular
+
+##analysisXML
+# XTandemAdapter output is named xml in OMS (which is to unspecific) and bioml in Galaxy .. so this is renamed via hardcoded parameters 
+bioml         xml
+consensusXML  consensusxml
+# TODO csv is problematic, since csv often actually means tsv .. but not always
+csv           csv
+##dat
+dta           dta
+dta2d         dta2d
+edta          edta
+fa            fasta
+fas           fasta
+fasta         fasta
+FASTA         fasta
+featureXML    featurexml
+featurexml    featurexml
+# fid
+html          html
+HTML          html
+idXML         idxml
+##ini         txt
+json          json
+kroenik	      kroenik
+mascotXML     mascotxml
+mgf           mgf
+mrm           mrm
+ms            sirius.ms
+ms2           ms2
+msp           msp
+mzData        mzdata
+mzid          mzid
+# important to have mzML first, since LuciphorAdapter is case sensitive https://github.com/OpenMS/OpenMS/issues/4444
+mzML          mzml
+mzml          mzml
+mzq           mzq
+mzTab         mztab
+mzXML         mzxml
+novor         txt
+obo           obo
+# I guess this is the idXML output of omssa
+omssaXML      idxml
+osw           osw
+OSW           osw
+params        txt
+paramXML      paramxml
+fasta         peff
+peplist       peplist
+# TODO pep.xml should be removed with OMS 2.6 https://github.com/OpenMS/OpenMS/pull/4541
+pep.xml       pepxml
+pepXML        pepxml
+png           png
+PNG           png
+protXML       protxml
+psms          psms
+# TODO implement or use
+# psq
+pqp           pqp
+qcML          qcml
+spec.xml      spec.xml
+splib         splib
+sqMass        sqmass
+tandem.xml    tandem
+trafoXML      trafoxml
+traML         traml
+TraML         traml
+tab           tabular
+## MOVED TO TOP txt           txt
+raw           thermo.raw
+## xls: SpectraSTSearchAdapter https://github.com/OpenMS/OpenMS/pull/4419
+xls           tsv
+XML           xml
+xml           xml
+xquest.xml    xquest.xml
+xsd           xml
+
+# TODO needs to be implemented, needs to be below xml in order that Galaxy->OMS mapping gives xml
+# cachedMzML    xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fill_ctd.py	Wed Sep 09 20:02:43 2020 +0000
@@ -0,0 +1,190 @@
+import collections
+import json
+import operator
+import os
+import re
+import subprocess
+import sys
+from functools import reduce  # forward compatibility for Python 3
+
+from CTDopts.CTDopts import (
+    _Choices,
+    _InFile,
+    _Null,
+    _NumericRange,
+    CTDModel
+)
+
+
+def getFromDict(dataDict, mapList):
+    return reduce(operator.getitem, mapList, dataDict)
+
+
+def setInDict(dataDict, mapList, value):
+    getFromDict(dataDict, mapList[:-1])[mapList[-1]] = value
+
+
+def mergeDicts(d, e):
+    """
+    insert values from the dict e into dict d
+    no values of d are overwritten
+    """
+    for k, v in e.items():
+        if (k in d and isinstance(d[k], dict) and isinstance(e[k], collections.abc.Mapping)):
+            mergeDicts(d[k], e[k])
+        elif k not in d and not isinstance(e[k], collections.abc.Mapping):
+            d[k] = e[k]
+        else:
+            sys.stderr.write("fill_ctd.py: could not merge key %s for %s in %s" % (k, d, e))
+            sys.exit(1)
+
+
+def _json_object_hook_noenvlookup(d):
+    return _json_object_hook(d, envlookup=False)
+
+
+def _json_object_hook(d, envlookup=True):
+    """
+    wee helper to transform the json written by galaxy
+    while loading
+    - True/False (bool objects) -> "true"/"false" (lowercase string)
+    - data inputs with multiple and optional true give [None] if no file is given -> []
+    - None -> "" (empty string)
+    - replace bash expressions (if envlookup is True):
+      - environment variables (need to consist capital letters and _) by their value
+      - expressions
+    """
+    for k in d.keys():
+        # if type(d[k]) is bool:
+        #     d[k] = str(d[k]).lower()
+        # else
+        if type(d[k]) is list and len(d[k]) == 1 and d[k][0] is None:
+            d[k] = []
+        elif d[k] is None:
+            d[k] = ""
+        elif envlookup and type(d[k]) is str and d[k].startswith("$"):
+            m = re.fullmatch(r"\$([A-Z_]+)", d[k])
+            if m:
+                d[k] = os.environ.get(m.group(1), "")
+                continue
+            m = re.fullmatch(r"\$(\{[A-Z_]+):-(.*)\}", d[k])
+            if m:
+                d[k] = os.environ.get(m.group(1), m.group(2))
+                continue
+
+            try:
+                p = subprocess.run("echo %s" % d[k], shell=True, check=True, stdout=subprocess.PIPE, encoding="utf8")
+                d[k] = p.stdout.strip()
+            except subprocess.CalledProcessError:
+                sys.stderr.write("fill_ctd error: Could not evaluate %s" % d[k])
+                continue
+    return d
+
+
+def qstring2list(qs):
+    """
+    transform a space separated string that is quoted by " into a list
+    """
+    lst = list()
+    qs = qs.split(" ")
+    quoted = False
+    for p in qs:
+        if p == "":
+            continue
+        if p.startswith('"') and p.endswith('"'):
+            lst.append(p[1:-1])
+        elif p.startswith('"'):
+            quoted = True
+            lst.append(p[1:] + " ")
+        elif p.endswith('"'):
+            quoted = False
+            lst[-1] += p[:-1]
+        else:
+            if quoted:
+                lst[-1] += p + " "
+            else:
+                lst.append(p)
+    return lst
+
+
+def fix_underscores(args):
+    if type(args) is dict:
+        for k in list(args.keys()):
+            v = args[k]
+            if type(v) is dict:
+                fix_underscores(args[k])
+            if k.startswith("_"):
+                args[k[1:]] = v
+                del args[k]
+    elif type(args) is list:
+        for i, v in enumerate(args):
+            if type(v) is dict:
+                fix_underscores(args[i])
+
+
+input_ctd = sys.argv[1]
+
+# load user specified parameters from json
+with open(sys.argv[2]) as fh:
+    args = json.load(fh, object_hook=_json_object_hook_noenvlookup)
+
+# load hardcoded parameters from json
+with open(sys.argv[3]) as fh:
+    hc_args = json.load(fh, object_hook=_json_object_hook)
+
+# insert the hc_args into the args
+mergeDicts(args, hc_args)
+
+if "adv_opts_cond" in args:
+    args.update(args["adv_opts_cond"])
+    del args["adv_opts_cond"]
+
+# IDMapper has in and spectra:in params, in is used in out as format_source",
+# which does not work in Galaxy: https://github.com/galaxyproject/galaxy/pull/9493"
+# therefore hardcoded params change the name of spectra:in to spectra:_in
+# which is corrected here again
+# TODO remove once PR is in and adapt profile accordingly
+fix_underscores(args)
+
+model = CTDModel(from_file=input_ctd)
+
+# transform values from json that correspond to
+# - old style booleans (string + restrictions) -> transformed to a str
+# - unrestricted ITEMLIST which are represented as strings
+#   ("=quoted and space separated) in Galaxy -> transform to lists
+# - optional data input parameters that have defaults and for which no
+#   value is given -> overwritte with the default
+for p in model.get_parameters():
+
+    # check if the parameter is in the arguments from the galaxy tool
+    # (from the json file(s)), since advanced parameters are absent
+    # if the conditional is set to basic parameters
+    try:
+        getFromDict(args, p.get_lineage(name_only=True))
+    except KeyError:
+        # few tools use dashes in parameters which are automatically replaced
+        # by underscores by Galaxy. in these cases the dictionary needs to be
+        # updated
+        # TODO might be removed later https://github.com/OpenMS/OpenMS/pull/4529
+        try:
+            lineage = [_.replace("-", "_") for _ in p.get_lineage(name_only=True)]
+            val = getFromDict(args, lineage)
+        except KeyError:
+            continue
+        else:
+            setInDict(args, lineage, val)
+
+    if p.type is str and type(p.restrictions) is _Choices and set(p.restrictions.choices) == set(["true", "false"]):
+        v = getFromDict(args, p.get_lineage(name_only=True))
+        setInDict(args, p.get_lineage(name_only=True), str(v).lower())
+
+    elif p.is_list and (p.restrictions is None or type(p.restrictions) is _NumericRange):
+        v = getFromDict(args, p.get_lineage(name_only=True))
+        if type(v) is str:
+            setInDict(args, p.get_lineage(name_only=True), qstring2list(v))
+    elif p.type is _InFile and not (p.default is None or type(p.default) is _Null):
+        v = getFromDict(args, p.get_lineage(name_only=True))
+        if v in [[], ""]:
+            setInDict(args, p.get_lineage(name_only=True), p.default)
+
+model.write_ctd(input_ctd, arg_dict=args)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fill_ctd_clargs.py	Wed Sep 09 20:02:43 2020 +0000
@@ -0,0 +1,40 @@
+#!/usr/bin/env python3
+from argparse import ArgumentParser
+from io import StringIO
+
+from CTDopts.CTDopts import (
+    CTDModel,
+    ModelTypeError,
+    Parameters
+)
+
+if __name__ == "__main__":
+    # note add_help=False since otherwise arguments starting with -h will
+    # trigger an error (despite allow_abbreviate)
+    parser = ArgumentParser(prog="fill_ctd_clargs",
+                            description="fill command line arguments"
+                            "into a CTD file and write the CTD file to",
+                            add_help=False, allow_abbrev=False)
+    parser.add_argument("--ctd", dest="ctd", help="input ctd file",
+                        metavar='CTD', default=None, required=True)
+    args, cliargs = parser.parse_known_args()
+    # load CTDModel
+    model = None
+    try:
+        model = CTDModel(from_file=args.ctd)
+    except ModelTypeError:
+        pass
+    try:
+        model = Parameters(from_file=args.ctd)
+    except ModelTypeError:
+        pass
+    assert model is not None, "Could not parse %s, seems to be no CTD/PARAMS" % (args.ctd)
+
+    # get a dictionary of the ctd arguments where the values of the parameters
+    # given on the command line are overwritten
+    margs = model.parse_cl_args(cl_args=cliargs, ignore_required=True)
+
+    # write the ctd with the values taken from the dictionary
+    out = StringIO()
+    ctd_tree = model.write_ctd(out, margs)
+    print(out.getvalue())
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/generate-foo.sh	Wed Sep 09 20:02:43 2020 +0000
@@ -0,0 +1,217 @@
+#!/usr/bin/env bash
+
+# parse test definitions from OpenMS sources for a tool with a given id
+function get_tests2 {
+	id=$1
+	>&2 echo "generate tests for $id"
+	echo '<xml name="autotest_'"$id"'">'
+
+	# get the tests from the CMakeLists.txt
+	# 1st remove some tests
+	# - Filefilter with empty select_palarity value (empty is not in the list of allowed options)
+	# - MassTraceExtractor with outdated ini file leading to wrong parameters https://github.com/OpenMS/OpenMS/issues/4386
+	# - OpenSwathMzMLFileCacher with -convert_back argumen https://github.com/OpenMS/OpenMS/issues/4399
+    # - IDRipper PATH gets empty causing problems. TODO But overall the option needs to be handled differentlt
+	# - several tools with duplicated input (leads to conflict when linking)
+	# - TOFCalibration inputs we extension (also in prepare_test_data) https://github.com/OpenMS/OpenMS/pull/4525
+	# - MaRaCluster with -consensus_out (parameter blacklister: https://github.com/OpenMS/OpenMS/issues/4456)
+	# - FileMerger with mixed dta dta2d input (ftype can not be specified in the test, dta can not be sniffed)
+	# - some input files are originally in a subdir (degenerated cases/), but not in test-data
+	# - SeedListGenerator: https://github.com/OpenMS/OpenMS/issues/4404
+	# - OpenSwathAnalyzer 9/10: cachedMzML (not supported yet)
+	CMAKE=$(cat $OPENMSGIT/src/tests/topp/CMakeLists.txt $OPENMSGIT/src/tests/topp/THIRDPARTY/third_party_tests.cmake  |
+		sed 's@${DATA_DIR_SHARE}/@@g' |
+		grep -v 'OpenSwathMzMLFileCacher .*-convert_back' |
+	    	sed 's/${TMP_RIP_PATH}/""/' |
+		sed 's@TOFCalibration_ref_masses @TOFCalibration_ref_masses.txt @g; s@TOFCalibration_const @TOFCalibration_const.csv @' |
+		grep -v "MaRaClusterAdapter.*-consensus_out"|
+ 		grep -v "FileMerger_1_input1.dta2d.*FileMerger_1_input2.dta " |
+		sed 's@degenerate_cases/@@g' |
+		grep -v 'TOPP_SeedListGenerator_3"' | 
+		egrep -v 'TOPP_OpenSwathAnalyzer_test_3"|TOPP_OpenSwathAnalyzer_test_4"')
+
+
+# 		grep -v 'FileFilter.*-spectra:select_polarity ""' |
+# 		grep -v 'MassTraceExtractor_2.ini ' |
+# 		grep -v "FileMerger_6_input2.mzML.*FileMerger_6_input2.mzML" |
+# 		grep -v "IDMerger_1_input1.idXML.*IDMerger_1_input1.idXML" |
+# 		grep -v "degenerated_empty.idXML.*degenerated_empty.idXML" |
+# 		grep -v "FeatureLinkerUnlabeledKD_1_output.consensusXML.*FeatureLinkerUnlabeledKD_1_output.consensusXML" |
+# 		grep -v "FeatureLinkerUnlabeledQT_1_output.consensusXML.*FeatureLinkerUnlabeledQT_1_output.consensusXML" |
+
+	# 1st part is a dirty hack to join lines containing a single function call, e.g.
+	# addtest(....
+	#         ....)
+	echo "$CMAKE" | sed 's/#.*//; s/^\s*//; s/\s*$//' | grep -v "^#" | grep -v "^$"  | awk '{printf("%s@NEWLINE@", $0)}' | sed 's/)@NEWLINE@/)\n/g' | sed 's/@NEWLINE@/ /g' | 
+		grep -iE "add_test\(\"(TOPP|UTILS)_.*/$id " | egrep -v "_prepare\"|_convert|WRITEINI|WRITECTD|INVALIDVALUE"  | while read -r line
+	do
+		line=$(echo "$line" | sed 's/add_test("\([^"]\+\)"/\1/; s/)$//; s/\${TOPP_BIN_PATH}\///g;s/\${DATA_DIR_TOPP}\///g; s#THIRDPARTY/##g')
+		# >&2 echo $line
+		test_id=$(echo "$line" | cut -d" " -f 1)
+		tool_id=$(echo "$line" | cut -d" " -f 2)
+		if [[ $test_id =~ _out_?[0-9]? ]]; then
+			>&2 echo "    skip $test_id $line"
+			continue
+		fi
+		if [[ ${id,,} != ${tool_id,,} ]]; then
+			>&2 echo "    skip $test_id ($id != $tool_id) $line"
+			continue
+		fi
+
+		#remove tests with set_tests_properties(....PROPERTIES WILL_FAIL 1)
+		if grep -lq "$test_id"'\".* PROPERTIES WILL_FAIL 1' $OPENMSGIT/src/tests/topp/CMakeLists.txt $OPENMSGIT/src/tests/topp/THIRDPARTY/third_party_tests.cmake; then
+			>&2 echo "    skip failing "$test_id
+			continue
+		fi
+		tes="  <test>\n"
+		line=$(fix_tmp_files "$line")
+		line=$(unique_files "$line")
+		# >&2 echo $line
+		#if there is an ini file then we use this to generate the test
+		#otherwise the ctd file is used
+		#other command line parameters are inserted later into this xml
+		if grep -lq "\-ini" <<<"$line"; then
+			ini=$(echo $line | sed 's/.*-ini \([^ ]\+\).*/\1/')
+			ini="test-data/$ini"
+		else
+			ini="ctd/$tool_id.ctd"
+		fi
+		cli=$(echo $line |cut -d" " -f3- | sed 's/-ini [^ ]\+//')
+		
+		ctdtmp=$(mktemp)
+		#echo python3 fill_ctd_clargs.py --ctd $ini $cli
+		# using eval: otherwise for some reason quoted values are not used properly ('A B' -> ["'A", "B'"])
+		# >&2 echo "python3 fill_ctd_clargs.py --ctd $ini $cli"
+		eval "python3 fill_ctd_clargs.py --ctd $ini $cli" > "$ctdtmp"
+		# echo $ctdtmp
+ 		# >&2 cat $ctdtmp
+  		testtmp=$(mktemp)
+ 		python3 $CTDCONVERTER/convert.py galaxy -i $ctdtmp -o $testtmp -s tools_blacklist.txt -f "$FILETYPES" -m macros.xml -t tool.conf  -p hardcoded_params.json --tool-version $VERSION --test-only --test-unsniffable csv tsv txt dta dta2d edta mrm splib > /dev/null
+	   	cat $testtmp | grep -v '<output.*file=""' # | grep -v 'CHEMISTRY/'
+		rm $ctdtmp $testtmp
+
+		#> /dev/null
+
+		#rm $testtmp
+	done 
+	echo '</xml>'
+}
+
+#some tests use the same file twice which does not work in planemo tests
+#hence we create symlinks for each file used twice
+function unique_files {
+	line=$@
+	for arg in $@
+	do
+		if [[ ! -f "test-data/$arg" ]]; then
+			continue
+		fi
+		cnt=$(grep -c $arg <<< $(echo "$line" | tr ' ' '\n'))
+		while [[ $cnt -gt 1 ]]; do
+            new_arg=$(echo $arg | sed "s/\(.*\)\./\1_$cnt./")
+			ln -fs $arg test-data/$new_arg
+			line=$(echo $line | sed "s/\($arg.*\)$arg/\1$new_arg/")
+			cnt=$(grep -c $arg <<< $(echo "$line" | tr ' ' '\n'))
+		done
+	done
+
+	echo $line
+}
+
+# options of out_type selects need to be fixed to Galaxy data types
+function fix_out_type {
+	grep "^$1" "$2" | awk '{print $2}'
+}
+
+#OpenMS tests output to tmp files and compare with FuzzyDiff to the expected file.
+#problem: the extension of the tmp files is unusable for test generation.
+#unfortunately the extensions used in the DIFF lines are not always usable for the CLI
+#(e.g. for prepare_test_data, e.g. CLI expects csv but test file is txt)
+#this function replaces the tmp file by the expected file. 
+function fix_tmp_files {
+#	>&2 echo "FIX $line"
+	ret=""
+	for a in $@; do
+		if [[ ! $a =~ .tmp$ ]]; then
+			ret="$ret $a"
+			continue
+		fi
+#		>&2 echo "    a "$a
+		g=$(cat $OPENMSGIT/src/tests/topp/CMakeLists.txt $OPENMSGIT/src/tests/topp/THIRDPARTY/third_party_tests.cmake | awk '{printf("%s@NEWLINE@", $0)}' | sed 's/)@NEWLINE@/)\n/g' | sed 's/@NEWLINE@/ /g' | grep '\${DIFF}.*'"$a")
+#		>&2 echo "    g "$g
+		in1=$(sed 's/.*-in1 \([^ ]\+\).*/\1/' <<<$g)
+		# >&2 echo "    in1 "$in1
+		if [[  "$a" != "$in1" ]]; then
+			ret="$ret $a"
+			continue
+		fi
+		in2=$(sed 's/.*-in2 \([^ ]\+\).*/\1/' <<<$g)
+		in2=$(basename $in2 | sed 's/)$//')
+		# >&2 echo "    in2 "$in2
+		if [[ -f "test-data/$in2" ]]; then
+			ln -fs "$in1" "test-data/$in2"
+			ret="$ret $in2"
+		else
+			ret="$ret $a"
+		fi
+	done
+#	>&2 echo "--> $ret"
+	echo "$ret"
+}
+
+function link_tmp_files {
+    # note this also considers commented lines (starting with a #)
+    # because of tests where the diff command is commented and we
+    # still want to use the extension of these files
+    cat $OPENMSGIT/src/tests/topp/CMakeLists.txt $OPENMSGIT/src/tests/topp/THIRDPARTY/third_party_tests.cmake | sed 's/^\s*//; s/\s*$//' | grep -v "^$"  | awk '{printf("%s@NEWLINE@", $0)}' | sed 's/)@NEWLINE@/)\n/g' | sed 's/@NEWLINE@/ /g' | grep "\${DIFF}" | while read -r line
+    do
+        in1=$(sed 's/.*-in1 \([^ ]\+\).*/\1/' <<<$line)
+        in1=$(basename $in1 | sed 's/)$//')
+        in2=$(sed 's/.*-in2 \([^ ]\+\).*/\1/' <<<$line)
+        in2=$(basename $in2 | sed 's/)$//')
+        if [[ "$in1" == "$in2" ]]; then
+            >&2 echo "not linking equal $in1 $in2"
+            continue
+        fi
+        ln -f -s $in1 test-data/$in2
+    done
+    for i in test-data/*.tmp
+    do
+        if [ ! -e test-data/$(basename $i .tmp) ]; then
+            ln -s $(basename $i) test-data/$(basename $i .tmp)
+            #ln -s $(basename $i) test-data/$(basename $i .tmp)
+        else
+            ln -fs $(basename $i) test-data/$(basename $i .tmp)
+        fi
+    done
+}
+
+
+
+# parse data preparation calls from OpenMS sources for a tool with a given id
+function prepare_test_data {
+# 	id=$1
+# | egrep -i "$id\_.*[0-9]+(_prepare\"|_convert)?"
+	cat $OPENMSGIT/src/tests/topp/CMakeLists.txt  $OPENMSGIT/src/tests/topp/THIRDPARTY/third_party_tests.cmake | sed 's/#.*$//'| sed 's/^\s*//; s/\s*$//' | grep -v "^$"  | awk '{printf("%s@NEWLINE@", $0)}' | sed 's/)@NEWLINE@/)\n/g' | sed 's/@NEWLINE@/ /g' | 
+		sed 's/degenerate_cases\///' | 
+		egrep -v "WRITEINI|WRITECTD|INVALIDVALUE|DIFF" | 
+		grep add_test | 
+		egrep "TOPP|UTILS" |
+		sed 's@${DATA_DIR_SHARE}/@@g;'|
+		sed 's@${TMP_RIP_PATH}@dummy2.tmp@g'|
+		sed 's@TOFCalibration_ref_masses @TOFCalibration_ref_masses.txt @g; s@TOFCalibration_const @TOFCalibration_const.csv @'| 
+	while read line
+	do
+		test_id=$(echo "$line" | sed 's/add_test(//; s/"//g;  s/)[^)]*$//; s/\${TOPP_BIN_PATH}\///g;s/\${DATA_DIR_TOPP}\///g; s#THIRDPARTY/##g' | cut -d" " -f1)
+
+		if grep -lq "$test_id"'\".* PROPERTIES WILL_FAIL 1' $OPENMSGIT/src/tests/topp/CMakeLists.txt $OPENMSGIT/src/tests/topp/THIRDPARTY/third_party_tests.cmake; then
+			>&2 echo "    skip failing "$test_id
+			continue
+		fi
+
+		line=$(echo "$line" | sed 's/add_test("//; s/)[^)]*$//; s/\${TOPP_BIN_PATH}\///g;s/\${DATA_DIR_TOPP}\///g; s#THIRDPARTY/##g' | cut -d" " -f2-)
+		# line="$(fix_tmp_files $line)"
+		echo "$line > $test_id.stdout 2> $test_id.stderr"
+		echo "if [[ \"\$?\" -ne \"0\" ]]; then >&2 echo '$test_id failed'; >&2 echo -e \"stderr:\n\$(cat $test_id.stderr | sed 's/^/    /')\"; echo -e \"stdout:\n\$(cat $test_id.stdout)\";fi"	
+    done
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/generate.sh	Wed Sep 09 20:02:43 2020 +0000
@@ -0,0 +1,76 @@
+#!/usr/bin/env bash
+
+# VERSION=2.3
+# CONDAPKG=https://anaconda.org/bioconda/openms/2.3.0/download/linux-64/openms-2.3.0-py27h932d754_3.tar.bz2
+# VERSION=2.4
+# CONDAPKG=https://anaconda.org/bioconda/openms/2.4.0/download/linux-64/openms-2.4.0-py27h574aadf_1.tar.bz2
+
+VERSION=2.5
+FILETYPES="filetypes.txt"
+PROFILE="20.05"
+## FILETYPES_RE=$(grep -v "^#" $FILETYPES | grep -v "^$" | cut -f 1 -d" " | tr '\n' '|' | sed 's/|$//'| sed 's/|/\\|/g')
+
+export tmp=$(mktemp -d)
+
+export CTDCONVERTER="$tmp/CTDConverter"
+
+export PYTHONPATH="$(pwd)/CTDopts/"
+###############################################################################
+## reset old data
+###############################################################################
+# rm $(ls *xml |grep -v macros)
+# rm -rf ctd
+# mkdir -p ctd
+# echo "" > prepare_test_data.sh
+
+###############################################################################
+## generate tests
+## also creates 
+## - conda environment (for executing the binaries) and 
+## - the git clone of OpenMS (for generating the tests)
+## - ctd files
+###############################################################################
+bash ./test-data.sh ./macros_autotest.xml
+
+###############################################################################
+## get the 
+## - conda package (for easy access and listing of the OpenMS binaries), 
+###############################################################################
+# if [ ! -d $OPENMSPKG ]; then
+# 	mkdir $OPENMSPKG/
+# 	wget -P $OPENMSPKG/ "$CONDAPKG"
+# 	tar -xf $OPENMSPKG/"$(basename $CONDAPKG)" -C OpenMS$VERSION-pkg/
+#   rm $OPENMSPKG/"$(basename $CONDAPKG)"
+# fi
+
+###############################################################################
+## Get python libaries for CTD -> Galaxy conversion
+## TODO fix to main repo OR conda packkage if PRs are merged 
+###############################################################################
+# if [ ! -d CTDopts ]; then
+# 	# git clone https://github.com/genericworkflownodes/CTDopts CTDopts
+# 	git clone -b topic/no-1-2x https://github.com/bernt-matthias/CTDopts CTDopts
+# fi
+if [ ! -d $CTDCONVERTER ]; then
+	#git clone https://github.com/WorkflowConversion/CTDConverter.git CTDConverter
+	git clone -b topic/cdata https://github.com/bernt-matthias/CTDConverter.git $CTDCONVERTER
+fi
+# export PYTHONPATH=$(pwd)/CTDopts
+###############################################################################
+## conversion ctd->xml 
+###############################################################################
+source $(dirname $(which conda))/../etc/profile.d/conda.sh
+conda activate $tmp/OpenMS$VERSION-env
+python $CTDCONVERTER/convert.py galaxy -i ctd/*ctd -o ./ -s tools_blacklist.txt -f "$FILETYPES" -m macros.xml -t tool.conf  -p hardcoded_params.json --test-macros macros_autotest.xml --test-macros-prefix autotest_  --test-macros macros_test.xml --test-macros-prefix manutest_ --tool-version $VERSION --tool-profile $PROFILE > convert.out 2> convert.err
+if [[ "$?" -ne "0" ]]; then >&2 echo 'CTD -> XML conversion failed'; >&2 echo -e "stderr:\n$(cat convert.err)"; fi
+conda deactivate
+
+patch PepNovoAdapter.xml < PepNovoAdapter.patch
+patch OMSSAAdapter.xml < OMSSAAdapter.patch
+
+# #-b version log debug test in_type executable pepnovo_executable param_model_directory rt_concat_trafo_out param_id_pool
+
+# for i in A-E F-H I-L M-N O-P Q-Z
+# do
+# 	planemo t [$i]*xml --galaxy_branch release_20.05 --galaxy_python_version 3.7 --test_output $i.html --test_output_json $i.json &
+# done
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hardcoded_params.json	Wed Sep 09 20:02:43 2020 +0000
@@ -0,0 +1,247 @@
+{
+	"#": "blacklist parameters",
+
+	"version": [{"value": "@"}],
+	"debug": [{"value": "@"}],
+	"algorithm:debug": [{"value": "@"}],
+	"java_memory": [{"value": "@"}],
+	"java_permgen": [{"value": "@"}],
+	"#": "type of input is always determined from the file extension ",
+	"in_type": [{"value": "@"}],
+
+	"#": "tool specific blacklist parameters",
+
+	"convert_back": [{"value": "@", "tools": ["OpenSwathMzMLFileCacher"]}],
+	"NET_executable": [{
+			"value": "@", 
+			"tools": ["FileConverter"]
+	}],
+
+
+	"params_file": [{"value": "@", "tools": ["SpectraSTSearchAdapter"]}],
+
+	"#": "TODO not usable in 2.5 https://github.com/OpenMS/OpenMS/issues/4456, corresponding test currently disabled",
+    	"consensus_out": [{"value": "@", "tools": ["MaRaClusterAdapter"]}],
+	"#": "TODO would need treatment as prefix-output",
+	"output_directory": [{"value": "@", "tools": ["MaRaClusterAdapter"]}],
+
+	"#": "hardcode parameter values",
+
+	"comet_version": [{
+		"value":"2016.01 rev. 3"
+	}],
+	"comet_executable": [{
+		"value":"comet"
+	}],
+	"crux_executable": [{
+		"value": "crux"
+	}],
+	"fido_executable": [{
+		"value":"Fido"
+	}],
+	"fidocp_executable": [{
+		"value":"FidoChooseParameters"
+	}],
+	"maracluster_executable": [{
+		"value":"/home/berntm/projects/tools-galaxyp/tools/openms/OpenMS2.5.0-git/THIRDPARTY/Linux/64bit/MaRaCluster/maracluster"
+	}],
+	"mascot_directory": [{
+		"value":"TODO"
+	}],
+	"myrimatch_executable": [{
+		"value":"myrimatch"
+	}],
+	"omssa_executable": [{
+		"value":"$(dirname $(realpath $(which omssacl)))/omssacl"
+	}],
+	"ThermoRaw_executable": [{
+		"value": "ThermoRawFileParser.exe", 
+		"tools": ["FileConverter"]
+	}],
+	"pepnovo_executable": [{
+		"value":"pepnovo"
+	}],
+	"percolator_executable": [{
+		"value":"percolator"
+	}],
+	"xtandem_executable": [{
+		"value":"xtandem"
+	}],
+	"executable": [
+		{
+			"value":"$(dirname $(realpath $(which luciphor2)))/luciphor2.jar",
+			"tools": ["LuciphorAdapter"]
+		}, {
+			"value":"/home/berntm/Downloads/MSFragger-20171106/MSFragger-20171106.jar",
+			"tools": ["MSFraggerAdapter"]
+		}, {
+			"value":"$(msgf_plus -get_jar_path)",
+			"tools": ["MSGFPlusAdapter"]
+		}, {
+			"value": "/home/berntm/Downloads/novor/lib/novor.jar",
+			"tools": ["NovorAdapter"]
+		}, {
+			"value":"$(which sirius)",
+			"tools": ["SiriusAdapter", "AssayGeneratorMetabo"]
+		}, {
+			"value":"spectrast",
+			"tools": ["SpectraSTSearchAdapter"]
+		}
+	],
+	"r_executable": [{
+		"value":"R"
+	}],
+	"rscript_executable": [{
+		"value":"Rscript"
+	}],
+	"java_executable": [{
+		"value":"java"
+	}],
+	"log": [{
+		"value":"log.txt"
+	}],
+	"tempDirectory": [{
+		"value":"$TMP_DIR"
+	}],
+	"temp_data_directory": [{
+		"value":"$TMP_DIR"
+	}],
+	"algorithm:Preprocessing:tmp_dir": [{
+		"value":"$TMP_DIR"
+	}],
+	"no_progress": [{
+		"value": true
+	}],
+	"#": "only used in LuciphorAdapter at the moment, inconsistency will be fixed",
+	"num_threads": [{
+		"value":"${GALAXY_SLOTS:-1}"
+	}],
+	"threads": [{
+		"value": "${GALAXY_SLOTS:-1}"
+	}],
+	"#": "hardcode the outer loop threads for OpenSwathWorkflow",
+	"outer_loop_threads": [{
+			"value": "1", 
+			"tools": ["OpenSwathWorkflow"]
+	}],
+	"separator": [{
+		"value": ",",
+		"tools": ["IDMassAccuracy"]
+	}],
+	"#": "overwrite/add Galaxy xml attributes of some parameters (names need to start with param_)",
+
+	"#": "test is not a hardcoded value since we need to set it in the tool tests", 
+	"test": [{
+		"CTD:type": "text",
+		"XML:type": "hidden"
+	}],
+
+	"#": "overwrite CTD attributes of some parameters (some are not possible, e.g. type)",
+
+	"#": "for some tools the user needs to select the desired output type since detection by extension makes no sense for galaxy tools",
+	"out_type": [{
+	    "CTD:required": true,
+	    "CTD:advanced": false
+	}],
+
+	"#": "SeedListGenerator with consensusXML input needs a dynamic number of outputs that depends on the content of the input, so we remove this options at the moment because its hard or impossible to implement in Galaxy, https://github.com/OpenMS/OpenMS/issues/4404 .. see also in parameter",
+	"#": "FileInfo, MapStatistics, SequenceCoverageCalculator wo -out just writes to stdout. not wanted here",
+	"#": "MascotAdapter: https://github.com/OpenMS/OpenMS/pull/4553",
+	"#": "Phosphoscoring: https://github.com/OpenMS/OpenMS/pull/4569",
+	"#": "MzMLSplitter output prefix https://github.com/OpenMS/OpenMS/issues/4404",
+	"#": "IDRipper: blacklist out (is doing the same as the output-prefix out-path)",
+	"out": [{
+		"CTD:is_list": false, 
+		"tools": ["SeedListGenerator"]
+	}, {
+	 	"CTD:required": true,
+		"tools": ["FileInfo", "MapStatistics", "SequenceCoverageCalculator"]
+	}, {
+		"CTD:restrictions": "idXML",
+		"tools": ["MascotAdapter"]
+	}, {
+		"CTD:restrictions": "idXML",
+		"tools": ["PhosphoScoring"]	
+	}, {
+		"CTD:type": "output-prefix", 
+		"CTD:required": "true",
+		"CTD:restrictions": "mzml",
+		"tools": ["MzMLSplitter"]
+	}, {
+		"value": "@", 
+		"tools": ["IDRipper"]
+	}],
+
+	"#": "https://github.com/OpenMS/OpenMS/pull/4552 .. if this is removed the test will need out_cm_FLAG",
+	"out_cm": [{
+		"CTD:required": true, 
+		"tools": ["MetaboliteAdductDecharger"]
+	}],
+
+
+	"#": "https://github.com/OpenMS/OpenMS/pull/4451", 
+	"out_xquestxml": [{
+		"CTD:restrictions": "xquest.xml",
+		"tools": ["OpenPepXL", "OpenPepXLLF"]
+	}],
+	"out_xquest_specxml": [{
+		"CTD:restrictions": "spec.xml",
+		"tools": ["OpenPepXL", "OpenPepXLLF"]
+	}],
+
+	"#": "Try to remove xml data type whereever possible",
+	"#": "XTandem Adapter output is called .xml in OMS -> use Galaxy's bioml",
+	"xml_out": [{
+		"CTD:restrictions": "bioml",
+		"tools": ["XTandemAdapter"]
+	}],
+	
+	"#": "IDFileConverter remove xml",
+	"#": "OpenSwathWorkflow make in single file input and all outputs non-optional",
+        "#": "XFDR does not need xml .. redundant with xquest.xml TODO check if list is up to date with each new release",
+        "#": "SpectraSTSearchAdapter does not need xml .. redundant with pep.xml TODO check if list is up to date with each new release",
+	"#": "SeedListGenerator https://github.com/OpenMS/OpenMS/issues/4404 .. see also out parameter",
+	"in": [{
+		"CTD:restrictions": "pepXML,protXML,mascotXML,omssaXML,bioml,psms,tsv,idXML,mzid,xquest.xml",
+		"tools": ["IDFileConverter"]
+	}, {
+		"CTD:is_list": false, 
+		"tools": ["OpenSwathWorkflow"]
+	}, {
+		"CTD:restrictions": "idXML,mzid,xquest.xml",
+		"tools": ["XFDR"]
+	}, {
+		"CTD:restrictions": "txt,tsv,pep.xml,pepXML,html",
+		"tools": ["SpectraSTSearchAdapter"]
+	}, {
+		"CTD:restrictions": "mzML,idXML,featureXML",
+		"tools": ["SeedListGenerator"]
+	}],
+
+	"#": "parameter is a flag but restrictions in wrong order: TODO https://github.com/OpenMS/OpenMS/pull/4455",
+	"# masstrace_snr_filtering": [{
+		"CTD:restrictions": "true,false",
+		"tools": ["MassTraceExtractor"]
+	}],
+
+	"#": "IDMapper has in and spectra:in params, in is used in out as format_source",
+	"#": "which does not work in Galaxy: https://github.com/galaxyproject/galaxy/pull/9493", 
+	"spectra:in": [{
+		"CTD:name": "_in", 
+		"tools": ["IDMapper"]
+	}],
+
+	"#": "output-prefix",
+	"out_path": [{
+		"CTD:type": "output-prefix", 
+		"CTD:required": "true",
+		"CTD:restrictions": "idXML",
+		"tools": ["IDRipper"]
+	}],
+	"outputDirectory": [{
+		"CTD:type": "output-prefix", 
+		"CTD:required": "true",
+		"CTD:restrictions": "mzml",
+		"tools": ["OpenSwathFileSplitter"]
+	}]
+}
--- a/macros.xml	Fri May 17 10:03:28 2019 -0400
+++ b/macros.xml	Wed Sep 09 20:02:43 2020 +0000
@@ -1,11 +1,21 @@
 <?xml version='1.0' encoding='UTF-8'?>
+<!-- CTD2Galaxy depends on this file and on the stdio, advanced_options macros!
+     You can edit this file to add your own macros, if you so desire, or you can
+     add additional macro files using the m/macros parameter -->
 <macros>
+  <token name="@TOOL_VERSION@">2.5</token>
+  <token name="@GALAXY_VERSION@">0</token>
   <xml name="requirements">
     <requirements>
-      <requirement type="package" version="2.3">openms</requirement>
-      <requirement type="package" version="15.12.15.2">xtandem</requirement>
-      <requirement type="package" version="1.0">fido</requirement>
-      <requirement type="package" version="2017.07.21">msgf_plus</requirement>
+      <requirement type="package" version="@TOOL_VERSION@">openms</requirement>
+      <requirement type="package" version="@TOOL_VERSION@">openms-thirdparty</requirement>
+      <!-- makeblastdb for OMSSAAdapter -->
+      <requirement type="package" version="2.9.0">blast</requirement>
+      <requirement type="package" version="8.0.192">openjdk</requirement>
+      <!--<requirement type="package" version="5.0.0">tpp</requirement>-->
+      <!-- for realpath (used e.g. in LuciphorAdapter) -->
+	  <!--<requirement type="package" version="8.25">coreutils</requirement>-->
+	  <requirement type="package" version="1.4">ctdopts</requirement>
       <yield/>
     </requirements>
   </xml>
@@ -21,8 +31,8 @@
       <citation type="doi">doi:10.1186/1471-2105-9-163</citation>
     </citations>
   </xml>
-  <xml name="advanced_options">
-    <conditional name="adv_opts">
+  <xml name="adv_opts_macro">
+    <conditional name="adv_opts_cond">
       <param name="adv_opts_selector" type="select" label="Advanced Options">
         <option value="basic" selected="True">Hide Advanced Options</option>
         <option value="advanced">Show Advanced Options</option>
@@ -33,4 +43,87 @@
       </when>
     </conditional>
   </xml>
-</macros>
+
+  <!-- sanitizers and validators -->
+  <xml name="list_string_val">
+    <validator type="regex" message="parameter must not start with $">^[^$]</validator>
+    
+    <validator type="regex" message="a space separated list of string is needed (strings that contain spaces can be quoted with &quot;)">^ *((?:\"[^\"]*\" +)|(?:[^ \"]+ +))*((?:\"[^\"]*\")|(?:[^ \"]+)) *$</validator>
+  </xml>
+  <xml name="list_string_san">
+    <sanitizer>
+      <valid initial="string.printable">
+<!--        <remove value="'"/>-->
+<!--        <remove value="\"/>--><!-- otherwise the user could quote the final quote -->
+<!--        <remove value="`"/>-->
+<!--        <remove value="$"/>-->
+<!--        <remove value="&lt;"/>-->
+	<!--<remove value="&amp;"/> removed for MascotAdapterOnline -Mascot_server:export_params which is a URL POST string which can contain & .. could be mapped to &amp; but there is still a & -->
+        <!--<remove value=";"/>-->
+<!--        <remove value="#"/>-->
+      </valid>
+    </sanitizer>
+  </xml>
+  <xml name="list_float_valsan">
+    <validator type="regex" message="a space separated list of float values is required">^ *[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?( *[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?)* *$</validator>
+    <yield/>
+    <sanitizer>
+      <valid initial="string.digits">
+        <add value=" "/>
+        <add value="."/>
+        <add value="E"/>
+        <add value="e"/>
+        <add value="+"/>
+        <add value="-"/>
+      </valid>
+    </sanitizer>
+  </xml>
+  <xml name="list_integer_valsan">
+    <validator type="regex" message="a space separated list of integer values is required">^ *[+-]?[0-9]+( *[+-]?[0-9]+)* *$</validator>
+    <yield/>
+    <sanitizer>
+      <valid initial="string.digits">
+        <add value=" "/>
+        <add value="+"/>
+        <add value="-"/>
+      </valid>
+    </sanitizer>
+  </xml>
+
+  <!-- helper function to quote space separated strings -->
+  <token name="@QUOTE_FOO@">
+#def quote(s):
+    #set $s = [ _ for _ in $s.split(" ") if _ != "" ]
+    #set $q = False
+    #for $i, $p in enumerate($s):
+        #if $p == "":
+            #continue
+        #end if
+        #if $p.startswith('"'):
+            #set $q = True
+        #end if
+##        #if p.startswith('-'):
+##            #set p = "\\" + p
+##        #elif p.startswith('"-'):
+##            #set p = "\\" + p[1:]
+##        #end if
+        #if not $q:
+            #set $s[i] = '"%s"' % p
+        #end if
+        #if $p.endswith('"'):
+            #set $q = False
+        #end if
+    #end for
+    #return " ".join($s)
+#end def
+  </token>
+
+<token name="@EXT_FOO@"><![CDATA[#def oms2gxyext(o)
+    #set m={'txt': 'txt', 'tsv': 'tabular', 'bioml': 'xml', 'consensusXML': 'consensusxml', 'csv': 'csv', 'dta': 'dta', 'dta2d': 'dta2d', 'edta': 'edta', 'fa': 'fasta', 'fas': 'fasta', 'fasta': 'fasta', 'FASTA': 'fasta', 'featureXML': 'featurexml', 'featurexml': 'featurexml', 'html': 'html', 'HTML': 'html', 'idXML': 'idxml', 'json': 'json', 'kroenik': 'kroenik', 'mascotXML': 'mascotxml', 'mgf': 'mgf', 'mrm': 'mrm', 'ms': 'sirius.ms', 'ms2': 'ms2', 'msp': 'msp', 'mzData': 'mzdata', 'mzid': 'mzid', 'mzML': 'mzml', 'mzml': 'mzml', 'mzq': 'mzq', 'mzTab': 'mztab', 'mzXML': 'mzxml', 'novor': 'txt', 'obo': 'obo', 'omssaXML': 'idxml', 'osw': 'osw', 'OSW': 'osw', 'params': 'txt', 'paramXML': 'paramxml', 'peplist': 'peplist', 'pep.xml': 'pepxml', 'pepXML': 'pepxml', 'png': 'png', 'PNG': 'png', 'protXML': 'protxml', 'psms': 'psms', 'pqp': 'pqp', 'qcML': 'qcml', 'spec.xml': 'spec.xml', 'splib': 'splib', 'sqMass': 'sqmass', 'tandem.xml': 'tandem', 'trafoXML': 'trafoxml', 'traML': 'traml', 'TraML': 'traml', 'tab': 'tabular', 'raw': 'thermo.raw', 'xls': 'tsv', 'XML': 'xml', 'xml': 'xml', 'xquest.xml': 'xquest.xml', 'xsd': 'xml'}
+    #return m[o]
+#end def
+#def gxy2omsext(g)
+    #set m={'txt': 'txt', 'tabular': 'tsv', 'xml': 'bioml', 'consensusxml': 'consensusXML', 'csv': 'csv', 'dta': 'dta', 'dta2d': 'dta2d', 'edta': 'edta', 'fasta': 'fa', 'featurexml': 'featureXML', 'html': 'html', 'idxml': 'idXML', 'json': 'json', 'kroenik': 'kroenik', 'mascotxml': 'mascotXML', 'mgf': 'mgf', 'mrm': 'mrm', 'sirius.ms': 'ms', 'ms2': 'ms2', 'msp': 'msp', 'mzdata': 'mzData', 'mzid': 'mzid', 'mzml': 'mzML', 'mzq': 'mzq', 'mztab': 'mzTab', 'mzxml': 'mzXML', 'obo': 'obo', 'osw': 'osw', 'paramxml': 'paramXML', 'peff': 'fasta', 'peplist': 'peplist', 'pepxml': 'pep.xml', 'png': 'png', 'protxml': 'protXML', 'psms': 'psms', 'pqp': 'pqp', 'qcml': 'qcML', 'spec.xml': 'spec.xml', 'splib': 'splib', 'sqmass': 'sqMass', 'tandem': 'tandem.xml', 'trafoxml': 'trafoXML', 'traml': 'traML', 'thermo.raw': 'raw', 'tsv': 'xls', 'xquest.xml': 'xquest.xml'}
+    #return m[g]
+#end def
+]]></token></macros>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/macros_autotest.xml	Wed Sep 09 20:02:43 2020 +0000
@@ -0,0 +1,26318 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<macros>
+  <xml name="autotest_AccurateMassSearch">
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="ConsensusMapNormalizer_input.consensusXML"/>
+      <output name="out" file="AccurateMassSearch_1_output.tmp.mzTab" compare="sim_size" delta="5700" ftype="mztab"/>
+      <param name="positive_adducts" value="CHEMISTRY/PositiveAdducts.tsv" ftype="tabular"/>
+      <param name="negative_adducts" value="CHEMISTRY/NegativeAdducts.tsv" ftype="tabular"/>
+      <section name="db">
+        <param name="mapping" value="CHEMISTRY/HMDBMappingFile.tsv" ftype="tabular"/>
+        <param name="struct" value="CHEMISTRY/HMDB2StructMapping.tsv" ftype="tabular"/>
+      </section>
+      <section name="algorithm">
+        <param name="mass_error_value" value="5.0"/>
+        <param name="mass_error_unit" value="ppm"/>
+        <param name="ionization_mode" value="positive"/>
+        <param name="isotopic_similarity" value="false"/>
+        <param name="use_feature_adducts" value="false"/>
+        <param name="keep_unidentified_masses" value="false"/>
+        <section name="mzTab">
+          <param name="exportIsotopeIntensities" value="false"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="3">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="AccurateMassSearch_2_input.featureXML"/>
+      <output name="out" file="AccurateMassSearch_2_output.tmp.mzTab" compare="sim_size" delta="5700" ftype="mztab"/>
+      <output name="out_annotation" file="AccurateMassSearch_2_output.tmp.featureXML" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <param name="positive_adducts" value="AMS_PositiveAdducts.tsv" ftype="tabular"/>
+      <param name="negative_adducts" value="AMS_NegativeAdducts.tsv" ftype="tabular"/>
+      <section name="db">
+        <param name="mapping" value="AMS_test_Mapping.tsv" ftype="tabular"/>
+        <param name="struct" value="AMS_test_Struct.tsv" ftype="tabular"/>
+      </section>
+      <section name="algorithm">
+        <param name="mass_error_value" value="5.0"/>
+        <param name="mass_error_unit" value="ppm"/>
+        <param name="ionization_mode" value="positive"/>
+        <param name="isotopic_similarity" value="false"/>
+        <param name="use_feature_adducts" value="false"/>
+        <param name="keep_unidentified_masses" value="false"/>
+        <section name="mzTab">
+          <param name="exportIsotopeIntensities" value="true"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG,out_annotation_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="3">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="AccurateMassSearch_2_input.featureXML"/>
+      <output name="out" file="AccurateMassSearch_3_output.tmp.mzTab" compare="sim_size" delta="5700" ftype="mztab"/>
+      <output name="out_annotation" file="AccurateMassSearch_2_output.tmp.featureXML" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <param name="positive_adducts" value="AMS_PositiveAdducts.tsv" ftype="tabular"/>
+      <param name="negative_adducts" value="AMS_NegativeAdducts.tsv" ftype="tabular"/>
+      <section name="db">
+        <param name="mapping" value="AMS_test_Mapping.tsv" ftype="tabular"/>
+        <param name="struct" value="AMS_test_Struct.tsv" ftype="tabular"/>
+      </section>
+      <section name="algorithm">
+        <param name="mass_error_value" value="5.0"/>
+        <param name="mass_error_unit" value="ppm"/>
+        <param name="ionization_mode" value="positive"/>
+        <param name="isotopic_similarity" value="false"/>
+        <param name="use_feature_adducts" value="false"/>
+        <param name="keep_unidentified_masses" value="false"/>
+        <section name="mzTab">
+          <param name="exportIsotopeIntensities" value="false"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG,out_annotation_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+  </xml>
+  <xml name="autotest_AssayGeneratorMetabo">
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="precursor_recalibration_window" value="0.1"/>
+        <param name="precursor_recalibration_window_unit" value="Da"/>
+        <param name="min_fragment_mz" value="0.0"/>
+        <param name="max_fragment_mz" value="2000.0"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="AssayGeneratorMetabo_input.mzML"/>
+      <param name="in_id" value="AssayGeneratorMetabo_ffm_input.featureXML"/>
+      <param name="out_type" value="tsv"/>
+      <output name="out" file="AssayGeneratorMetabo_ffm_output.tmp.tsv" compare="sim_size" delta="5700" ftype="tabular"/>
+      <param name="fragment_annotation" value="none"/>
+      <param name="method" value="highest_intensity"/>
+      <param name="use_exact_mass" value="false"/>
+      <param name="exclude_ms2_precursor" value="false"/>
+      <param name="precursor_mz_distance" value="0.0001"/>
+      <param name="precursor_rt_tolerance" value="5.0"/>
+      <param name="use_known_unknowns" value="false"/>
+      <param name="min_transitions" value="1"/>
+      <param name="max_transitions" value="3"/>
+      <param name="cosine_similarity_threshold" value="0.98"/>
+      <param name="transition_threshold" value="5.0"/>
+      <param name="out_workspace_directory" value=""/>
+      <section name="deisotoping">
+        <param name="use_deisotoper" value="false"/>
+        <param name="fragment_tolerance" value="1.0"/>
+        <param name="fragment_unit" value="ppm"/>
+        <param name="min_charge" value="1"/>
+        <param name="max_charge" value="1"/>
+        <param name="min_isopeaks" value="2"/>
+        <param name="max_isopeaks" value="3"/>
+        <param name="keep_only_deisotoped" value="false"/>
+        <param name="annotate_charge" value="false"/>
+      </section>
+      <section name="preprocessing">
+        <param name="filter_by_num_masstraces" value="1"/>
+        <param name="precursor_mz_tolerance" value="0.005"/>
+        <param name="precursor_mz_tolerance_unit" value="Da"/>
+        <param name="precursor_rt_tolerance" value="5"/>
+        <param name="isotope_pattern_iterations" value="3"/>
+        <param name="feature_only" value="false"/>
+        <param name="no_masstrace_info_isotope_pattern" value="false"/>
+      </section>
+      <section name="sirius">
+        <param name="profile" value="qtof"/>
+        <param name="candidates" value="5"/>
+        <param name="database" value="all"/>
+        <param name="noise" value="0"/>
+        <param name="ppm_max" value="10"/>
+        <param name="isotope" value="both"/>
+        <param name="elements" value="CHNOP[5]S[8]Cl[1]"/>
+        <param name="compound_timeout" value="10"/>
+        <param name="tree_timeout" value="0"/>
+        <param name="top_n_hits" value="10"/>
+        <param name="cores" value="1"/>
+        <param name="auto_charge" value="false"/>
+        <param name="ion_tree" value="false"/>
+        <param name="no_recalibration" value="false"/>
+        <param name="most_intense_ms2" value="false"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="precursor_recalibration_window" value="0.1"/>
+        <param name="precursor_recalibration_window_unit" value="Da"/>
+        <param name="min_fragment_mz" value="0.0"/>
+        <param name="max_fragment_mz" value="2000.0"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="AssayGeneratorMetabo_input.mzML"/>
+      <param name="in_id" value="AssayGeneratorMetabo_ams_input.featureXML"/>
+      <param name="out_type" value="tsv"/>
+      <output name="out" file="AssayGeneratorMetabo_ams_output.tmp.tsv" compare="sim_size" delta="5700" ftype="tabular"/>
+      <param name="fragment_annotation" value="none"/>
+      <param name="method" value="highest_intensity"/>
+      <param name="use_exact_mass" value="false"/>
+      <param name="exclude_ms2_precursor" value="false"/>
+      <param name="precursor_mz_distance" value="0.0001"/>
+      <param name="precursor_rt_tolerance" value="5.0"/>
+      <param name="use_known_unknowns" value="false"/>
+      <param name="min_transitions" value="1"/>
+      <param name="max_transitions" value="3"/>
+      <param name="cosine_similarity_threshold" value="0.98"/>
+      <param name="transition_threshold" value="5.0"/>
+      <param name="out_workspace_directory" value=""/>
+      <section name="deisotoping">
+        <param name="use_deisotoper" value="false"/>
+        <param name="fragment_tolerance" value="1.0"/>
+        <param name="fragment_unit" value="ppm"/>
+        <param name="min_charge" value="1"/>
+        <param name="max_charge" value="1"/>
+        <param name="min_isopeaks" value="2"/>
+        <param name="max_isopeaks" value="3"/>
+        <param name="keep_only_deisotoped" value="false"/>
+        <param name="annotate_charge" value="false"/>
+      </section>
+      <section name="preprocessing">
+        <param name="filter_by_num_masstraces" value="1"/>
+        <param name="precursor_mz_tolerance" value="0.005"/>
+        <param name="precursor_mz_tolerance_unit" value="Da"/>
+        <param name="precursor_rt_tolerance" value="5"/>
+        <param name="isotope_pattern_iterations" value="3"/>
+        <param name="feature_only" value="false"/>
+        <param name="no_masstrace_info_isotope_pattern" value="false"/>
+      </section>
+      <section name="sirius">
+        <param name="profile" value="qtof"/>
+        <param name="candidates" value="5"/>
+        <param name="database" value="all"/>
+        <param name="noise" value="0"/>
+        <param name="ppm_max" value="10"/>
+        <param name="isotope" value="both"/>
+        <param name="elements" value="CHNOP[5]S[8]Cl[1]"/>
+        <param name="compound_timeout" value="10"/>
+        <param name="tree_timeout" value="0"/>
+        <param name="top_n_hits" value="10"/>
+        <param name="cores" value="1"/>
+        <param name="auto_charge" value="false"/>
+        <param name="ion_tree" value="false"/>
+        <param name="no_recalibration" value="false"/>
+        <param name="most_intense_ms2" value="false"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="precursor_recalibration_window" value="0.1"/>
+        <param name="precursor_recalibration_window_unit" value="Da"/>
+        <param name="min_fragment_mz" value="0.0"/>
+        <param name="max_fragment_mz" value="2000.0"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="AssayGeneratorMetabo_input.mzML"/>
+      <param name="in_id" value="AssayGeneratorMetabo_ffm_input.featureXML"/>
+      <param name="out_type" value="tsv"/>
+      <output name="out" file="AssayGeneratorMetabo_ffm_output_consensus.tmp.tsv" compare="sim_size" delta="5700" ftype="tabular"/>
+      <param name="fragment_annotation" value="none"/>
+      <param name="method" value="consensus_spectrum"/>
+      <param name="use_exact_mass" value="false"/>
+      <param name="exclude_ms2_precursor" value="false"/>
+      <param name="precursor_mz_distance" value="0.0001"/>
+      <param name="precursor_rt_tolerance" value="5.0"/>
+      <param name="use_known_unknowns" value="false"/>
+      <param name="min_transitions" value="1"/>
+      <param name="max_transitions" value="3"/>
+      <param name="cosine_similarity_threshold" value="0.98"/>
+      <param name="transition_threshold" value="5.0"/>
+      <param name="out_workspace_directory" value=""/>
+      <section name="deisotoping">
+        <param name="use_deisotoper" value="false"/>
+        <param name="fragment_tolerance" value="1.0"/>
+        <param name="fragment_unit" value="ppm"/>
+        <param name="min_charge" value="1"/>
+        <param name="max_charge" value="1"/>
+        <param name="min_isopeaks" value="2"/>
+        <param name="max_isopeaks" value="3"/>
+        <param name="keep_only_deisotoped" value="false"/>
+        <param name="annotate_charge" value="false"/>
+      </section>
+      <section name="preprocessing">
+        <param name="filter_by_num_masstraces" value="1"/>
+        <param name="precursor_mz_tolerance" value="0.005"/>
+        <param name="precursor_mz_tolerance_unit" value="Da"/>
+        <param name="precursor_rt_tolerance" value="5"/>
+        <param name="isotope_pattern_iterations" value="3"/>
+        <param name="feature_only" value="false"/>
+        <param name="no_masstrace_info_isotope_pattern" value="false"/>
+      </section>
+      <section name="sirius">
+        <param name="profile" value="qtof"/>
+        <param name="candidates" value="5"/>
+        <param name="database" value="all"/>
+        <param name="noise" value="0"/>
+        <param name="ppm_max" value="10"/>
+        <param name="isotope" value="both"/>
+        <param name="elements" value="CHNOP[5]S[8]Cl[1]"/>
+        <param name="compound_timeout" value="10"/>
+        <param name="tree_timeout" value="0"/>
+        <param name="top_n_hits" value="10"/>
+        <param name="cores" value="1"/>
+        <param name="auto_charge" value="false"/>
+        <param name="ion_tree" value="false"/>
+        <param name="no_recalibration" value="false"/>
+        <param name="most_intense_ms2" value="false"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="precursor_recalibration_window" value="0.1"/>
+        <param name="precursor_recalibration_window_unit" value="Da"/>
+        <param name="min_fragment_mz" value="0.0"/>
+        <param name="max_fragment_mz" value="2000.0"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="AssayGeneratorMetabo_input.mzML"/>
+      <param name="in_id" value="AssayGeneratorMetabo_ams_input.featureXML"/>
+      <param name="out_type" value="tsv"/>
+      <output name="out" file="AssayGeneratorMetabo_ams_output_consensus.tmp.tsv" compare="sim_size" delta="5700" ftype="tabular"/>
+      <param name="fragment_annotation" value="none"/>
+      <param name="method" value="consensus_spectrum"/>
+      <param name="use_exact_mass" value="false"/>
+      <param name="exclude_ms2_precursor" value="false"/>
+      <param name="precursor_mz_distance" value="0.0001"/>
+      <param name="precursor_rt_tolerance" value="5.0"/>
+      <param name="use_known_unknowns" value="false"/>
+      <param name="min_transitions" value="1"/>
+      <param name="max_transitions" value="3"/>
+      <param name="cosine_similarity_threshold" value="0.98"/>
+      <param name="transition_threshold" value="5.0"/>
+      <param name="out_workspace_directory" value=""/>
+      <section name="deisotoping">
+        <param name="use_deisotoper" value="false"/>
+        <param name="fragment_tolerance" value="1.0"/>
+        <param name="fragment_unit" value="ppm"/>
+        <param name="min_charge" value="1"/>
+        <param name="max_charge" value="1"/>
+        <param name="min_isopeaks" value="2"/>
+        <param name="max_isopeaks" value="3"/>
+        <param name="keep_only_deisotoped" value="false"/>
+        <param name="annotate_charge" value="false"/>
+      </section>
+      <section name="preprocessing">
+        <param name="filter_by_num_masstraces" value="1"/>
+        <param name="precursor_mz_tolerance" value="0.005"/>
+        <param name="precursor_mz_tolerance_unit" value="Da"/>
+        <param name="precursor_rt_tolerance" value="5"/>
+        <param name="isotope_pattern_iterations" value="3"/>
+        <param name="feature_only" value="false"/>
+        <param name="no_masstrace_info_isotope_pattern" value="false"/>
+      </section>
+      <section name="sirius">
+        <param name="profile" value="qtof"/>
+        <param name="candidates" value="5"/>
+        <param name="database" value="all"/>
+        <param name="noise" value="0"/>
+        <param name="ppm_max" value="10"/>
+        <param name="isotope" value="both"/>
+        <param name="elements" value="CHNOP[5]S[8]Cl[1]"/>
+        <param name="compound_timeout" value="10"/>
+        <param name="tree_timeout" value="0"/>
+        <param name="top_n_hits" value="10"/>
+        <param name="cores" value="1"/>
+        <param name="auto_charge" value="false"/>
+        <param name="ion_tree" value="false"/>
+        <param name="no_recalibration" value="false"/>
+        <param name="most_intense_ms2" value="false"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="precursor_recalibration_window" value="0.1"/>
+        <param name="precursor_recalibration_window_unit" value="Da"/>
+        <param name="min_fragment_mz" value="0.0"/>
+        <param name="max_fragment_mz" value="2000.0"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="AssayGeneratorMetabo_input.mzML"/>
+      <param name="in_id" value="AssayGeneratorMetabo_ams_input.featureXML"/>
+      <param name="out_type" value="tsv"/>
+      <output name="out" file="AssayGeneratorMetabo_ams_uku_output_consensus.tmp.tsv" compare="sim_size" delta="5700" ftype="tabular"/>
+      <param name="fragment_annotation" value="none"/>
+      <param name="method" value="consensus_spectrum"/>
+      <param name="use_exact_mass" value="false"/>
+      <param name="exclude_ms2_precursor" value="false"/>
+      <param name="precursor_mz_distance" value="0.0001"/>
+      <param name="precursor_rt_tolerance" value="5.0"/>
+      <param name="use_known_unknowns" value="true"/>
+      <param name="min_transitions" value="1"/>
+      <param name="max_transitions" value="3"/>
+      <param name="cosine_similarity_threshold" value="0.98"/>
+      <param name="transition_threshold" value="5.0"/>
+      <param name="out_workspace_directory" value=""/>
+      <section name="deisotoping">
+        <param name="use_deisotoper" value="false"/>
+        <param name="fragment_tolerance" value="1.0"/>
+        <param name="fragment_unit" value="ppm"/>
+        <param name="min_charge" value="1"/>
+        <param name="max_charge" value="1"/>
+        <param name="min_isopeaks" value="2"/>
+        <param name="max_isopeaks" value="3"/>
+        <param name="keep_only_deisotoped" value="false"/>
+        <param name="annotate_charge" value="false"/>
+      </section>
+      <section name="preprocessing">
+        <param name="filter_by_num_masstraces" value="1"/>
+        <param name="precursor_mz_tolerance" value="0.005"/>
+        <param name="precursor_mz_tolerance_unit" value="Da"/>
+        <param name="precursor_rt_tolerance" value="5"/>
+        <param name="isotope_pattern_iterations" value="3"/>
+        <param name="feature_only" value="false"/>
+        <param name="no_masstrace_info_isotope_pattern" value="false"/>
+      </section>
+      <section name="sirius">
+        <param name="profile" value="qtof"/>
+        <param name="candidates" value="5"/>
+        <param name="database" value="all"/>
+        <param name="noise" value="0"/>
+        <param name="ppm_max" value="10"/>
+        <param name="isotope" value="both"/>
+        <param name="elements" value="CHNOP[5]S[8]Cl[1]"/>
+        <param name="compound_timeout" value="10"/>
+        <param name="tree_timeout" value="0"/>
+        <param name="top_n_hits" value="10"/>
+        <param name="cores" value="1"/>
+        <param name="auto_charge" value="false"/>
+        <param name="ion_tree" value="false"/>
+        <param name="no_recalibration" value="false"/>
+        <param name="most_intense_ms2" value="false"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="precursor_recalibration_window" value="0.1"/>
+        <param name="precursor_recalibration_window_unit" value="Da"/>
+        <param name="min_fragment_mz" value="0.0"/>
+        <param name="max_fragment_mz" value="2000.0"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="AssayGeneratorMetabo_input.mzML"/>
+      <param name="in_id" value="AssayGeneratorMetabo_ams_input.featureXML"/>
+      <param name="out_type" value="tsv"/>
+      <output name="out" file="AssayGeneratorMetabo_ams_sirius_output.tmp.tsv" compare="sim_size" delta="5700" ftype="tabular"/>
+      <param name="fragment_annotation" value="sirius"/>
+      <param name="method" value="highest_intensity"/>
+      <param name="use_exact_mass" value="true"/>
+      <param name="exclude_ms2_precursor" value="false"/>
+      <param name="precursor_mz_distance" value="0.0001"/>
+      <param name="precursor_rt_tolerance" value="5.0"/>
+      <param name="use_known_unknowns" value="false"/>
+      <param name="min_transitions" value="2"/>
+      <param name="max_transitions" value="3"/>
+      <param name="cosine_similarity_threshold" value="0.98"/>
+      <param name="transition_threshold" value="3.0"/>
+      <param name="out_workspace_directory" value=""/>
+      <section name="deisotoping">
+        <param name="use_deisotoper" value="false"/>
+        <param name="fragment_tolerance" value="1.0"/>
+        <param name="fragment_unit" value="ppm"/>
+        <param name="min_charge" value="1"/>
+        <param name="max_charge" value="1"/>
+        <param name="min_isopeaks" value="2"/>
+        <param name="max_isopeaks" value="3"/>
+        <param name="keep_only_deisotoped" value="false"/>
+        <param name="annotate_charge" value="false"/>
+      </section>
+      <section name="preprocessing">
+        <param name="filter_by_num_masstraces" value="1"/>
+        <param name="precursor_mz_tolerance" value="10.0"/>
+        <param name="precursor_mz_tolerance_unit" value="ppm"/>
+        <param name="precursor_rt_tolerance" value="5"/>
+        <param name="isotope_pattern_iterations" value="3"/>
+        <param name="feature_only" value="true"/>
+        <param name="no_masstrace_info_isotope_pattern" value="false"/>
+      </section>
+      <section name="sirius">
+        <param name="profile" value="qtof"/>
+        <param name="candidates" value="5"/>
+        <param name="database" value="all"/>
+        <param name="noise" value="0"/>
+        <param name="ppm_max" value="10"/>
+        <param name="isotope" value="both"/>
+        <param name="elements" value="CHNOP[5]S[8]Cl[1]"/>
+        <param name="compound_timeout" value="100"/>
+        <param name="tree_timeout" value="0"/>
+        <param name="top_n_hits" value="10"/>
+        <param name="cores" value="1"/>
+        <param name="auto_charge" value="false"/>
+        <param name="ion_tree" value="false"/>
+        <param name="no_recalibration" value="false"/>
+        <param name="most_intense_ms2" value="false"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="precursor_recalibration_window" value="0.1"/>
+        <param name="precursor_recalibration_window_unit" value="Da"/>
+        <param name="min_fragment_mz" value="0.0"/>
+        <param name="max_fragment_mz" value="2000.0"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="AssayGeneratorMetabo_input.mzML"/>
+      <param name="in_id" value="AssayGeneratorMetabo_ams_input.featureXML"/>
+      <param name="out_type" value="tsv"/>
+      <output name="out" file="AssayGeneratorMetabo_ams_sirius_ukn_output.tmp.tsv" compare="sim_size" delta="5700" ftype="tabular"/>
+      <param name="fragment_annotation" value="sirius"/>
+      <param name="method" value="highest_intensity"/>
+      <param name="use_exact_mass" value="true"/>
+      <param name="exclude_ms2_precursor" value="false"/>
+      <param name="precursor_mz_distance" value="0.0001"/>
+      <param name="precursor_rt_tolerance" value="5.0"/>
+      <param name="use_known_unknowns" value="true"/>
+      <param name="min_transitions" value="2"/>
+      <param name="max_transitions" value="3"/>
+      <param name="cosine_similarity_threshold" value="0.98"/>
+      <param name="transition_threshold" value="3.0"/>
+      <param name="out_workspace_directory" value=""/>
+      <section name="deisotoping">
+        <param name="use_deisotoper" value="false"/>
+        <param name="fragment_tolerance" value="1.0"/>
+        <param name="fragment_unit" value="ppm"/>
+        <param name="min_charge" value="1"/>
+        <param name="max_charge" value="1"/>
+        <param name="min_isopeaks" value="2"/>
+        <param name="max_isopeaks" value="3"/>
+        <param name="keep_only_deisotoped" value="false"/>
+        <param name="annotate_charge" value="false"/>
+      </section>
+      <section name="preprocessing">
+        <param name="filter_by_num_masstraces" value="1"/>
+        <param name="precursor_mz_tolerance" value="10.0"/>
+        <param name="precursor_mz_tolerance_unit" value="ppm"/>
+        <param name="precursor_rt_tolerance" value="5"/>
+        <param name="isotope_pattern_iterations" value="3"/>
+        <param name="feature_only" value="true"/>
+        <param name="no_masstrace_info_isotope_pattern" value="false"/>
+      </section>
+      <section name="sirius">
+        <param name="profile" value="qtof"/>
+        <param name="candidates" value="5"/>
+        <param name="database" value="all"/>
+        <param name="noise" value="0"/>
+        <param name="ppm_max" value="10"/>
+        <param name="isotope" value="both"/>
+        <param name="elements" value="CHNOP[5]S[8]Cl[1]"/>
+        <param name="compound_timeout" value="100"/>
+        <param name="tree_timeout" value="0"/>
+        <param name="top_n_hits" value="10"/>
+        <param name="cores" value="1"/>
+        <param name="auto_charge" value="false"/>
+        <param name="ion_tree" value="false"/>
+        <param name="no_recalibration" value="false"/>
+        <param name="most_intense_ms2" value="false"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="precursor_recalibration_window" value="0.1"/>
+        <param name="precursor_recalibration_window_unit" value="Da"/>
+        <param name="min_fragment_mz" value="0.0"/>
+        <param name="max_fragment_mz" value="2000.0"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="AssayGeneratorMetabo_intsort_input.mzML"/>
+      <param name="in_id" value="AssayGeneratorMetabo_intsort_input.featureXML"/>
+      <param name="out_type" value="tsv"/>
+      <output name="out" file="AssayGeneratorMetabo_ams_sirius_intsort_output.tmp.tsv" compare="sim_size" delta="5700" ftype="tabular"/>
+      <param name="fragment_annotation" value="sirius"/>
+      <param name="method" value="highest_intensity"/>
+      <param name="use_exact_mass" value="true"/>
+      <param name="exclude_ms2_precursor" value="false"/>
+      <param name="precursor_mz_distance" value="0.0001"/>
+      <param name="precursor_rt_tolerance" value="5.0"/>
+      <param name="use_known_unknowns" value="false"/>
+      <param name="min_transitions" value="2"/>
+      <param name="max_transitions" value="3"/>
+      <param name="cosine_similarity_threshold" value="0.98"/>
+      <param name="transition_threshold" value="3.0"/>
+      <param name="out_workspace_directory" value=""/>
+      <section name="deisotoping">
+        <param name="use_deisotoper" value="false"/>
+        <param name="fragment_tolerance" value="1.0"/>
+        <param name="fragment_unit" value="ppm"/>
+        <param name="min_charge" value="1"/>
+        <param name="max_charge" value="1"/>
+        <param name="min_isopeaks" value="2"/>
+        <param name="max_isopeaks" value="3"/>
+        <param name="keep_only_deisotoped" value="false"/>
+        <param name="annotate_charge" value="false"/>
+      </section>
+      <section name="preprocessing">
+        <param name="filter_by_num_masstraces" value="1"/>
+        <param name="precursor_mz_tolerance" value="10.0"/>
+        <param name="precursor_mz_tolerance_unit" value="ppm"/>
+        <param name="precursor_rt_tolerance" value="5"/>
+        <param name="isotope_pattern_iterations" value="3"/>
+        <param name="feature_only" value="true"/>
+        <param name="no_masstrace_info_isotope_pattern" value="false"/>
+      </section>
+      <section name="sirius">
+        <param name="profile" value="qtof"/>
+        <param name="candidates" value="5"/>
+        <param name="database" value="all"/>
+        <param name="noise" value="0"/>
+        <param name="ppm_max" value="10"/>
+        <param name="isotope" value="both"/>
+        <param name="elements" value="CHNOP[5]S[8]Cl[1]"/>
+        <param name="compound_timeout" value="100"/>
+        <param name="tree_timeout" value="0"/>
+        <param name="top_n_hits" value="10"/>
+        <param name="cores" value="1"/>
+        <param name="auto_charge" value="false"/>
+        <param name="ion_tree" value="false"/>
+        <param name="no_recalibration" value="false"/>
+        <param name="most_intense_ms2" value="false"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="precursor_recalibration_window" value="0.1"/>
+        <param name="precursor_recalibration_window_unit" value="Da"/>
+        <param name="min_fragment_mz" value="100.0"/>
+        <param name="max_fragment_mz" value="900.0"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="AssayGeneratorMetabo_input.mzML"/>
+      <param name="in_id" value="AssayGeneratorMetabo_ams_input.featureXML"/>
+      <param name="out_type" value="tsv"/>
+      <output name="out" file="AssayGeneratorMetabo_ams_sirius_restrict_output.tmp.tsv" compare="sim_size" delta="5700" ftype="tabular"/>
+      <param name="fragment_annotation" value="sirius"/>
+      <param name="method" value="highest_intensity"/>
+      <param name="use_exact_mass" value="true"/>
+      <param name="exclude_ms2_precursor" value="false"/>
+      <param name="precursor_mz_distance" value="0.0001"/>
+      <param name="precursor_rt_tolerance" value="5.0"/>
+      <param name="use_known_unknowns" value="false"/>
+      <param name="min_transitions" value="2"/>
+      <param name="max_transitions" value="3"/>
+      <param name="cosine_similarity_threshold" value="0.98"/>
+      <param name="transition_threshold" value="3.0"/>
+      <param name="out_workspace_directory" value=""/>
+      <section name="deisotoping">
+        <param name="use_deisotoper" value="false"/>
+        <param name="fragment_tolerance" value="1.0"/>
+        <param name="fragment_unit" value="ppm"/>
+        <param name="min_charge" value="1"/>
+        <param name="max_charge" value="1"/>
+        <param name="min_isopeaks" value="2"/>
+        <param name="max_isopeaks" value="3"/>
+        <param name="keep_only_deisotoped" value="false"/>
+        <param name="annotate_charge" value="false"/>
+      </section>
+      <section name="preprocessing">
+        <param name="filter_by_num_masstraces" value="1"/>
+        <param name="precursor_mz_tolerance" value="10.0"/>
+        <param name="precursor_mz_tolerance_unit" value="ppm"/>
+        <param name="precursor_rt_tolerance" value="5"/>
+        <param name="isotope_pattern_iterations" value="3"/>
+        <param name="feature_only" value="true"/>
+        <param name="no_masstrace_info_isotope_pattern" value="false"/>
+      </section>
+      <section name="sirius">
+        <param name="profile" value="qtof"/>
+        <param name="candidates" value="5"/>
+        <param name="database" value="all"/>
+        <param name="noise" value="0"/>
+        <param name="ppm_max" value="10"/>
+        <param name="isotope" value="both"/>
+        <param name="elements" value="CHNOP[5]S[8]Cl[1]"/>
+        <param name="compound_timeout" value="100"/>
+        <param name="tree_timeout" value="0"/>
+        <param name="top_n_hits" value="10"/>
+        <param name="cores" value="1"/>
+        <param name="auto_charge" value="false"/>
+        <param name="ion_tree" value="false"/>
+        <param name="no_recalibration" value="false"/>
+        <param name="most_intense_ms2" value="false"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+  </xml>
+  <xml name="autotest_BaselineFilter">
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="BaselineFilter_input.mzML"/>
+      <output name="out" file="BaselineFilter_output.mzML" compare="sim_size" delta="5700" ftype="mzml"/>
+      <param name="struc_elem_length" value="1.5"/>
+      <param name="struc_elem_unit" value="Thomson"/>
+      <param name="method" value="tophat"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+  </xml>
+  <xml name="autotest_ClusterMassTracesByPrecursor">
+</xml>
+  <xml name="autotest_ClusterMassTraces">
+</xml>
+  <xml name="autotest_CometAdapter">
+    <test expect_num_outputs="3">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="fragment_bin_tolerance" value="1.0005"/>
+        <param name="fragment_bin_offset" value="0.25"/>
+        <param name="instrument" value="high_res"/>
+        <param name="use_A_ions" value="false"/>
+        <param name="use_B_ions" value="true"/>
+        <param name="use_C_ions" value="false"/>
+        <param name="use_X_ions" value="false"/>
+        <param name="use_Y_ions" value="true"/>
+        <param name="use_Z_ions" value="false"/>
+        <param name="use_NL_ions" value="false"/>
+        <param name="digest_mass_range" value="600:5000"/>
+        <param name="max_precursor_charge" value="5"/>
+        <param name="spectrum_batch_size" value="1000"/>
+        <param name="mass_offsets" value="0.0"/>
+        <param name="minimum_peaks" value="10"/>
+        <param name="minimum_intensity" value="0.0"/>
+        <param name="remove_precursor_peak" value="no"/>
+        <param name="remove_precursor_tolerance" value="1.5"/>
+        <param name="clear_mz_range" value="0:0"/>
+        <param name="max_variable_mods_in_peptide" value="5"/>
+        <param name="require_variable_mod" value="false"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="spectra_comet.mzML"/>
+      <output name="out" file="CometAdapter_1_out.idXML" compare="sim_size" delta="5700" ftype="idxml"/>
+      <param name="database" value="proteins.fasta"/>
+      <output name="pin_out" file="CometAdapter_1_out2.tmp.tsv" compare="sim_size" delta="5700" ftype="tabular"/>
+      <param name="precursor_mass_tolerance" value="3.0"/>
+      <param name="precursor_error_units" value="ppm"/>
+      <param name="isotope_error" value="off"/>
+      <param name="enzyme" value="Trypsin"/>
+      <param name="num_enzyme_termini" value="fully"/>
+      <param name="allowed_missed_cleavages" value="1"/>
+      <param name="num_hits" value="5"/>
+      <param name="precursor_charge" value="0:0"/>
+      <param name="override_charge" value="keep any known"/>
+      <param name="ms_level" value="2"/>
+      <param name="activation_method" value="ALL"/>
+      <param name="max_fragment_charge" value="3"/>
+      <param name="clip_nterm_methionine" value="false"/>
+      <param name="fixed_modifications" value=""/>
+      <param name="variable_modifications" value=""/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG,pin_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="3">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="fragment_bin_tolerance" value="1.0005"/>
+        <param name="fragment_bin_offset" value="0.25"/>
+        <param name="instrument" value="high_res"/>
+        <param name="use_A_ions" value="false"/>
+        <param name="use_B_ions" value="true"/>
+        <param name="use_C_ions" value="false"/>
+        <param name="use_X_ions" value="false"/>
+        <param name="use_Y_ions" value="true"/>
+        <param name="use_Z_ions" value="false"/>
+        <param name="use_NL_ions" value="false"/>
+        <param name="digest_mass_range" value="600:5000"/>
+        <param name="max_precursor_charge" value="5"/>
+        <param name="spectrum_batch_size" value="1000"/>
+        <param name="mass_offsets" value="0.0"/>
+        <param name="minimum_peaks" value="10"/>
+        <param name="minimum_intensity" value="0.0"/>
+        <param name="remove_precursor_peak" value="no"/>
+        <param name="remove_precursor_tolerance" value="1.5"/>
+        <param name="clear_mz_range" value="0:0"/>
+        <param name="max_variable_mods_in_peptide" value="5"/>
+        <param name="require_variable_mod" value="false"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="CometAdapter_2_prepared.mzML"/>
+      <output name="out" file="CometAdapter_2_out.idXML" compare="sim_size" delta="5700" ftype="idxml"/>
+      <param name="database" value="CometAdapter_2_in.fasta"/>
+      <output name="pin_out" file="CometAdapter_2_out2.tmp.tsv" compare="sim_size" delta="5700" ftype="tabular"/>
+      <param name="precursor_mass_tolerance" value="3.0"/>
+      <param name="precursor_error_units" value="Da"/>
+      <param name="isotope_error" value="off"/>
+      <param name="enzyme" value="Trypsin"/>
+      <param name="num_enzyme_termini" value="fully"/>
+      <param name="allowed_missed_cleavages" value="1"/>
+      <param name="num_hits" value="5"/>
+      <param name="precursor_charge" value="0:0"/>
+      <param name="override_charge" value="keep any known"/>
+      <param name="ms_level" value="2"/>
+      <param name="activation_method" value="ALL"/>
+      <param name="max_fragment_charge" value="3"/>
+      <param name="clip_nterm_methionine" value="false"/>
+      <param name="fixed_modifications" value=""/>
+      <param name="variable_modifications" value=""/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG,pin_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="3">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="fragment_bin_tolerance" value="0.02"/>
+        <param name="fragment_bin_offset" value="0.0"/>
+        <param name="instrument" value="high_res"/>
+        <param name="use_A_ions" value="false"/>
+        <param name="use_B_ions" value="true"/>
+        <param name="use_C_ions" value="false"/>
+        <param name="use_X_ions" value="false"/>
+        <param name="use_Y_ions" value="true"/>
+        <param name="use_Z_ions" value="false"/>
+        <param name="use_NL_ions" value="false"/>
+        <param name="digest_mass_range" value="600:5000"/>
+        <param name="max_precursor_charge" value="5"/>
+        <param name="spectrum_batch_size" value="20000"/>
+        <param name="mass_offsets" value="0.0"/>
+        <param name="minimum_peaks" value="10"/>
+        <param name="minimum_intensity" value="0.0"/>
+        <param name="remove_precursor_peak" value="no"/>
+        <param name="remove_precursor_tolerance" value="1.5"/>
+        <param name="clear_mz_range" value="0:0"/>
+        <param name="max_variable_mods_in_peptide" value="3"/>
+        <param name="require_variable_mod" value="false"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="CometAdapter_3.mzML"/>
+      <output name="out" file="CometAdapter_3_out.idXML" compare="sim_size" delta="5700" ftype="idxml"/>
+      <param name="database" value="CometAdapter_3.fasta"/>
+      <output name="pin_out" file="CometAdapter_3_out2.tmp.tsv" compare="sim_size" delta="5700" ftype="tabular"/>
+      <param name="precursor_mass_tolerance" value="5.0"/>
+      <param name="precursor_error_units" value="ppm"/>
+      <param name="isotope_error" value="off"/>
+      <param name="enzyme" value="Trypsin"/>
+      <param name="num_enzyme_termini" value="fully"/>
+      <param name="allowed_missed_cleavages" value="3"/>
+      <param name="num_hits" value="5"/>
+      <param name="precursor_charge" value="0:0"/>
+      <param name="override_charge" value="keep known search unknown"/>
+      <param name="ms_level" value="2"/>
+      <param name="activation_method" value="ALL"/>
+      <param name="max_fragment_charge" value="3"/>
+      <param name="clip_nterm_methionine" value="false"/>
+      <param name="fixed_modifications" value="Carbamidomethyl (C)"/>
+      <param name="variable_modifications" value="Acetyl (Protein N-term),Carbamidomethyl (N-term)"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG,pin_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+  </xml>
+  <xml name="autotest_CompNovoCID">
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="CompNovoCID_1_input.mzML"/>
+      <output name="out" file="CompNovoCID_1_output.idXML" compare="sim_size" delta="5700" ftype="idxml"/>
+      <section name="algorithm">
+        <param name="max_number_aa_per_decomp" value="4"/>
+        <param name="tryptic_only" value="true"/>
+        <param name="precursor_mass_tolerance" value="0.3"/>
+        <param name="fragment_mass_tolerance" value="0.3"/>
+        <param name="max_number_pivot" value="9"/>
+        <param name="max_subscore_number" value="40"/>
+        <param name="decomp_weights_precision" value="0.01"/>
+        <param name="double_charged_iso_threshold" value="0.6"/>
+        <param name="max_mz" value="2000.0"/>
+        <param name="min_mz" value="200.0"/>
+        <param name="max_isotope_to_score" value="3"/>
+        <param name="max_decomp_weight" value="450.0"/>
+        <param name="max_isotope" value="3"/>
+        <param name="missed_cleavages" value="1"/>
+        <param name="number_of_hits" value="1"/>
+        <param name="estimate_precursor_mz" value="true"/>
+        <param name="number_of_prescoring_hits" value="250"/>
+        <param name="fixed_modifications" value=""/>
+        <param name="variable_modifications" value=""/>
+        <param name="residue_set" value="Natural19WithoutI"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+  </xml>
+  <xml name="autotest_CompNovo">
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="CompNovo_1_input.mzML"/>
+      <output name="out" file="CompNovo_1_output.idXML" compare="sim_size" delta="5700" ftype="idxml"/>
+      <section name="algorithm">
+        <param name="max_number_aa_per_decomp" value="4"/>
+        <param name="tryptic_only" value="true"/>
+        <param name="precursor_mass_tolerance" value="0.3"/>
+        <param name="fragment_mass_tolerance" value="0.3"/>
+        <param name="max_number_pivot" value="9"/>
+        <param name="max_subscore_number" value="40"/>
+        <param name="decomp_weights_precision" value="0.01"/>
+        <param name="double_charged_iso_threshold" value="0.6"/>
+        <param name="max_mz" value="2000.0"/>
+        <param name="min_mz" value="200.0"/>
+        <param name="max_isotope_to_score" value="3"/>
+        <param name="max_decomp_weight" value="450.0"/>
+        <param name="max_isotope" value="3"/>
+        <param name="missed_cleavages" value="1"/>
+        <param name="number_of_hits" value="1"/>
+        <param name="estimate_precursor_mz" value="true"/>
+        <param name="number_of_prescoring_hits" value="250"/>
+        <param name="fixed_modifications" value=""/>
+        <param name="variable_modifications" value=""/>
+        <param name="residue_set" value="Natural19WithoutI"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+  </xml>
+  <xml name="autotest_ConsensusID">
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="ConsensusID_1_input.idXML"/>
+      <output name="out" file="ConsensusID_1_output.idXML" compare="sim_size" delta="5700" ftype="idxml"/>
+      <param name="rt_delta" value="0.1"/>
+      <param name="mz_delta" value="0.1"/>
+      <param name="algorithm" value="PEPMatrix"/>
+      <section name="filter">
+        <param name="considered_hits" value="0"/>
+        <param name="min_support" value="0.0"/>
+        <param name="count_empty" value="false"/>
+      </section>
+      <section name="PEPIons">
+        <param name="mass_tolerance" value="0.5"/>
+        <param name="min_shared" value="2"/>
+      </section>
+      <section name="PEPMatrix">
+        <param name="matrix" value="PAM30MS"/>
+        <param name="penalty" value="5"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="ConsensusID_2_input.featureXML"/>
+      <output name="out" file="ConsensusID_2_output.featureXML" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <param name="rt_delta" value="0.1"/>
+      <param name="mz_delta" value="0.1"/>
+      <param name="algorithm" value="average"/>
+      <section name="filter">
+        <param name="considered_hits" value="0"/>
+        <param name="min_support" value="0.0"/>
+        <param name="count_empty" value="false"/>
+      </section>
+      <section name="PEPIons">
+        <param name="mass_tolerance" value="0.5"/>
+        <param name="min_shared" value="2"/>
+      </section>
+      <section name="PEPMatrix">
+        <param name="matrix" value="identity"/>
+        <param name="penalty" value="5"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="ConsensusID_3_input.consensusXML"/>
+      <output name="out" file="ConsensusID_3_output.consensusXML" compare="sim_size" delta="5700" ftype="consensusxml"/>
+      <param name="rt_delta" value="0.1"/>
+      <param name="mz_delta" value="0.1"/>
+      <param name="algorithm" value="best"/>
+      <section name="filter">
+        <param name="considered_hits" value="0"/>
+        <param name="min_support" value="0.0"/>
+        <param name="count_empty" value="false"/>
+      </section>
+      <section name="PEPIons">
+        <param name="mass_tolerance" value="0.5"/>
+        <param name="min_shared" value="2"/>
+      </section>
+      <section name="PEPMatrix">
+        <param name="matrix" value="identity"/>
+        <param name="penalty" value="5"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="ConsensusID_1_input.idXML"/>
+      <output name="out" file="ConsensusID_4_output.idXML" compare="sim_size" delta="5700" ftype="idxml"/>
+      <param name="rt_delta" value="0.1"/>
+      <param name="mz_delta" value="0.1"/>
+      <param name="algorithm" value="PEPMatrix"/>
+      <section name="filter">
+        <param name="considered_hits" value="6"/>
+        <param name="min_support" value="0.0"/>
+        <param name="count_empty" value="false"/>
+      </section>
+      <section name="PEPIons">
+        <param name="mass_tolerance" value="0.5"/>
+        <param name="min_shared" value="2"/>
+      </section>
+      <section name="PEPMatrix">
+        <param name="matrix" value="identity"/>
+        <param name="penalty" value="5"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="ConsensusID_1_input.idXML"/>
+      <output name="out" file="ConsensusID_5_output.idXML" compare="sim_size" delta="5700" ftype="idxml"/>
+      <param name="rt_delta" value="0.1"/>
+      <param name="mz_delta" value="0.1"/>
+      <param name="algorithm" value="PEPIons"/>
+      <section name="filter">
+        <param name="considered_hits" value="0"/>
+        <param name="min_support" value="0.0"/>
+        <param name="count_empty" value="false"/>
+      </section>
+      <section name="PEPIons">
+        <param name="mass_tolerance" value="0.5"/>
+        <param name="min_shared" value="2"/>
+      </section>
+      <section name="PEPMatrix">
+        <param name="matrix" value="identity"/>
+        <param name="penalty" value="5"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="ConsensusID_1_input.idXML"/>
+      <output name="out" file="ConsensusID_6_output.idXML" compare="sim_size" delta="5700" ftype="idxml"/>
+      <param name="rt_delta" value="0.1"/>
+      <param name="mz_delta" value="0.1"/>
+      <param name="algorithm" value="best"/>
+      <section name="filter">
+        <param name="considered_hits" value="0"/>
+        <param name="min_support" value="0.5"/>
+        <param name="count_empty" value="false"/>
+      </section>
+      <section name="PEPIons">
+        <param name="mass_tolerance" value="0.5"/>
+        <param name="min_shared" value="2"/>
+      </section>
+      <section name="PEPMatrix">
+        <param name="matrix" value="identity"/>
+        <param name="penalty" value="5"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+  </xml>
+  <xml name="autotest_ConsensusMapNormalizer">
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="accession_filter" value=""/>
+        <param name="description_filter" value=""/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="ConsensusMapNormalizer_input.consensusXML"/>
+      <output name="out" file="ConsensusMapNormalizer_output.consensusXML" compare="sim_size" delta="5700" ftype="consensusxml"/>
+      <param name="algorithm_type" value="robust_regression"/>
+      <param name="ratio_threshold" value="0.67"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+  </xml>
+  <xml name="autotest_CruxAdapter">
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="custom_enzyme" value=""/>
+        <param name="decoy_prefix" value="decoy_"/>
+        <param name="deisotope" value="false"/>
+        <param name="report_decoys" value="false"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="spectra_comet.mzML"/>
+      <output name="out" file="CruxAdapter_1_out.idXML" compare="sim_size" delta="5700" ftype="idxml"/>
+      <param name="database" value="proteins.fasta"/>
+      <param name="extra_index_args" value=""/>
+      <param name="extra_search_args" value=""/>
+      <param name="extra_percolator_args" value=""/>
+      <param name="precursor_mass_tolerance" value="10.0"/>
+      <param name="precursor_mass_units" value="ppm"/>
+      <param name="fragment_bin_offset" value="0.0"/>
+      <param name="fragment_bin_width" value="0.02"/>
+      <param name="isotope_error" value=""/>
+      <param name="run_percolator" value="false"/>
+      <param name="enzyme" value="trypsin"/>
+      <param name="digestion" value="full-digest"/>
+      <param name="allowed_missed_cleavages" value="0"/>
+      <param name="decoy_format" value="shuffle"/>
+      <param name="keep_terminal_aminos" value="NC"/>
+      <param name="cterm_modifications" value=""/>
+      <param name="nterm_modifications" value=""/>
+      <param name="modifications" value=""/>
+      <param name="test_fdr" value="0.01"/>
+      <param name="train_fdr" value="0.01"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+  </xml>
+  <xml name="autotest_CVInspector">
+</xml>
+  <xml name="autotest_DatabaseFilter">
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="DatabaseFilter_1.fasta"/>
+      <param name="id" value="DatabaseFilter_1.idXML"/>
+      <param name="method" value="whitelist"/>
+      <output name="out" file="DatabaseFilter_1_out.fasta" compare="sim_size" delta="5700" ftype="fasta"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="DatabaseFilter_1.fasta"/>
+      <param name="id" value="DatabaseFilter_1.idXML"/>
+      <param name="method" value="blacklist"/>
+      <output name="out" file="DatabaseFilter_2_out.fasta" compare="sim_size" delta="5700" ftype="fasta"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="DatabaseFilter_3.fasta"/>
+      <param name="id" value="DatabaseFilter_3.mzid"/>
+      <param name="method" value="whitelist"/>
+      <output name="out" file="DatabaseFilter_3_out.fasta" compare="sim_size" delta="5700" ftype="fasta"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="DatabaseFilter_3.fasta"/>
+      <param name="id" value="DatabaseFilter_3.mzid"/>
+      <param name="method" value="blacklist"/>
+      <output name="out" file="DatabaseFilter_4_out.fasta" compare="sim_size" delta="5700" ftype="fasta"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+  </xml>
+  <xml name="autotest_Decharger">
+    <test expect_num_outputs="4">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="Decharger_input.featureXML"/>
+      <output name="out_cm" file="Decharger_output.consensusXML" compare="sim_size" delta="5700" ftype="consensusxml"/>
+      <output name="out_fm" file="Decharger_output_fm.tmp" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <output name="outpairs" file="Decharger_p_output.tmp" compare="sim_size" delta="5700" ftype="consensusxml"/>
+      <section name="algorithm">
+        <section name="FeatureDeconvolution">
+          <param name="charge_min" value="1"/>
+          <param name="charge_max" value="10"/>
+          <param name="charge_span_max" value="4"/>
+          <param name="q_try" value="feature"/>
+          <param name="retention_max_diff" value="1.0"/>
+          <param name="retention_max_diff_local" value="1.0"/>
+          <param name="mass_max_diff" value="0.1"/>
+          <param name="potential_adducts" value="&quot;H:+:0.7&quot; &quot;Na:+:0.1&quot; &quot;(2)H4H-4:0:0.1:-2:heavy&quot;"/>
+          <param name="max_neutrals" value="0"/>
+          <param name="max_minority_bound" value="2"/>
+          <param name="min_rt_overlap" value="0.66"/>
+          <param name="intensity_filter" value="false"/>
+          <param name="negative_mode" value="false"/>
+          <param name="default_map_label" value="decharged features"/>
+          <param name="verbose_level" value="0"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG,out_fm_FLAG,outpairs_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+  </xml>
+  <xml name="autotest_DecoyDatabase">
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="shuffle_max_attempts" value="30"/>
+        <param name="shuffle_sequence_identity_threshold" value="0.5"/>
+        <param name="seed" value="1"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="DecoyDatabase_1.fasta"/>
+      <output name="out" file="DecoyDatabase_1_out.fasta" compare="sim_size" delta="5700" ftype="fasta"/>
+      <param name="decoy_string" value="DECOY_"/>
+      <param name="decoy_string_position" value="prefix"/>
+      <param name="only_decoy" value="true"/>
+      <param name="type" value="protein"/>
+      <param name="method" value="reverse"/>
+      <param name="enzyme" value="Trypsin"/>
+      <section name="Decoy">
+        <param name="non_shuffle_pattern" value=""/>
+        <param name="keepPeptideNTerm" value="true"/>
+        <param name="keepPeptideCTerm" value="true"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="shuffle_max_attempts" value="30"/>
+        <param name="shuffle_sequence_identity_threshold" value="0.5"/>
+        <param name="seed" value="42"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="DecoyDatabase_1.fasta"/>
+      <output name="out" file="DecoyDatabase_2_out.fasta" compare="sim_size" delta="5700" ftype="fasta"/>
+      <param name="decoy_string" value="blabla"/>
+      <param name="decoy_string_position" value="prefix"/>
+      <param name="only_decoy" value="false"/>
+      <param name="type" value="protein"/>
+      <param name="method" value="shuffle"/>
+      <param name="enzyme" value="Trypsin"/>
+      <section name="Decoy">
+        <param name="non_shuffle_pattern" value="KRP"/>
+        <param name="keepPeptideNTerm" value="true"/>
+        <param name="keepPeptideCTerm" value="true"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="shuffle_max_attempts" value="30"/>
+        <param name="shuffle_sequence_identity_threshold" value="0.5"/>
+        <param name="seed" value="42"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="DecoyDatabase_1.fasta"/>
+      <output name="out" file="DecoyDatabase_3_out.fasta" compare="sim_size" delta="5700" ftype="fasta"/>
+      <param name="decoy_string" value="blabla"/>
+      <param name="decoy_string_position" value="prefix"/>
+      <param name="only_decoy" value="false"/>
+      <param name="type" value="protein"/>
+      <param name="method" value="shuffle"/>
+      <param name="enzyme" value="Chymotrypsin"/>
+      <section name="Decoy">
+        <param name="non_shuffle_pattern" value="KR"/>
+        <param name="keepPeptideNTerm" value="true"/>
+        <param name="keepPeptideCTerm" value="true"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="shuffle_max_attempts" value="30"/>
+        <param name="shuffle_sequence_identity_threshold" value="0.5"/>
+        <param name="seed" value="42"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="DecoyDatabase_4.fasta"/>
+      <output name="out" file="DecoyDatabase_4_out.fasta" compare="sim_size" delta="5700" ftype="fasta"/>
+      <param name="decoy_string" value="blabla"/>
+      <param name="decoy_string_position" value="prefix"/>
+      <param name="only_decoy" value="false"/>
+      <param name="type" value="RNA"/>
+      <param name="method" value="reverse"/>
+      <param name="enzyme" value="Trypsin"/>
+      <section name="Decoy">
+        <param name="non_shuffle_pattern" value=""/>
+        <param name="keepPeptideNTerm" value="true"/>
+        <param name="keepPeptideCTerm" value="true"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+  </xml>
+  <xml name="autotest_DeMeanderize">
+</xml>
+  <xml name="autotest_DTAExtractor">
+    <test expect_num_outputs="1">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="DTAExtractor_1_input.mzML"/>
+      <param name="out" value="DTAExtractor"/>
+      <param name="mz" value=":"/>
+      <param name="rt" value=":61"/>
+      <param name="level" value="1,2,3"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="1">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="DTAExtractor_1_input.mzML"/>
+      <param name="out" value="DTAExtractor"/>
+      <param name="mz" value=":"/>
+      <param name="rt" value=":"/>
+      <param name="level" value="1"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="1">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="DTAExtractor_1_input.mzML"/>
+      <param name="out" value="DTAExtractor"/>
+      <param name="mz" value=":1000"/>
+      <param name="rt" value=":"/>
+      <param name="level" value="2"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+  </xml>
+  <xml name="autotest_EICExtractor">
+</xml>
+  <xml name="autotest_Epifany">
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="conservative_fdr" value="true"/>
+        <param name="min_psms_extreme_probability" value="0.0"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FidoAdapter_1_input.idXML"/>
+      <output name="out" file="Epifany_1_out.idXML" compare="sim_size" delta="5700" ftype="idxml"/>
+      <param name="protein_fdr" value="false"/>
+      <param name="greedy_group_resolution" value="none"/>
+      <param name="max_psms_extreme_probability" value="1.0"/>
+      <section name="algorithm">
+        <param name="psm_probability_cutoff" value="0.001"/>
+        <param name="top_PSMs" value="1"/>
+        <param name="update_PSM_probabilities" value="true"/>
+        <param name="user_defined_priors" value="false"/>
+        <param name="annotate_group_probabilities" value="true"/>
+        <param name="use_ids_outside_features" value="false"/>
+        <section name="model_parameters">
+          <param name="prot_prior" value="0.7"/>
+          <param name="pep_emission" value="0.1"/>
+          <param name="pep_spurious_emission" value="0.001"/>
+          <param name="pep_prior" value="0.1"/>
+          <param name="regularize" value="false"/>
+          <param name="extended_model" value="false"/>
+        </section>
+        <section name="loopy_belief_propagation">
+          <param name="scheduling_type" value="priority"/>
+          <param name="convergence_threshold" value="1e-05"/>
+          <param name="dampening_lambda" value="0.001"/>
+          <param name="max_nr_iterations" value="2147483647"/>
+          <param name="p_norm_inference" value="1.0"/>
+        </section>
+        <section name="param_optimize">
+          <param name="aucweight" value="0.3"/>
+          <param name="conservative_fdr" value="true"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+  </xml>
+  <xml name="autotest_ERPairFinder">
+</xml>
+  <xml name="autotest_ExternalCalibration">
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="ExternalCalibration_1_input.mzML"/>
+      <output name="out" file="ExternalCalibration_1_MS1_out.mzML" compare="sim_size" delta="5700" ftype="mzml"/>
+      <param name="offset" value="-5.5"/>
+      <param name="slope" value="0.0001"/>
+      <param name="power" value="0.0"/>
+      <param name="ms_level" value="1"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="ExternalCalibration_1_input.mzML"/>
+      <output name="out" file="ExternalCalibration_2_MS2_out.mzML" compare="sim_size" delta="5700" ftype="mzml"/>
+      <param name="offset" value="-5.5"/>
+      <param name="slope" value="0.0001"/>
+      <param name="power" value="0.0"/>
+      <param name="ms_level" value="2"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+  </xml>
+  <xml name="autotest_FalseDiscoveryRate">
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FalseDiscoveryRate_OMSSA.idXML"/>
+      <output name="out" file="FalseDiscoveryRate_output_1.idXML" compare="sim_size" delta="5700" ftype="idxml"/>
+      <param name="PSM" value="true"/>
+      <param name="protein" value="false"/>
+      <section name="FDR">
+        <param name="PSM" value="1.0"/>
+        <param name="protein" value="1.0"/>
+        <section name="cleanup">
+          <param name="remove_proteins_without_psms" value="true"/>
+          <param name="remove_psms_without_proteins" value="true"/>
+          <param name="remove_spectra_without_psms" value="true"/>
+        </section>
+      </section>
+      <section name="algorithm">
+        <param name="no_qvalues" value="false"/>
+        <param name="use_all_hits" value="false"/>
+        <param name="split_charge_variants" value="false"/>
+        <param name="treat_runs_separately" value="false"/>
+        <param name="add_decoy_peptides" value="false"/>
+        <param name="add_decoy_proteins" value="false"/>
+        <param name="conservative" value="true"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FalseDiscoveryRate_OMSSA.idXML"/>
+      <output name="out" file="FalseDiscoveryRate_output_2.idXML" compare="sim_size" delta="5700" ftype="idxml"/>
+      <param name="PSM" value="true"/>
+      <param name="protein" value="false"/>
+      <section name="FDR">
+        <param name="PSM" value="1.0"/>
+        <param name="protein" value="1.0"/>
+        <section name="cleanup">
+          <param name="remove_proteins_without_psms" value="true"/>
+          <param name="remove_psms_without_proteins" value="true"/>
+          <param name="remove_spectra_without_psms" value="true"/>
+        </section>
+      </section>
+      <section name="algorithm">
+        <param name="no_qvalues" value="false"/>
+        <param name="use_all_hits" value="false"/>
+        <param name="split_charge_variants" value="false"/>
+        <param name="treat_runs_separately" value="true"/>
+        <param name="add_decoy_peptides" value="false"/>
+        <param name="add_decoy_proteins" value="false"/>
+        <param name="conservative" value="true"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FalseDiscoveryRate_OMSSA.idXML"/>
+      <output name="out" file="FalseDiscoveryRate_output_3.idXML" compare="sim_size" delta="5700" ftype="idxml"/>
+      <param name="PSM" value="true"/>
+      <param name="protein" value="false"/>
+      <section name="FDR">
+        <param name="PSM" value="1.0"/>
+        <param name="protein" value="1.0"/>
+        <section name="cleanup">
+          <param name="remove_proteins_without_psms" value="true"/>
+          <param name="remove_psms_without_proteins" value="true"/>
+          <param name="remove_spectra_without_psms" value="true"/>
+        </section>
+      </section>
+      <section name="algorithm">
+        <param name="no_qvalues" value="false"/>
+        <param name="use_all_hits" value="false"/>
+        <param name="split_charge_variants" value="true"/>
+        <param name="treat_runs_separately" value="false"/>
+        <param name="add_decoy_peptides" value="false"/>
+        <param name="add_decoy_proteins" value="false"/>
+        <param name="conservative" value="true"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FalseDiscoveryRate_OMSSA_4.idXML"/>
+      <output name="out" file="FalseDiscoveryRate_output_4.idXML" compare="sim_size" delta="5700" ftype="idxml"/>
+      <param name="PSM" value="true"/>
+      <param name="protein" value="false"/>
+      <section name="FDR">
+        <param name="PSM" value="1.0"/>
+        <param name="protein" value="1.0"/>
+        <section name="cleanup">
+          <param name="remove_proteins_without_psms" value="true"/>
+          <param name="remove_psms_without_proteins" value="true"/>
+          <param name="remove_spectra_without_psms" value="true"/>
+        </section>
+      </section>
+      <section name="algorithm">
+        <param name="no_qvalues" value="false"/>
+        <param name="use_all_hits" value="false"/>
+        <param name="split_charge_variants" value="true"/>
+        <param name="treat_runs_separately" value="false"/>
+        <param name="add_decoy_peptides" value="false"/>
+        <param name="add_decoy_proteins" value="false"/>
+        <param name="conservative" value="true"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="true"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FalseDiscoveryRate_5_input.idXML"/>
+      <output name="out" file="FalseDiscoveryRate_5_output.idXML" compare="sim_size" delta="5700" ftype="idxml"/>
+      <param name="PSM" value="false"/>
+      <param name="protein" value="true"/>
+      <section name="FDR">
+        <param name="PSM" value="1.0"/>
+        <param name="protein" value="1.0"/>
+        <section name="cleanup">
+          <param name="remove_proteins_without_psms" value="true"/>
+          <param name="remove_psms_without_proteins" value="true"/>
+          <param name="remove_spectra_without_psms" value="true"/>
+        </section>
+      </section>
+      <section name="algorithm">
+        <param name="no_qvalues" value="false"/>
+        <param name="use_all_hits" value="false"/>
+        <param name="split_charge_variants" value="false"/>
+        <param name="treat_runs_separately" value="false"/>
+        <param name="add_decoy_peptides" value="false"/>
+        <param name="add_decoy_proteins" value="true"/>
+        <param name="conservative" value="true"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FalseDiscoveryRate_6_input.idXML"/>
+      <output name="out" file="FalseDiscoveryRate_6_output.idXML" compare="sim_size" delta="5700" ftype="idxml"/>
+      <param name="PSM" value="true"/>
+      <param name="protein" value="false"/>
+      <section name="FDR">
+        <param name="PSM" value="0.05"/>
+        <param name="protein" value="1.0"/>
+        <section name="cleanup">
+          <param name="remove_proteins_without_psms" value="true"/>
+          <param name="remove_psms_without_proteins" value="true"/>
+          <param name="remove_spectra_without_psms" value="true"/>
+        </section>
+      </section>
+      <section name="algorithm">
+        <param name="no_qvalues" value="false"/>
+        <param name="use_all_hits" value="false"/>
+        <param name="split_charge_variants" value="false"/>
+        <param name="treat_runs_separately" value="false"/>
+        <param name="add_decoy_peptides" value="false"/>
+        <param name="add_decoy_proteins" value="false"/>
+        <param name="conservative" value="true"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="true"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FalseDiscoveryRate_7_input.idXML"/>
+      <output name="out" file="FalseDiscoveryRate_7_output.idXML" compare="sim_size" delta="5700" ftype="idxml"/>
+      <param name="PSM" value="false"/>
+      <param name="protein" value="true"/>
+      <section name="FDR">
+        <param name="PSM" value="1.0"/>
+        <param name="protein" value="0.3"/>
+        <section name="cleanup">
+          <param name="remove_proteins_without_psms" value="true"/>
+          <param name="remove_psms_without_proteins" value="true"/>
+          <param name="remove_spectra_without_psms" value="true"/>
+        </section>
+      </section>
+      <section name="algorithm">
+        <param name="no_qvalues" value="false"/>
+        <param name="use_all_hits" value="false"/>
+        <param name="split_charge_variants" value="false"/>
+        <param name="treat_runs_separately" value="false"/>
+        <param name="add_decoy_peptides" value="false"/>
+        <param name="add_decoy_proteins" value="false"/>
+        <param name="conservative" value="true"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+  </xml>
+  <xml name="autotest_FeatureFinderCentroided">
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+        <param name="pseudo_rt_shift" value="500.0"/>
+      </conditional>
+      <param name="in" value="FeatureFinderCentroided_1_input.mzML"/>
+      <output name="out" file="FeatureFinderCentroided_1_output.featureXML" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <section name="algorithm">
+        <section name="intensity">
+          <param name="bins" value="1"/>
+        </section>
+        <section name="mass_trace">
+          <param name="mz_tolerance" value="0.02"/>
+          <param name="min_spectra" value="14"/>
+          <param name="max_missing" value="1"/>
+          <param name="slope_bound" value="0.1"/>
+        </section>
+        <section name="isotopic_pattern">
+          <param name="charge_low" value="2"/>
+          <param name="charge_high" value="2"/>
+          <param name="mz_tolerance" value="0.02"/>
+          <param name="intensity_percentage" value="10.0"/>
+          <param name="intensity_percentage_optional" value="0.1"/>
+          <param name="optional_fit_improvement" value="2.0"/>
+          <param name="mass_window_width" value="100.0"/>
+          <param name="abundance_12C" value="98.93"/>
+          <param name="abundance_14N" value="99.632"/>
+        </section>
+        <section name="seed">
+          <param name="min_score" value="0.8"/>
+        </section>
+        <section name="fit">
+          <param name="max_iterations" value="500"/>
+        </section>
+        <section name="feature">
+          <param name="min_score" value="0.7"/>
+          <param name="min_isotope_fit" value="0.8"/>
+          <param name="min_trace_score" value="0.5"/>
+          <param name="min_rt_span" value="0.333"/>
+          <param name="max_rt_span" value="2.5"/>
+          <param name="rt_shape" value="symmetric"/>
+          <param name="max_intersection" value="0.35"/>
+          <param name="reported_mz" value="monoisotopic"/>
+        </section>
+        <section name="user-seed">
+          <param name="rt_tolerance" value="5.0"/>
+          <param name="mz_tolerance" value="1.1"/>
+          <param name="min_score" value="0.5"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+  </xml>
+  <xml name="autotest_FeatureFinderIdentification">
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureFinderIdentification_1_input.mzML"/>
+      <param name="id" value="FeatureFinderIdentification_1_input.idXML"/>
+      <output name="out" file="FeatureFinderIdentification_1_output.featureXML" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <section name="extract">
+        <param name="batch_size" value="1000"/>
+        <param name="mz_window" value="0.1"/>
+        <param name="n_isotopes" value="2"/>
+        <param name="isotope_pmin" value="0.0"/>
+        <param name="rt_quantile" value="0.95"/>
+        <param name="rt_window" value="0.0"/>
+      </section>
+      <section name="detect">
+        <param name="peak_width" value="60.0"/>
+        <param name="min_peak_width" value="0.2"/>
+        <param name="signal_to_noise" value="0.8"/>
+        <param name="mapping_tolerance" value="0.0"/>
+      </section>
+      <section name="svm">
+        <param name="samples" value="0"/>
+        <param name="no_selection" value="false"/>
+        <param name="kernel" value="RBF"/>
+        <param name="xval" value="5"/>
+        <param name="log2_C" value="-5.0 -3.0 -1.0 1.0 3.0 5.0 7.0 9.0 11.0 13.0 15.0"/>
+        <param name="log2_gamma" value="-15.0 -13.0 -11.0 -9.0 -7.0 -5.0 -3.0 -1.0 1.0 3.0"/>
+        <param name="epsilon" value="0.001"/>
+        <param name="cache_size" value="100.0"/>
+        <param name="no_shrinking" value="false"/>
+        <param name="predictors" value="peak_apices_sum,var_xcorr_coelution,var_xcorr_shape,var_library_sangle,var_intensity_score,sn_ratio,var_log_sn_score,var_elution_model_fit_score,xx_lda_prelim_score,var_isotope_correlation_score,var_isotope_overlap_score,var_massdev_score,main_var_xx_swath_prelim_score"/>
+        <param name="min_prob" value="0.0"/>
+      </section>
+      <section name="model">
+        <param name="type" value="none"/>
+        <param name="add_zeros" value="0.2"/>
+        <param name="unweighted_fit" value="false"/>
+        <param name="no_imputation" value="false"/>
+        <section name="check">
+          <param name="min_area" value="1.0"/>
+          <param name="boundaries" value="0.5"/>
+          <param name="width" value="10.0"/>
+          <param name="asymmetry" value="10.0"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureFinderIdentification_1_input.mzML"/>
+      <param name="id" value="FeatureFinderIdentification_1_input.idXML"/>
+      <output name="out" file="FeatureFinderIdentification_3_output.featureXML" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <section name="extract">
+        <param name="batch_size" value="1000"/>
+        <param name="mz_window" value="0.1"/>
+        <param name="n_isotopes" value="2"/>
+        <param name="isotope_pmin" value="0.0"/>
+        <param name="rt_quantile" value="0.95"/>
+        <param name="rt_window" value="0.0"/>
+      </section>
+      <section name="detect">
+        <param name="peak_width" value="60.0"/>
+        <param name="min_peak_width" value="0.2"/>
+        <param name="signal_to_noise" value="0.8"/>
+        <param name="mapping_tolerance" value="0.0"/>
+      </section>
+      <section name="svm">
+        <param name="samples" value="0"/>
+        <param name="no_selection" value="false"/>
+        <param name="kernel" value="RBF"/>
+        <param name="xval" value="5"/>
+        <param name="log2_C" value="-5.0 -3.0 -1.0 1.0 3.0 5.0 7.0 9.0 11.0 13.0 15.0"/>
+        <param name="log2_gamma" value="-15.0 -13.0 -11.0 -9.0 -7.0 -5.0 -3.0 -1.0 1.0 3.0"/>
+        <param name="epsilon" value="0.001"/>
+        <param name="cache_size" value="100.0"/>
+        <param name="no_shrinking" value="false"/>
+        <param name="predictors" value="peak_apices_sum,var_xcorr_coelution,var_xcorr_shape,var_library_sangle,var_intensity_score,sn_ratio,var_log_sn_score,var_elution_model_fit_score,xx_lda_prelim_score,var_isotope_correlation_score,var_isotope_overlap_score,var_massdev_score,main_var_xx_swath_prelim_score"/>
+        <param name="min_prob" value="0.0"/>
+      </section>
+      <section name="model">
+        <param name="type" value="symmetric"/>
+        <param name="add_zeros" value="0.2"/>
+        <param name="unweighted_fit" value="false"/>
+        <param name="no_imputation" value="false"/>
+        <section name="check">
+          <param name="min_area" value="1.0"/>
+          <param name="boundaries" value="0.5"/>
+          <param name="width" value="10.0"/>
+          <param name="asymmetry" value="10.0"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureFinderIdentification_1_input.mzML"/>
+      <param name="id" value="FeatureFinderIdentification_1_input.idXML"/>
+      <output name="out" file="FeatureFinderIdentification_1_output.featureXML" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <section name="extract">
+        <param name="batch_size" value="10"/>
+        <param name="mz_window" value="0.1"/>
+        <param name="n_isotopes" value="2"/>
+        <param name="isotope_pmin" value="0.0"/>
+        <param name="rt_quantile" value="0.95"/>
+        <param name="rt_window" value="0.0"/>
+      </section>
+      <section name="detect">
+        <param name="peak_width" value="60.0"/>
+        <param name="min_peak_width" value="0.2"/>
+        <param name="signal_to_noise" value="0.8"/>
+        <param name="mapping_tolerance" value="0.0"/>
+      </section>
+      <section name="svm">
+        <param name="samples" value="0"/>
+        <param name="no_selection" value="false"/>
+        <param name="kernel" value="RBF"/>
+        <param name="xval" value="5"/>
+        <param name="log2_C" value="-5.0 -3.0 -1.0 1.0 3.0 5.0 7.0 9.0 11.0 13.0 15.0"/>
+        <param name="log2_gamma" value="-15.0 -13.0 -11.0 -9.0 -7.0 -5.0 -3.0 -1.0 1.0 3.0"/>
+        <param name="epsilon" value="0.001"/>
+        <param name="cache_size" value="100.0"/>
+        <param name="no_shrinking" value="false"/>
+        <param name="predictors" value="peak_apices_sum,var_xcorr_coelution,var_xcorr_shape,var_library_sangle,var_intensity_score,sn_ratio,var_log_sn_score,var_elution_model_fit_score,xx_lda_prelim_score,var_isotope_correlation_score,var_isotope_overlap_score,var_massdev_score,main_var_xx_swath_prelim_score"/>
+        <param name="min_prob" value="0.0"/>
+      </section>
+      <section name="model">
+        <param name="type" value="none"/>
+        <param name="add_zeros" value="0.2"/>
+        <param name="unweighted_fit" value="false"/>
+        <param name="no_imputation" value="false"/>
+        <section name="check">
+          <param name="min_area" value="1.0"/>
+          <param name="boundaries" value="0.5"/>
+          <param name="width" value="10.0"/>
+          <param name="asymmetry" value="10.0"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+  </xml>
+  <xml name="autotest_FeatureFinderIsotopeWavelet">
+</xml>
+  <xml name="autotest_FeatureFinderMetaboIdent">
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureFinderMetaboIdent_1_input.mzML"/>
+      <param name="id" value="FeatureFinderMetaboIdent_1_input.tsv" ftype="tabular"/>
+      <output name="out" file="FeatureFinderMetaboIdent_1_output.featureXML" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <section name="extract">
+        <param name="mz_window" value="5.0"/>
+        <param name="n_isotopes" value="2"/>
+        <param name="isotope_pmin" value="0.0"/>
+        <param name="rt_window" value="20.0"/>
+      </section>
+      <section name="detect">
+        <param name="peak_width" value="3.0"/>
+        <param name="min_peak_width" value="0.2"/>
+        <param name="signal_to_noise" value="0.8"/>
+      </section>
+      <section name="model">
+        <param name="type" value="symmetric"/>
+        <param name="add_zeros" value="0.2"/>
+        <param name="unweighted_fit" value="false"/>
+        <param name="no_imputation" value="false"/>
+        <section name="check">
+          <param name="min_area" value="1.0"/>
+          <param name="boundaries" value="0.5"/>
+          <param name="width" value="10.0"/>
+          <param name="asymmetry" value="10.0"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+  </xml>
+  <xml name="autotest_FeatureFinderMetabo">
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureFinderMetabo_1_input.mzML"/>
+      <output name="out" file="FeatureFinderMetabo_1_output.featureXML" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <section name="algorithm">
+        <section name="common">
+          <param name="noise_threshold_int" value="10.0"/>
+          <param name="chrom_peak_snr" value="3.0"/>
+          <param name="chrom_fwhm" value="5.0"/>
+        </section>
+        <section name="mtd">
+          <param name="mass_error_ppm" value="20.0"/>
+          <param name="reestimate_mt_sd" value="true"/>
+          <param name="quant_method" value="area"/>
+          <param name="trace_termination_criterion" value="outlier"/>
+          <param name="trace_termination_outliers" value="5"/>
+          <param name="min_sample_rate" value="0.5"/>
+          <param name="min_trace_length" value="5.0"/>
+          <param name="max_trace_length" value="300.0"/>
+        </section>
+        <section name="epd">
+          <param name="enabled" value="true"/>
+          <param name="width_filtering" value="off"/>
+          <param name="min_fwhm" value="3.0"/>
+          <param name="max_fwhm" value="60.0"/>
+          <param name="masstrace_snr_filtering" value="false"/>
+        </section>
+        <section name="ffm">
+          <param name="local_rt_range" value="10.0"/>
+          <param name="local_mz_range" value="6.5"/>
+          <param name="charge_lower_bound" value="1"/>
+          <param name="charge_upper_bound" value="3"/>
+          <param name="report_summed_ints" value="false"/>
+          <param name="enable_RT_filtering" value="true"/>
+          <param name="isotope_filtering_model" value="metabolites (5% RMS)"/>
+          <param name="mz_scoring_13C" value="true"/>
+          <param name="use_smoothed_intensities" value="true"/>
+          <param name="report_convex_hulls" value="false"/>
+          <param name="remove_single_traces" value="false"/>
+          <param name="mz_scoring_by_elements" value="false"/>
+          <param name="elements" value="CHNOPS"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureFinderMetabo_2_input.mzML"/>
+      <output name="out" file="FeatureFinderMetabo_2_noEPD_output.featureXML" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <section name="algorithm">
+        <section name="common">
+          <param name="noise_threshold_int" value="100.0"/>
+          <param name="chrom_peak_snr" value="0.0"/>
+          <param name="chrom_fwhm" value="100.0"/>
+        </section>
+        <section name="mtd">
+          <param name="mass_error_ppm" value="5.0"/>
+          <param name="reestimate_mt_sd" value="true"/>
+          <param name="quant_method" value="median"/>
+          <param name="trace_termination_criterion" value="sample_rate"/>
+          <param name="trace_termination_outliers" value="2"/>
+          <param name="min_sample_rate" value="0.01"/>
+          <param name="min_trace_length" value="30.0"/>
+          <param name="max_trace_length" value="3000.0"/>
+        </section>
+        <section name="epd">
+          <param name="enabled" value="false"/>
+          <param name="width_filtering" value="off"/>
+          <param name="min_fwhm" value="10.0"/>
+          <param name="max_fwhm" value="80.0"/>
+          <param name="masstrace_snr_filtering" value="false"/>
+        </section>
+        <section name="ffm">
+          <param name="local_rt_range" value="10.0"/>
+          <param name="local_mz_range" value="4.5"/>
+          <param name="charge_lower_bound" value="1"/>
+          <param name="charge_upper_bound" value="3"/>
+          <param name="report_summed_ints" value="false"/>
+          <param name="enable_RT_filtering" value="false"/>
+          <param name="isotope_filtering_model" value="none"/>
+          <param name="mz_scoring_13C" value="false"/>
+          <param name="use_smoothed_intensities" value="false"/>
+          <param name="report_convex_hulls" value="true"/>
+          <param name="remove_single_traces" value="false"/>
+          <param name="mz_scoring_by_elements" value="false"/>
+          <param name="elements" value="CHNOPS"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="3">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureFinderMetabo_3_input.mzML"/>
+      <output name="out" file="FeatureFinderMetabo_3.tmp" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <output name="out_chrom" file="FeatureFinderMetabo_3_chrom_output.mzML" compare="sim_size" delta="5700" ftype="mzml"/>
+      <section name="algorithm">
+        <section name="common">
+          <param name="noise_threshold_int" value="10.0"/>
+          <param name="chrom_peak_snr" value="3.0"/>
+          <param name="chrom_fwhm" value="5.0"/>
+        </section>
+        <section name="mtd">
+          <param name="mass_error_ppm" value="5.0"/>
+          <param name="reestimate_mt_sd" value="true"/>
+          <param name="quant_method" value="area"/>
+          <param name="trace_termination_criterion" value="outlier"/>
+          <param name="trace_termination_outliers" value="5"/>
+          <param name="min_sample_rate" value="0.5"/>
+          <param name="min_trace_length" value="5.0"/>
+          <param name="max_trace_length" value="-1.0"/>
+        </section>
+        <section name="epd">
+          <param name="enabled" value="true"/>
+          <param name="width_filtering" value="fixed"/>
+          <param name="min_fwhm" value="3.0"/>
+          <param name="max_fwhm" value="60.0"/>
+          <param name="masstrace_snr_filtering" value="false"/>
+        </section>
+        <section name="ffm">
+          <param name="local_rt_range" value="10.0"/>
+          <param name="local_mz_range" value="6.5"/>
+          <param name="charge_lower_bound" value="1"/>
+          <param name="charge_upper_bound" value="3"/>
+          <param name="report_summed_ints" value="false"/>
+          <param name="enable_RT_filtering" value="true"/>
+          <param name="isotope_filtering_model" value="none"/>
+          <param name="mz_scoring_13C" value="true"/>
+          <param name="use_smoothed_intensities" value="true"/>
+          <param name="report_convex_hulls" value="true"/>
+          <param name="remove_single_traces" value="false"/>
+          <param name="mz_scoring_by_elements" value="false"/>
+          <param name="elements" value="CHNOPS"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG,out_chrom_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="3">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureFinderMetabo_3_input.mzML"/>
+      <output name="out" file="FeatureFinderMetabo_4_output.featureXML" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <output name="out_chrom" file="FeatureFinderMetabo_4_chrom_output.mzML" compare="sim_size" delta="5700" ftype="mzml"/>
+      <section name="algorithm">
+        <section name="common">
+          <param name="noise_threshold_int" value="10.0"/>
+          <param name="chrom_peak_snr" value="3.0"/>
+          <param name="chrom_fwhm" value="5.0"/>
+        </section>
+        <section name="mtd">
+          <param name="mass_error_ppm" value="5.0"/>
+          <param name="reestimate_mt_sd" value="true"/>
+          <param name="quant_method" value="area"/>
+          <param name="trace_termination_criterion" value="outlier"/>
+          <param name="trace_termination_outliers" value="5"/>
+          <param name="min_sample_rate" value="0.5"/>
+          <param name="min_trace_length" value="5.0"/>
+          <param name="max_trace_length" value="-1.0"/>
+        </section>
+        <section name="epd">
+          <param name="enabled" value="true"/>
+          <param name="width_filtering" value="fixed"/>
+          <param name="min_fwhm" value="3.0"/>
+          <param name="max_fwhm" value="60.0"/>
+          <param name="masstrace_snr_filtering" value="false"/>
+        </section>
+        <section name="ffm">
+          <param name="local_rt_range" value="10.0"/>
+          <param name="local_mz_range" value="6.5"/>
+          <param name="charge_lower_bound" value="1"/>
+          <param name="charge_upper_bound" value="3"/>
+          <param name="report_summed_ints" value="false"/>
+          <param name="enable_RT_filtering" value="true"/>
+          <param name="isotope_filtering_model" value="none"/>
+          <param name="mz_scoring_13C" value="true"/>
+          <param name="use_smoothed_intensities" value="true"/>
+          <param name="report_convex_hulls" value="true"/>
+          <param name="remove_single_traces" value="true"/>
+          <param name="mz_scoring_by_elements" value="false"/>
+          <param name="elements" value="CHNOPS"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG,out_chrom_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureFinderMetabo_1_input.mzML"/>
+      <output name="out" file="FeatureFinderMetabo_5_output.featureXML" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <section name="algorithm">
+        <section name="common">
+          <param name="noise_threshold_int" value="10.0"/>
+          <param name="chrom_peak_snr" value="3.0"/>
+          <param name="chrom_fwhm" value="5.0"/>
+        </section>
+        <section name="mtd">
+          <param name="mass_error_ppm" value="20.0"/>
+          <param name="reestimate_mt_sd" value="true"/>
+          <param name="quant_method" value="max_height"/>
+          <param name="trace_termination_criterion" value="outlier"/>
+          <param name="trace_termination_outliers" value="5"/>
+          <param name="min_sample_rate" value="0.5"/>
+          <param name="min_trace_length" value="5.0"/>
+          <param name="max_trace_length" value="300.0"/>
+        </section>
+        <section name="epd">
+          <param name="enabled" value="true"/>
+          <param name="width_filtering" value="off"/>
+          <param name="min_fwhm" value="3.0"/>
+          <param name="max_fwhm" value="60.0"/>
+          <param name="masstrace_snr_filtering" value="false"/>
+        </section>
+        <section name="ffm">
+          <param name="local_rt_range" value="10.0"/>
+          <param name="local_mz_range" value="6.5"/>
+          <param name="charge_lower_bound" value="1"/>
+          <param name="charge_upper_bound" value="3"/>
+          <param name="report_summed_ints" value="false"/>
+          <param name="enable_RT_filtering" value="true"/>
+          <param name="isotope_filtering_model" value="metabolites (5% RMS)"/>
+          <param name="mz_scoring_13C" value="true"/>
+          <param name="use_smoothed_intensities" value="true"/>
+          <param name="report_convex_hulls" value="false"/>
+          <param name="remove_single_traces" value="false"/>
+          <param name="mz_scoring_by_elements" value="false"/>
+          <param name="elements" value="CHNOPS"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+  </xml>
+  <xml name="autotest_FeatureFinderMRM">
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureFinderMRM_1_input.mzML"/>
+      <output name="out" file="FeatureFinderMRM_1_output.featureXML" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <section name="algorithm">
+        <param name="min_rt_distance" value="10.0"/>
+        <param name="min_num_peaks_per_feature" value="5"/>
+        <param name="min_signal_to_noise_ratio" value="2.0"/>
+        <param name="write_debug_files" value="false"/>
+        <param name="resample_traces" value="false"/>
+        <param name="write_debuginfo" value="false"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+  </xml>
+  <xml name="autotest_FeatureFinderMultiplex">
+    <test expect_num_outputs="3">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureFinderMultiplex_1_input.mzML"/>
+      <output name="out" file="FeatureFinderMultiplex_1_output.featureXML" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <output name="out_multiplets" file="FeatureFinderMultiplex_1_output.consensusXML" compare="sim_size" delta="5700" ftype="consensusxml"/>
+      <section name="algorithm">
+        <param name="labels" value="[Dimethyl0][Dimethyl8]"/>
+        <param name="charge" value="1:4"/>
+        <param name="isotopes_per_peptide" value="3:6"/>
+        <param name="rt_typical" value="90.0"/>
+        <param name="rt_band" value="10.0"/>
+        <param name="rt_min" value="5.0"/>
+        <param name="mz_tolerance" value="40.0"/>
+        <param name="mz_unit" value="ppm"/>
+        <param name="intensity_cutoff" value="10.0"/>
+        <param name="peptide_similarity" value="0.8"/>
+        <param name="averagine_similarity" value="0.75"/>
+        <param name="averagine_similarity_scaling" value="0.75"/>
+        <param name="missed_cleavages" value="1"/>
+        <param name="spectrum_type" value="automatic"/>
+        <param name="averagine_type" value="peptide"/>
+        <param name="knock_out" value="false"/>
+      </section>
+      <section name="labels">
+        <param name="Arg6" value="6.0201290268"/>
+        <param name="Arg10" value="10.0082686"/>
+        <param name="Lys4" value="4.0251069836"/>
+        <param name="Lys6" value="6.0201290268"/>
+        <param name="Lys8" value="8.0141988132"/>
+        <param name="Leu3" value="3.01883"/>
+        <param name="Dimethyl0" value="28.0313"/>
+        <param name="Dimethyl4" value="32.056407"/>
+        <param name="Dimethyl6" value="34.063117"/>
+        <param name="Dimethyl8" value="36.07567"/>
+        <param name="ICPL0" value="105.021464"/>
+        <param name="ICPL4" value="109.046571"/>
+        <param name="ICPL6" value="111.041593"/>
+        <param name="ICPL10" value="115.0667"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG,out_FLAG,out_multiplets_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="3">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureFinderMultiplex_2_input.mzML"/>
+      <output name="out" file="FeatureFinderMultiplex_2_output.featureXML" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <output name="out_multiplets" file="FeatureFinderMultiplex_2_output.consensusXML" compare="sim_size" delta="5700" ftype="consensusxml"/>
+      <section name="algorithm">
+        <param name="labels" value="[][Lys8,Arg10]"/>
+        <param name="charge" value="1:4"/>
+        <param name="isotopes_per_peptide" value="3:6"/>
+        <param name="rt_typical" value="40.0"/>
+        <param name="rt_band" value="5.0"/>
+        <param name="rt_min" value="2.0"/>
+        <param name="mz_tolerance" value="6.0"/>
+        <param name="mz_unit" value="ppm"/>
+        <param name="intensity_cutoff" value="1000.0"/>
+        <param name="peptide_similarity" value="0.5"/>
+        <param name="averagine_similarity" value="0.4"/>
+        <param name="averagine_similarity_scaling" value="0.75"/>
+        <param name="missed_cleavages" value="0"/>
+        <param name="spectrum_type" value="automatic"/>
+        <param name="averagine_type" value="peptide"/>
+        <param name="knock_out" value="false"/>
+      </section>
+      <section name="labels">
+        <param name="Arg6" value="6.0201290268"/>
+        <param name="Arg10" value="10.0082686"/>
+        <param name="Lys4" value="4.0251069836"/>
+        <param name="Lys6" value="6.0201290268"/>
+        <param name="Lys8" value="8.0141988132"/>
+        <param name="Leu3" value="3.01883"/>
+        <param name="Dimethyl0" value="28.0313"/>
+        <param name="Dimethyl4" value="32.056407"/>
+        <param name="Dimethyl6" value="34.063117"/>
+        <param name="Dimethyl8" value="36.07567"/>
+        <param name="ICPL0" value="105.021464"/>
+        <param name="ICPL4" value="109.046571"/>
+        <param name="ICPL6" value="111.041593"/>
+        <param name="ICPL10" value="115.0667"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG,out_FLAG,out_multiplets_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="3">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureFinderMultiplex_3_input.mzML"/>
+      <output name="out" file="FeatureFinderMultiplex_3_output.featureXML" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <output name="out_multiplets" file="FeatureFinderMultiplex_3_output.consensusXML" compare="sim_size" delta="5700" ftype="consensusxml"/>
+      <section name="algorithm">
+        <param name="labels" value="[]"/>
+        <param name="charge" value="5:15"/>
+        <param name="isotopes_per_peptide" value="5:10"/>
+        <param name="rt_typical" value="45.0"/>
+        <param name="rt_band" value="5.0"/>
+        <param name="rt_min" value="2.0"/>
+        <param name="mz_tolerance" value="6.0"/>
+        <param name="mz_unit" value="ppm"/>
+        <param name="intensity_cutoff" value="200.0"/>
+        <param name="peptide_similarity" value="0.5"/>
+        <param name="averagine_similarity" value="0.4"/>
+        <param name="averagine_similarity_scaling" value="0.75"/>
+        <param name="missed_cleavages" value="0"/>
+        <param name="spectrum_type" value="automatic"/>
+        <param name="averagine_type" value="RNA"/>
+        <param name="knock_out" value="false"/>
+      </section>
+      <section name="labels">
+        <param name="Arg6" value="6.0201290268"/>
+        <param name="Arg10" value="10.0082686"/>
+        <param name="Lys4" value="4.0251069836"/>
+        <param name="Lys6" value="6.0201290268"/>
+        <param name="Lys8" value="8.0141988132"/>
+        <param name="Leu3" value="3.01883"/>
+        <param name="Dimethyl0" value="28.0313"/>
+        <param name="Dimethyl4" value="32.056407"/>
+        <param name="Dimethyl6" value="34.063117"/>
+        <param name="Dimethyl8" value="36.07567"/>
+        <param name="ICPL0" value="105.021464"/>
+        <param name="ICPL4" value="109.046571"/>
+        <param name="ICPL6" value="111.041593"/>
+        <param name="ICPL10" value="115.0667"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG,out_FLAG,out_multiplets_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="3">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureFinderMultiplex_4_input.mzML"/>
+      <output name="out" file="FeatureFinderMultiplex_4_output.featureXML" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <output name="out_multiplets" file="FeatureFinderMultiplex_4_output.consensusXML" compare="sim_size" delta="5700" ftype="consensusxml"/>
+      <section name="algorithm">
+        <param name="labels" value="[]"/>
+        <param name="charge" value="5:15"/>
+        <param name="isotopes_per_peptide" value="5:10"/>
+        <param name="rt_typical" value="45.0"/>
+        <param name="rt_band" value="5.0"/>
+        <param name="rt_min" value="2.0"/>
+        <param name="mz_tolerance" value="6.0"/>
+        <param name="mz_unit" value="ppm"/>
+        <param name="intensity_cutoff" value="200.0"/>
+        <param name="peptide_similarity" value="0.5"/>
+        <param name="averagine_similarity" value="0.4"/>
+        <param name="averagine_similarity_scaling" value="0.75"/>
+        <param name="missed_cleavages" value="0"/>
+        <param name="spectrum_type" value="automatic"/>
+        <param name="averagine_type" value="DNA"/>
+        <param name="knock_out" value="false"/>
+      </section>
+      <section name="labels">
+        <param name="Arg6" value="6.0201290268"/>
+        <param name="Arg10" value="10.0082686"/>
+        <param name="Lys4" value="4.0251069836"/>
+        <param name="Lys6" value="6.0201290268"/>
+        <param name="Lys8" value="8.0141988132"/>
+        <param name="Leu3" value="3.01883"/>
+        <param name="Dimethyl0" value="28.0313"/>
+        <param name="Dimethyl4" value="32.056407"/>
+        <param name="Dimethyl6" value="34.063117"/>
+        <param name="Dimethyl8" value="36.07567"/>
+        <param name="ICPL0" value="105.021464"/>
+        <param name="ICPL4" value="109.046571"/>
+        <param name="ICPL6" value="111.041593"/>
+        <param name="ICPL10" value="115.0667"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG,out_FLAG,out_multiplets_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="3">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureFinderMultiplex_5_input.mzML"/>
+      <output name="out" file="FeatureFinderMultiplex_5_output.featureXML" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <output name="out_multiplets" file="FeatureFinderMultiplex_5_output.consensusXML" compare="sim_size" delta="5700" ftype="consensusxml"/>
+      <section name="algorithm">
+        <param name="labels" value="[Dimethyl0][Dimethyl6]"/>
+        <param name="charge" value="1:5"/>
+        <param name="isotopes_per_peptide" value="3:6"/>
+        <param name="rt_typical" value="50.0"/>
+        <param name="rt_band" value="3.0"/>
+        <param name="rt_min" value="8.0"/>
+        <param name="mz_tolerance" value="10.0"/>
+        <param name="mz_unit" value="ppm"/>
+        <param name="intensity_cutoff" value="10000000.0"/>
+        <param name="peptide_similarity" value="0.95"/>
+        <param name="averagine_similarity" value="0.8"/>
+        <param name="averagine_similarity_scaling" value="0.95"/>
+        <param name="missed_cleavages" value="3"/>
+        <param name="spectrum_type" value="profile"/>
+        <param name="averagine_type" value="peptide"/>
+        <param name="knock_out" value="false"/>
+      </section>
+      <section name="labels">
+        <param name="Arg6" value="6.0201290268"/>
+        <param name="Arg10" value="10.0082686"/>
+        <param name="Lys4" value="4.0251069836"/>
+        <param name="Lys6" value="6.0201290268"/>
+        <param name="Lys8" value="8.0141988132"/>
+        <param name="Leu3" value="3.01883"/>
+        <param name="Dimethyl0" value="28.0313"/>
+        <param name="Dimethyl4" value="32.056407"/>
+        <param name="Dimethyl6" value="34.063117"/>
+        <param name="Dimethyl8" value="36.07567"/>
+        <param name="ICPL0" value="105.021464"/>
+        <param name="ICPL4" value="109.046571"/>
+        <param name="ICPL6" value="111.041593"/>
+        <param name="ICPL10" value="115.0667"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG,out_FLAG,out_multiplets_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="3">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureFinderMultiplex_6_input.mzML"/>
+      <output name="out" file="FeatureFinderMultiplex_6_output.featureXML" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <output name="out_multiplets" file="FeatureFinderMultiplex_6_output.consensusXML" compare="sim_size" delta="5700" ftype="consensusxml"/>
+      <section name="algorithm">
+        <param name="labels" value="[Dimethyl0][Dimethyl6]"/>
+        <param name="charge" value="1:5"/>
+        <param name="isotopes_per_peptide" value="3:6"/>
+        <param name="rt_typical" value="50.0"/>
+        <param name="rt_band" value="3.0"/>
+        <param name="rt_min" value="8.0"/>
+        <param name="mz_tolerance" value="10.0"/>
+        <param name="mz_unit" value="ppm"/>
+        <param name="intensity_cutoff" value="10000000.0"/>
+        <param name="peptide_similarity" value="0.95"/>
+        <param name="averagine_similarity" value="0.8"/>
+        <param name="averagine_similarity_scaling" value="1.0"/>
+        <param name="missed_cleavages" value="3"/>
+        <param name="spectrum_type" value="profile"/>
+        <param name="averagine_type" value="peptide"/>
+        <param name="knock_out" value="false"/>
+      </section>
+      <section name="labels">
+        <param name="Arg6" value="6.0201290268"/>
+        <param name="Arg10" value="10.0082686"/>
+        <param name="Lys4" value="4.0251069836"/>
+        <param name="Lys6" value="6.0201290268"/>
+        <param name="Lys8" value="8.0141988132"/>
+        <param name="Leu3" value="3.01883"/>
+        <param name="Dimethyl0" value="28.0313"/>
+        <param name="Dimethyl4" value="32.056407"/>
+        <param name="Dimethyl6" value="34.063117"/>
+        <param name="Dimethyl8" value="36.07567"/>
+        <param name="ICPL0" value="105.021464"/>
+        <param name="ICPL4" value="109.046571"/>
+        <param name="ICPL6" value="111.041593"/>
+        <param name="ICPL10" value="115.0667"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG,out_FLAG,out_multiplets_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="3">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureFinderMultiplex_7_input.mzML"/>
+      <output name="out" file="FeatureFinderMultiplex_7_output.featureXML" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <output name="out_multiplets" file="FeatureFinderMultiplex_7_output.consensusXML" compare="sim_size" delta="5700" ftype="consensusxml"/>
+      <section name="algorithm">
+        <param name="labels" value="[][Dimethyl4]"/>
+        <param name="charge" value="1:4"/>
+        <param name="isotopes_per_peptide" value="3:6"/>
+        <param name="rt_typical" value="40.0"/>
+        <param name="rt_band" value="5.0"/>
+        <param name="rt_min" value="2.0"/>
+        <param name="mz_tolerance" value="6.0"/>
+        <param name="mz_unit" value="ppm"/>
+        <param name="intensity_cutoff" value="1000.0"/>
+        <param name="peptide_similarity" value="0.5"/>
+        <param name="averagine_similarity" value="0.4"/>
+        <param name="averagine_similarity_scaling" value="0.75"/>
+        <param name="missed_cleavages" value="0"/>
+        <param name="spectrum_type" value="automatic"/>
+        <param name="averagine_type" value="peptide"/>
+        <param name="knock_out" value="false"/>
+      </section>
+      <section name="labels">
+        <param name="Arg6" value="6.0201290268"/>
+        <param name="Arg10" value="10.0082686"/>
+        <param name="Lys4" value="4.0251069836"/>
+        <param name="Lys6" value="6.0201290268"/>
+        <param name="Lys8" value="8.0141988132"/>
+        <param name="Leu3" value="3.01883"/>
+        <param name="Dimethyl0" value="28.0313"/>
+        <param name="Dimethyl4" value="31.0094"/>
+        <param name="Dimethyl6" value="34.063117"/>
+        <param name="Dimethyl8" value="36.07567"/>
+        <param name="ICPL0" value="105.021464"/>
+        <param name="ICPL4" value="109.046571"/>
+        <param name="ICPL6" value="111.041593"/>
+        <param name="ICPL10" value="115.0667"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG,out_FLAG,out_multiplets_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="3">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureFinderMultiplex_8_input.mzML"/>
+      <output name="out" file="FeatureFinderMultiplex_8_output.featureXML" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <output name="out_multiplets" file="FeatureFinderMultiplex_8_output.consensusXML" compare="sim_size" delta="5700" ftype="consensusxml"/>
+      <section name="algorithm">
+        <param name="labels" value="[Dimethyl0][Dimethyl4][Dimethyl8]"/>
+        <param name="charge" value="1:7"/>
+        <param name="isotopes_per_peptide" value="3:8"/>
+        <param name="rt_typical" value="50.0"/>
+        <param name="rt_band" value="3.0"/>
+        <param name="rt_min" value="8.0"/>
+        <param name="mz_tolerance" value="10.0"/>
+        <param name="mz_unit" value="ppm"/>
+        <param name="intensity_cutoff" value="10.0"/>
+        <param name="peptide_similarity" value="0.2"/>
+        <param name="averagine_similarity" value="0.25"/>
+        <param name="averagine_similarity_scaling" value="0.95"/>
+        <param name="missed_cleavages" value="4"/>
+        <param name="spectrum_type" value="automatic"/>
+        <param name="averagine_type" value="peptide"/>
+        <param name="knock_out" value="true"/>
+      </section>
+      <section name="labels">
+        <param name="Arg6" value="6.0201290268"/>
+        <param name="Arg10" value="10.0082686"/>
+        <param name="Lys4" value="4.0251069836"/>
+        <param name="Lys6" value="6.0201290268"/>
+        <param name="Lys8" value="8.0141988132"/>
+        <param name="Leu3" value="3.01883"/>
+        <param name="Dimethyl0" value="28.0313"/>
+        <param name="Dimethyl4" value="32.056407"/>
+        <param name="Dimethyl6" value="34.063117"/>
+        <param name="Dimethyl8" value="36.07567"/>
+        <param name="ICPL0" value="105.021464"/>
+        <param name="ICPL4" value="109.046571"/>
+        <param name="ICPL6" value="111.041593"/>
+        <param name="ICPL10" value="115.0667"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG,out_FLAG,out_multiplets_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="3">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureFinderMultiplex_9_input.mzML"/>
+      <output name="out" file="FeatureFinderMultiplex_9_output.featureXML" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <output name="out_multiplets" file="FeatureFinderMultiplex_9_output.consensusXML" compare="sim_size" delta="5700" ftype="consensusxml"/>
+      <section name="algorithm">
+        <param name="labels" value="[0][6.03705]"/>
+        <param name="charge" value="2:8"/>
+        <param name="isotopes_per_peptide" value="3:8"/>
+        <param name="rt_typical" value="40.0"/>
+        <param name="rt_band" value="0.0"/>
+        <param name="rt_min" value="4.0"/>
+        <param name="mz_tolerance" value="10.0"/>
+        <param name="mz_unit" value="ppm"/>
+        <param name="intensity_cutoff" value="1000.0"/>
+        <param name="peptide_similarity" value="0.5"/>
+        <param name="averagine_similarity" value="0.4"/>
+        <param name="averagine_similarity_scaling" value="0.95"/>
+        <param name="missed_cleavages" value="0"/>
+        <param name="spectrum_type" value="centroid"/>
+        <param name="averagine_type" value="peptide"/>
+        <param name="knock_out" value="false"/>
+      </section>
+      <section name="labels">
+        <param name="Arg6" value="6.0201290268"/>
+        <param name="Arg10" value="10.0082686"/>
+        <param name="Lys4" value="4.0251069836"/>
+        <param name="Lys6" value="6.0201290268"/>
+        <param name="Lys8" value="8.0141988132"/>
+        <param name="Leu3" value="3.01883"/>
+        <param name="Dimethyl0" value="28.0313"/>
+        <param name="Dimethyl4" value="32.056407"/>
+        <param name="Dimethyl6" value="34.063117"/>
+        <param name="Dimethyl8" value="36.07567"/>
+        <param name="ICPL0" value="105.021464"/>
+        <param name="ICPL4" value="109.046571"/>
+        <param name="ICPL6" value="111.041593"/>
+        <param name="ICPL10" value="115.0667"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG,out_FLAG,out_multiplets_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="3">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureFinderMultiplex_10_input.mzML"/>
+      <output name="out" file="FeatureFinderMultiplex_10_output.featureXML" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <output name="out_multiplets" file="FeatureFinderMultiplex_10_output.consensusXML" compare="sim_size" delta="5700" ftype="consensusxml"/>
+      <section name="algorithm">
+        <param name="labels" value="[Dimethyl0][Dimethyl6]"/>
+        <param name="charge" value="1:7"/>
+        <param name="isotopes_per_peptide" value="3:6"/>
+        <param name="rt_typical" value="50.0"/>
+        <param name="rt_band" value="5.0"/>
+        <param name="rt_min" value="8.0"/>
+        <param name="mz_tolerance" value="6.0"/>
+        <param name="mz_unit" value="ppm"/>
+        <param name="intensity_cutoff" value="10.0"/>
+        <param name="peptide_similarity" value="0.4"/>
+        <param name="averagine_similarity" value="0.5"/>
+        <param name="averagine_similarity_scaling" value="0.95"/>
+        <param name="missed_cleavages" value="3"/>
+        <param name="spectrum_type" value="profile"/>
+        <param name="averagine_type" value="peptide"/>
+        <param name="knock_out" value="true"/>
+      </section>
+      <section name="labels">
+        <param name="Arg6" value="6.0201290268"/>
+        <param name="Arg10" value="10.0082686"/>
+        <param name="Lys4" value="4.0251069836"/>
+        <param name="Lys6" value="6.0201290268"/>
+        <param name="Lys8" value="8.0141988132"/>
+        <param name="Leu3" value="3.01883"/>
+        <param name="Dimethyl0" value="28.0313"/>
+        <param name="Dimethyl4" value="32.056407"/>
+        <param name="Dimethyl6" value="34.063117"/>
+        <param name="Dimethyl8" value="36.07567"/>
+        <param name="ICPL0" value="105.021464"/>
+        <param name="ICPL4" value="109.046571"/>
+        <param name="ICPL6" value="111.041593"/>
+        <param name="ICPL10" value="115.0667"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG,out_FLAG,out_multiplets_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureFinderMultiplex_11_input.mzML"/>
+      <output name="out" file="FeatureFinderMultiplex_11_output.featureXML" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <section name="algorithm">
+        <param name="labels" value="[]"/>
+        <param name="charge" value="1:4"/>
+        <param name="isotopes_per_peptide" value="3:6"/>
+        <param name="rt_typical" value="1e-05"/>
+        <param name="rt_band" value="0.0"/>
+        <param name="rt_min" value="0.0"/>
+        <param name="mz_tolerance" value="10.0"/>
+        <param name="mz_unit" value="ppm"/>
+        <param name="intensity_cutoff" value="1000.0"/>
+        <param name="peptide_similarity" value="0.5"/>
+        <param name="averagine_similarity" value="0.7"/>
+        <param name="averagine_similarity_scaling" value="0.95"/>
+        <param name="missed_cleavages" value="0"/>
+        <param name="spectrum_type" value="automatic"/>
+        <param name="averagine_type" value="peptide"/>
+        <param name="knock_out" value="false"/>
+      </section>
+      <section name="labels">
+        <param name="Arg6" value="6.0201290268"/>
+        <param name="Arg10" value="10.0082686"/>
+        <param name="Lys4" value="4.0251069836"/>
+        <param name="Lys6" value="6.0201290268"/>
+        <param name="Lys8" value="8.0141988132"/>
+        <param name="Leu3" value="3.01883"/>
+        <param name="Dimethyl0" value="28.0313"/>
+        <param name="Dimethyl4" value="32.056407"/>
+        <param name="Dimethyl6" value="34.063117"/>
+        <param name="Dimethyl8" value="36.07567"/>
+        <param name="ICPL0" value="105.021464"/>
+        <param name="ICPL4" value="109.046571"/>
+        <param name="ICPL6" value="111.041593"/>
+        <param name="ICPL10" value="115.0667"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG,out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+  </xml>
+  <xml name="autotest_FeatureFinderSuperHirn">
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureFinderSuperHirn_input_1.mzML"/>
+      <output name="out" file="FeatureFinderSuperHirn_1_output.featureXML" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <section name="algorithm">
+        <section name="centroiding">
+          <param name="active" value="false"/>
+          <param name="window_width" value="5"/>
+          <param name="absolute_isotope_mass_precision" value="0.01"/>
+          <param name="relative_isotope_mass_precision" value="10.0"/>
+          <param name="minimal_peak_height" value="0.0"/>
+          <param name="min_ms_signal_intensity" value="50.0"/>
+        </section>
+        <section name="ms1">
+          <param name="precursor_detection_scan_levels" value="1"/>
+          <param name="max_inter_scan_distance" value="0"/>
+          <param name="tr_resolution" value="0.01"/>
+          <param name="intensity_threshold" value="1000.0"/>
+          <param name="max_inter_scan_rt_distance" value="0.1"/>
+          <param name="min_nb_cluster_members" value="4"/>
+          <param name="detectable_isotope_factor" value="0.05"/>
+          <param name="intensity_cv" value="0.9"/>
+          <param name="retention_time_tolerance" value="0.5"/>
+          <param name="mz_tolerance" value="0.0"/>
+        </section>
+        <section name="ms1_feature_merger">
+          <param name="active" value="true"/>
+          <param name="tr_resolution" value="0.01"/>
+          <param name="initial_apex_tr_tolerance" value="5.0"/>
+          <param name="feature_merging_tr_tolerance" value="1.0"/>
+          <param name="intensity_variation_percentage" value="25.0"/>
+          <param name="ppm_tolerance_for_mz_clustering" value="10.0"/>
+        </section>
+        <section name="ms1_feature_selection_options">
+          <param name="start_elution_window" value="0.0"/>
+          <param name="end_elution_window" value="180.0"/>
+          <param name="mz_range_min" value="0.0"/>
+          <param name="mz_range_max" value="2000.0"/>
+          <param name="chrg_range_min" value="1"/>
+          <param name="chrg_range_max" value="5"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureFinderSuperHirn_input_2.mzML"/>
+      <output name="out" file="FeatureFinderSuperHirn_2_output.featureXML" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <section name="algorithm">
+        <section name="centroiding">
+          <param name="active" value="true"/>
+          <param name="window_width" value="5"/>
+          <param name="absolute_isotope_mass_precision" value="0.01"/>
+          <param name="relative_isotope_mass_precision" value="10.0"/>
+          <param name="minimal_peak_height" value="0.0"/>
+          <param name="min_ms_signal_intensity" value="50.0"/>
+        </section>
+        <section name="ms1">
+          <param name="precursor_detection_scan_levels" value="1"/>
+          <param name="max_inter_scan_distance" value="0"/>
+          <param name="tr_resolution" value="0.01"/>
+          <param name="intensity_threshold" value="1000.0"/>
+          <param name="max_inter_scan_rt_distance" value="0.1"/>
+          <param name="min_nb_cluster_members" value="4"/>
+          <param name="detectable_isotope_factor" value="0.05"/>
+          <param name="intensity_cv" value="0.9"/>
+          <param name="retention_time_tolerance" value="0.5"/>
+          <param name="mz_tolerance" value="0.0"/>
+        </section>
+        <section name="ms1_feature_merger">
+          <param name="active" value="true"/>
+          <param name="tr_resolution" value="0.01"/>
+          <param name="initial_apex_tr_tolerance" value="5.0"/>
+          <param name="feature_merging_tr_tolerance" value="1.0"/>
+          <param name="intensity_variation_percentage" value="25.0"/>
+          <param name="ppm_tolerance_for_mz_clustering" value="10.0"/>
+        </section>
+        <section name="ms1_feature_selection_options">
+          <param name="start_elution_window" value="0.0"/>
+          <param name="end_elution_window" value="180.0"/>
+          <param name="mz_range_min" value="0.0"/>
+          <param name="mz_range_max" value="2000.0"/>
+          <param name="chrg_range_min" value="1"/>
+          <param name="chrg_range_max" value="5"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+  </xml>
+  <xml name="autotest_FeatureLinkerLabeled">
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureLinkerLabeled_1_input.featureXML"/>
+      <output name="out" file="FeatureLinkerLabeled_1_output.consensusXML" compare="sim_size" delta="5700" ftype="consensusxml"/>
+      <section name="algorithm">
+        <param name="rt_estimate" value="false"/>
+        <param name="rt_pair_dist" value="-1.0"/>
+        <param name="rt_dev_low" value="0.4"/>
+        <param name="rt_dev_high" value="0.4"/>
+        <param name="mz_pair_dists" value="8.0"/>
+        <param name="mz_dev" value="0.1"/>
+        <param name="mrm" value="false"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureLinkerLabeled_2_input.featureXML"/>
+      <output name="out" file="FeatureLinkerLabeled_2_output.consensusXML" compare="sim_size" delta="5700" ftype="consensusxml"/>
+      <section name="algorithm">
+        <param name="rt_estimate" value="true"/>
+        <param name="rt_pair_dist" value="-121.0382"/>
+        <param name="rt_dev_low" value="123.3965"/>
+        <param name="rt_dev_high" value="123.3965"/>
+        <param name="mz_pair_dists" value="4.0"/>
+        <param name="mz_dev" value="0.1"/>
+        <param name="mrm" value="false"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+  </xml>
+  <xml name="autotest_FeatureLinkerUnlabeledKD">
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureLinkerUnlabeled_1_input1.featureXML,FeatureLinkerUnlabeled_1_input2.featureXML,FeatureLinkerUnlabeled_1_input3.featureXML"/>
+      <output name="out" file="FeatureLinkerUnlabeledKD_1_output.consensusXML" compare="sim_size" delta="5700" ftype="consensusxml"/>
+      <param name="keep_subelements" value="false"/>
+      <section name="algorithm">
+        <param name="mz_unit" value="Da"/>
+        <param name="nr_partitions" value="1"/>
+        <section name="warp">
+          <param name="enabled" value="false"/>
+          <param name="rt_tol" value="100.0"/>
+          <param name="mz_tol" value="0.3"/>
+          <param name="max_pairwise_log_fc" value="0.5"/>
+          <param name="min_rel_cc_size" value="0.5"/>
+          <param name="max_nr_conflicts" value="0"/>
+        </section>
+        <section name="link">
+          <param name="rt_tol" value="100.0"/>
+          <param name="mz_tol" value="0.3"/>
+          <param name="charge_merging" value="With_charge_zero"/>
+          <param name="adduct_merging" value="Any"/>
+        </section>
+        <section name="distance_RT">
+          <param name="exponent" value="1.0"/>
+          <param name="weight" value="1.0"/>
+        </section>
+        <section name="distance_MZ">
+          <param name="exponent" value="2.0"/>
+          <param name="weight" value="1.0"/>
+        </section>
+        <section name="distance_intensity">
+          <param name="exponent" value="1.0"/>
+          <param name="weight" value="1.0"/>
+          <param name="log_transform" value="enabled"/>
+        </section>
+        <section name="LOWESS">
+          <param name="span" value="0.666666666666667"/>
+          <param name="num_iterations" value="3"/>
+          <param name="delta" value="-1.0"/>
+          <param name="interpolation_type" value="cspline"/>
+          <param name="extrapolation_type" value="four-point-linear"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureLinkerUnlabeledKD_1_output.consensusXML,FeatureLinkerUnlabeledKD_1_output_2.consensusXML"/>
+      <output name="out" file="FeatureLinkerUnlabeledKD_2_output.consensusXML" compare="sim_size" delta="5700" ftype="consensusxml"/>
+      <param name="keep_subelements" value="true"/>
+      <section name="algorithm">
+        <param name="mz_unit" value="Da"/>
+        <param name="nr_partitions" value="99999"/>
+        <section name="warp">
+          <param name="enabled" value="false"/>
+          <param name="rt_tol" value="100.0"/>
+          <param name="mz_tol" value="0.3"/>
+          <param name="max_pairwise_log_fc" value="0.5"/>
+          <param name="min_rel_cc_size" value="0.5"/>
+          <param name="max_nr_conflicts" value="0"/>
+        </section>
+        <section name="link">
+          <param name="rt_tol" value="100.0"/>
+          <param name="mz_tol" value="0.3"/>
+          <param name="charge_merging" value="With_charge_zero"/>
+          <param name="adduct_merging" value="Any"/>
+        </section>
+        <section name="distance_RT">
+          <param name="exponent" value="1.0"/>
+          <param name="weight" value="1.0"/>
+        </section>
+        <section name="distance_MZ">
+          <param name="exponent" value="2.0"/>
+          <param name="weight" value="1.0"/>
+        </section>
+        <section name="distance_intensity">
+          <param name="exponent" value="1.0"/>
+          <param name="weight" value="1.0"/>
+          <param name="log_transform" value="enabled"/>
+        </section>
+        <section name="LOWESS">
+          <param name="span" value="0.666666666666667"/>
+          <param name="num_iterations" value="3"/>
+          <param name="delta" value="-1.0"/>
+          <param name="interpolation_type" value="cspline"/>
+          <param name="extrapolation_type" value="four-point-linear"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureLinkerUnlabeledQT_3_input1.featureXML,FeatureLinkerUnlabeledQT_3_input2.featureXML"/>
+      <output name="out" file="FeatureLinkerUnlabeledKD_3_output.consensusXML" compare="sim_size" delta="5700" ftype="consensusxml"/>
+      <param name="keep_subelements" value="false"/>
+      <section name="algorithm">
+        <param name="mz_unit" value="Da"/>
+        <param name="nr_partitions" value="100"/>
+        <section name="warp">
+          <param name="enabled" value="false"/>
+          <param name="rt_tol" value="100.0"/>
+          <param name="mz_tol" value="0.3"/>
+          <param name="max_pairwise_log_fc" value="0.5"/>
+          <param name="min_rel_cc_size" value="0.5"/>
+          <param name="max_nr_conflicts" value="0"/>
+        </section>
+        <section name="link">
+          <param name="rt_tol" value="100.0"/>
+          <param name="mz_tol" value="0.3"/>
+          <param name="charge_merging" value="With_charge_zero"/>
+          <param name="adduct_merging" value="Any"/>
+        </section>
+        <section name="distance_RT">
+          <param name="exponent" value="1.0"/>
+          <param name="weight" value="1.0"/>
+        </section>
+        <section name="distance_MZ">
+          <param name="exponent" value="2.0"/>
+          <param name="weight" value="1.0"/>
+        </section>
+        <section name="distance_intensity">
+          <param name="exponent" value="1.0"/>
+          <param name="weight" value="1.0"/>
+          <param name="log_transform" value="enabled"/>
+        </section>
+        <section name="LOWESS">
+          <param name="span" value="0.666666666666667"/>
+          <param name="num_iterations" value="3"/>
+          <param name="delta" value="-1.0"/>
+          <param name="interpolation_type" value="cspline"/>
+          <param name="extrapolation_type" value="four-point-linear"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureLinkerUnlabeledKD_dc_input1.featureXML,FeatureLinkerUnlabeledKD_dc_input2.featureXML,FeatureLinkerUnlabeledKD_dc_input3.featureXML,FeatureLinkerUnlabeledKD_dc_input1_2.featureXML,FeatureLinkerUnlabeledKD_dc_input2_2.featureXML"/>
+      <output name="out" file="FeatureLinkerUnlabeledKD_4_output.consensusXML" compare="sim_size" delta="5700" ftype="consensusxml"/>
+      <param name="keep_subelements" value="false"/>
+      <section name="algorithm">
+        <param name="mz_unit" value="ppm"/>
+        <param name="nr_partitions" value="100"/>
+        <section name="warp">
+          <param name="enabled" value="true"/>
+          <param name="rt_tol" value="100.0"/>
+          <param name="mz_tol" value="5.0"/>
+          <param name="max_pairwise_log_fc" value="0.5"/>
+          <param name="min_rel_cc_size" value="0.5"/>
+          <param name="max_nr_conflicts" value="0"/>
+        </section>
+        <section name="link">
+          <param name="rt_tol" value="30.0"/>
+          <param name="mz_tol" value="10.0"/>
+          <param name="charge_merging" value="Identical"/>
+          <param name="adduct_merging" value="Any"/>
+        </section>
+        <section name="distance_RT">
+          <param name="exponent" value="1.0"/>
+          <param name="weight" value="1.0"/>
+        </section>
+        <section name="distance_MZ">
+          <param name="exponent" value="2.0"/>
+          <param name="weight" value="1.0"/>
+        </section>
+        <section name="distance_intensity">
+          <param name="exponent" value="1.0"/>
+          <param name="weight" value="1.0"/>
+          <param name="log_transform" value="enabled"/>
+        </section>
+        <section name="LOWESS">
+          <param name="span" value="0.666666666666667"/>
+          <param name="num_iterations" value="3"/>
+          <param name="delta" value="-1.0"/>
+          <param name="interpolation_type" value="cspline"/>
+          <param name="extrapolation_type" value="four-point-linear"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureLinkerUnlabeledKD_dc_input1.featureXML,FeatureLinkerUnlabeledKD_dc_input2.featureXML,FeatureLinkerUnlabeledKD_dc_input3.featureXML,FeatureLinkerUnlabeledKD_dc_input1_2.featureXML,FeatureLinkerUnlabeledKD_dc_input2_2.featureXML"/>
+      <output name="out" file="FeatureLinkerUnlabeledKD_5_output.consensusXML" compare="sim_size" delta="5700" ftype="consensusxml"/>
+      <param name="keep_subelements" value="false"/>
+      <section name="algorithm">
+        <param name="mz_unit" value="ppm"/>
+        <param name="nr_partitions" value="100"/>
+        <section name="warp">
+          <param name="enabled" value="true"/>
+          <param name="rt_tol" value="100.0"/>
+          <param name="mz_tol" value="5.0"/>
+          <param name="max_pairwise_log_fc" value="0.5"/>
+          <param name="min_rel_cc_size" value="0.5"/>
+          <param name="max_nr_conflicts" value="0"/>
+        </section>
+        <section name="link">
+          <param name="rt_tol" value="30.0"/>
+          <param name="mz_tol" value="10.0"/>
+          <param name="charge_merging" value="With_charge_zero"/>
+          <param name="adduct_merging" value="Any"/>
+        </section>
+        <section name="distance_RT">
+          <param name="exponent" value="1.0"/>
+          <param name="weight" value="1.0"/>
+        </section>
+        <section name="distance_MZ">
+          <param name="exponent" value="2.0"/>
+          <param name="weight" value="1.0"/>
+        </section>
+        <section name="distance_intensity">
+          <param name="exponent" value="1.0"/>
+          <param name="weight" value="1.0"/>
+          <param name="log_transform" value="enabled"/>
+        </section>
+        <section name="LOWESS">
+          <param name="span" value="0.666666666666667"/>
+          <param name="num_iterations" value="3"/>
+          <param name="delta" value="-1.0"/>
+          <param name="interpolation_type" value="cspline"/>
+          <param name="extrapolation_type" value="four-point-linear"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureLinkerUnlabeledKD_dc_input1.featureXML,FeatureLinkerUnlabeledKD_dc_input2.featureXML,FeatureLinkerUnlabeledKD_dc_input3.featureXML,FeatureLinkerUnlabeledKD_dc_input1_2.featureXML,FeatureLinkerUnlabeledKD_dc_input2_2.featureXML"/>
+      <output name="out" file="FeatureLinkerUnlabeledKD_6_output.consensusXML" compare="sim_size" delta="5700" ftype="consensusxml"/>
+      <param name="keep_subelements" value="false"/>
+      <section name="algorithm">
+        <param name="mz_unit" value="ppm"/>
+        <param name="nr_partitions" value="100"/>
+        <section name="warp">
+          <param name="enabled" value="true"/>
+          <param name="rt_tol" value="100.0"/>
+          <param name="mz_tol" value="5.0"/>
+          <param name="max_pairwise_log_fc" value="0.5"/>
+          <param name="min_rel_cc_size" value="0.5"/>
+          <param name="max_nr_conflicts" value="0"/>
+        </section>
+        <section name="link">
+          <param name="rt_tol" value="30.0"/>
+          <param name="mz_tol" value="10.0"/>
+          <param name="charge_merging" value="Any"/>
+          <param name="adduct_merging" value="With_unknown_adducts"/>
+        </section>
+        <section name="distance_RT">
+          <param name="exponent" value="1.0"/>
+          <param name="weight" value="1.0"/>
+        </section>
+        <section name="distance_MZ">
+          <param name="exponent" value="2.0"/>
+          <param name="weight" value="1.0"/>
+        </section>
+        <section name="distance_intensity">
+          <param name="exponent" value="1.0"/>
+          <param name="weight" value="1.0"/>
+          <param name="log_transform" value="enabled"/>
+        </section>
+        <section name="LOWESS">
+          <param name="span" value="0.666666666666667"/>
+          <param name="num_iterations" value="3"/>
+          <param name="delta" value="-1.0"/>
+          <param name="interpolation_type" value="cspline"/>
+          <param name="extrapolation_type" value="four-point-linear"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureLinkerUnlabeledKD_dc_input1.featureXML,FeatureLinkerUnlabeledKD_dc_input2.featureXML,FeatureLinkerUnlabeledKD_dc_input3.featureXML,FeatureLinkerUnlabeledKD_dc_input1_2.featureXML,FeatureLinkerUnlabeledKD_dc_input2_2.featureXML"/>
+      <output name="out" file="FeatureLinkerUnlabeledKD_7_output.consensusXML" compare="sim_size" delta="5700" ftype="consensusxml"/>
+      <param name="keep_subelements" value="false"/>
+      <section name="algorithm">
+        <param name="mz_unit" value="ppm"/>
+        <param name="nr_partitions" value="100"/>
+        <section name="warp">
+          <param name="enabled" value="true"/>
+          <param name="rt_tol" value="100.0"/>
+          <param name="mz_tol" value="5.0"/>
+          <param name="max_pairwise_log_fc" value="0.5"/>
+          <param name="min_rel_cc_size" value="0.5"/>
+          <param name="max_nr_conflicts" value="0"/>
+        </section>
+        <section name="link">
+          <param name="rt_tol" value="30.0"/>
+          <param name="mz_tol" value="10.0"/>
+          <param name="charge_merging" value="Any"/>
+          <param name="adduct_merging" value="Identical"/>
+        </section>
+        <section name="distance_RT">
+          <param name="exponent" value="1.0"/>
+          <param name="weight" value="1.0"/>
+        </section>
+        <section name="distance_MZ">
+          <param name="exponent" value="2.0"/>
+          <param name="weight" value="1.0"/>
+        </section>
+        <section name="distance_intensity">
+          <param name="exponent" value="1.0"/>
+          <param name="weight" value="1.0"/>
+          <param name="log_transform" value="enabled"/>
+        </section>
+        <section name="LOWESS">
+          <param name="span" value="0.666666666666667"/>
+          <param name="num_iterations" value="3"/>
+          <param name="delta" value="-1.0"/>
+          <param name="interpolation_type" value="cspline"/>
+          <param name="extrapolation_type" value="four-point-linear"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+  </xml>
+  <xml name="autotest_FeatureLinkerUnlabeledQT">
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureLinkerUnlabeled_1_input1.featureXML,FeatureLinkerUnlabeled_1_input2.featureXML,FeatureLinkerUnlabeled_1_input3.featureXML"/>
+      <output name="out" file="FeatureLinkerUnlabeledQT_1_output.consensusXML" compare="sim_size" delta="5700" ftype="consensusxml"/>
+      <param name="keep_subelements" value="false"/>
+      <section name="algorithm">
+        <param name="use_identifications" value="false"/>
+        <param name="nr_partitions" value="100"/>
+        <param name="ignore_charge" value="false"/>
+        <param name="ignore_adduct" value="true"/>
+        <section name="distance_RT">
+          <param name="max_difference" value="100.0"/>
+          <param name="exponent" value="1.0"/>
+          <param name="weight" value="1.0"/>
+        </section>
+        <section name="distance_MZ">
+          <param name="max_difference" value="0.3"/>
+          <param name="unit" value="Da"/>
+          <param name="exponent" value="2.0"/>
+          <param name="weight" value="1.0"/>
+        </section>
+        <section name="distance_intensity">
+          <param name="exponent" value="1.0"/>
+          <param name="weight" value="0.0"/>
+          <param name="log_transform" value="disabled"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureLinkerUnlabeledQT_1_output.consensusXML,FeatureLinkerUnlabeledQT_1_output_2.consensusXML"/>
+      <output name="out" file="FeatureLinkerUnlabeledQT_2_output.consensusXML" compare="sim_size" delta="5700" ftype="consensusxml"/>
+      <param name="keep_subelements" value="true"/>
+      <section name="algorithm">
+        <param name="use_identifications" value="false"/>
+        <param name="nr_partitions" value="100"/>
+        <param name="ignore_charge" value="false"/>
+        <param name="ignore_adduct" value="true"/>
+        <section name="distance_RT">
+          <param name="max_difference" value="100.0"/>
+          <param name="exponent" value="1.0"/>
+          <param name="weight" value="1.0"/>
+        </section>
+        <section name="distance_MZ">
+          <param name="max_difference" value="0.3"/>
+          <param name="unit" value="Da"/>
+          <param name="exponent" value="2.0"/>
+          <param name="weight" value="1.0"/>
+        </section>
+        <section name="distance_intensity">
+          <param name="exponent" value="1.0"/>
+          <param name="weight" value="0.0"/>
+          <param name="log_transform" value="disabled"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureLinkerUnlabeledQT_3_input1.featureXML,FeatureLinkerUnlabeledQT_3_input2.featureXML"/>
+      <output name="out" file="FeatureLinkerUnlabeledQT_3_output.consensusXML" compare="sim_size" delta="5700" ftype="consensusxml"/>
+      <param name="keep_subelements" value="false"/>
+      <section name="algorithm">
+        <param name="use_identifications" value="false"/>
+        <param name="nr_partitions" value="99999"/>
+        <param name="ignore_charge" value="false"/>
+        <param name="ignore_adduct" value="true"/>
+        <section name="distance_RT">
+          <param name="max_difference" value="100.0"/>
+          <param name="exponent" value="1.0"/>
+          <param name="weight" value="1.0"/>
+        </section>
+        <section name="distance_MZ">
+          <param name="max_difference" value="0.3"/>
+          <param name="unit" value="Da"/>
+          <param name="exponent" value="2.0"/>
+          <param name="weight" value="1.0"/>
+        </section>
+        <section name="distance_intensity">
+          <param name="exponent" value="1.0"/>
+          <param name="weight" value="0.0"/>
+          <param name="log_transform" value="disabled"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureLinkerUnlabeled_1_input1.featureXML,FeatureLinkerUnlabeled_1_input2.featureXML,FeatureLinkerUnlabeled_1_input3.featureXML"/>
+      <output name="out" file="FeatureLinkerUnlabeledQT_4_output.consensusXML" compare="sim_size" delta="5700" ftype="consensusxml"/>
+      <param name="keep_subelements" value="false"/>
+      <section name="algorithm">
+        <param name="use_identifications" value="true"/>
+        <param name="nr_partitions" value="100"/>
+        <param name="ignore_charge" value="false"/>
+        <param name="ignore_adduct" value="true"/>
+        <section name="distance_RT">
+          <param name="max_difference" value="100.0"/>
+          <param name="exponent" value="1.0"/>
+          <param name="weight" value="1.0"/>
+        </section>
+        <section name="distance_MZ">
+          <param name="max_difference" value="0.3"/>
+          <param name="unit" value="Da"/>
+          <param name="exponent" value="2.0"/>
+          <param name="weight" value="1.0"/>
+        </section>
+        <section name="distance_intensity">
+          <param name="exponent" value="1.0"/>
+          <param name="weight" value="0.0"/>
+          <param name="log_transform" value="disabled"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureLinkerUnlabeledQT_5_input1.featureXML,FeatureLinkerUnlabeledQT_5_input2.featureXML,FeatureLinkerUnlabeledQT_5_input3.featureXML"/>
+      <output name="out" file="FeatureLinkerUnlabeledQT_5_output.consensusXML" compare="sim_size" delta="5700" ftype="consensusxml"/>
+      <param name="keep_subelements" value="false"/>
+      <section name="algorithm">
+        <param name="use_identifications" value="false"/>
+        <param name="nr_partitions" value="100"/>
+        <param name="ignore_charge" value="false"/>
+        <param name="ignore_adduct" value="true"/>
+        <section name="distance_RT">
+          <param name="max_difference" value="200.0"/>
+          <param name="exponent" value="1.0"/>
+          <param name="weight" value="1.0"/>
+        </section>
+        <section name="distance_MZ">
+          <param name="max_difference" value="0.3"/>
+          <param name="unit" value="Da"/>
+          <param name="exponent" value="2.0"/>
+          <param name="weight" value="1.0"/>
+        </section>
+        <section name="distance_intensity">
+          <param name="exponent" value="1.0"/>
+          <param name="weight" value="0.0"/>
+          <param name="log_transform" value="disabled"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureLinkerUnlabeledQT_5_input1.featureXML,FeatureLinkerUnlabeledQT_5_input2.featureXML,FeatureLinkerUnlabeledQT_5_input3.featureXML"/>
+      <output name="out" file="FeatureLinkerUnlabeledQT_6_output.consensusXML" compare="sim_size" delta="5700" ftype="consensusxml"/>
+      <param name="keep_subelements" value="false"/>
+      <section name="algorithm">
+        <param name="use_identifications" value="true"/>
+        <param name="nr_partitions" value="100"/>
+        <param name="ignore_charge" value="false"/>
+        <param name="ignore_adduct" value="true"/>
+        <section name="distance_RT">
+          <param name="max_difference" value="200.0"/>
+          <param name="exponent" value="1.0"/>
+          <param name="weight" value="1.0"/>
+        </section>
+        <section name="distance_MZ">
+          <param name="max_difference" value="0.3"/>
+          <param name="unit" value="Da"/>
+          <param name="exponent" value="2.0"/>
+          <param name="weight" value="1.0"/>
+        </section>
+        <section name="distance_intensity">
+          <param name="exponent" value="1.0"/>
+          <param name="weight" value="0.0"/>
+          <param name="log_transform" value="disabled"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+  </xml>
+  <xml name="autotest_FeatureLinkerUnlabeled">
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureLinkerUnlabeled_1_input1.featureXML,FeatureLinkerUnlabeled_1_input2.featureXML,FeatureLinkerUnlabeled_1_input3.featureXML"/>
+      <output name="out" file="FeatureLinkerUnlabeled_1_output.consensusXML" compare="sim_size" delta="5700" ftype="consensusxml"/>
+      <param name="keep_subelements" value="false"/>
+      <section name="algorithm">
+        <param name="second_nearest_gap" value="2.0"/>
+        <param name="use_identifications" value="false"/>
+        <param name="ignore_charge" value="true"/>
+        <param name="ignore_adduct" value="true"/>
+        <section name="distance_RT">
+          <param name="max_difference" value="200.0"/>
+          <param name="exponent" value="1.0"/>
+          <param name="weight" value="1.0"/>
+        </section>
+        <section name="distance_MZ">
+          <param name="max_difference" value="0.5"/>
+          <param name="unit" value="Da"/>
+          <param name="exponent" value="1.0"/>
+          <param name="weight" value="1.0"/>
+        </section>
+        <section name="distance_intensity">
+          <param name="exponent" value="1.0"/>
+          <param name="weight" value="0.0"/>
+          <param name="log_transform" value="disabled"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureLinkerUnlabeled_2_input1.featureXML,FeatureLinkerUnlabeled_2_input2.featureXML,FeatureLinkerUnlabeled_2_input3.featureXML"/>
+      <output name="out" file="FeatureLinkerUnlabeled_2_output.consensusXML" compare="sim_size" delta="5700" ftype="consensusxml"/>
+      <param name="keep_subelements" value="false"/>
+      <section name="algorithm">
+        <param name="second_nearest_gap" value="2.0"/>
+        <param name="use_identifications" value="false"/>
+        <param name="ignore_charge" value="false"/>
+        <param name="ignore_adduct" value="true"/>
+        <section name="distance_RT">
+          <param name="max_difference" value="100.0"/>
+          <param name="exponent" value="1.0"/>
+          <param name="weight" value="1.0"/>
+        </section>
+        <section name="distance_MZ">
+          <param name="max_difference" value="0.3"/>
+          <param name="unit" value="Da"/>
+          <param name="exponent" value="2.0"/>
+          <param name="weight" value="1.0"/>
+        </section>
+        <section name="distance_intensity">
+          <param name="exponent" value="1.0"/>
+          <param name="weight" value="0.5"/>
+          <param name="log_transform" value="disabled"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureLinkerUnlabeled_3_input1.featureXML,FeatureLinkerUnlabeled_3_input2.featureXML"/>
+      <output name="out" file="FeatureLinkerUnlabeled_3_output.consensusXML" compare="sim_size" delta="5700" ftype="consensusxml"/>
+      <param name="keep_subelements" value="false"/>
+      <section name="algorithm">
+        <param name="second_nearest_gap" value="1.5"/>
+        <param name="use_identifications" value="false"/>
+        <param name="ignore_charge" value="true"/>
+        <param name="ignore_adduct" value="true"/>
+        <section name="distance_RT">
+          <param name="max_difference" value="30.0"/>
+          <param name="exponent" value="1.0"/>
+          <param name="weight" value="1.0"/>
+        </section>
+        <section name="distance_MZ">
+          <param name="max_difference" value="0.3"/>
+          <param name="unit" value="Da"/>
+          <param name="exponent" value="2.0"/>
+          <param name="weight" value="1.0"/>
+        </section>
+        <section name="distance_intensity">
+          <param name="exponent" value="1.0"/>
+          <param name="weight" value="0.0"/>
+          <param name="log_transform" value="disabled"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FeatureLinkerUnlabeled_1_input1.featureXML,FeatureLinkerUnlabeled_1_input2.featureXML,FeatureLinkerUnlabeled_1_input3.featureXML"/>
+      <output name="out" file="FeatureLinkerUnlabeled_4_output.consensusXML" compare="sim_size" delta="5700" ftype="consensusxml"/>
+      <param name="keep_subelements" value="false"/>
+      <section name="algorithm">
+        <param name="second_nearest_gap" value="2.0"/>
+        <param name="use_identifications" value="true"/>
+        <param name="ignore_charge" value="true"/>
+        <param name="ignore_adduct" value="true"/>
+        <section name="distance_RT">
+          <param name="max_difference" value="200.0"/>
+          <param name="exponent" value="2.0"/>
+          <param name="weight" value="1.0"/>
+        </section>
+        <section name="distance_MZ">
+          <param name="max_difference" value="0.5"/>
+          <param name="unit" value="Da"/>
+          <param name="exponent" value="2.0"/>
+          <param name="weight" value="1.0"/>
+        </section>
+        <section name="distance_intensity">
+          <param name="exponent" value="1.0"/>
+          <param name="weight" value="0.0"/>
+          <param name="log_transform" value="disabled"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+  </xml>
+  <xml name="autotest_FFEval">
+</xml>
+  <xml name="autotest_FidoAdapter">
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="keep_zero_group" value="false"/>
+        <param name="accuracy" value=""/>
+        <param name="log2_states_precalc" value="0"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FidoAdapter_1_input.idXML"/>
+      <output name="out" file="FidoAdapter_1_output.idXML" compare="sim_size" delta="5700" ftype="idxml"/>
+      <param name="separate_runs" value="false"/>
+      <param name="greedy_group_resolution" value="false"/>
+      <param name="no_cleanup" value="false"/>
+      <param name="all_PSMs" value="false"/>
+      <param name="group_level" value="false"/>
+      <param name="log2_states" value="0"/>
+      <section name="prob">
+        <param name="protein" value="0.0"/>
+        <param name="peptide" value="0.0"/>
+        <param name="spurious" value="0.0"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="keep_zero_group" value="false"/>
+        <param name="accuracy" value=""/>
+        <param name="log2_states_precalc" value="0"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FidoAdapter_1_input.idXML"/>
+      <output name="out" file="FidoAdapter_2_output.idXML" compare="sim_size" delta="5700" ftype="idxml"/>
+      <param name="separate_runs" value="true"/>
+      <param name="greedy_group_resolution" value="false"/>
+      <param name="no_cleanup" value="false"/>
+      <param name="all_PSMs" value="false"/>
+      <param name="group_level" value="false"/>
+      <param name="log2_states" value="0"/>
+      <section name="prob">
+        <param name="protein" value="0.0"/>
+        <param name="peptide" value="0.0"/>
+        <param name="spurious" value="0.0"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="keep_zero_group" value="false"/>
+        <param name="accuracy" value=""/>
+        <param name="log2_states_precalc" value="0"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FidoAdapter_1_input.idXML"/>
+      <output name="out" file="FidoAdapter_3_output.idXML" compare="sim_size" delta="5700" ftype="idxml"/>
+      <param name="separate_runs" value="false"/>
+      <param name="greedy_group_resolution" value="false"/>
+      <param name="no_cleanup" value="false"/>
+      <param name="all_PSMs" value="true"/>
+      <param name="group_level" value="true"/>
+      <param name="log2_states" value="0"/>
+      <section name="prob">
+        <param name="protein" value="0.0"/>
+        <param name="peptide" value="0.0"/>
+        <param name="spurious" value="0.0"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="keep_zero_group" value="false"/>
+        <param name="accuracy" value=""/>
+        <param name="log2_states_precalc" value="0"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FidoAdapter_4_input.idXML"/>
+      <output name="out" file="FidoAdapter_4_output.idXML" compare="sim_size" delta="5700" ftype="idxml"/>
+      <param name="separate_runs" value="false"/>
+      <param name="greedy_group_resolution" value="false"/>
+      <param name="no_cleanup" value="false"/>
+      <param name="all_PSMs" value="false"/>
+      <param name="group_level" value="false"/>
+      <param name="log2_states" value="0"/>
+      <section name="prob">
+        <param name="protein" value="0.0"/>
+        <param name="peptide" value="0.0"/>
+        <param name="spurious" value="0.0"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="keep_zero_group" value="false"/>
+        <param name="accuracy" value=""/>
+        <param name="log2_states_precalc" value="0"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FidoAdapter_5_input.idXML"/>
+      <output name="out" file="FidoAdapter_5_output.idXML" compare="sim_size" delta="5700" ftype="idxml"/>
+      <param name="separate_runs" value="false"/>
+      <param name="greedy_group_resolution" value="true"/>
+      <param name="no_cleanup" value="false"/>
+      <param name="all_PSMs" value="false"/>
+      <param name="group_level" value="false"/>
+      <param name="log2_states" value="0"/>
+      <section name="prob">
+        <param name="protein" value="0.0"/>
+        <param name="peptide" value="0.0"/>
+        <param name="spurious" value="0.0"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="keep_zero_group" value="false"/>
+        <param name="accuracy" value=""/>
+        <param name="log2_states_precalc" value="0"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FidoAdapter_1_input.idXML"/>
+      <output name="out" file="FidoAdapter_1_output.idXML" compare="sim_size" delta="5700" ftype="idxml"/>
+      <param name="separate_runs" value="false"/>
+      <param name="greedy_group_resolution" value="false"/>
+      <param name="no_cleanup" value="false"/>
+      <param name="all_PSMs" value="false"/>
+      <param name="group_level" value="false"/>
+      <param name="log2_states" value="0"/>
+      <section name="prob">
+        <param name="protein" value="0.9"/>
+        <param name="peptide" value="0.01"/>
+        <param name="spurious" value="0.0"/>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+  </xml>
+  <xml name="autotest_FileConverter">
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="UID_postprocessing" value="ensure"/>
+        <param name="TIC_DTA2D" value="false"/>
+        <param name="MGF_compact" value="false"/>
+        <param name="force_MaxQuant_compatibility" value="false"/>
+        <param name="convert_to_chromatograms" value="false"/>
+        <param name="force_TPP_compatibility" value="false"/>
+        <param name="change_im_format" value="none"/>
+        <param name="write_scan_index" value="true"/>
+        <param name="lossy_compression" value="false"/>
+        <param name="lossy_mass_accuracy" value="-1.0"/>
+        <param name="process_lowmemory" value="false"/>
+        <param name="no_peak_picking" value="false"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileConverter_1_input.mzData"/>
+      <output name="out" file="FileConverter_1_output.mzML" compare="sim_size" delta="5700" ftype="mzml"/>
+      <param name="out_type" value="mzML"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="UID_postprocessing" value="ensure"/>
+        <param name="TIC_DTA2D" value="false"/>
+        <param name="MGF_compact" value="false"/>
+        <param name="force_MaxQuant_compatibility" value="false"/>
+        <param name="convert_to_chromatograms" value="false"/>
+        <param name="force_TPP_compatibility" value="false"/>
+        <param name="change_im_format" value="none"/>
+        <param name="write_scan_index" value="true"/>
+        <param name="lossy_compression" value="false"/>
+        <param name="lossy_mass_accuracy" value="-1.0"/>
+        <param name="process_lowmemory" value="false"/>
+        <param name="no_peak_picking" value="false"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileConverter_2_input.someInputDTA2D"/>
+      <output name="out" file="FileConverter_2_output.mzML" compare="sim_size" delta="5700" ftype="mzml"/>
+      <param name="out_type" value="mzML"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="UID_postprocessing" value="ensure"/>
+        <param name="TIC_DTA2D" value="false"/>
+        <param name="MGF_compact" value="false"/>
+        <param name="force_MaxQuant_compatibility" value="false"/>
+        <param name="convert_to_chromatograms" value="false"/>
+        <param name="force_TPP_compatibility" value="false"/>
+        <param name="change_im_format" value="none"/>
+        <param name="write_scan_index" value="true"/>
+        <param name="lossy_compression" value="false"/>
+        <param name="lossy_mass_accuracy" value="-1.0"/>
+        <param name="process_lowmemory" value="false"/>
+        <param name="no_peak_picking" value="false"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileConverter_3_input.featureXML"/>
+      <output name="out" file="FileConverter_3_output.mzML" compare="sim_size" delta="5700" ftype="mzml"/>
+      <param name="out_type" value="mzML"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="UID_postprocessing" value="ensure"/>
+        <param name="TIC_DTA2D" value="false"/>
+        <param name="MGF_compact" value="false"/>
+        <param name="force_MaxQuant_compatibility" value="false"/>
+        <param name="convert_to_chromatograms" value="false"/>
+        <param name="force_TPP_compatibility" value="false"/>
+        <param name="change_im_format" value="none"/>
+        <param name="write_scan_index" value="true"/>
+        <param name="lossy_compression" value="false"/>
+        <param name="lossy_mass_accuracy" value="-1.0"/>
+        <param name="process_lowmemory" value="false"/>
+        <param name="no_peak_picking" value="false"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileConverter_4_input.mzXML"/>
+      <output name="out" file="FileConverter_4_output.mzML" compare="sim_size" delta="5700" ftype="mzml"/>
+      <param name="out_type" value="mzML"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="UID_postprocessing" value="ensure"/>
+        <param name="TIC_DTA2D" value="false"/>
+        <param name="MGF_compact" value="false"/>
+        <param name="force_MaxQuant_compatibility" value="false"/>
+        <param name="convert_to_chromatograms" value="false"/>
+        <param name="force_TPP_compatibility" value="false"/>
+        <param name="change_im_format" value="none"/>
+        <param name="write_scan_index" value="true"/>
+        <param name="lossy_compression" value="false"/>
+        <param name="lossy_mass_accuracy" value="-1.0"/>
+        <param name="process_lowmemory" value="false"/>
+        <param name="no_peak_picking" value="false"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileConverter_5_input.mzML"/>
+      <output name="out" file="FileConverter_5_output.mzXML" compare="sim_size" delta="5700" ftype="mzxml"/>
+      <param name="out_type" value="mzXML"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="UID_postprocessing" value="ensure"/>
+        <param name="TIC_DTA2D" value="false"/>
+        <param name="MGF_compact" value="false"/>
+        <param name="force_MaxQuant_compatibility" value="false"/>
+        <param name="convert_to_chromatograms" value="false"/>
+        <param name="force_TPP_compatibility" value="false"/>
+        <param name="change_im_format" value="none"/>
+        <param name="write_scan_index" value="true"/>
+        <param name="lossy_compression" value="false"/>
+        <param name="lossy_mass_accuracy" value="-1.0"/>
+        <param name="process_lowmemory" value="false"/>
+        <param name="no_peak_picking" value="false"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileConverter_6_input.mzML"/>
+      <output name="out" file="FileConverter_6_output.mzXML" compare="sim_size" delta="5700" ftype="mzxml"/>
+      <param name="out_type" value="mzXML"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="UID_postprocessing" value="ensure"/>
+        <param name="TIC_DTA2D" value="false"/>
+        <param name="MGF_compact" value="false"/>
+        <param name="force_MaxQuant_compatibility" value="false"/>
+        <param name="convert_to_chromatograms" value="false"/>
+        <param name="force_TPP_compatibility" value="false"/>
+        <param name="change_im_format" value="none"/>
+        <param name="write_scan_index" value="true"/>
+        <param name="lossy_compression" value="false"/>
+        <param name="lossy_mass_accuracy" value="-1.0"/>
+        <param name="process_lowmemory" value="false"/>
+        <param name="no_peak_picking" value="false"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileConverter_7_input.consensusXML"/>
+      <output name="out" file="FileConverter_7_output.featureXML" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <param name="out_type" value="featureXML"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="UID_postprocessing" value="ensure"/>
+        <param name="TIC_DTA2D" value="false"/>
+        <param name="MGF_compact" value="false"/>
+        <param name="force_MaxQuant_compatibility" value="false"/>
+        <param name="convert_to_chromatograms" value="false"/>
+        <param name="force_TPP_compatibility" value="false"/>
+        <param name="change_im_format" value="none"/>
+        <param name="write_scan_index" value="true"/>
+        <param name="lossy_compression" value="false"/>
+        <param name="lossy_mass_accuracy" value="-1.0"/>
+        <param name="process_lowmemory" value="false"/>
+        <param name="no_peak_picking" value="false"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileConverter_8_input.mzML"/>
+      <output name="out" file="FileConverter_8_output.mzData" compare="sim_size" delta="5700" ftype="mzdata"/>
+      <param name="out_type" value="mzData"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="UID_postprocessing" value="ensure"/>
+        <param name="TIC_DTA2D" value="false"/>
+        <param name="MGF_compact" value="false"/>
+        <param name="force_MaxQuant_compatibility" value="false"/>
+        <param name="convert_to_chromatograms" value="false"/>
+        <param name="force_TPP_compatibility" value="false"/>
+        <param name="change_im_format" value="none"/>
+        <param name="write_scan_index" value="true"/>
+        <param name="lossy_compression" value="false"/>
+        <param name="lossy_mass_accuracy" value="-1.0"/>
+        <param name="process_lowmemory" value="false"/>
+        <param name="no_peak_picking" value="false"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileConverter_9_input.consensusXML"/>
+      <output name="out" file="FileConverter_9_output.featureXML" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <param name="out_type" value="featureXML"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="UID_postprocessing" value="ensure"/>
+        <param name="TIC_DTA2D" value="false"/>
+        <param name="MGF_compact" value="false"/>
+        <param name="force_MaxQuant_compatibility" value="false"/>
+        <param name="convert_to_chromatograms" value="false"/>
+        <param name="force_TPP_compatibility" value="false"/>
+        <param name="change_im_format" value="none"/>
+        <param name="write_scan_index" value="true"/>
+        <param name="lossy_compression" value="false"/>
+        <param name="lossy_mass_accuracy" value="-1.0"/>
+        <param name="process_lowmemory" value="false"/>
+        <param name="no_peak_picking" value="false"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileConverter_10_input.edta" ftype="edta"/>
+      <output name="out" file="FileConverter_10_output.featureXML" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <param name="out_type" value="featureXML"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="UID_postprocessing" value="ensure"/>
+        <param name="TIC_DTA2D" value="false"/>
+        <param name="MGF_compact" value="false"/>
+        <param name="force_MaxQuant_compatibility" value="false"/>
+        <param name="convert_to_chromatograms" value="false"/>
+        <param name="force_TPP_compatibility" value="false"/>
+        <param name="change_im_format" value="none"/>
+        <param name="write_scan_index" value="true"/>
+        <param name="lossy_compression" value="false"/>
+        <param name="lossy_mass_accuracy" value="-1.0"/>
+        <param name="process_lowmemory" value="false"/>
+        <param name="no_peak_picking" value="false"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileConverter_11_input.peplist"/>
+      <output name="out" file="FileConverter_11_output.featureXML" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <param name="out_type" value="featureXML"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="UID_postprocessing" value="ensure"/>
+        <param name="TIC_DTA2D" value="false"/>
+        <param name="MGF_compact" value="false"/>
+        <param name="force_MaxQuant_compatibility" value="false"/>
+        <param name="convert_to_chromatograms" value="false"/>
+        <param name="force_TPP_compatibility" value="false"/>
+        <param name="change_im_format" value="none"/>
+        <param name="write_scan_index" value="true"/>
+        <param name="lossy_compression" value="false"/>
+        <param name="lossy_mass_accuracy" value="-1.0"/>
+        <param name="process_lowmemory" value="false"/>
+        <param name="no_peak_picking" value="false"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileConverter_12_input.peptides.tsv" ftype="tabular"/>
+      <output name="out" file="FileConverter_12_output.featureXML" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <param name="out_type" value="featureXML"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="UID_postprocessing" value="ensure"/>
+        <param name="TIC_DTA2D" value="false"/>
+        <param name="MGF_compact" value="false"/>
+        <param name="force_MaxQuant_compatibility" value="false"/>
+        <param name="convert_to_chromatograms" value="false"/>
+        <param name="force_TPP_compatibility" value="false"/>
+        <param name="change_im_format" value="none"/>
+        <param name="write_scan_index" value="true"/>
+        <param name="lossy_compression" value="false"/>
+        <param name="lossy_mass_accuracy" value="-1.0"/>
+        <param name="process_lowmemory" value="false"/>
+        <param name="no_peak_picking" value="false"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileConverter_13_input.peptides.kroenik"/>
+      <output name="out" file="FileConverter_13_output.featureXML" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <param name="out_type" value="featureXML"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="UID_postprocessing" value="ensure"/>
+        <param name="TIC_DTA2D" value="false"/>
+        <param name="MGF_compact" value="false"/>
+        <param name="force_MaxQuant_compatibility" value="false"/>
+        <param name="convert_to_chromatograms" value="false"/>
+        <param name="force_TPP_compatibility" value="false"/>
+        <param name="change_im_format" value="none"/>
+        <param name="write_scan_index" value="true"/>
+        <param name="lossy_compression" value="false"/>
+        <param name="lossy_mass_accuracy" value="-1.0"/>
+        <param name="process_lowmemory" value="false"/>
+        <param name="no_peak_picking" value="false"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileConverter_9_output.featureXML"/>
+      <output name="out" file="FileConverter_14_output.consensusXML" compare="sim_size" delta="5700" ftype="consensusxml"/>
+      <param name="out_type" value="consensusXML"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="UID_postprocessing" value="ensure"/>
+        <param name="TIC_DTA2D" value="false"/>
+        <param name="MGF_compact" value="false"/>
+        <param name="force_MaxQuant_compatibility" value="false"/>
+        <param name="convert_to_chromatograms" value="false"/>
+        <param name="force_TPP_compatibility" value="false"/>
+        <param name="change_im_format" value="none"/>
+        <param name="write_scan_index" value="true"/>
+        <param name="lossy_compression" value="false"/>
+        <param name="lossy_mass_accuracy" value="-1.0"/>
+        <param name="process_lowmemory" value="false"/>
+        <param name="no_peak_picking" value="false"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileConverter_10_input.edta" ftype="edta"/>
+      <output name="out" file="FileConverter_15_output.consensusXML" compare="sim_size" delta="5700" ftype="consensusxml"/>
+      <param name="out_type" value="consensusXML"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="UID_postprocessing" value="ensure"/>
+        <param name="TIC_DTA2D" value="false"/>
+        <param name="MGF_compact" value="false"/>
+        <param name="force_MaxQuant_compatibility" value="false"/>
+        <param name="convert_to_chromatograms" value="false"/>
+        <param name="force_TPP_compatibility" value="false"/>
+        <param name="change_im_format" value="none"/>
+        <param name="write_scan_index" value="true"/>
+        <param name="lossy_compression" value="false"/>
+        <param name="lossy_mass_accuracy" value="-1.0"/>
+        <param name="process_lowmemory" value="false"/>
+        <param name="no_peak_picking" value="false"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileConverter_16_input.edta" ftype="edta"/>
+      <output name="out" file="FileConverter_16_output.consensusXML" compare="sim_size" delta="5700" ftype="consensusxml"/>
+      <param name="out_type" value="consensusXML"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="UID_postprocessing" value="ensure"/>
+        <param name="TIC_DTA2D" value="false"/>
+        <param name="MGF_compact" value="false"/>
+        <param name="force_MaxQuant_compatibility" value="false"/>
+        <param name="convert_to_chromatograms" value="false"/>
+        <param name="force_TPP_compatibility" value="false"/>
+        <param name="change_im_format" value="none"/>
+        <param name="write_scan_index" value="true"/>
+        <param name="lossy_compression" value="false"/>
+        <param name="lossy_mass_accuracy" value="-1.0"/>
+        <param name="process_lowmemory" value="false"/>
+        <param name="no_peak_picking" value="false"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileConverter_17_input.consensusXML"/>
+      <output name="out" file="FileConverter_17.csv" compare="sim_size" delta="5700" ftype="csv"/>
+      <param name="out_type" value="csv"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="UID_postprocessing" value="ensure"/>
+        <param name="TIC_DTA2D" value="false"/>
+        <param name="MGF_compact" value="false"/>
+        <param name="force_MaxQuant_compatibility" value="false"/>
+        <param name="convert_to_chromatograms" value="false"/>
+        <param name="force_TPP_compatibility" value="false"/>
+        <param name="change_im_format" value="none"/>
+        <param name="write_scan_index" value="true"/>
+        <param name="lossy_compression" value="false"/>
+        <param name="lossy_mass_accuracy" value="-1.0"/>
+        <param name="process_lowmemory" value="false"/>
+        <param name="no_peak_picking" value="false"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileConverter_17_input.consensusXML"/>
+      <output name="out" file="FileConverter_17_output.ibspectra.csv" compare="sim_size" delta="5700" ftype="csv"/>
+      <param name="out_type" value="csv"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="UID_postprocessing" value="ensure"/>
+        <param name="TIC_DTA2D" value="false"/>
+        <param name="MGF_compact" value="false"/>
+        <param name="force_MaxQuant_compatibility" value="false"/>
+        <param name="convert_to_chromatograms" value="false"/>
+        <param name="force_TPP_compatibility" value="false"/>
+        <param name="change_im_format" value="none"/>
+        <param name="write_scan_index" value="true"/>
+        <param name="lossy_compression" value="false"/>
+        <param name="lossy_mass_accuracy" value="-1.0"/>
+        <param name="process_lowmemory" value="true"/>
+        <param name="no_peak_picking" value="false"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileFilter_1_input.mzML"/>
+      <output name="out" file="FileConverter_19_output.mzML" compare="sim_size" delta="5700" ftype="mzml"/>
+      <param name="out_type" value="mzML"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="UID_postprocessing" value="ensure"/>
+        <param name="TIC_DTA2D" value="false"/>
+        <param name="MGF_compact" value="false"/>
+        <param name="force_MaxQuant_compatibility" value="false"/>
+        <param name="convert_to_chromatograms" value="false"/>
+        <param name="force_TPP_compatibility" value="false"/>
+        <param name="change_im_format" value="none"/>
+        <param name="write_scan_index" value="true"/>
+        <param name="lossy_compression" value="false"/>
+        <param name="lossy_mass_accuracy" value="-1.0"/>
+        <param name="process_lowmemory" value="false"/>
+        <param name="no_peak_picking" value="false"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileConverter_20_input.featureXML"/>
+      <output name="out" file="FileConverter_20_output.featureXML" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <param name="out_type" value="featureXML"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="UID_postprocessing" value="ensure"/>
+        <param name="TIC_DTA2D" value="false"/>
+        <param name="MGF_compact" value="false"/>
+        <param name="force_MaxQuant_compatibility" value="false"/>
+        <param name="convert_to_chromatograms" value="false"/>
+        <param name="force_TPP_compatibility" value="false"/>
+        <param name="change_im_format" value="none"/>
+        <param name="write_scan_index" value="true"/>
+        <param name="lossy_compression" value="false"/>
+        <param name="lossy_mass_accuracy" value="-1.0"/>
+        <param name="process_lowmemory" value="true"/>
+        <param name="no_peak_picking" value="false"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileConverter_4_input.mzXML"/>
+      <output name="out" file="FileConverter_4_output.mzML" compare="sim_size" delta="5700" ftype="mzml"/>
+      <param name="out_type" value="mzML"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="UID_postprocessing" value="ensure"/>
+        <param name="TIC_DTA2D" value="false"/>
+        <param name="MGF_compact" value="false"/>
+        <param name="force_MaxQuant_compatibility" value="false"/>
+        <param name="convert_to_chromatograms" value="false"/>
+        <param name="force_TPP_compatibility" value="false"/>
+        <param name="change_im_format" value="none"/>
+        <param name="write_scan_index" value="true"/>
+        <param name="lossy_compression" value="false"/>
+        <param name="lossy_mass_accuracy" value="-1.0"/>
+        <param name="process_lowmemory" value="false"/>
+        <param name="no_peak_picking" value="false"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileConverter_23_input.mzML"/>
+      <output name="out" file="FileConverter_23_output.mzML" compare="sim_size" delta="5700" ftype="mzml"/>
+      <param name="out_type" value="mzML"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="UID_postprocessing" value="ensure"/>
+        <param name="TIC_DTA2D" value="false"/>
+        <param name="MGF_compact" value="false"/>
+        <param name="force_MaxQuant_compatibility" value="false"/>
+        <param name="convert_to_chromatograms" value="false"/>
+        <param name="force_TPP_compatibility" value="false"/>
+        <param name="change_im_format" value="none"/>
+        <param name="write_scan_index" value="true"/>
+        <param name="lossy_compression" value="true"/>
+        <param name="lossy_mass_accuracy" value="0.0001"/>
+        <param name="process_lowmemory" value="true"/>
+        <param name="no_peak_picking" value="false"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileFilter_1_input.mzML"/>
+      <output name="out" file="FileConverter_24_output.mzML" compare="sim_size" delta="5700" ftype="mzml"/>
+      <param name="out_type" value="mzML"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="UID_postprocessing" value="ensure"/>
+        <param name="TIC_DTA2D" value="false"/>
+        <param name="MGF_compact" value="false"/>
+        <param name="force_MaxQuant_compatibility" value="false"/>
+        <param name="convert_to_chromatograms" value="false"/>
+        <param name="force_TPP_compatibility" value="false"/>
+        <param name="change_im_format" value="none"/>
+        <param name="write_scan_index" value="true"/>
+        <param name="lossy_compression" value="true"/>
+        <param name="lossy_mass_accuracy" value="-1.0"/>
+        <param name="process_lowmemory" value="true"/>
+        <param name="no_peak_picking" value="false"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileFilter_1_input.mzML"/>
+      <output name="out" file="FileConverter_25_output.mzML" compare="sim_size" delta="5700" ftype="mzml"/>
+      <param name="out_type" value="mzML"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="UID_postprocessing" value="ensure"/>
+        <param name="TIC_DTA2D" value="false"/>
+        <param name="MGF_compact" value="false"/>
+        <param name="force_MaxQuant_compatibility" value="true"/>
+        <param name="convert_to_chromatograms" value="false"/>
+        <param name="force_TPP_compatibility" value="false"/>
+        <param name="change_im_format" value="none"/>
+        <param name="write_scan_index" value="true"/>
+        <param name="lossy_compression" value="false"/>
+        <param name="lossy_mass_accuracy" value="-1.0"/>
+        <param name="process_lowmemory" value="false"/>
+        <param name="no_peak_picking" value="false"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileFilter_1_input.mzML"/>
+      <output name="out" file="FileConverter_26_output.mzXML" compare="sim_size" delta="5700" ftype="mzxml"/>
+      <param name="out_type" value="mzXML"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="UID_postprocessing" value="ensure"/>
+        <param name="TIC_DTA2D" value="false"/>
+        <param name="MGF_compact" value="false"/>
+        <param name="force_MaxQuant_compatibility" value="true"/>
+        <param name="convert_to_chromatograms" value="false"/>
+        <param name="force_TPP_compatibility" value="false"/>
+        <param name="change_im_format" value="none"/>
+        <param name="write_scan_index" value="true"/>
+        <param name="lossy_compression" value="false"/>
+        <param name="lossy_mass_accuracy" value="-1.0"/>
+        <param name="process_lowmemory" value="false"/>
+        <param name="no_peak_picking" value="false"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileConverter_26_output.mzXML"/>
+      <output name="out" file="FileConverter_26-2_output.mzXML" compare="sim_size" delta="5700" ftype="mzxml"/>
+      <param name="out_type" value="mzXML"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="UID_postprocessing" value="ensure"/>
+        <param name="TIC_DTA2D" value="false"/>
+        <param name="MGF_compact" value="false"/>
+        <param name="force_MaxQuant_compatibility" value="false"/>
+        <param name="convert_to_chromatograms" value="true"/>
+        <param name="force_TPP_compatibility" value="false"/>
+        <param name="change_im_format" value="none"/>
+        <param name="write_scan_index" value="true"/>
+        <param name="lossy_compression" value="false"/>
+        <param name="lossy_mass_accuracy" value="-1.0"/>
+        <param name="process_lowmemory" value="false"/>
+        <param name="no_peak_picking" value="false"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileConverter_27_input.mzML"/>
+      <output name="out" file="FileConverter_27_output.mzML" compare="sim_size" delta="5700" ftype="mzml"/>
+      <param name="out_type" value="mzML"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="UID_postprocessing" value="ensure"/>
+        <param name="TIC_DTA2D" value="false"/>
+        <param name="MGF_compact" value="false"/>
+        <param name="force_MaxQuant_compatibility" value="false"/>
+        <param name="convert_to_chromatograms" value="true"/>
+        <param name="force_TPP_compatibility" value="false"/>
+        <param name="change_im_format" value="none"/>
+        <param name="write_scan_index" value="true"/>
+        <param name="lossy_compression" value="false"/>
+        <param name="lossy_mass_accuracy" value="-1.0"/>
+        <param name="process_lowmemory" value="false"/>
+        <param name="no_peak_picking" value="false"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileConverter_28_input.mzML"/>
+      <output name="out" file="FileConverter_28_output.mzML" compare="sim_size" delta="5700" ftype="mzml"/>
+      <param name="out_type" value="mzML"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="UID_postprocessing" value="ensure"/>
+        <param name="TIC_DTA2D" value="false"/>
+        <param name="MGF_compact" value="false"/>
+        <param name="force_MaxQuant_compatibility" value="false"/>
+        <param name="convert_to_chromatograms" value="false"/>
+        <param name="force_TPP_compatibility" value="false"/>
+        <param name="change_im_format" value="none"/>
+        <param name="write_scan_index" value="true"/>
+        <param name="lossy_compression" value="true"/>
+        <param name="lossy_mass_accuracy" value="1e-05"/>
+        <param name="process_lowmemory" value="true"/>
+        <param name="no_peak_picking" value="false"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="OpenSwathWorkflow_17_input.mzML"/>
+      <output name="out" file="FileConverter_29_output.mzML" compare="sim_size" delta="5700" ftype="mzml"/>
+      <param name="out_type" value="mzML"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="UID_postprocessing" value="ensure"/>
+        <param name="TIC_DTA2D" value="false"/>
+        <param name="MGF_compact" value="false"/>
+        <param name="force_MaxQuant_compatibility" value="false"/>
+        <param name="convert_to_chromatograms" value="false"/>
+        <param name="force_TPP_compatibility" value="false"/>
+        <param name="change_im_format" value="none"/>
+        <param name="write_scan_index" value="true"/>
+        <param name="lossy_compression" value="false"/>
+        <param name="lossy_mass_accuracy" value="-1.0"/>
+        <param name="process_lowmemory" value="false"/>
+        <param name="no_peak_picking" value="false"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileConverter_29_output.mzML"/>
+      <output name="out" file="FileConverter_29.back.tmp" compare="sim_size" delta="5700"/>
+      <param name="out_type" value="mzML"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="UID_postprocessing" value="ensure"/>
+        <param name="TIC_DTA2D" value="false"/>
+        <param name="MGF_compact" value="false"/>
+        <param name="force_MaxQuant_compatibility" value="false"/>
+        <param name="convert_to_chromatograms" value="false"/>
+        <param name="force_TPP_compatibility" value="false"/>
+        <param name="change_im_format" value="multiple"/>
+        <param name="write_scan_index" value="true"/>
+        <param name="lossy_compression" value="false"/>
+        <param name="lossy_mass_accuracy" value="-1.0"/>
+        <param name="process_lowmemory" value="false"/>
+        <param name="no_peak_picking" value="false"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileConverter_30_input.mzML"/>
+      <output name="out" file="FileConverter_30_output.mzML" compare="sim_size" delta="5700" ftype="mzml"/>
+      <param name="out_type" value="mzML"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="UID_postprocessing" value="ensure"/>
+        <param name="TIC_DTA2D" value="false"/>
+        <param name="MGF_compact" value="false"/>
+        <param name="force_MaxQuant_compatibility" value="false"/>
+        <param name="convert_to_chromatograms" value="false"/>
+        <param name="force_TPP_compatibility" value="false"/>
+        <param name="change_im_format" value="single"/>
+        <param name="write_scan_index" value="true"/>
+        <param name="lossy_compression" value="false"/>
+        <param name="lossy_mass_accuracy" value="-1.0"/>
+        <param name="process_lowmemory" value="false"/>
+        <param name="no_peak_picking" value="false"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileConverter_30_output.mzML"/>
+      <output name="out" file="FileConverter_31_output.mzML" compare="sim_size" delta="5700" ftype="mzml"/>
+      <param name="out_type" value="mzML"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="UID_postprocessing" value="ensure"/>
+        <param name="TIC_DTA2D" value="false"/>
+        <param name="MGF_compact" value="false"/>
+        <param name="force_MaxQuant_compatibility" value="false"/>
+        <param name="convert_to_chromatograms" value="false"/>
+        <param name="force_TPP_compatibility" value="false"/>
+        <param name="change_im_format" value="none"/>
+        <param name="write_scan_index" value="true"/>
+        <param name="lossy_compression" value="false"/>
+        <param name="lossy_mass_accuracy" value="-1.0"/>
+        <param name="process_lowmemory" value="false"/>
+        <param name="no_peak_picking" value="false"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="ginkgotoxin-ms-switching.raw"/>
+      <output name="out" file="ginkgotoxin-ms-switching_out_tmp.mzML" compare="sim_size" delta="5700" ftype="mzml"/>
+      <param name="out_type" value="mzml"/>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+  </xml>
+  <xml name="autotest_FileFilter">
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileFilter_1_input.mzML"/>
+      <output name="out" file="FileFilter_1_output.mzML" compare="sim_size" delta="5700" ftype="mzml"/>
+      <param name="out_type" value="mzML"/>
+      <param name="rt" value=":30"/>
+      <param name="mz" value=":1000"/>
+      <param name="int" value=":20000"/>
+      <param name="sort" value="false"/>
+      <section name="peak_options">
+        <param name="sn" value="0.0"/>
+        <param name="rm_pc_charge" value=""/>
+        <param name="pc_mz_range" value=":"/>
+        <param name="pc_mz_list" value=""/>
+        <param name="level" value="1 2 3"/>
+        <param name="sort_peaks" value="false"/>
+        <param name="no_chromatograms" value="false"/>
+        <param name="remove_chromatograms" value="false"/>
+        <param name="remove_empty" value="false"/>
+        <param name="mz_precision" value="64"/>
+        <param name="int_precision" value="32"/>
+        <param name="indexed_file" value="true"/>
+        <param name="zlib_compression" value="false"/>
+        <section name="numpress">
+          <param name="masstime" value="none"/>
+          <param name="lossy_mass_accuracy" value="-1.0"/>
+          <param name="intensity" value="none"/>
+          <param name="float_da" value="none"/>
+        </section>
+      </section>
+      <section name="spectra">
+        <param name="remove_zoom" value="false"/>
+        <param name="remove_mode" value=""/>
+        <param name="remove_activation" value=""/>
+        <param name="remove_collision_energy" value=":"/>
+        <param name="remove_isolation_window_width" value=":"/>
+        <param name="select_zoom" value="false"/>
+        <param name="select_mode" value=""/>
+        <param name="select_activation" value=""/>
+        <param name="select_collision_energy" value=":"/>
+        <param name="select_isolation_window_width" value=":"/>
+        <param name="select_polarity" value=""/>
+        <section name="blackorwhitelist">
+          <param name="similarity_threshold" value="-1.0"/>
+          <param name="rt" value="0.01"/>
+          <param name="mz" value="0.01"/>
+          <param name="use_ppm_tolerance" value="false"/>
+          <param name="blacklist" value="true"/>
+        </section>
+      </section>
+      <section name="feature">
+        <param name="q" value=":"/>
+      </section>
+      <section name="consensus">
+        <param name="map" value=""/>
+        <param name="map_and" value="false"/>
+        <section name="blackorwhitelist">
+          <param name="blacklist" value="true"/>
+          <param name="maps" value=""/>
+          <param name="rt" value="60.0"/>
+          <param name="mz" value="0.01"/>
+          <param name="use_ppm_tolerance" value="false"/>
+        </section>
+      </section>
+      <section name="f_and_c">
+        <param name="charge" value=":"/>
+        <param name="size" value=":"/>
+        <param name="remove_meta" value=""/>
+      </section>
+      <section name="id">
+        <param name="remove_clashes" value="false"/>
+        <param name="keep_best_score_id" value="false"/>
+        <param name="sequences_whitelist" value=""/>
+        <param name="sequence_comparison_method" value="substring"/>
+        <param name="accessions_whitelist" value=""/>
+        <param name="remove_annotated_features" value="false"/>
+        <param name="remove_unannotated_features" value="false"/>
+        <param name="remove_unassigned_ids" value="false"/>
+        <param name="rt" value="0.1"/>
+        <param name="mz" value="0.001"/>
+        <param name="blacklist_imperfect" value="false"/>
+      </section>
+      <section name="algorithm">
+        <section name="SignalToNoise">
+          <param name="max_intensity" value="-1"/>
+          <param name="auto_max_stdev_factor" value="3.0"/>
+          <param name="auto_max_percentile" value="95"/>
+          <param name="auto_mode" value="0"/>
+          <param name="win_len" value="200.0"/>
+          <param name="bin_count" value="30"/>
+          <param name="min_required_elements" value="10"/>
+          <param name="noise_for_empty_window" value="1e+20"/>
+          <param name="write_log_messages" value="true"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileFilter_1_input.mzML"/>
+      <output name="out" file="FileFilter_2_output.mzML" compare="sim_size" delta="5700" ftype="mzml"/>
+      <param name="out_type" value="mzML"/>
+      <param name="rt" value="30:"/>
+      <param name="mz" value="1000:"/>
+      <param name="int" value="100:"/>
+      <param name="sort" value="false"/>
+      <section name="peak_options">
+        <param name="sn" value="0.0"/>
+        <param name="rm_pc_charge" value=""/>
+        <param name="pc_mz_range" value=":"/>
+        <param name="pc_mz_list" value=""/>
+        <param name="level" value="1 2 3"/>
+        <param name="sort_peaks" value="false"/>
+        <param name="no_chromatograms" value="false"/>
+        <param name="remove_chromatograms" value="false"/>
+        <param name="remove_empty" value="false"/>
+        <param name="mz_precision" value="64"/>
+        <param name="int_precision" value="32"/>
+        <param name="indexed_file" value="true"/>
+        <param name="zlib_compression" value="false"/>
+        <section name="numpress">
+          <param name="masstime" value="none"/>
+          <param name="lossy_mass_accuracy" value="-1.0"/>
+          <param name="intensity" value="none"/>
+          <param name="float_da" value="none"/>
+        </section>
+      </section>
+      <section name="spectra">
+        <param name="remove_zoom" value="false"/>
+        <param name="remove_mode" value=""/>
+        <param name="remove_activation" value=""/>
+        <param name="remove_collision_energy" value=":"/>
+        <param name="remove_isolation_window_width" value=":"/>
+        <param name="select_zoom" value="false"/>
+        <param name="select_mode" value=""/>
+        <param name="select_activation" value=""/>
+        <param name="select_collision_energy" value=":"/>
+        <param name="select_isolation_window_width" value=":"/>
+        <param name="select_polarity" value=""/>
+        <section name="blackorwhitelist">
+          <param name="similarity_threshold" value="-1.0"/>
+          <param name="rt" value="0.01"/>
+          <param name="mz" value="0.01"/>
+          <param name="use_ppm_tolerance" value="false"/>
+          <param name="blacklist" value="true"/>
+        </section>
+      </section>
+      <section name="feature">
+        <param name="q" value=":"/>
+      </section>
+      <section name="consensus">
+        <param name="map" value=""/>
+        <param name="map_and" value="false"/>
+        <section name="blackorwhitelist">
+          <param name="blacklist" value="true"/>
+          <param name="maps" value=""/>
+          <param name="rt" value="60.0"/>
+          <param name="mz" value="0.01"/>
+          <param name="use_ppm_tolerance" value="false"/>
+        </section>
+      </section>
+      <section name="f_and_c">
+        <param name="charge" value=":"/>
+        <param name="size" value=":"/>
+        <param name="remove_meta" value=""/>
+      </section>
+      <section name="id">
+        <param name="remove_clashes" value="false"/>
+        <param name="keep_best_score_id" value="false"/>
+        <param name="sequences_whitelist" value=""/>
+        <param name="sequence_comparison_method" value="substring"/>
+        <param name="accessions_whitelist" value=""/>
+        <param name="remove_annotated_features" value="false"/>
+        <param name="remove_unannotated_features" value="false"/>
+        <param name="remove_unassigned_ids" value="false"/>
+        <param name="rt" value="0.1"/>
+        <param name="mz" value="0.001"/>
+        <param name="blacklist_imperfect" value="false"/>
+      </section>
+      <section name="algorithm">
+        <section name="SignalToNoise">
+          <param name="max_intensity" value="-1"/>
+          <param name="auto_max_stdev_factor" value="3.0"/>
+          <param name="auto_max_percentile" value="95"/>
+          <param name="auto_mode" value="0"/>
+          <param name="win_len" value="200.0"/>
+          <param name="bin_count" value="30"/>
+          <param name="min_required_elements" value="10"/>
+          <param name="noise_for_empty_window" value="1e+20"/>
+          <param name="write_log_messages" value="true"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileFilter_1_input.mzML"/>
+      <output name="out" file="FileFilter_3_output.mzML" compare="sim_size" delta="5700" ftype="mzml"/>
+      <param name="out_type" value="mzML"/>
+      <param name="rt" value=":"/>
+      <param name="mz" value=":"/>
+      <param name="int" value=":"/>
+      <param name="sort" value="false"/>
+      <section name="peak_options">
+        <param name="sn" value="0.0"/>
+        <param name="rm_pc_charge" value=""/>
+        <param name="pc_mz_range" value=":"/>
+        <param name="pc_mz_list" value=""/>
+        <param name="level" value="2"/>
+        <param name="sort_peaks" value="false"/>
+        <param name="no_chromatograms" value="false"/>
+        <param name="remove_chromatograms" value="false"/>
+        <param name="remove_empty" value="false"/>
+        <param name="mz_precision" value="64"/>
+        <param name="int_precision" value="32"/>
+        <param name="indexed_file" value="true"/>
+        <param name="zlib_compression" value="false"/>
+        <section name="numpress">
+          <param name="masstime" value="none"/>
+          <param name="lossy_mass_accuracy" value="-1.0"/>
+          <param name="intensity" value="none"/>
+          <param name="float_da" value="none"/>
+        </section>
+      </section>
+      <section name="spectra">
+        <param name="remove_zoom" value="false"/>
+        <param name="remove_mode" value=""/>
+        <param name="remove_activation" value=""/>
+        <param name="remove_collision_energy" value=":"/>
+        <param name="remove_isolation_window_width" value=":"/>
+        <param name="select_zoom" value="false"/>
+        <param name="select_mode" value=""/>
+        <param name="select_activation" value=""/>
+        <param name="select_collision_energy" value=":"/>
+        <param name="select_isolation_window_width" value=":"/>
+        <param name="select_polarity" value=""/>
+        <section name="blackorwhitelist">
+          <param name="similarity_threshold" value="-1.0"/>
+          <param name="rt" value="0.01"/>
+          <param name="mz" value="0.01"/>
+          <param name="use_ppm_tolerance" value="false"/>
+          <param name="blacklist" value="true"/>
+        </section>
+      </section>
+      <section name="feature">
+        <param name="q" value=":"/>
+      </section>
+      <section name="consensus">
+        <param name="map" value=""/>
+        <param name="map_and" value="false"/>
+        <section name="blackorwhitelist">
+          <param name="blacklist" value="true"/>
+          <param name="maps" value=""/>
+          <param name="rt" value="60.0"/>
+          <param name="mz" value="0.01"/>
+          <param name="use_ppm_tolerance" value="false"/>
+        </section>
+      </section>
+      <section name="f_and_c">
+        <param name="charge" value=":"/>
+        <param name="size" value=":"/>
+        <param name="remove_meta" value=""/>
+      </section>
+      <section name="id">
+        <param name="remove_clashes" value="false"/>
+        <param name="keep_best_score_id" value="false"/>
+        <param name="sequences_whitelist" value=""/>
+        <param name="sequence_comparison_method" value="substring"/>
+        <param name="accessions_whitelist" value=""/>
+        <param name="remove_annotated_features" value="false"/>
+        <param name="remove_unannotated_features" value="false"/>
+        <param name="remove_unassigned_ids" value="false"/>
+        <param name="rt" value="0.1"/>
+        <param name="mz" value="0.001"/>
+        <param name="blacklist_imperfect" value="false"/>
+      </section>
+      <section name="algorithm">
+        <section name="SignalToNoise">
+          <param name="max_intensity" value="-1"/>
+          <param name="auto_max_stdev_factor" value="3.0"/>
+          <param name="auto_max_percentile" value="95"/>
+          <param name="auto_mode" value="0"/>
+          <param name="win_len" value="200.0"/>
+          <param name="bin_count" value="30"/>
+          <param name="min_required_elements" value="10"/>
+          <param name="noise_for_empty_window" value="1e+20"/>
+          <param name="write_log_messages" value="true"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileFilter_4_input.mzML"/>
+      <output name="out" file="FileFilter_4_output.mzML" compare="sim_size" delta="5700" ftype="mzml"/>
+      <param name="out_type" value="mzML"/>
+      <param name="rt" value=":"/>
+      <param name="mz" value=":"/>
+      <param name="int" value=":"/>
+      <param name="sort" value="false"/>
+      <section name="peak_options">
+        <param name="sn" value="0.0"/>
+        <param name="rm_pc_charge" value=""/>
+        <param name="pc_mz_range" value=":"/>
+        <param name="pc_mz_list" value=""/>
+        <param name="level" value="1 2 3"/>
+        <param name="sort_peaks" value="false"/>
+        <param name="no_chromatograms" value="false"/>
+        <param name="remove_chromatograms" value="false"/>
+        <param name="remove_empty" value="false"/>
+        <param name="mz_precision" value="64"/>
+        <param name="int_precision" value="32"/>
+        <param name="indexed_file" value="true"/>
+        <param name="zlib_compression" value="false"/>
+        <section name="numpress">
+          <param name="masstime" value="none"/>
+          <param name="lossy_mass_accuracy" value="-1.0"/>
+          <param name="intensity" value="none"/>
+          <param name="float_da" value="none"/>
+        </section>
+      </section>
+      <section name="spectra">
+        <param name="remove_zoom" value="true"/>
+        <param name="remove_mode" value=""/>
+        <param name="remove_activation" value=""/>
+        <param name="remove_collision_energy" value=":"/>
+        <param name="remove_isolation_window_width" value=":"/>
+        <param name="select_zoom" value="false"/>
+        <param name="select_mode" value=""/>
+        <param name="select_activation" value=""/>
+        <param name="select_collision_energy" value=":"/>
+        <param name="select_isolation_window_width" value=":"/>
+        <param name="select_polarity" value=""/>
+        <section name="blackorwhitelist">
+          <param name="similarity_threshold" value="-1.0"/>
+          <param name="rt" value="0.01"/>
+          <param name="mz" value="0.01"/>
+          <param name="use_ppm_tolerance" value="false"/>
+          <param name="blacklist" value="true"/>
+        </section>
+      </section>
+      <section name="feature">
+        <param name="q" value=":"/>
+      </section>
+      <section name="consensus">
+        <param name="map" value=""/>
+        <param name="map_and" value="false"/>
+        <section name="blackorwhitelist">
+          <param name="blacklist" value="true"/>
+          <param name="maps" value=""/>
+          <param name="rt" value="60.0"/>
+          <param name="mz" value="0.01"/>
+          <param name="use_ppm_tolerance" value="false"/>
+        </section>
+      </section>
+      <section name="f_and_c">
+        <param name="charge" value=":"/>
+        <param name="size" value=":"/>
+        <param name="remove_meta" value=""/>
+      </section>
+      <section name="id">
+        <param name="remove_clashes" value="false"/>
+        <param name="keep_best_score_id" value="false"/>
+        <param name="sequences_whitelist" value=""/>
+        <param name="sequence_comparison_method" value="substring"/>
+        <param name="accessions_whitelist" value=""/>
+        <param name="remove_annotated_features" value="false"/>
+        <param name="remove_unannotated_features" value="false"/>
+        <param name="remove_unassigned_ids" value="false"/>
+        <param name="rt" value="0.1"/>
+        <param name="mz" value="0.001"/>
+        <param name="blacklist_imperfect" value="false"/>
+      </section>
+      <section name="algorithm">
+        <section name="SignalToNoise">
+          <param name="max_intensity" value="-1"/>
+          <param name="auto_max_stdev_factor" value="3.0"/>
+          <param name="auto_max_percentile" value="95"/>
+          <param name="auto_mode" value="0"/>
+          <param name="win_len" value="200.0"/>
+          <param name="bin_count" value="30"/>
+          <param name="min_required_elements" value="10"/>
+          <param name="noise_for_empty_window" value="1e+20"/>
+          <param name="write_log_messages" value="true"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileFilter_5_input.featureXML"/>
+      <output name="out" file="FileFilter_5_out.featureXML" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <param name="out_type" value="featureXML"/>
+      <param name="rt" value=":1000"/>
+      <param name="mz" value=":480"/>
+      <param name="int" value=":79000"/>
+      <param name="sort" value="false"/>
+      <section name="peak_options">
+        <param name="sn" value="0.0"/>
+        <param name="rm_pc_charge" value=""/>
+        <param name="pc_mz_range" value=":"/>
+        <param name="pc_mz_list" value=""/>
+        <param name="level" value="1 2 3"/>
+        <param name="sort_peaks" value="false"/>
+        <param name="no_chromatograms" value="false"/>
+        <param name="remove_chromatograms" value="false"/>
+        <param name="remove_empty" value="false"/>
+        <param name="mz_precision" value="64"/>
+        <param name="int_precision" value="32"/>
+        <param name="indexed_file" value="true"/>
+        <param name="zlib_compression" value="false"/>
+        <section name="numpress">
+          <param name="masstime" value="none"/>
+          <param name="lossy_mass_accuracy" value="-1.0"/>
+          <param name="intensity" value="none"/>
+          <param name="float_da" value="none"/>
+        </section>
+      </section>
+      <section name="spectra">
+        <param name="remove_zoom" value="false"/>
+        <param name="remove_mode" value=""/>
+        <param name="remove_activation" value=""/>
+        <param name="remove_collision_energy" value=":"/>
+        <param name="remove_isolation_window_width" value=":"/>
+        <param name="select_zoom" value="false"/>
+        <param name="select_mode" value=""/>
+        <param name="select_activation" value=""/>
+        <param name="select_collision_energy" value=":"/>
+        <param name="select_isolation_window_width" value=":"/>
+        <param name="select_polarity" value=""/>
+        <section name="blackorwhitelist">
+          <param name="similarity_threshold" value="-1.0"/>
+          <param name="rt" value="0.01"/>
+          <param name="mz" value="0.01"/>
+          <param name="use_ppm_tolerance" value="false"/>
+          <param name="blacklist" value="true"/>
+        </section>
+      </section>
+      <section name="feature">
+        <param name="q" value=":0.6"/>
+      </section>
+      <section name="consensus">
+        <param name="map" value=""/>
+        <param name="map_and" value="false"/>
+        <section name="blackorwhitelist">
+          <param name="blacklist" value="true"/>
+          <param name="maps" value=""/>
+          <param name="rt" value="60.0"/>
+          <param name="mz" value="0.01"/>
+          <param name="use_ppm_tolerance" value="false"/>
+        </section>
+      </section>
+      <section name="f_and_c">
+        <param name="charge" value=":3"/>
+        <param name="size" value=":"/>
+        <param name="remove_meta" value=""/>
+      </section>
+      <section name="id">
+        <param name="remove_clashes" value="false"/>
+        <param name="keep_best_score_id" value="false"/>
+        <param name="sequences_whitelist" value=""/>
+        <param name="sequence_comparison_method" value="substring"/>
+        <param name="accessions_whitelist" value=""/>
+        <param name="remove_annotated_features" value="false"/>
+        <param name="remove_unannotated_features" value="false"/>
+        <param name="remove_unassigned_ids" value="false"/>
+        <param name="rt" value="0.1"/>
+        <param name="mz" value="0.001"/>
+        <param name="blacklist_imperfect" value="false"/>
+      </section>
+      <section name="algorithm">
+        <section name="SignalToNoise">
+          <param name="max_intensity" value="-1"/>
+          <param name="auto_max_stdev_factor" value="3.0"/>
+          <param name="auto_max_percentile" value="95"/>
+          <param name="auto_mode" value="0"/>
+          <param name="win_len" value="200.0"/>
+          <param name="bin_count" value="30"/>
+          <param name="min_required_elements" value="10"/>
+          <param name="noise_for_empty_window" value="1e+20"/>
+          <param name="write_log_messages" value="true"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileFilter_5_input.featureXML"/>
+      <output name="out" file="FileFilter_6_out.featureXML" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <param name="out_type" value="featureXML"/>
+      <param name="rt" value="1000:"/>
+      <param name="mz" value="440:"/>
+      <param name="int" value="70000:"/>
+      <param name="sort" value="false"/>
+      <section name="peak_options">
+        <param name="sn" value="0.0"/>
+        <param name="rm_pc_charge" value=""/>
+        <param name="pc_mz_range" value=":"/>
+        <param name="pc_mz_list" value=""/>
+        <param name="level" value="1 2 3"/>
+        <param name="sort_peaks" value="false"/>
+        <param name="no_chromatograms" value="false"/>
+        <param name="remove_chromatograms" value="false"/>
+        <param name="remove_empty" value="false"/>
+        <param name="mz_precision" value="64"/>
+        <param name="int_precision" value="32"/>
+        <param name="indexed_file" value="true"/>
+        <param name="zlib_compression" value="false"/>
+        <section name="numpress">
+          <param name="masstime" value="none"/>
+          <param name="lossy_mass_accuracy" value="-1.0"/>
+          <param name="intensity" value="none"/>
+          <param name="float_da" value="none"/>
+        </section>
+      </section>
+      <section name="spectra">
+        <param name="remove_zoom" value="false"/>
+        <param name="remove_mode" value=""/>
+        <param name="remove_activation" value=""/>
+        <param name="remove_collision_energy" value=":"/>
+        <param name="remove_isolation_window_width" value=":"/>
+        <param name="select_zoom" value="false"/>
+        <param name="select_mode" value=""/>
+        <param name="select_activation" value=""/>
+        <param name="select_collision_energy" value=":"/>
+        <param name="select_isolation_window_width" value=":"/>
+        <param name="select_polarity" value=""/>
+        <section name="blackorwhitelist">
+          <param name="similarity_threshold" value="-1.0"/>
+          <param name="rt" value="0.01"/>
+          <param name="mz" value="0.01"/>
+          <param name="use_ppm_tolerance" value="false"/>
+          <param name="blacklist" value="true"/>
+        </section>
+      </section>
+      <section name="feature">
+        <param name="q" value="0.51:"/>
+      </section>
+      <section name="consensus">
+        <param name="map" value=""/>
+        <param name="map_and" value="false"/>
+        <section name="blackorwhitelist">
+          <param name="blacklist" value="true"/>
+          <param name="maps" value=""/>
+          <param name="rt" value="60.0"/>
+          <param name="mz" value="0.01"/>
+          <param name="use_ppm_tolerance" value="false"/>
+        </section>
+      </section>
+      <section name="f_and_c">
+        <param name="charge" value="3:"/>
+        <param name="size" value=":"/>
+        <param name="remove_meta" value=""/>
+      </section>
+      <section name="id">
+        <param name="remove_clashes" value="false"/>
+        <param name="keep_best_score_id" value="false"/>
+        <param name="sequences_whitelist" value=""/>
+        <param name="sequence_comparison_method" value="substring"/>
+        <param name="accessions_whitelist" value=""/>
+        <param name="remove_annotated_features" value="false"/>
+        <param name="remove_unannotated_features" value="false"/>
+        <param name="remove_unassigned_ids" value="false"/>
+        <param name="rt" value="0.1"/>
+        <param name="mz" value="0.001"/>
+        <param name="blacklist_imperfect" value="false"/>
+      </section>
+      <section name="algorithm">
+        <section name="SignalToNoise">
+          <param name="max_intensity" value="-1"/>
+          <param name="auto_max_stdev_factor" value="3.0"/>
+          <param name="auto_max_percentile" value="95"/>
+          <param name="auto_mode" value="0"/>
+          <param name="win_len" value="200.0"/>
+          <param name="bin_count" value="30"/>
+          <param name="min_required_elements" value="10"/>
+          <param name="noise_for_empty_window" value="1e+20"/>
+          <param name="write_log_messages" value="true"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileFilter_7_input.mzML"/>
+      <output name="out" file="FileFilter_7_output.mzML" compare="sim_size" delta="5700" ftype="mzml"/>
+      <param name="out_type" value="mzML"/>
+      <param name="rt" value=":"/>
+      <param name="mz" value=":"/>
+      <param name="int" value="7000:"/>
+      <param name="sort" value="false"/>
+      <section name="peak_options">
+        <param name="sn" value="0.0"/>
+        <param name="rm_pc_charge" value=""/>
+        <param name="pc_mz_range" value=":"/>
+        <param name="pc_mz_list" value=""/>
+        <param name="level" value="1 2 3"/>
+        <param name="sort_peaks" value="false"/>
+        <param name="no_chromatograms" value="false"/>
+        <param name="remove_chromatograms" value="false"/>
+        <param name="remove_empty" value="false"/>
+        <param name="mz_precision" value="64"/>
+        <param name="int_precision" value="32"/>
+        <param name="indexed_file" value="true"/>
+        <param name="zlib_compression" value="false"/>
+        <section name="numpress">
+          <param name="masstime" value="none"/>
+          <param name="lossy_mass_accuracy" value="-1.0"/>
+          <param name="intensity" value="none"/>
+          <param name="float_da" value="none"/>
+        </section>
+      </section>
+      <section name="spectra">
+        <param name="remove_zoom" value="false"/>
+        <param name="remove_mode" value=""/>
+        <param name="remove_activation" value=""/>
+        <param name="remove_collision_energy" value=":"/>
+        <param name="remove_isolation_window_width" value=":"/>
+        <param name="select_zoom" value="false"/>
+        <param name="select_mode" value=""/>
+        <param name="select_activation" value=""/>
+        <param name="select_collision_energy" value=":"/>
+        <param name="select_isolation_window_width" value=":"/>
+        <param name="select_polarity" value=""/>
+        <section name="blackorwhitelist">
+          <param name="similarity_threshold" value="-1.0"/>
+          <param name="rt" value="0.01"/>
+          <param name="mz" value="0.01"/>
+          <param name="use_ppm_tolerance" value="false"/>
+          <param name="blacklist" value="true"/>
+        </section>
+      </section>
+      <section name="feature">
+        <param name="q" value=":"/>
+      </section>
+      <section name="consensus">
+        <param name="map" value=""/>
+        <param name="map_and" value="false"/>
+        <section name="blackorwhitelist">
+          <param name="blacklist" value="true"/>
+          <param name="maps" value=""/>
+          <param name="rt" value="60.0"/>
+          <param name="mz" value="0.01"/>
+          <param name="use_ppm_tolerance" value="false"/>
+        </section>
+      </section>
+      <section name="f_and_c">
+        <param name="charge" value=":"/>
+        <param name="size" value=":"/>
+        <param name="remove_meta" value=""/>
+      </section>
+      <section name="id">
+        <param name="remove_clashes" value="false"/>
+        <param name="keep_best_score_id" value="false"/>
+        <param name="sequences_whitelist" value=""/>
+        <param name="sequence_comparison_method" value="substring"/>
+        <param name="accessions_whitelist" value=""/>
+        <param name="remove_annotated_features" value="false"/>
+        <param name="remove_unannotated_features" value="false"/>
+        <param name="remove_unassigned_ids" value="false"/>
+        <param name="rt" value="0.1"/>
+        <param name="mz" value="0.001"/>
+        <param name="blacklist_imperfect" value="false"/>
+      </section>
+      <section name="algorithm">
+        <section name="SignalToNoise">
+          <param name="max_intensity" value="-1"/>
+          <param name="auto_max_stdev_factor" value="3.0"/>
+          <param name="auto_max_percentile" value="95"/>
+          <param name="auto_mode" value="0"/>
+          <param name="win_len" value="200.0"/>
+          <param name="bin_count" value="30"/>
+          <param name="min_required_elements" value="10"/>
+          <param name="noise_for_empty_window" value="1e+20"/>
+          <param name="write_log_messages" value="true"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileFilter_8_input.consensusXML"/>
+      <output name="out" file="FileFilter_8_output.consensusXML" compare="sim_size" delta="5700" ftype="consensusxml"/>
+      <param name="out_type" value="consensusXML"/>
+      <param name="rt" value="600:1400"/>
+      <param name="mz" value="700:2300"/>
+      <param name="int" value="1100:6000"/>
+      <param name="sort" value="false"/>
+      <section name="peak_options">
+        <param name="sn" value="0.0"/>
+        <param name="rm_pc_charge" value=""/>
+        <param name="pc_mz_range" value=":"/>
+        <param name="pc_mz_list" value=""/>
+        <param name="level" value="1 2 3"/>
+        <param name="sort_peaks" value="false"/>
+        <param name="no_chromatograms" value="false"/>
+        <param name="remove_chromatograms" value="false"/>
+        <param name="remove_empty" value="false"/>
+        <param name="mz_precision" value="64"/>
+        <param name="int_precision" value="32"/>
+        <param name="indexed_file" value="true"/>
+        <param name="zlib_compression" value="false"/>
+        <section name="numpress">
+          <param name="masstime" value="none"/>
+          <param name="lossy_mass_accuracy" value="-1.0"/>
+          <param name="intensity" value="none"/>
+          <param name="float_da" value="none"/>
+        </section>
+      </section>
+      <section name="spectra">
+        <param name="remove_zoom" value="false"/>
+        <param name="remove_mode" value=""/>
+        <param name="remove_activation" value=""/>
+        <param name="remove_collision_energy" value=":"/>
+        <param name="remove_isolation_window_width" value=":"/>
+        <param name="select_zoom" value="false"/>
+        <param name="select_mode" value=""/>
+        <param name="select_activation" value=""/>
+        <param name="select_collision_energy" value=":"/>
+        <param name="select_isolation_window_width" value=":"/>
+        <param name="select_polarity" value=""/>
+        <section name="blackorwhitelist">
+          <param name="similarity_threshold" value="-1.0"/>
+          <param name="rt" value="0.01"/>
+          <param name="mz" value="0.01"/>
+          <param name="use_ppm_tolerance" value="false"/>
+          <param name="blacklist" value="true"/>
+        </section>
+      </section>
+      <section name="feature">
+        <param name="q" value=":"/>
+      </section>
+      <section name="consensus">
+        <param name="map" value=""/>
+        <param name="map_and" value="false"/>
+        <section name="blackorwhitelist">
+          <param name="blacklist" value="true"/>
+          <param name="maps" value=""/>
+          <param name="rt" value="60.0"/>
+          <param name="mz" value="0.01"/>
+          <param name="use_ppm_tolerance" value="false"/>
+        </section>
+      </section>
+      <section name="f_and_c">
+        <param name="charge" value=":"/>
+        <param name="size" value=":"/>
+        <param name="remove_meta" value=""/>
+      </section>
+      <section name="id">
+        <param name="remove_clashes" value="false"/>
+        <param name="keep_best_score_id" value="false"/>
+        <param name="sequences_whitelist" value=""/>
+        <param name="sequence_comparison_method" value="substring"/>
+        <param name="accessions_whitelist" value=""/>
+        <param name="remove_annotated_features" value="false"/>
+        <param name="remove_unannotated_features" value="false"/>
+        <param name="remove_unassigned_ids" value="false"/>
+        <param name="rt" value="0.1"/>
+        <param name="mz" value="0.001"/>
+        <param name="blacklist_imperfect" value="false"/>
+      </section>
+      <section name="algorithm">
+        <section name="SignalToNoise">
+          <param name="max_intensity" value="-1"/>
+          <param name="auto_max_stdev_factor" value="3.0"/>
+          <param name="auto_max_percentile" value="95"/>
+          <param name="auto_mode" value="0"/>
+          <param name="win_len" value="200.0"/>
+          <param name="bin_count" value="30"/>
+          <param name="min_required_elements" value="10"/>
+          <param name="noise_for_empty_window" value="1e+20"/>
+          <param name="write_log_messages" value="true"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileFilter_9_input.mzML"/>
+      <output name="out" file="FileFilter_9_output.mzML" compare="sim_size" delta="5700" ftype="mzml"/>
+      <param name="out_type" value="mzML"/>
+      <param name="rt" value=":"/>
+      <param name="mz" value=":"/>
+      <param name="int" value=":"/>
+      <param name="sort" value="false"/>
+      <section name="peak_options">
+        <param name="sn" value="0.0"/>
+        <param name="rm_pc_charge" value=""/>
+        <param name="pc_mz_range" value=":"/>
+        <param name="pc_mz_list" value=""/>
+        <param name="level" value="1 2 3"/>
+        <param name="sort_peaks" value="false"/>
+        <param name="no_chromatograms" value="false"/>
+        <param name="remove_chromatograms" value="false"/>
+        <param name="remove_empty" value="false"/>
+        <param name="mz_precision" value="64"/>
+        <param name="int_precision" value="32"/>
+        <param name="indexed_file" value="true"/>
+        <param name="zlib_compression" value="false"/>
+        <section name="numpress">
+          <param name="masstime" value="none"/>
+          <param name="lossy_mass_accuracy" value="-1.0"/>
+          <param name="intensity" value="none"/>
+          <param name="float_da" value="none"/>
+        </section>
+      </section>
+      <section name="spectra">
+        <param name="remove_zoom" value="false"/>
+        <param name="remove_mode" value="SelectedIonMonitoring"/>
+        <param name="remove_activation" value=""/>
+        <param name="remove_collision_energy" value=":"/>
+        <param name="remove_isolation_window_width" value=":"/>
+        <param name="select_zoom" value="false"/>
+        <param name="select_mode" value=""/>
+        <param name="select_activation" value=""/>
+        <param name="select_collision_energy" value=":"/>
+        <param name="select_isolation_window_width" value=":"/>
+        <param name="select_polarity" value=""/>
+        <section name="blackorwhitelist">
+          <param name="similarity_threshold" value="-1.0"/>
+          <param name="rt" value="0.01"/>
+          <param name="mz" value="0.01"/>
+          <param name="use_ppm_tolerance" value="false"/>
+          <param name="blacklist" value="true"/>
+        </section>
+      </section>
+      <section name="feature">
+        <param name="q" value=":"/>
+      </section>
+      <section name="consensus">
+        <param name="map" value=""/>
+        <param name="map_and" value="false"/>
+        <section name="blackorwhitelist">
+          <param name="blacklist" value="true"/>
+          <param name="maps" value=""/>
+          <param name="rt" value="60.0"/>
+          <param name="mz" value="0.01"/>
+          <param name="use_ppm_tolerance" value="false"/>
+        </section>
+      </section>
+      <section name="f_and_c">
+        <param name="charge" value=":"/>
+        <param name="size" value=":"/>
+        <param name="remove_meta" value=""/>
+      </section>
+      <section name="id">
+        <param name="remove_clashes" value="false"/>
+        <param name="keep_best_score_id" value="false"/>
+        <param name="sequences_whitelist" value=""/>
+        <param name="sequence_comparison_method" value="substring"/>
+        <param name="accessions_whitelist" value=""/>
+        <param name="remove_annotated_features" value="false"/>
+        <param name="remove_unannotated_features" value="false"/>
+        <param name="remove_unassigned_ids" value="false"/>
+        <param name="rt" value="0.1"/>
+        <param name="mz" value="0.001"/>
+        <param name="blacklist_imperfect" value="false"/>
+      </section>
+      <section name="algorithm">
+        <section name="SignalToNoise">
+          <param name="max_intensity" value="-1"/>
+          <param name="auto_max_stdev_factor" value="3.0"/>
+          <param name="auto_max_percentile" value="95"/>
+          <param name="auto_mode" value="0"/>
+          <param name="win_len" value="200.0"/>
+          <param name="bin_count" value="30"/>
+          <param name="min_required_elements" value="10"/>
+          <param name="noise_for_empty_window" value="1e+20"/>
+          <param name="write_log_messages" value="true"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileFilter_10_input.mzML"/>
+      <output name="out" file="FileFilter_10_output.mzML" compare="sim_size" delta="5700" ftype="mzml"/>
+      <param name="out_type" value="mzML"/>
+      <param name="rt" value=":"/>
+      <param name="mz" value=":"/>
+      <param name="int" value=":"/>
+      <param name="sort" value="false"/>
+      <section name="peak_options">
+        <param name="sn" value="0.0"/>
+        <param name="rm_pc_charge" value=""/>
+        <param name="pc_mz_range" value=":"/>
+        <param name="pc_mz_list" value=""/>
+        <param name="level" value="1 2 3"/>
+        <param name="sort_peaks" value="false"/>
+        <param name="no_chromatograms" value="false"/>
+        <param name="remove_chromatograms" value="false"/>
+        <param name="remove_empty" value="false"/>
+        <param name="mz_precision" value="64"/>
+        <param name="int_precision" value="32"/>
+        <param name="indexed_file" value="true"/>
+        <param name="zlib_compression" value="false"/>
+        <section name="numpress">
+          <param name="masstime" value="none"/>
+          <param name="lossy_mass_accuracy" value="-1.0"/>
+          <param name="intensity" value="none"/>
+          <param name="float_da" value="none"/>
+        </section>
+      </section>
+      <section name="spectra">
+        <param name="remove_zoom" value="false"/>
+        <param name="remove_mode" value=""/>
+        <param name="remove_activation" value="Collision-induced dissociation"/>
+        <param name="remove_collision_energy" value=":"/>
+        <param name="remove_isolation_window_width" value=":"/>
+        <param name="select_zoom" value="false"/>
+        <param name="select_mode" value=""/>
+        <param name="select_activation" value=""/>
+        <param name="select_collision_energy" value=":"/>
+        <param name="select_isolation_window_width" value=":"/>
+        <param name="select_polarity" value=""/>
+        <section name="blackorwhitelist">
+          <param name="similarity_threshold" value="-1.0"/>
+          <param name="rt" value="0.01"/>
+          <param name="mz" value="0.01"/>
+          <param name="use_ppm_tolerance" value="false"/>
+          <param name="blacklist" value="true"/>
+        </section>
+      </section>
+      <section name="feature">
+        <param name="q" value=":"/>
+      </section>
+      <section name="consensus">
+        <param name="map" value=""/>
+        <param name="map_and" value="false"/>
+        <section name="blackorwhitelist">
+          <param name="blacklist" value="true"/>
+          <param name="maps" value=""/>
+          <param name="rt" value="60.0"/>
+          <param name="mz" value="0.01"/>
+          <param name="use_ppm_tolerance" value="false"/>
+        </section>
+      </section>
+      <section name="f_and_c">
+        <param name="charge" value=":"/>
+        <param name="size" value=":"/>
+        <param name="remove_meta" value=""/>
+      </section>
+      <section name="id">
+        <param name="remove_clashes" value="false"/>
+        <param name="keep_best_score_id" value="false"/>
+        <param name="sequences_whitelist" value=""/>
+        <param name="sequence_comparison_method" value="substring"/>
+        <param name="accessions_whitelist" value=""/>
+        <param name="remove_annotated_features" value="false"/>
+        <param name="remove_unannotated_features" value="false"/>
+        <param name="remove_unassigned_ids" value="false"/>
+        <param name="rt" value="0.1"/>
+        <param name="mz" value="0.001"/>
+        <param name="blacklist_imperfect" value="false"/>
+      </section>
+      <section name="algorithm">
+        <section name="SignalToNoise">
+          <param name="max_intensity" value="-1"/>
+          <param name="auto_max_stdev_factor" value="3.0"/>
+          <param name="auto_max_percentile" value="95"/>
+          <param name="auto_mode" value="0"/>
+          <param name="win_len" value="200.0"/>
+          <param name="bin_count" value="30"/>
+          <param name="min_required_elements" value="10"/>
+          <param name="noise_for_empty_window" value="1e+20"/>
+          <param name="write_log_messages" value="true"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileFilter_11_input.mzML"/>
+      <output name="out" file="FileFilter_11_output.mzML" compare="sim_size" delta="5700" ftype="mzml"/>
+      <param name="out_type" value="mzML"/>
+      <param name="rt" value=":"/>
+      <param name="mz" value=":"/>
+      <param name="int" value=":"/>
+      <param name="sort" value="false"/>
+      <section name="peak_options">
+        <param name="sn" value="0.0"/>
+        <param name="rm_pc_charge" value=""/>
+        <param name="pc_mz_range" value=":"/>
+        <param name="pc_mz_list" value=""/>
+        <param name="level" value="1 2 3"/>
+        <param name="sort_peaks" value="false"/>
+        <param name="no_chromatograms" value="false"/>
+        <param name="remove_chromatograms" value="false"/>
+        <param name="remove_empty" value="false"/>
+        <param name="mz_precision" value="64"/>
+        <param name="int_precision" value="32"/>
+        <param name="indexed_file" value="true"/>
+        <param name="zlib_compression" value="false"/>
+        <section name="numpress">
+          <param name="masstime" value="none"/>
+          <param name="lossy_mass_accuracy" value="-1.0"/>
+          <param name="intensity" value="none"/>
+          <param name="float_da" value="none"/>
+        </section>
+      </section>
+      <section name="spectra">
+        <param name="remove_zoom" value="false"/>
+        <param name="remove_mode" value=""/>
+        <param name="remove_activation" value="Plasma desorption"/>
+        <param name="remove_collision_energy" value=":"/>
+        <param name="remove_isolation_window_width" value=":"/>
+        <param name="select_zoom" value="false"/>
+        <param name="select_mode" value=""/>
+        <param name="select_activation" value=""/>
+        <param name="select_collision_energy" value=":"/>
+        <param name="select_isolation_window_width" value=":"/>
+        <param name="select_polarity" value=""/>
+        <section name="blackorwhitelist">
+          <param name="similarity_threshold" value="-1.0"/>
+          <param name="rt" value="0.01"/>
+          <param name="mz" value="0.01"/>
+          <param name="use_ppm_tolerance" value="false"/>
+          <param name="blacklist" value="true"/>
+        </section>
+      </section>
+      <section name="feature">
+        <param name="q" value=":"/>
+      </section>
+      <section name="consensus">
+        <param name="map" value=""/>
+        <param name="map_and" value="false"/>
+        <section name="blackorwhitelist">
+          <param name="blacklist" value="true"/>
+          <param name="maps" value=""/>
+          <param name="rt" value="60.0"/>
+          <param name="mz" value="0.01"/>
+          <param name="use_ppm_tolerance" value="false"/>
+        </section>
+      </section>
+      <section name="f_and_c">
+        <param name="charge" value=":"/>
+        <param name="size" value=":"/>
+        <param name="remove_meta" value=""/>
+      </section>
+      <section name="id">
+        <param name="remove_clashes" value="false"/>
+        <param name="keep_best_score_id" value="false"/>
+        <param name="sequences_whitelist" value=""/>
+        <param name="sequence_comparison_method" value="substring"/>
+        <param name="accessions_whitelist" value=""/>
+        <param name="remove_annotated_features" value="false"/>
+        <param name="remove_unannotated_features" value="false"/>
+        <param name="remove_unassigned_ids" value="false"/>
+        <param name="rt" value="0.1"/>
+        <param name="mz" value="0.001"/>
+        <param name="blacklist_imperfect" value="false"/>
+      </section>
+      <section name="algorithm">
+        <section name="SignalToNoise">
+          <param name="max_intensity" value="-1"/>
+          <param name="auto_max_stdev_factor" value="3.0"/>
+          <param name="auto_max_percentile" value="95"/>
+          <param name="auto_mode" value="0"/>
+          <param name="win_len" value="200.0"/>
+          <param name="bin_count" value="30"/>
+          <param name="min_required_elements" value="10"/>
+          <param name="noise_for_empty_window" value="1e+20"/>
+          <param name="write_log_messages" value="true"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileFilter_12_input.mzML"/>
+      <output name="out" file="FileFilter_12_output.mzML" compare="sim_size" delta="5700" ftype="mzml"/>
+      <param name="out_type" value="mzML"/>
+      <param name="rt" value=":"/>
+      <param name="mz" value=":"/>
+      <param name="int" value=":"/>
+      <param name="sort" value="false"/>
+      <section name="peak_options">
+        <param name="sn" value="0.0"/>
+        <param name="rm_pc_charge" value=""/>
+        <param name="pc_mz_range" value=":"/>
+        <param name="pc_mz_list" value=""/>
+        <param name="level" value="1 2 3"/>
+        <param name="sort_peaks" value="false"/>
+        <param name="no_chromatograms" value="false"/>
+        <param name="remove_chromatograms" value="true"/>
+        <param name="remove_empty" value="false"/>
+        <param name="mz_precision" value="64"/>
+        <param name="int_precision" value="32"/>
+        <param name="indexed_file" value="true"/>
+        <param name="zlib_compression" value="false"/>
+        <section name="numpress">
+          <param name="masstime" value="none"/>
+          <param name="lossy_mass_accuracy" value="-1.0"/>
+          <param name="intensity" value="none"/>
+          <param name="float_da" value="none"/>
+        </section>
+      </section>
+      <section name="spectra">
+        <param name="remove_zoom" value="false"/>
+        <param name="remove_mode" value=""/>
+        <param name="remove_activation" value=""/>
+        <param name="remove_collision_energy" value=":"/>
+        <param name="remove_isolation_window_width" value=":"/>
+        <param name="select_zoom" value="false"/>
+        <param name="select_mode" value=""/>
+        <param name="select_activation" value=""/>
+        <param name="select_collision_energy" value=":"/>
+        <param name="select_isolation_window_width" value=":"/>
+        <param name="select_polarity" value=""/>
+        <section name="blackorwhitelist">
+          <param name="similarity_threshold" value="-1.0"/>
+          <param name="rt" value="0.01"/>
+          <param name="mz" value="0.01"/>
+          <param name="use_ppm_tolerance" value="false"/>
+          <param name="blacklist" value="true"/>
+        </section>
+      </section>
+      <section name="feature">
+        <param name="q" value=":"/>
+      </section>
+      <section name="consensus">
+        <param name="map" value=""/>
+        <param name="map_and" value="false"/>
+        <section name="blackorwhitelist">
+          <param name="blacklist" value="true"/>
+          <param name="maps" value=""/>
+          <param name="rt" value="60.0"/>
+          <param name="mz" value="0.01"/>
+          <param name="use_ppm_tolerance" value="false"/>
+        </section>
+      </section>
+      <section name="f_and_c">
+        <param name="charge" value=":"/>
+        <param name="size" value=":"/>
+        <param name="remove_meta" value=""/>
+      </section>
+      <section name="id">
+        <param name="remove_clashes" value="false"/>
+        <param name="keep_best_score_id" value="false"/>
+        <param name="sequences_whitelist" value=""/>
+        <param name="sequence_comparison_method" value="substring"/>
+        <param name="accessions_whitelist" value=""/>
+        <param name="remove_annotated_features" value="false"/>
+        <param name="remove_unannotated_features" value="false"/>
+        <param name="remove_unassigned_ids" value="false"/>
+        <param name="rt" value="0.1"/>
+        <param name="mz" value="0.001"/>
+        <param name="blacklist_imperfect" value="false"/>
+      </section>
+      <section name="algorithm">
+        <section name="SignalToNoise">
+          <param name="max_intensity" value="-1"/>
+          <param name="auto_max_stdev_factor" value="3.0"/>
+          <param name="auto_max_percentile" value="95"/>
+          <param name="auto_mode" value="0"/>
+          <param name="win_len" value="200.0"/>
+          <param name="bin_count" value="30"/>
+          <param name="min_required_elements" value="10"/>
+          <param name="noise_for_empty_window" value="1e+20"/>
+          <param name="write_log_messages" value="true"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileFilter_13_input.consensusXML"/>
+      <output name="out" file="FileFilter_13_output.featureXML" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <param name="out_type" value="featureXML"/>
+      <param name="rt" value=":"/>
+      <param name="mz" value=":"/>
+      <param name="int" value=":"/>
+      <param name="sort" value="false"/>
+      <section name="peak_options">
+        <param name="sn" value="0.0"/>
+        <param name="rm_pc_charge" value=""/>
+        <param name="pc_mz_range" value=":"/>
+        <param name="pc_mz_list" value=""/>
+        <param name="level" value="1 2 3"/>
+        <param name="sort_peaks" value="false"/>
+        <param name="no_chromatograms" value="false"/>
+        <param name="remove_chromatograms" value="false"/>
+        <param name="remove_empty" value="false"/>
+        <param name="mz_precision" value="64"/>
+        <param name="int_precision" value="32"/>
+        <param name="indexed_file" value="true"/>
+        <param name="zlib_compression" value="false"/>
+        <section name="numpress">
+          <param name="masstime" value="none"/>
+          <param name="lossy_mass_accuracy" value="-1.0"/>
+          <param name="intensity" value="none"/>
+          <param name="float_da" value="none"/>
+        </section>
+      </section>
+      <section name="spectra">
+        <param name="remove_zoom" value="false"/>
+        <param name="remove_mode" value=""/>
+        <param name="remove_activation" value=""/>
+        <param name="remove_collision_energy" value=":"/>
+        <param name="remove_isolation_window_width" value=":"/>
+        <param name="select_zoom" value="false"/>
+        <param name="select_mode" value=""/>
+        <param name="select_activation" value=""/>
+        <param name="select_collision_energy" value=":"/>
+        <param name="select_isolation_window_width" value=":"/>
+        <param name="select_polarity" value=""/>
+        <section name="blackorwhitelist">
+          <param name="similarity_threshold" value="-1.0"/>
+          <param name="rt" value="0.01"/>
+          <param name="mz" value="0.01"/>
+          <param name="use_ppm_tolerance" value="false"/>
+          <param name="blacklist" value="true"/>
+        </section>
+      </section>
+      <section name="feature">
+        <param name="q" value=":"/>
+      </section>
+      <section name="consensus">
+        <param name="map" value="2"/>
+        <param name="map_and" value="false"/>
+        <section name="blackorwhitelist">
+          <param name="blacklist" value="true"/>
+          <param name="maps" value=""/>
+          <param name="rt" value="60.0"/>
+          <param name="mz" value="0.01"/>
+          <param name="use_ppm_tolerance" value="false"/>
+        </section>
+      </section>
+      <section name="f_and_c">
+        <param name="charge" value=":"/>
+        <param name="size" value=":"/>
+        <param name="remove_meta" value=""/>
+      </section>
+      <section name="id">
+        <param name="remove_clashes" value="false"/>
+        <param name="keep_best_score_id" value="false"/>
+        <param name="sequences_whitelist" value=""/>
+        <param name="sequence_comparison_method" value="substring"/>
+        <param name="accessions_whitelist" value=""/>
+        <param name="remove_annotated_features" value="false"/>
+        <param name="remove_unannotated_features" value="false"/>
+        <param name="remove_unassigned_ids" value="false"/>
+        <param name="rt" value="0.1"/>
+        <param name="mz" value="0.001"/>
+        <param name="blacklist_imperfect" value="false"/>
+      </section>
+      <section name="algorithm">
+        <section name="SignalToNoise">
+          <param name="max_intensity" value="-1"/>
+          <param name="auto_max_stdev_factor" value="3.0"/>
+          <param name="auto_max_percentile" value="95"/>
+          <param name="auto_mode" value="0"/>
+          <param name="win_len" value="200.0"/>
+          <param name="bin_count" value="30"/>
+          <param name="min_required_elements" value="10"/>
+          <param name="noise_for_empty_window" value="1e+20"/>
+          <param name="write_log_messages" value="true"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileFilter_14_input.consensusXML"/>
+      <output name="out" file="FileFilter_14_output.consensusXML" compare="sim_size" delta="5700" ftype="consensusxml"/>
+      <param name="out_type" value="consensusXML"/>
+      <param name="rt" value=":"/>
+      <param name="mz" value=":"/>
+      <param name="int" value=":"/>
+      <param name="sort" value="false"/>
+      <section name="peak_options">
+        <param name="sn" value="0.0"/>
+        <param name="rm_pc_charge" value=""/>
+        <param name="pc_mz_range" value=":"/>
+        <param name="pc_mz_list" value=""/>
+        <param name="level" value="1 2 3"/>
+        <param name="sort_peaks" value="false"/>
+        <param name="no_chromatograms" value="false"/>
+        <param name="remove_chromatograms" value="false"/>
+        <param name="remove_empty" value="false"/>
+        <param name="mz_precision" value="64"/>
+        <param name="int_precision" value="32"/>
+        <param name="indexed_file" value="true"/>
+        <param name="zlib_compression" value="false"/>
+        <section name="numpress">
+          <param name="masstime" value="none"/>
+          <param name="lossy_mass_accuracy" value="-1.0"/>
+          <param name="intensity" value="none"/>
+          <param name="float_da" value="none"/>
+        </section>
+      </section>
+      <section name="spectra">
+        <param name="remove_zoom" value="false"/>
+        <param name="remove_mode" value=""/>
+        <param name="remove_activation" value=""/>
+        <param name="remove_collision_energy" value=":"/>
+        <param name="remove_isolation_window_width" value=":"/>
+        <param name="select_zoom" value="false"/>
+        <param name="select_mode" value=""/>
+        <param name="select_activation" value=""/>
+        <param name="select_collision_energy" value=":"/>
+        <param name="select_isolation_window_width" value=":"/>
+        <param name="select_polarity" value=""/>
+        <section name="blackorwhitelist">
+          <param name="similarity_threshold" value="-1.0"/>
+          <param name="rt" value="0.01"/>
+          <param name="mz" value="0.01"/>
+          <param name="use_ppm_tolerance" value="false"/>
+          <param name="blacklist" value="true"/>
+        </section>
+      </section>
+      <section name="feature">
+        <param name="q" value=":"/>
+      </section>
+      <section name="consensus">
+        <param name="map" value="0 2"/>
+        <param name="map_and" value="false"/>
+        <section name="blackorwhitelist">
+          <param name="blacklist" value="true"/>
+          <param name="maps" value=""/>
+          <param name="rt" value="60.0"/>
+          <param name="mz" value="0.01"/>
+          <param name="use_ppm_tolerance" value="false"/>
+        </section>
+      </section>
+      <section name="f_and_c">
+        <param name="charge" value=":"/>
+        <param name="size" value=":"/>
+        <param name="remove_meta" value=""/>
+      </section>
+      <section name="id">
+        <param name="remove_clashes" value="false"/>
+        <param name="keep_best_score_id" value="false"/>
+        <param name="sequences_whitelist" value=""/>
+        <param name="sequence_comparison_method" value="substring"/>
+        <param name="accessions_whitelist" value=""/>
+        <param name="remove_annotated_features" value="false"/>
+        <param name="remove_unannotated_features" value="false"/>
+        <param name="remove_unassigned_ids" value="false"/>
+        <param name="rt" value="0.1"/>
+        <param name="mz" value="0.001"/>
+        <param name="blacklist_imperfect" value="false"/>
+      </section>
+      <section name="algorithm">
+        <section name="SignalToNoise">
+          <param name="max_intensity" value="-1"/>
+          <param name="auto_max_stdev_factor" value="3.0"/>
+          <param name="auto_max_percentile" value="95"/>
+          <param name="auto_mode" value="0"/>
+          <param name="win_len" value="200.0"/>
+          <param name="bin_count" value="30"/>
+          <param name="min_required_elements" value="10"/>
+          <param name="noise_for_empty_window" value="1e+20"/>
+          <param name="write_log_messages" value="true"/>
+        </section>
+      </section>
+      <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
+      <output name="ctd_out" ftype="xml">
+        <assert_contents>
+          <is_valid_xml/>
+        </assert_contents>
+      </output>
+    </test>
+    <test expect_num_outputs="2">
+      <conditional name="adv_opts_cond">
+        <param name="adv_opts_selector" value="advanced"/>
+        <param name="force" value="false"/>
+        <param name="test" value="true"/>
+      </conditional>
+      <param name="in" value="FileFilter_15_input.featureXML"/>
+      <output name="out" file="FileFilter_15_output.featureXML" compare="sim_size" delta="5700" ftype="featurexml"/>
+      <param name="out_type" value="featurexml"/>
+      <param name="rt" value=":"/>
+      <param name="mz" value=":"/>
+      <param name="int" value=":"/>
+      <param name="sort" value="false"/>
+      <section name="peak_options">
+        <param name="sn" value="0.0"/>
+        <param name="rm_pc_charge" value=""/>
+        <param name="pc_mz_range" value=":"/>
+        <param name="pc_mz_list" value=""/>
+        <param name="level" value="1 2 3"/>
+        <param name="sort_peaks" value="false"/>
+        <param name="no_chromatograms" value="false"/>
+        <param name="remove_chromatograms" value="false"/>
+        <param name="remove_empty" value="false"/>
+        <param name="mz_precision" value="64"/>
+        <param name="int_precision" value="32"/>
+        <param name="indexed_file" value="true"/>
+        <param name="zlib_compression" value="false"/>
+        <section name="numpress">
+          <param name="masstime" value="none"/>
+          <param name="lossy_mass_accuracy" value="-1.0"/>
+          <param name="intensity" value="none"/>
+          <param name="float_da" value="none"/>
+        </section>
+      </section>
+      <section name="spectra">
+        <param name="remove_zoom" value="false"/>
+        <param name="remove_mode" value=""/>
+        <param name="remove_activation" value=""/>
+        <param name="remove_collision_energy" value=":"/>
+        <param name="remove_isolation_window_width" value=":"/>
+        <param name="select_zoom" value="false"/>
+        <param name="select_mode" value=""/>
+        <param name="select_activation" value=""/>
+        <param name="select_collision_energy" value=":"/>
+        <param name="select_isolation_window_width" value=":"/>
+        <param name="select_polarity" value=""/>
+        <section name="blackorwhitelist">
+          <param name="similarity_threshold" value="-1.0"/>
+          <param name="rt" value="0.01"/>
+          <param name="mz" value="0.01"/>
+          <param name="use_ppm_tolerance" value="false"/>
+          <param name="blacklist" value="true"/>
+        </section>
+      </section>
+      <section name="feature">
+        <param name="q" value=":"/>
+      </section>
+      <section name="consensus">
+        <param name="map" value="&quo