changeset 9:32667824b653 draft

"planemo upload for repository https://github.com/galaxyproteomics/tools-galaxyp/tree/master/tools/openms commit ddf41e8bda1ba065f5cdec98e93dee8165ffc1b9"
author galaxyp
date Thu, 03 Sep 2020 16:16:16 +0000
parents 60d1971a0cf4
children 1aca7da945ba
files OMSSAAdapter.patch PepNovoAdapter.patch TICCalculator.xml 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, 30075 insertions(+), 403 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/OMSSAAdapter.patch	Thu Sep 03 16:16:16 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	Thu Sep 03 16:16:16 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/TICCalculator.xml	Fri May 17 09:56:14 2019 -0400
+++ b/TICCalculator.xml	Thu Sep 03 16:16:16 2020 +0000
@@ -1,66 +1,79 @@
 <?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: [Utilities]-->
-<tool id="TICCalculator" name="TICCalculator" version="2.3.0">
+<tool id="TICCalculator" name="TICCalculator" version="@TOOL_VERSION@+galaxy@GALAXY_VERSION@" profile="20.05">
   <description>Calculates the TIC from a mass spectrometric raw file (useful for benchmarking).</description>
   <macros>
     <token name="@EXECUTABLE@">TICCalculator</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[TICCalculator
+  <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)' &&
+
+## Main program call
 
-#if $param_in:
-  -in $param_in
-#end if
-#if $param_read_method:
-  -read_method
-  #if " " in str($param_read_method):
-    "$param_read_method"
-  #else
-    $param_read_method
-  #end if
-#end if
-#if $param_loadData:
-  -loadData
-  #if " " in str($param_loadData):
-    "$param_loadData"
-  #else
-    $param_loadData
-  #end if
-#end if
-#if $adv_opts.adv_opts_selector=='advanced':
-    #if $adv_opts.param_force:
-  -force
-#end if
-#end if
-&gt; $param_stdout
-]]></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)'
+| tee '$stdout'
+
+## Postprocessing
+#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="mzData,mzxml,mzml,cachedMzML,dta,dta2d,mgf,featurexml,consensusxml,ms2,fid,tabular,peplist,kroenik,tabular" optional="False" label="Input file to convert" help="(-in) "/>
-    <param name="param_read_method" type="select" optional="False" value="regular" label="Method to read the file" help="(-read_method) ">
+    <param name="in" argument="-in" type="data" format="consensusxml,dta,dta2d,edta,featurexml,kroenik,mgf,ms2,mzdata,mzml,mzxml,peplist,tabular" optional="false" label="Input file to convert" help=" select consensusxml,dta,dta2d,edta,featurexml,kroenik,mgf,ms2,mzdata,mzml,mzxml,peplist,tabular data sets(s)"/>
+    <param name="read_method" argument="-read_method" type="select" optional="false" label="Method to read the file" help="">
       <option value="regular" selected="true">regular</option>
       <option value="indexed">indexed</option>
       <option value="indexed_parallel">indexed_parallel</option>
       <option value="streaming">streaming</option>
       <option value="cached">cached</option>
       <option value="cached_parallel">cached_parallel</option>
+      <expand macro="list_string_san"/>
     </param>
-    <param name="param_loadData" display="radio" type="select" optional="False" value="true" label="Whether to actually load and decode the binary data (or whether to skip decoding the binary data)" help="(-loadData) ">
-      <option value="true" selected="true">true</option>
-      <option value="false">false</option>
+    <param name="loadData" argument="-loadData" type="boolean" truevalue="true" falsevalue="false" checked="true" label="Whether to actually load and decode the binary data (or whether to skip decoding the binary data)" help=""/>
+    <expand macro="adv_opts_macro">
+      <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>
-    <expand macro="advanced_options">
-      <param name="param_force" display="radio" type="boolean" truevalue="-force" falsevalue="" checked="false" optional="True" label="Overwrite tool specific checks" help="(-force) "/>
-    </expand>
   </inputs>
   <outputs>
-    <data name="param_stdout" format="txt" label="Output from stdout"/>
+    <data name="stdout" format="txt" label="${tool.name} on ${on_string}: stdout">
+      <filter>OPTIONAL_OUTPUTS is None</filter>
+    </data>
+    <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>Calculates the TIC from a mass spectrometric raw file (useful for benchmarking).
+  <tests>
+    <expand macro="autotest_TICCalculator"/>
+    <expand macro="manutest_TICCalculator"/>
+  </tests>
+  <help><![CDATA[Calculates the TIC from a mass spectrometric raw file (useful for benchmarking).
 
 
-For more information, visit https://abibuilder.informatik.uni-tuebingen.de/archive/openms/Documentation/release/2.3.0/html/UTILS_TICCalculator.html</help>
+For more information, visit http://www.openms.de/documentation/UTILS_TICCalculator.html]]></help>
+  <expand macro="references"/>
 </tool>
--- a/filetypes.txt	Fri May 17 09:56:14 2019 -0400
+++ b/filetypes.txt	Thu Sep 03 16:16:16 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	Thu Sep 03 16:16:16 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	Thu Sep 03 16:16:16 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	Thu Sep 03 16:16:16 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	Thu Sep 03 16:16:16 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	Thu Sep 03 16:16:16 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 09:56:14 2019 -0400
+++ b/macros.xml	Thu Sep 03 16:16:16 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	Thu Sep 03 16:16:16 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=""/>
+        <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="&quot;Oxidation&quot;"/>
+        <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="true"/>
+        <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"/>
+        </se