changeset 9:848df89b641a draft default tip

planemo upload for repository https://github.com/galaxyproteomics/tools-galaxyp/tree/master/tools/openms commit 5c080b1e2b99f1c88f4557e9fec8c45c9d23b906
author galaxyp
date Fri, 14 Jun 2024 21:31:30 +0000
parents 8bfa9d787dc7
children
files OpenPepXLLF.xml fill_ctd_clargs.py generate-foo.sh get_tests.py macros.xml prepare_test_data_manual.sh readme.md test-data.sh
diffstat 8 files changed, 605 insertions(+), 477 deletions(-) [+]
line wrap: on
line diff
--- a/OpenPepXLLF.xml	Thu Dec 01 19:13:01 2022 +0000
+++ b/OpenPepXLLF.xml	Fri Jun 14 21:31:30 2024 +0000
@@ -1,8 +1,7 @@
-<?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: [Identification]-->
+<!--Proposed Tool Section: [Cross-Linking]-->
 <tool id="OpenPepXLLF" name="OpenPepXLLF" version="@TOOL_VERSION@+galaxy@VERSION_SUFFIX@" profile="21.05">
-  <description>Tool for protein-protein cross linking with label-free linkers.</description>
+  <description>Tool for protein-protein cross linking with label-free linkers</description>
   <macros>
     <token name="@EXECUTABLE@">OpenPepXLLF</token>
     <import>macros.xml</import>
@@ -15,9 +14,9 @@
 
 ## Preprocessing
 mkdir in &&
-ln -s '$in' 'in/${re.sub("[^\w\-_]", "_", $in.element_identifier)}.$gxy2omsext($in.ext)' &&
+cp '$in' 'in/${re.sub("[^\w\-_]", "_", $in.element_identifier)}.$gxy2omsext($in.ext)' &&
 mkdir database &&
-ln -s '$database' 'database/${re.sub("[^\w\-_]", "_", $database.element_identifier)}.$gxy2omsext($database.ext)' &&
+cp '$database' 'database/${re.sub("[^\w\-_]", "_", $database.element_identifier)}.$gxy2omsext($database.ext)' &&
 #if "out_idXML_FLAG" in str($OPTIONAL_OUTPUTS).split(',')
   mkdir out_idXML &&
 #end if
@@ -30,11 +29,13 @@
 #if "out_xquest_specxml_FLAG" in str($OPTIONAL_OUTPUTS).split(',')
   mkdir out_xquest_specxml &&
 #end if
+## advanced options
   #if $adv_opts.decoy_database:
     mkdir adv_opts.decoy_database &&
-    ln -s '$adv_opts.decoy_database' 'adv_opts.decoy_database/${re.sub("[^\w\-_]", "_", $adv_opts.decoy_database.element_identifier)}.$gxy2omsext($adv_opts.decoy_database.ext)' &&
+    cp '$adv_opts.decoy_database' 'adv_opts.decoy_database/${re.sub("[^\w\-_]", "_", $adv_opts.decoy_database.element_identifier)}.$gxy2omsext($adv_opts.decoy_database.ext)' &&
   #end if
 
+
 ## Main program call
 
 set -o pipefail &&
@@ -61,10 +62,12 @@
   -out_xquest_specxml
   'out_xquest_specxml/output.${gxy2omsext("spec.xml")}'
 #end if
+## advanced options
   #if $adv_opts.decoy_database:
     -decoy_database
     'adv_opts.decoy_database/${re.sub("[^\w\-_]", "_", $adv_opts.decoy_database.element_identifier)}.$gxy2omsext($adv_opts.decoy_database.ext)'
   #end if
+
 #if len(str($OPTIONAL_OUTPUTS).split(',')) == 0
   | tee '$stdout'
 #end if
@@ -90,36 +93,36 @@
     <configfile name="hardcoded_json"><![CDATA[{"log": "log.txt", "threads": "\${GALAXY_SLOTS:-1}", "no_progress": true}]]></configfile>
   </configfiles>
   <inputs>
-    <param argument="-in" type="data" format="mzml" optional="false" label="Input file containing the spectra" help=" select mzml data sets(s)"/>
-    <param argument="-database" type="data" format="fasta" optional="false" label="Input file containing the protein database" help=" select fasta data sets(s)"/>
-    <param argument="-decoy_string" type="text" optional="true" value="DECOY_" label="String that was appended (or prefixed - see 'prefix' flag below) to the accessions in the protein database to indicate decoy proteins" help="">
+    <param argument="-in" type="data" format="mzml" label="Input file containing the spectra" help=" select mzml data sets(s)"/>
+    <param argument="-database" type="data" format="fasta" label="Input file containing the protein database" help=" select fasta data sets(s)"/>
+    <param argument="-decoy_string" type="text" value="DECOY_" label="String that was appended (or prefixed - see 'prefix' flag below) to the accessions in the protein database to indicate decoy proteins" help="">
       <expand macro="list_string_san" name="decoy_string"/>
     </param>
     <param argument="-decoy_prefix" type="boolean" truevalue="true" falsevalue="false" checked="true" label="Set to true, if the decoy_string is a prefix of accessions in the protein database" help="Otherwise it is a suffix"/>
     <section name="precursor" title="Precursor filtering settings" help="" expanded="false">
-      <param name="mass_tolerance" argument="-precursor:mass_tolerance" type="float" optional="true" value="10.0" label="Width of precursor mass tolerance window" help=""/>
-      <param name="mass_tolerance_unit" argument="-precursor:mass_tolerance_unit" type="select" optional="true" label="Unit of precursor mass tolerance" help="">
+      <param name="mass_tolerance" argument="-precursor:mass_tolerance" type="float" value="10.0" label="Width of precursor mass tolerance window" help=""/>
+      <param name="mass_tolerance_unit" argument="-precursor:mass_tolerance_unit" type="select" label="Unit of precursor mass tolerance" help="">
         <option value="ppm" selected="true">ppm</option>
         <option value="Da">Da</option>
         <expand macro="list_string_san" name="mass_tolerance_unit"/>
       </param>
-      <param name="min_charge" argument="-precursor:min_charge" type="integer" optional="true" value="2" label="Minimum precursor charge to be considered" help=""/>
-      <param name="max_charge" argument="-precursor:max_charge" type="integer" optional="true" value="8" label="Maximum precursor charge to be considered" help=""/>
-      <param name="corrections" argument="-precursor:corrections" type="text" optional="true" value="4 3 2 1 0" label="Monoisotopic peak correction" help="Matches candidates for possible monoisotopic precursor peaks for experimental mass m and given numbers n at masses (m - n * (C13-C12)). These should be ordered from more extreme to less extreme corrections. Numbers later in the list will be preferred in case of ambiguities (space separated list, in order to allow for spaces in list items surround them by single quotes)">
+      <param name="min_charge" argument="-precursor:min_charge" type="integer" value="2" label="Minimum precursor charge to be considered" help=""/>
+      <param name="max_charge" argument="-precursor:max_charge" type="integer" value="8" label="Maximum precursor charge to be considered" help=""/>
+      <param name="corrections" argument="-precursor:corrections" type="text" value="4 3 2 1 0" label="Monoisotopic peak correction" help="Matches candidates for possible monoisotopic precursor peaks for experimental mass m and given numbers n at masses (m - n * (C13-C12)). These should be ordered from more extreme to less extreme corrections. Numbers later in the list will be preferred in case of ambiguities (space separated list, in order to allow for spaces in list items surround them by single quotes)">
         <expand macro="list_integer_valsan" name="corrections"/>
       </param>
     </section>
     <section name="fragment" title="Fragment peak matching settings" help="" expanded="false">
-      <param name="mass_tolerance" argument="-fragment:mass_tolerance" type="float" optional="true" value="20.0" label="Fragment mass tolerance" help=""/>
-      <param name="mass_tolerance_xlinks" argument="-fragment:mass_tolerance_xlinks" type="float" optional="true" value="20.0" label="Fragment mass tolerance for cross-link ions" help=""/>
-      <param name="mass_tolerance_unit" argument="-fragment:mass_tolerance_unit" type="select" optional="true" label="Unit of fragment m" help="">
+      <param name="mass_tolerance" argument="-fragment:mass_tolerance" type="float" value="20.0" label="Fragment mass tolerance" help=""/>
+      <param name="mass_tolerance_xlinks" argument="-fragment:mass_tolerance_xlinks" type="float" value="20.0" label="Fragment mass tolerance for cross-link ions" help=""/>
+      <param name="mass_tolerance_unit" argument="-fragment:mass_tolerance_unit" type="select" label="Unit of fragment m" help="">
         <option value="ppm" selected="true">ppm</option>
         <option value="Da">Da</option>
         <expand macro="list_string_san" name="mass_tolerance_unit"/>
       </param>
     </section>
     <section name="modifications" title="Peptide modification settings" help="" expanded="false">
-      <param name="fixed" argument="-modifications:fixed" multiple="true" type="select" optional="true" label="Fixed modifications, specified using UniMod (www.unimod.org) terms" help="e.g. 'Carbamidomethyl (C)'">
+      <param name="fixed" argument="-modifications:fixed" type="select" multiple="true" optional="false" label="Fixed modifications, specified using UniMod (www.unimod.org) terms" help="e.g. 'Carbamidomethyl (C)'">
         <option value="15N-oxobutanoic (N-term C)">15N-oxobutanoic (N-term C)</option>
         <option value="15N-oxobutanoic (Protein N-term S)">15N-oxobutanoic (Protein N-term S)</option>
         <option value="15N-oxobutanoic (Protein N-term T)">15N-oxobutanoic (Protein N-term T)</option>
@@ -129,6 +132,10 @@
         <option value="2-succinyl (C)">2-succinyl (C)</option>
         <option value="2HPG (R)">2HPG (R)</option>
         <option value="3-deoxyglucosone (R)">3-deoxyglucosone (R)</option>
+        <option value="3-hydroxybenzyl-phosphate (K)">3-hydroxybenzyl-phosphate (K)</option>
+        <option value="3-hydroxybenzyl-phosphate (S)">3-hydroxybenzyl-phosphate (S)</option>
+        <option value="3-hydroxybenzyl-phosphate (T)">3-hydroxybenzyl-phosphate (T)</option>
+        <option value="3-hydroxybenzyl-phosphate (Y)">3-hydroxybenzyl-phosphate (Y)</option>
         <option value="3-phosphoglyceryl (K)">3-phosphoglyceryl (K)</option>
         <option value="3sulfo (N-term)">3sulfo (N-term)</option>
         <option value="4-ONE (C)">4-ONE (C)</option>
@@ -218,6 +225,7 @@
         <option value="AMTzHexNAc2 (N)">AMTzHexNAc2 (N)</option>
         <option value="AMTzHexNAc2 (S)">AMTzHexNAc2 (S)</option>
         <option value="AMTzHexNAc2 (T)">AMTzHexNAc2 (T)</option>
+        <option value="Andro-H2O (C)">Andro-H2O (C)</option>
         <option value="Archaeol (C)">Archaeol (C)</option>
         <option value="Arg (N-term)">Arg (N-term)</option>
         <option value="Arg-&gt;Ala (R)">Arg-&gt;Ala (R)</option>
@@ -321,6 +329,7 @@
         <option value="Biotin-phenacyl (H)">Biotin-phenacyl (H)</option>
         <option value="Biotin-phenacyl (S)">Biotin-phenacyl (S)</option>
         <option value="Biotin-tyramide (Y)">Biotin-tyramide (Y)</option>
+        <option value="Biotin:Aha-DADPS (M)">Biotin:Aha-DADPS (M)</option>
         <option value="Biotin:Cayman-10013 (C)">Biotin:Cayman-10013 (C)</option>
         <option value="Biotin:Cayman-10141 (C)">Biotin:Cayman-10141 (C)</option>
         <option value="Biotin:Invitrogen-M1602 (C)">Biotin:Invitrogen-M1602 (C)</option>
@@ -353,7 +362,6 @@
         <option value="BITC (N-term)">BITC (N-term)</option>
         <option value="BMP-piperidinol (C)">BMP-piperidinol (C)</option>
         <option value="BMP-piperidinol (M)">BMP-piperidinol (M)</option>
-        <option value="Bodipy (C)">Bodipy (C)</option>
         <option value="Brij35 (N-term)">Brij35 (N-term)</option>
         <option value="Brij58 (N-term)">Brij58 (N-term)</option>
         <option value="Bromo (F)">Bromo (F)</option>
@@ -785,9 +793,9 @@
         <option value="Dehydrated (T)">Dehydrated (T)</option>
         <option value="Dehydrated (Y)">Dehydrated (Y)</option>
         <option value="Dehydro (C)">Dehydro (C)</option>
+        <option value="Delta:H(-1)N(-1)18O(1) (N)">Delta:H(-1)N(-1)18O(1) (N)</option>
         <option value="Delta:H(-4)O(2) (W)">Delta:H(-4)O(2) (W)</option>
         <option value="Delta:H(-4)O(3) (W)">Delta:H(-4)O(3) (W)</option>
-        <option value="Delta:H(1)N(-1)18O(1) (N)">Delta:H(1)N(-1)18O(1) (N)</option>
         <option value="Delta:H(10)C(8)O(1) (K)">Delta:H(10)C(8)O(1) (K)</option>
         <option value="Delta:H(2)C(2) (H)">Delta:H(2)C(2) (H)</option>
         <option value="Delta:H(2)C(2) (K)">Delta:H(2)C(2) (K)</option>
@@ -797,7 +805,6 @@
         <option value="Delta:H(2)C(3)O(1) (K)">Delta:H(2)C(3)O(1) (K)</option>
         <option value="Delta:H(2)C(3)O(1) (R)">Delta:H(2)C(3)O(1) (R)</option>
         <option value="Delta:H(2)C(5) (K)">Delta:H(2)C(5) (K)</option>
-        <option value="Delta:H(3)C(3)O(2) (K)">Delta:H(3)C(3)O(2) (K)</option>
         <option value="Delta:H(4)C(2) (H)">Delta:H(4)C(2) (H)</option>
         <option value="Delta:H(4)C(2) (K)">Delta:H(4)C(2) (K)</option>
         <option value="Delta:H(4)C(2) (N-term)">Delta:H(4)C(2) (N-term)</option>
@@ -809,6 +816,7 @@
         <option value="Delta:H(4)C(3)O(1) (H)">Delta:H(4)C(3)O(1) (H)</option>
         <option value="Delta:H(4)C(3)O(1) (K)">Delta:H(4)C(3)O(1) (K)</option>
         <option value="Delta:H(4)C(3)O(1) (R)">Delta:H(4)C(3)O(1) (R)</option>
+        <option value="Delta:H(4)C(3)O(2) (K)">Delta:H(4)C(3)O(2) (K)</option>
         <option value="Delta:H(4)C(5)O(1) (R)">Delta:H(4)C(5)O(1) (R)</option>
         <option value="Delta:H(4)C(6) (K)">Delta:H(4)C(6) (K)</option>
         <option value="Delta:H(5)C(2) (P)">Delta:H(5)C(2) (P)</option>
@@ -1381,7 +1389,6 @@
         <option value="Ethanolyl (C)">Ethanolyl (C)</option>
         <option value="Ethanolyl (K)">Ethanolyl (K)</option>
         <option value="Ethanolyl (R)">Ethanolyl (R)</option>
-        <option value="Ethoxyformyl (H)">Ethoxyformyl (H)</option>
         <option value="Ethyl (C-term)">Ethyl (C-term)</option>
         <option value="Ethyl (D)">Ethyl (D)</option>
         <option value="Ethyl (E)">Ethyl (E)</option>
@@ -1475,6 +1482,7 @@
         <option value="Gln-&gt;Xle (Q)">Gln-&gt;Xle (Q)</option>
         <option value="Glu (E)">Glu (E)</option>
         <option value="Glu (Protein C-term)">Glu (Protein C-term)</option>
+        <option value="Glu+O(2) (H)">Glu+O(2) (H)</option>
         <option value="Glu-&gt;Ala (E)">Glu-&gt;Ala (E)</option>
         <option value="Glu-&gt;Arg (E)">Glu-&gt;Arg (E)</option>
         <option value="Glu-&gt;Asn (E)">Glu-&gt;Asn (E)</option>
@@ -1489,7 +1497,6 @@
         <option value="Glu-&gt;Pro (E)">Glu-&gt;Pro (E)</option>
         <option value="Glu-&gt;pyro-Glu (N-term E)">Glu-&gt;pyro-Glu (N-term E)</option>
         <option value="Glu-&gt;pyro-Glu+Methyl (N-term E)">Glu-&gt;pyro-Glu+Methyl (N-term E)</option>
-        <option value="Glu-&gt;pyro-Glu+Methyl:2H(2)13C (N-term E)">Glu-&gt;pyro-Glu+Methyl:2H(2)13C (N-term E)</option>
         <option value="Glu-&gt;pyro-Glu+Methyl:2H(2)13C(1) (N-term E)">Glu-&gt;pyro-Glu+Methyl:2H(2)13C(1) (N-term E)</option>
         <option value="Glu-&gt;Ser (E)">Glu-&gt;Ser (E)</option>
         <option value="Glu-&gt;Thr (E)">Glu-&gt;Thr (E)</option>
@@ -1513,6 +1520,7 @@
         <option value="Gly (K)">Gly (K)</option>
         <option value="Gly (S)">Gly (S)</option>
         <option value="Gly (T)">Gly (T)</option>
+        <option value="Gly+O(2) (H)">Gly+O(2) (H)</option>
         <option value="Gly-&gt;Ala (G)">Gly-&gt;Ala (G)</option>
         <option value="Gly-&gt;Arg (G)">Gly-&gt;Arg (G)</option>
         <option value="Gly-&gt;Asn (G)">Gly-&gt;Asn (G)</option>
@@ -1903,6 +1911,7 @@
         <option value="Hex(6)HexNAc(4)Me(3) (N)">Hex(6)HexNAc(4)Me(3) (N)</option>
         <option value="Hex(6)HexNAc(4)Me(3)Pent(1) (N)">Hex(6)HexNAc(4)Me(3)Pent(1) (N)</option>
         <option value="Hex(6)HexNAc(5) (N)">Hex(6)HexNAc(5) (N)</option>
+        <option value="Hex(6)HexNAc(5)NeuAc(3) (N)">Hex(6)HexNAc(5)NeuAc(3) (N)</option>
         <option value="Hex(6)Phos(1) (S)">Hex(6)Phos(1) (S)</option>
         <option value="Hex(6)Phos(1) (T)">Hex(6)Phos(1) (T)</option>
         <option value="Hex(6)Phos(3) (S)">Hex(6)Phos(3) (S)</option>
@@ -1914,6 +1923,9 @@
         <option value="Hex(7)HexNAc(3) (N)">Hex(7)HexNAc(3) (N)</option>
         <option value="Hex(7)HexNAc(3)Phos(1) (N)">Hex(7)HexNAc(3)Phos(1) (N)</option>
         <option value="Hex(7)HexNAc(4) (N)">Hex(7)HexNAc(4) (N)</option>
+        <option value="Hex(7)HexNAc(6) (N)">Hex(7)HexNAc(6) (N)</option>
+        <option value="Hex(7)HexNAc(6) (S)">Hex(7)HexNAc(6) (S)</option>
+        <option value="Hex(7)HexNAc(6) (T)">Hex(7)HexNAc(6) (T)</option>
         <option value="Hex(7)Phos(3) (S)">Hex(7)Phos(3) (S)</option>
         <option value="Hex(7)Phos(3) (T)">Hex(7)Phos(3) (T)</option>
         <option value="Hex(8)HexNAc(1) (N)">Hex(8)HexNAc(1) (N)</option>
@@ -1969,6 +1981,7 @@
         <option value="HexNAc(4) (T)">HexNAc(4) (T)</option>
         <option value="HexNAc(5) (S)">HexNAc(5) (S)</option>
         <option value="HexNAc(5) (T)">HexNAc(5) (T)</option>
+        <option value="His+O(2) (H)">His+O(2) (H)</option>
         <option value="His-&gt;Ala (H)">His-&gt;Ala (H)</option>
         <option value="His-&gt;Arg (H)">His-&gt;Arg (H)</option>
         <option value="His-&gt;Asn (H)">His-&gt;Asn (H)</option>
@@ -2106,11 +2119,14 @@
         <option value="iTRAQ8plex:13C(6)15N(2) (K)">iTRAQ8plex:13C(6)15N(2) (K)</option>
         <option value="iTRAQ8plex:13C(6)15N(2) (N-term)">iTRAQ8plex:13C(6)15N(2) (N-term)</option>
         <option value="iTRAQ8plex:13C(6)15N(2) (Y)">iTRAQ8plex:13C(6)15N(2) (Y)</option>
+        <option value="Kdo (S)">Kdo (S)</option>
+        <option value="Kdo (T)">Kdo (T)</option>
         <option value="Label:13C(1)2H(3) (M)">Label:13C(1)2H(3) (M)</option>
         <option value="Label:13C(1)2H(3)+Oxidation (M)">Label:13C(1)2H(3)+Oxidation (M)</option>
         <option value="Label:13C(2)15N(2) (K)">Label:13C(2)15N(2) (K)</option>
         <option value="Label:13C(3) (A)">Label:13C(3) (A)</option>
         <option value="Label:13C(3)15N(1) (A)">Label:13C(3)15N(1) (A)</option>
+        <option value="Label:13C(3)15N(1) (S)">Label:13C(3)15N(1) (S)</option>
         <option value="Label:13C(4) (M)">Label:13C(4) (M)</option>
         <option value="Label:13C(4)+Oxidation (M)">Label:13C(4)+Oxidation (M)</option>
         <option value="Label:13C(4)15N(1) (D)">Label:13C(4)15N(1) (D)</option>
@@ -2195,13 +2211,16 @@
         <option value="LG-lactam-K (K)">LG-lactam-K (K)</option>
         <option value="LG-lactam-K (Protein N-term)">LG-lactam-K (Protein N-term)</option>
         <option value="LG-lactam-R (R)">LG-lactam-R (R)</option>
+        <option value="LG-pyrrole (C)">LG-pyrrole (C)</option>
         <option value="LG-pyrrole (K)">LG-pyrrole (K)</option>
         <option value="LG-pyrrole (N-term)">LG-pyrrole (N-term)</option>
         <option value="Lipoyl (K)">Lipoyl (K)</option>
         <option value="LRGG (K)">LRGG (K)</option>
         <option value="LRGG+dimethyl (K)">LRGG+dimethyl (K)</option>
         <option value="LRGG+methyl (K)">LRGG+methyl (K)</option>
+        <option value="LTX+Lophotoxin (Y)">LTX+Lophotoxin (Y)</option>
         <option value="Lys (N-term)">Lys (N-term)</option>
+        <option value="Lys+O(2) (H)">Lys+O(2) (H)</option>
         <option value="Lys-&gt;Ala (K)">Lys-&gt;Ala (K)</option>
         <option value="Lys-&gt;Allysine (K)">Lys-&gt;Allysine (K)</option>
         <option value="Lys-&gt;AminoadipicAcid (K)">Lys-&gt;AminoadipicAcid (K)</option>
@@ -2236,6 +2255,7 @@
         <option value="Malonyl (C)">Malonyl (C)</option>
         <option value="Malonyl (K)">Malonyl (K)</option>
         <option value="Malonyl (S)">Malonyl (S)</option>
+        <option value="MBS+peptide (C)">MBS+peptide (C)</option>
         <option value="MDCC (C)">MDCC (C)</option>
         <option value="MeMePhosphorothioate (S)">MeMePhosphorothioate (S)</option>
         <option value="Menadione (C)">Menadione (C)</option>
@@ -2247,6 +2267,7 @@
         <option value="MesitylOxide (H)">MesitylOxide (H)</option>
         <option value="MesitylOxide (K)">MesitylOxide (K)</option>
         <option value="MesitylOxide (Protein N-term)">MesitylOxide (Protein N-term)</option>
+        <option value="Met+O(2) (H)">Met+O(2) (H)</option>
         <option value="Met-&gt;Aha (M)">Met-&gt;Aha (M)</option>
         <option value="Met-&gt;Ala (M)">Met-&gt;Ala (M)</option>
         <option value="Met-&gt;Arg (M)">Met-&gt;Arg (M)</option>
@@ -2430,7 +2451,6 @@
         <option value="Nmethylmaleimide+water (C)">Nmethylmaleimide+water (C)</option>
         <option value="NO_SMX_SEMD (C)">NO_SMX_SEMD (C)</option>
         <option value="NO_SMX_SIMD (C)">NO_SMX_SIMD (C)</option>
-        <option value="NO_SMX_SMCT (C)">NO_SMX_SMCT (C)</option>
         <option value="NP40 (N-term)">NP40 (N-term)</option>
         <option value="NQIGG (K)">NQIGG (K)</option>
         <option value="O-Dimethylphosphate (S)">O-Dimethylphosphate (S)</option>
@@ -2518,6 +2538,10 @@
         <option value="Phe-&gt;Tyr (F)">Phe-&gt;Tyr (F)</option>
         <option value="Phe-&gt;Val (F)">Phe-&gt;Val (F)</option>
         <option value="Phe-&gt;Xle (F)">Phe-&gt;Xle (F)</option>
+        <option value="phenyl-phosphate (K)">phenyl-phosphate (K)</option>
+        <option value="phenyl-phosphate (S)">phenyl-phosphate (S)</option>
+        <option value="phenyl-phosphate (T)">phenyl-phosphate (T)</option>
+        <option value="phenyl-phosphate (Y)">phenyl-phosphate (Y)</option>
         <option value="Phenylisocyanate (N-term)">Phenylisocyanate (N-term)</option>
         <option value="Phenylisocyanate:2H(5) (N-term)">Phenylisocyanate:2H(5) (N-term)</option>
         <option value="phenylsulfonylethyl (C)">phenylsulfonylethyl (C)</option>
@@ -2532,6 +2556,7 @@
         <option value="Phospho (Y)">Phospho (Y)</option>
         <option value="Phosphoadenosine (H)">Phosphoadenosine (H)</option>
         <option value="Phosphoadenosine (K)">Phosphoadenosine (K)</option>
+        <option value="Phosphoadenosine (S)">Phosphoadenosine (S)</option>
         <option value="Phosphoadenosine (T)">Phosphoadenosine (T)</option>
         <option value="Phosphoadenosine (Y)">Phosphoadenosine (Y)</option>
         <option value="PhosphoCytidine (S)">PhosphoCytidine (S)</option>
@@ -2563,6 +2588,7 @@
         <option value="Phytochromobilin (C)">Phytochromobilin (C)</option>
         <option value="Piperidine (K)">Piperidine (K)</option>
         <option value="Piperidine (N-term)">Piperidine (N-term)</option>
+        <option value="Pro+O(2) (H)">Pro+O(2) (H)</option>
         <option value="Pro-&gt;Ala (P)">Pro-&gt;Ala (P)</option>
         <option value="Pro-&gt;Arg (P)">Pro-&gt;Arg (P)</option>
         <option value="Pro-&gt;Asn (P)">Pro-&gt;Asn (P)</option>
@@ -2640,18 +2666,30 @@
         <option value="QTGG (K)">QTGG (K)</option>
         <option value="Quinone (W)">Quinone (W)</option>
         <option value="Quinone (Y)">Quinone (Y)</option>
+        <option value="RBS-ID_Uridine (A)">RBS-ID_Uridine (A)</option>
+        <option value="RBS-ID_Uridine (C)">RBS-ID_Uridine (C)</option>
+        <option value="RBS-ID_Uridine (D)">RBS-ID_Uridine (D)</option>
+        <option value="RBS-ID_Uridine (E)">RBS-ID_Uridine (E)</option>
+        <option value="RBS-ID_Uridine (F)">RBS-ID_Uridine (F)</option>
+        <option value="RBS-ID_Uridine (G)">RBS-ID_Uridine (G)</option>
+        <option value="RBS-ID_Uridine (H)">RBS-ID_Uridine (H)</option>
+        <option value="RBS-ID_Uridine (I)">RBS-ID_Uridine (I)</option>
+        <option value="RBS-ID_Uridine (K)">RBS-ID_Uridine (K)</option>
+        <option value="RBS-ID_Uridine (L)">RBS-ID_Uridine (L)</option>
+        <option value="RBS-ID_Uridine (M)">RBS-ID_Uridine (M)</option>
+        <option value="RBS-ID_Uridine (N)">RBS-ID_Uridine (N)</option>
+        <option value="RBS-ID_Uridine (P)">RBS-ID_Uridine (P)</option>
+        <option value="RBS-ID_Uridine (Q)">RBS-ID_Uridine (Q)</option>
+        <option value="RBS-ID_Uridine (R)">RBS-ID_Uridine (R)</option>
+        <option value="RBS-ID_Uridine (S)">RBS-ID_Uridine (S)</option>
+        <option value="RBS-ID_Uridine (T)">RBS-ID_Uridine (T)</option>
+        <option value="RBS-ID_Uridine (V)">RBS-ID_Uridine (V)</option>
+        <option value="RBS-ID_Uridine (W)">RBS-ID_Uridine (W)</option>
+        <option value="RBS-ID_Uridine (Y)">RBS-ID_Uridine (Y)</option>
         <option value="Retinylidene (K)">Retinylidene (K)</option>
         <option value="RNPXL (N-term K)">RNPXL (N-term K)</option>
         <option value="RNPXL (N-term R)">RNPXL (N-term R)</option>
         <option value="RNPXlink1 (C)">RNPXlink1 (C)</option>
-        <option value="RNPXlink2 (F)">RNPXlink2 (F)</option>
-        <option value="RNPXlink2 (K)">RNPXlink2 (K)</option>
-        <option value="RNPXlink2 (L)">RNPXlink2 (L)</option>
-        <option value="RNPXlink3 (C)">RNPXlink3 (C)</option>
-        <option value="RNPXlink3 (F)">RNPXlink3 (F)</option>
-        <option value="RNPXlink4 (C)">RNPXlink4 (C)</option>
-        <option value="RNPXlink5 (F)">RNPXlink5 (F)</option>
-        <option value="RNPXlink5 (Y)">RNPXlink5 (Y)</option>
         <option value="s-GlcNAc (S)">s-GlcNAc (S)</option>
         <option value="s-GlcNAc (T)">s-GlcNAc (T)</option>
         <option value="Saligenin (H)">Saligenin (H)</option>
@@ -2679,6 +2717,9 @@
         <option value="shTMT (K)">shTMT (K)</option>
         <option value="shTMT (N-term)">shTMT (N-term)</option>
         <option value="shTMT (Protein N-term)">shTMT (Protein N-term)</option>
+        <option value="shTMTpro (K)">shTMTpro (K)</option>
+        <option value="shTMTpro (N-term)">shTMTpro (N-term)</option>
+        <option value="shTMTpro (Protein N-term)">shTMTpro (Protein N-term)</option>
         <option value="SMA (K)">SMA (K)</option>
         <option value="SMA (N-term)">SMA (N-term)</option>
         <option value="spermidine (Q)">spermidine (Q)</option>
@@ -2854,7 +2895,6 @@
         <option value="Tyr-&gt;Trp (Y)">Tyr-&gt;Trp (Y)</option>
         <option value="Tyr-&gt;Val (Y)">Tyr-&gt;Val (Y)</option>
         <option value="Tyr-&gt;Xle (Y)">Tyr-&gt;Xle (Y)</option>
-        <option value="Ub-amide (C)">Ub-amide (C)</option>
         <option value="Ub-Br2 (C)">Ub-Br2 (C)</option>
         <option value="Ub-fluorescein (C)">Ub-fluorescein (C)</option>
         <option value="Ub-VME (C)">Ub-VME (C)</option>
@@ -3049,7 +3089,7 @@
         <option value="ZQG (K)">ZQG (K)</option>
         <expand macro="list_string_san" name="fixed"/>
       </param>
-      <param name="variable" argument="-modifications:variable" multiple="true" type="select" optional="true" label="Variable modifications, specified using UniMod (www.unimod.org) terms" help="e.g. 'Oxidation (M)'">
+      <param name="variable" argument="-modifications:variable" type="select" multiple="true" optional="false" label="Variable modifications, specified using UniMod (www.unimod.org) terms" help="e.g. 'Oxidation (M)'">
         <option value="15N-oxobutanoic (N-term C)">15N-oxobutanoic (N-term C)</option>
         <option value="15N-oxobutanoic (Protein N-term S)">15N-oxobutanoic (Protein N-term S)</option>
         <option value="15N-oxobutanoic (Protein N-term T)">15N-oxobutanoic (Protein N-term T)</option>
@@ -3059,6 +3099,10 @@
         <option value="2-succinyl (C)">2-succinyl (C)</option>
         <option value="2HPG (R)">2HPG (R)</option>
         <option value="3-deoxyglucosone (R)">3-deoxyglucosone (R)</option>
+        <option value="3-hydroxybenzyl-phosphate (K)">3-hydroxybenzyl-phosphate (K)</option>
+        <option value="3-hydroxybenzyl-phosphate (S)">3-hydroxybenzyl-phosphate (S)</option>
+        <option value="3-hydroxybenzyl-phosphate (T)">3-hydroxybenzyl-phosphate (T)</option>
+        <option value="3-hydroxybenzyl-phosphate (Y)">3-hydroxybenzyl-phosphate (Y)</option>
         <option value="3-phosphoglyceryl (K)">3-phosphoglyceryl (K)</option>
         <option value="3sulfo (N-term)">3sulfo (N-term)</option>
         <option value="4-ONE (C)">4-ONE (C)</option>
@@ -3148,6 +3192,7 @@
         <option value="AMTzHexNAc2 (N)">AMTzHexNAc2 (N)</option>
         <option value="AMTzHexNAc2 (S)">AMTzHexNAc2 (S)</option>
         <option value="AMTzHexNAc2 (T)">AMTzHexNAc2 (T)</option>
+        <option value="Andro-H2O (C)">Andro-H2O (C)</option>
         <option value="Archaeol (C)">Archaeol (C)</option>
         <option value="Arg (N-term)">Arg (N-term)</option>
         <option value="Arg-&gt;Ala (R)">Arg-&gt;Ala (R)</option>
@@ -3251,6 +3296,7 @@
         <option value="Biotin-phenacyl (H)">Biotin-phenacyl (H)</option>
         <option value="Biotin-phenacyl (S)">Biotin-phenacyl (S)</option>
         <option value="Biotin-tyramide (Y)">Biotin-tyramide (Y)</option>
+        <option value="Biotin:Aha-DADPS (M)">Biotin:Aha-DADPS (M)</option>
         <option value="Biotin:Cayman-10013 (C)">Biotin:Cayman-10013 (C)</option>
         <option value="Biotin:Cayman-10141 (C)">Biotin:Cayman-10141 (C)</option>
         <option value="Biotin:Invitrogen-M1602 (C)">Biotin:Invitrogen-M1602 (C)</option>
@@ -3283,7 +3329,6 @@
         <option value="BITC (N-term)">BITC (N-term)</option>
         <option value="BMP-piperidinol (C)">BMP-piperidinol (C)</option>
         <option value="BMP-piperidinol (M)">BMP-piperidinol (M)</option>
-        <option value="Bodipy (C)">Bodipy (C)</option>
         <option value="Brij35 (N-term)">Brij35 (N-term)</option>
         <option value="Brij58 (N-term)">Brij58 (N-term)</option>
         <option value="Bromo (F)">Bromo (F)</option>
@@ -3715,9 +3760,9 @@
         <option value="Dehydrated (T)">Dehydrated (T)</option>
         <option value="Dehydrated (Y)">Dehydrated (Y)</option>
         <option value="Dehydro (C)">Dehydro (C)</option>
+        <option value="Delta:H(-1)N(-1)18O(1) (N)">Delta:H(-1)N(-1)18O(1) (N)</option>
         <option value="Delta:H(-4)O(2) (W)">Delta:H(-4)O(2) (W)</option>
         <option value="Delta:H(-4)O(3) (W)">Delta:H(-4)O(3) (W)</option>
-        <option value="Delta:H(1)N(-1)18O(1) (N)">Delta:H(1)N(-1)18O(1) (N)</option>
         <option value="Delta:H(10)C(8)O(1) (K)">Delta:H(10)C(8)O(1) (K)</option>
         <option value="Delta:H(2)C(2) (H)">Delta:H(2)C(2) (H)</option>
         <option value="Delta:H(2)C(2) (K)">Delta:H(2)C(2) (K)</option>
@@ -3727,7 +3772,6 @@
         <option value="Delta:H(2)C(3)O(1) (K)">Delta:H(2)C(3)O(1) (K)</option>
         <option value="Delta:H(2)C(3)O(1) (R)">Delta:H(2)C(3)O(1) (R)</option>
         <option value="Delta:H(2)C(5) (K)">Delta:H(2)C(5) (K)</option>
-        <option value="Delta:H(3)C(3)O(2) (K)">Delta:H(3)C(3)O(2) (K)</option>
         <option value="Delta:H(4)C(2) (H)">Delta:H(4)C(2) (H)</option>
         <option value="Delta:H(4)C(2) (K)">Delta:H(4)C(2) (K)</option>
         <option value="Delta:H(4)C(2) (N-term)">Delta:H(4)C(2) (N-term)</option>
@@ -3739,6 +3783,7 @@
         <option value="Delta:H(4)C(3)O(1) (H)">Delta:H(4)C(3)O(1) (H)</option>
         <option value="Delta:H(4)C(3)O(1) (K)">Delta:H(4)C(3)O(1) (K)</option>
         <option value="Delta:H(4)C(3)O(1) (R)">Delta:H(4)C(3)O(1) (R)</option>
+        <option value="Delta:H(4)C(3)O(2) (K)">Delta:H(4)C(3)O(2) (K)</option>
         <option value="Delta:H(4)C(5)O(1) (R)">Delta:H(4)C(5)O(1) (R)</option>
         <option value="Delta:H(4)C(6) (K)">Delta:H(4)C(6) (K)</option>
         <option value="Delta:H(5)C(2) (P)">Delta:H(5)C(2) (P)</option>
@@ -4311,7 +4356,6 @@
         <option value="Ethanolyl (C)">Ethanolyl (C)</option>
         <option value="Ethanolyl (K)">Ethanolyl (K)</option>
         <option value="Ethanolyl (R)">Ethanolyl (R)</option>
-        <option value="Ethoxyformyl (H)">Ethoxyformyl (H)</option>
         <option value="Ethyl (C-term)">Ethyl (C-term)</option>
         <option value="Ethyl (D)">Ethyl (D)</option>
         <option value="Ethyl (E)">Ethyl (E)</option>
@@ -4405,6 +4449,7 @@
         <option value="Gln-&gt;Xle (Q)">Gln-&gt;Xle (Q)</option>
         <option value="Glu (E)">Glu (E)</option>
         <option value="Glu (Protein C-term)">Glu (Protein C-term)</option>
+        <option value="Glu+O(2) (H)">Glu+O(2) (H)</option>
         <option value="Glu-&gt;Ala (E)">Glu-&gt;Ala (E)</option>
         <option value="Glu-&gt;Arg (E)">Glu-&gt;Arg (E)</option>
         <option value="Glu-&gt;Asn (E)">Glu-&gt;Asn (E)</option>
@@ -4419,7 +4464,6 @@
         <option value="Glu-&gt;Pro (E)">Glu-&gt;Pro (E)</option>
         <option value="Glu-&gt;pyro-Glu (N-term E)">Glu-&gt;pyro-Glu (N-term E)</option>
         <option value="Glu-&gt;pyro-Glu+Methyl (N-term E)">Glu-&gt;pyro-Glu+Methyl (N-term E)</option>
-        <option value="Glu-&gt;pyro-Glu+Methyl:2H(2)13C (N-term E)">Glu-&gt;pyro-Glu+Methyl:2H(2)13C (N-term E)</option>
         <option value="Glu-&gt;pyro-Glu+Methyl:2H(2)13C(1) (N-term E)">Glu-&gt;pyro-Glu+Methyl:2H(2)13C(1) (N-term E)</option>
         <option value="Glu-&gt;Ser (E)">Glu-&gt;Ser (E)</option>
         <option value="Glu-&gt;Thr (E)">Glu-&gt;Thr (E)</option>
@@ -4443,6 +4487,7 @@
         <option value="Gly (K)">Gly (K)</option>
         <option value="Gly (S)">Gly (S)</option>
         <option value="Gly (T)">Gly (T)</option>
+        <option value="Gly+O(2) (H)">Gly+O(2) (H)</option>
         <option value="Gly-&gt;Ala (G)">Gly-&gt;Ala (G)</option>
         <option value="Gly-&gt;Arg (G)">Gly-&gt;Arg (G)</option>
         <option value="Gly-&gt;Asn (G)">Gly-&gt;Asn (G)</option>
@@ -4833,6 +4878,7 @@
         <option value="Hex(6)HexNAc(4)Me(3) (N)">Hex(6)HexNAc(4)Me(3) (N)</option>
         <option value="Hex(6)HexNAc(4)Me(3)Pent(1) (N)">Hex(6)HexNAc(4)Me(3)Pent(1) (N)</option>
         <option value="Hex(6)HexNAc(5) (N)">Hex(6)HexNAc(5) (N)</option>
+        <option value="Hex(6)HexNAc(5)NeuAc(3) (N)">Hex(6)HexNAc(5)NeuAc(3) (N)</option>
         <option value="Hex(6)Phos(1) (S)">Hex(6)Phos(1) (S)</option>
         <option value="Hex(6)Phos(1) (T)">Hex(6)Phos(1) (T)</option>
         <option value="Hex(6)Phos(3) (S)">Hex(6)Phos(3) (S)</option>
@@ -4844,6 +4890,9 @@
         <option value="Hex(7)HexNAc(3) (N)">Hex(7)HexNAc(3) (N)</option>
         <option value="Hex(7)HexNAc(3)Phos(1) (N)">Hex(7)HexNAc(3)Phos(1) (N)</option>
         <option value="Hex(7)HexNAc(4) (N)">Hex(7)HexNAc(4) (N)</option>
+        <option value="Hex(7)HexNAc(6) (N)">Hex(7)HexNAc(6) (N)</option>
+        <option value="Hex(7)HexNAc(6) (S)">Hex(7)HexNAc(6) (S)</option>
+        <option value="Hex(7)HexNAc(6) (T)">Hex(7)HexNAc(6) (T)</option>
         <option value="Hex(7)Phos(3) (S)">Hex(7)Phos(3) (S)</option>
         <option value="Hex(7)Phos(3) (T)">Hex(7)Phos(3) (T)</option>
         <option value="Hex(8)HexNAc(1) (N)">Hex(8)HexNAc(1) (N)</option>
@@ -4899,6 +4948,7 @@
         <option value="HexNAc(4) (T)">HexNAc(4) (T)</option>
         <option value="HexNAc(5) (S)">HexNAc(5) (S)</option>
         <option value="HexNAc(5) (T)">HexNAc(5) (T)</option>
+        <option value="His+O(2) (H)">His+O(2) (H)</option>
         <option value="His-&gt;Ala (H)">His-&gt;Ala (H)</option>
         <option value="His-&gt;Arg (H)">His-&gt;Arg (H)</option>
         <option value="His-&gt;Asn (H)">His-&gt;Asn (H)</option>
@@ -5036,11 +5086,14 @@
         <option value="iTRAQ8plex:13C(6)15N(2) (K)">iTRAQ8plex:13C(6)15N(2) (K)</option>
         <option value="iTRAQ8plex:13C(6)15N(2) (N-term)">iTRAQ8plex:13C(6)15N(2) (N-term)</option>
         <option value="iTRAQ8plex:13C(6)15N(2) (Y)">iTRAQ8plex:13C(6)15N(2) (Y)</option>
+        <option value="Kdo (S)">Kdo (S)</option>
+        <option value="Kdo (T)">Kdo (T)</option>
         <option value="Label:13C(1)2H(3) (M)">Label:13C(1)2H(3) (M)</option>
         <option value="Label:13C(1)2H(3)+Oxidation (M)">Label:13C(1)2H(3)+Oxidation (M)</option>
         <option value="Label:13C(2)15N(2) (K)">Label:13C(2)15N(2) (K)</option>
         <option value="Label:13C(3) (A)">Label:13C(3) (A)</option>
         <option value="Label:13C(3)15N(1) (A)">Label:13C(3)15N(1) (A)</option>
+        <option value="Label:13C(3)15N(1) (S)">Label:13C(3)15N(1) (S)</option>
         <option value="Label:13C(4) (M)">Label:13C(4) (M)</option>
         <option value="Label:13C(4)+Oxidation (M)">Label:13C(4)+Oxidation (M)</option>
         <option value="Label:13C(4)15N(1) (D)">Label:13C(4)15N(1) (D)</option>
@@ -5125,13 +5178,16 @@
         <option value="LG-lactam-K (K)">LG-lactam-K (K)</option>
         <option value="LG-lactam-K (Protein N-term)">LG-lactam-K (Protein N-term)</option>
         <option value="LG-lactam-R (R)">LG-lactam-R (R)</option>
+        <option value="LG-pyrrole (C)">LG-pyrrole (C)</option>
         <option value="LG-pyrrole (K)">LG-pyrrole (K)</option>
         <option value="LG-pyrrole (N-term)">LG-pyrrole (N-term)</option>
         <option value="Lipoyl (K)">Lipoyl (K)</option>
         <option value="LRGG (K)">LRGG (K)</option>
         <option value="LRGG+dimethyl (K)">LRGG+dimethyl (K)</option>
         <option value="LRGG+methyl (K)">LRGG+methyl (K)</option>
+        <option value="LTX+Lophotoxin (Y)">LTX+Lophotoxin (Y)</option>
         <option value="Lys (N-term)">Lys (N-term)</option>
+        <option value="Lys+O(2) (H)">Lys+O(2) (H)</option>
         <option value="Lys-&gt;Ala (K)">Lys-&gt;Ala (K)</option>
         <option value="Lys-&gt;Allysine (K)">Lys-&gt;Allysine (K)</option>
         <option value="Lys-&gt;AminoadipicAcid (K)">Lys-&gt;AminoadipicAcid (K)</option>
@@ -5166,6 +5222,7 @@
         <option value="Malonyl (C)">Malonyl (C)</option>
         <option value="Malonyl (K)">Malonyl (K)</option>
         <option value="Malonyl (S)">Malonyl (S)</option>
+        <option value="MBS+peptide (C)">MBS+peptide (C)</option>
         <option value="MDCC (C)">MDCC (C)</option>
         <option value="MeMePhosphorothioate (S)">MeMePhosphorothioate (S)</option>
         <option value="Menadione (C)">Menadione (C)</option>
@@ -5177,6 +5234,7 @@
         <option value="MesitylOxide (H)">MesitylOxide (H)</option>
         <option value="MesitylOxide (K)">MesitylOxide (K)</option>
         <option value="MesitylOxide (Protein N-term)">MesitylOxide (Protein N-term)</option>
+        <option value="Met+O(2) (H)">Met+O(2) (H)</option>
         <option value="Met-&gt;Aha (M)">Met-&gt;Aha (M)</option>
         <option value="Met-&gt;Ala (M)">Met-&gt;Ala (M)</option>
         <option value="Met-&gt;Arg (M)">Met-&gt;Arg (M)</option>
@@ -5360,7 +5418,6 @@
         <option value="Nmethylmaleimide+water (C)">Nmethylmaleimide+water (C)</option>
         <option value="NO_SMX_SEMD (C)">NO_SMX_SEMD (C)</option>
         <option value="NO_SMX_SIMD (C)">NO_SMX_SIMD (C)</option>
-        <option value="NO_SMX_SMCT (C)">NO_SMX_SMCT (C)</option>
         <option value="NP40 (N-term)">NP40 (N-term)</option>
         <option value="NQIGG (K)">NQIGG (K)</option>
         <option value="O-Dimethylphosphate (S)">O-Dimethylphosphate (S)</option>
@@ -5448,6 +5505,10 @@
         <option value="Phe-&gt;Tyr (F)">Phe-&gt;Tyr (F)</option>
         <option value="Phe-&gt;Val (F)">Phe-&gt;Val (F)</option>
         <option value="Phe-&gt;Xle (F)">Phe-&gt;Xle (F)</option>
+        <option value="phenyl-phosphate (K)">phenyl-phosphate (K)</option>
+        <option value="phenyl-phosphate (S)">phenyl-phosphate (S)</option>
+        <option value="phenyl-phosphate (T)">phenyl-phosphate (T)</option>
+        <option value="phenyl-phosphate (Y)">phenyl-phosphate (Y)</option>
         <option value="Phenylisocyanate (N-term)">Phenylisocyanate (N-term)</option>
         <option value="Phenylisocyanate:2H(5) (N-term)">Phenylisocyanate:2H(5) (N-term)</option>
         <option value="phenylsulfonylethyl (C)">phenylsulfonylethyl (C)</option>
@@ -5462,6 +5523,7 @@
         <option value="Phospho (Y)">Phospho (Y)</option>
         <option value="Phosphoadenosine (H)">Phosphoadenosine (H)</option>
         <option value="Phosphoadenosine (K)">Phosphoadenosine (K)</option>
+        <option value="Phosphoadenosine (S)">Phosphoadenosine (S)</option>
         <option value="Phosphoadenosine (T)">Phosphoadenosine (T)</option>
         <option value="Phosphoadenosine (Y)">Phosphoadenosine (Y)</option>
         <option value="PhosphoCytidine (S)">PhosphoCytidine (S)</option>
@@ -5493,6 +5555,7 @@
         <option value="Phytochromobilin (C)">Phytochromobilin (C)</option>
         <option value="Piperidine (K)">Piperidine (K)</option>
         <option value="Piperidine (N-term)">Piperidine (N-term)</option>
+        <option value="Pro+O(2) (H)">Pro+O(2) (H)</option>
         <option value="Pro-&gt;Ala (P)">Pro-&gt;Ala (P)</option>
         <option value="Pro-&gt;Arg (P)">Pro-&gt;Arg (P)</option>
         <option value="Pro-&gt;Asn (P)">Pro-&gt;Asn (P)</option>
@@ -5570,18 +5633,30 @@
         <option value="QTGG (K)">QTGG (K)</option>
         <option value="Quinone (W)">Quinone (W)</option>
         <option value="Quinone (Y)">Quinone (Y)</option>
+        <option value="RBS-ID_Uridine (A)">RBS-ID_Uridine (A)</option>
+        <option value="RBS-ID_Uridine (C)">RBS-ID_Uridine (C)</option>
+        <option value="RBS-ID_Uridine (D)">RBS-ID_Uridine (D)</option>
+        <option value="RBS-ID_Uridine (E)">RBS-ID_Uridine (E)</option>
+        <option value="RBS-ID_Uridine (F)">RBS-ID_Uridine (F)</option>
+        <option value="RBS-ID_Uridine (G)">RBS-ID_Uridine (G)</option>
+        <option value="RBS-ID_Uridine (H)">RBS-ID_Uridine (H)</option>
+        <option value="RBS-ID_Uridine (I)">RBS-ID_Uridine (I)</option>
+        <option value="RBS-ID_Uridine (K)">RBS-ID_Uridine (K)</option>
+        <option value="RBS-ID_Uridine (L)">RBS-ID_Uridine (L)</option>
+        <option value="RBS-ID_Uridine (M)">RBS-ID_Uridine (M)</option>
+        <option value="RBS-ID_Uridine (N)">RBS-ID_Uridine (N)</option>
+        <option value="RBS-ID_Uridine (P)">RBS-ID_Uridine (P)</option>
+        <option value="RBS-ID_Uridine (Q)">RBS-ID_Uridine (Q)</option>
+        <option value="RBS-ID_Uridine (R)">RBS-ID_Uridine (R)</option>
+        <option value="RBS-ID_Uridine (S)">RBS-ID_Uridine (S)</option>
+        <option value="RBS-ID_Uridine (T)">RBS-ID_Uridine (T)</option>
+        <option value="RBS-ID_Uridine (V)">RBS-ID_Uridine (V)</option>
+        <option value="RBS-ID_Uridine (W)">RBS-ID_Uridine (W)</option>
+        <option value="RBS-ID_Uridine (Y)">RBS-ID_Uridine (Y)</option>
         <option value="Retinylidene (K)">Retinylidene (K)</option>
         <option value="RNPXL (N-term K)">RNPXL (N-term K)</option>
         <option value="RNPXL (N-term R)">RNPXL (N-term R)</option>
         <option value="RNPXlink1 (C)">RNPXlink1 (C)</option>
-        <option value="RNPXlink2 (F)">RNPXlink2 (F)</option>
-        <option value="RNPXlink2 (K)">RNPXlink2 (K)</option>
-        <option value="RNPXlink2 (L)">RNPXlink2 (L)</option>
-        <option value="RNPXlink3 (C)">RNPXlink3 (C)</option>
-        <option value="RNPXlink3 (F)">RNPXlink3 (F)</option>
-        <option value="RNPXlink4 (C)">RNPXlink4 (C)</option>
-        <option value="RNPXlink5 (F)">RNPXlink5 (F)</option>
-        <option value="RNPXlink5 (Y)">RNPXlink5 (Y)</option>
         <option value="s-GlcNAc (S)">s-GlcNAc (S)</option>
         <option value="s-GlcNAc (T)">s-GlcNAc (T)</option>
         <option value="Saligenin (H)">Saligenin (H)</option>
@@ -5609,6 +5684,9 @@
         <option value="shTMT (K)">shTMT (K)</option>
         <option value="shTMT (N-term)">shTMT (N-term)</option>
         <option value="shTMT (Protein N-term)">shTMT (Protein N-term)</option>
+        <option value="shTMTpro (K)">shTMTpro (K)</option>
+        <option value="shTMTpro (N-term)">shTMTpro (N-term)</option>
+        <option value="shTMTpro (Protein N-term)">shTMTpro (Protein N-term)</option>
         <option value="SMA (K)">SMA (K)</option>
         <option value="SMA (N-term)">SMA (N-term)</option>
         <option value="spermidine (Q)">spermidine (Q)</option>
@@ -5784,7 +5862,6 @@
         <option value="Tyr-&gt;Trp (Y)">Tyr-&gt;Trp (Y)</option>
         <option value="Tyr-&gt;Val (Y)">Tyr-&gt;Val (Y)</option>
         <option value="Tyr-&gt;Xle (Y)">Tyr-&gt;Xle (Y)</option>
-        <option value="Ub-amide (C)">Ub-amide (C)</option>
         <option value="Ub-Br2 (C)">Ub-Br2 (C)</option>
         <option value="Ub-fluorescein (C)">Ub-fluorescein (C)</option>
         <option value="Ub-VME (C)">Ub-VME (C)</option>
@@ -5979,75 +6056,75 @@
         <option value="ZQG (K)">ZQG (K)</option>
         <expand macro="list_string_san" name="variable"/>
       </param>
-      <param name="variable_max_per_peptide" argument="-modifications:variable_max_per_peptide" type="integer" optional="true" value="3" label="Maximum number of residues carrying a variable modification per candidate peptide" help=""/>
+      <param name="variable_max_per_peptide" argument="-modifications:variable_max_per_peptide" type="integer" value="3" label="Maximum number of residues carrying a variable modification per candidate peptide" help=""/>
     </section>
     <section name="peptide" title="Settings for digesting proteins into peptides" help="" expanded="false">
-      <param name="min_size" argument="-peptide:min_size" type="integer" optional="true" value="5" label="Minimum size a peptide must have after digestion to be considered in the search" help=""/>
-      <param name="missed_cleavages" argument="-peptide:missed_cleavages" type="integer" optional="true" value="3" label="Number of missed cleavages" help=""/>
-      <param name="enzyme" argument="-peptide:enzyme" type="select" optional="true" label="The enzyme used for peptide digestion" help="">
-        <option value="Trypsin" selected="true">Trypsin</option>
+      <param name="min_size" argument="-peptide:min_size" type="integer" value="5" label="Minimum size a peptide must have after digestion to be considered in the search" help=""/>
+      <param name="missed_cleavages" argument="-peptide:missed_cleavages" type="integer" value="3" label="Number of missed cleavages" help=""/>
+      <param name="enzyme" argument="-peptide:enzyme" type="select" label="The enzyme used for peptide digestion" help="">
+        <option value="Formic_acid">Formic_acid</option>
+        <option value="Lys-C">Lys-C</option>
+        <option value="Lys-N">Lys-N</option>
         <option value="Asp-N">Asp-N</option>
         <option value="Asp-N/B">Asp-N/B</option>
         <option value="Asp-N_ambic">Asp-N_ambic</option>
         <option value="Lys-C/P">Lys-C/P</option>
         <option value="PepsinA">PepsinA</option>
+        <option value="TrypChymo">TrypChymo</option>
+        <option value="Glu-C+P">Glu-C+P</option>
+        <option value="PepsinA + P">PepsinA + P</option>
+        <option value="cyanogen-bromide">cyanogen-bromide</option>
+        <option value="Clostripain/P">Clostripain/P</option>
+        <option value="elastase-trypsin-chymotrypsin">elastase-trypsin-chymotrypsin</option>
+        <option value="no cleavage">no cleavage</option>
+        <option value="unspecific cleavage">unspecific cleavage</option>
+        <option value="Chymotrypsin">Chymotrypsin</option>
+        <option value="Chymotrypsin/P">Chymotrypsin/P</option>
+        <option value="CNBr">CNBr</option>
+        <option value="Trypsin" selected="true">Trypsin</option>
+        <option value="proline endopeptidase">proline endopeptidase</option>
         <option value="glutamyl endopeptidase">glutamyl endopeptidase</option>
         <option value="Alpha-lytic protease">Alpha-lytic protease</option>
         <option value="2-iodobenzoate">2-iodobenzoate</option>
         <option value="iodosobenzoate">iodosobenzoate</option>
         <option value="staphylococcal protease/D">staphylococcal protease/D</option>
         <option value="proline-endopeptidase/HKR">proline-endopeptidase/HKR</option>
-        <option value="Glu-C+P">Glu-C+P</option>
-        <option value="PepsinA + P">PepsinA + P</option>
-        <option value="cyanogen-bromide">cyanogen-bromide</option>
-        <option value="Clostripain/P">Clostripain/P</option>
-        <option value="elastase-trypsin-chymotrypsin">elastase-trypsin-chymotrypsin</option>
+        <option value="Arg-C">Arg-C</option>
         <option value="Arg-C/P">Arg-C/P</option>
-        <option value="TrypChymo">TrypChymo</option>
         <option value="Trypsin/P">Trypsin/P</option>
         <option value="V8-DE">V8-DE</option>
         <option value="V8-E">V8-E</option>
         <option value="leukocyte elastase">leukocyte elastase</option>
-        <option value="proline endopeptidase">proline endopeptidase</option>
-        <option value="Arg-C">Arg-C</option>
-        <option value="Chymotrypsin">Chymotrypsin</option>
-        <option value="Chymotrypsin/P">Chymotrypsin/P</option>
-        <option value="CNBr">CNBr</option>
-        <option value="no cleavage">no cleavage</option>
-        <option value="unspecific cleavage">unspecific cleavage</option>
-        <option value="Formic_acid">Formic_acid</option>
-        <option value="Lys-C">Lys-C</option>
-        <option value="Lys-N">Lys-N</option>
         <expand macro="list_string_san" name="enzyme"/>
       </param>
     </section>
     <section name="cross_linker" title="Description of the cross-linker reagent" help="" expanded="false">
-      <param name="residue1" argument="-cross_linker:residue1" type="text" optional="true" value="K N-term" label="Comma separated residues, that the first side of a bifunctional cross-linker can attach to" help=" (space separated list, in order to allow for spaces in list items surround them by single quotes)">
+      <param name="residue1" argument="-cross_linker:residue1" type="text" value="K N-term" label="Comma separated residues, that the first side of a bifunctional cross-linker can attach to" help=" (space separated list, in order to allow for spaces in list items surround them by single quotes)">
         <expand macro="list_string_val" name="residue1"/>
         <expand macro="list_string_san" name="residue1"/>
       </param>
-      <param name="residue2" argument="-cross_linker:residue2" type="text" optional="true" value="K N-term" label="Comma separated residues, that the second side of a bifunctional cross-linker can attach to" help=" (space separated list, in order to allow for spaces in list items surround them by single quotes)">
+      <param name="residue2" argument="-cross_linker:residue2" type="text" value="K N-term" label="Comma separated residues, that the second side of a bifunctional cross-linker can attach to" help=" (space separated list, in order to allow for spaces in list items surround them by single quotes)">
         <expand macro="list_string_val" name="residue2"/>
         <expand macro="list_string_san" name="residue2"/>
       </param>
-      <param name="mass" argument="-cross_linker:mass" type="float" optional="true" value="138.0680796" label="Mass of the light cross-linker, linking two residues on one or two peptides" help=""/>
-      <param name="mass_mono_link" argument="-cross_linker:mass_mono_link" type="text" optional="true" value="156.07864431 155.094628715" label="Possible masses of the linker, when attached to only one peptide" help=" (space separated list, in order to allow for spaces in list items surround them by single quotes)">
+      <param name="mass" argument="-cross_linker:mass" type="float" value="138.0680796" label="Mass of the light cross-linker, linking two residues on one or two peptides" help=""/>
+      <param name="mass_mono_link" argument="-cross_linker:mass_mono_link" type="text" value="156.07864431 155.094628715" label="Possible masses of the linker, when attached to only one peptide" help=" (space separated list, in order to allow for spaces in list items surround them by single quotes)">
         <expand macro="list_float_valsan" name="mass_mono_link"/>
       </param>
-      <param name="name" argument="-cross_linker:name" type="text" optional="true" value="DSS" label="Name of the searched cross-link, used to resolve ambiguity of equal masses" help="(e.g. DSS or BS3)">
+      <param name="name" argument="-cross_linker:name" type="text" value="DSS" label="Name of the searched cross-link, used to resolve ambiguity of equal masses" help="(e.g. DSS or BS3)">
         <expand macro="list_string_san" name="name"/>
       </param>
     </section>
     <section name="algorithm" title="Additional algorithm settings" help="" expanded="false">
-      <param name="number_top_hits" argument="-algorithm:number_top_hits" type="integer" optional="true" value="1" label="Number of top hits reported for each spectrum pai" help=""/>
-      <param name="deisotope" argument="-algorithm:deisotope" type="select" optional="true" label="Set to true, if the input spectra should be deisotoped before any other processing steps" help="If set to auto the spectra will be deisotoped, if the fragment mass tolerance is &lt; 0.1 Da or &lt; 100 ppm (0.1 Da at a mass of 1000)">
+      <param name="number_top_hits" argument="-algorithm:number_top_hits" type="integer" value="1" label="Number of top hits reported for each spectrum pai" help=""/>
+      <param name="deisotope" argument="-algorithm:deisotope" type="select" label="Set to true, if the input spectra should be deisotoped before any other processing steps" help="If set to auto the spectra will be deisotoped, if the fragment mass tolerance is &lt; 0.1 Da or &lt; 100 ppm (0.1 Da at a mass of 1000)">
         <option value="true">true</option>
         <option value="false">false</option>
         <option value="auto" selected="true">auto</option>
         <expand macro="list_string_san" name="deisotope"/>
       </param>
       <param name="use_sequence_tags" argument="-algorithm:use_sequence_tags" type="boolean" truevalue="true" falsevalue="false" checked="false" label="Use sequence tags (de novo sequencing of short fragments) to filter out candidates before scoring" help="This will make the search faster, but can impact the sensitivity positively or negatively, depending on the dataset"/>
-      <param name="sequence_tag_min_length" argument="-algorithm:sequence_tag_min_length" type="integer" optional="true" value="2" label="Minimal length of sequence tags to use for filtering candidates" help="Longer tags will make the search faster but much less sensitive. Ignored if 'algorithm:use_sequence_tags' is false"/>
+      <param name="sequence_tag_min_length" argument="-algorithm:sequence_tag_min_length" type="integer" value="2" label="Minimal length of sequence tags to use for filtering candidates" help="Longer tags will make the search faster but much less sensitive. Ignored if 'algorithm:use_sequence_tags' is false"/>
     </section>
     <section name="ions" title="Ion types to search for in MS/MS spectra" help="" expanded="false">
       <param name="b_ions" argument="-ions:b_ions" type="boolean" truevalue="true" falsevalue="false" checked="true" label="Search for peaks of b-ions" help=""/>
@@ -6061,7 +6138,7 @@
     <expand macro="adv_opts_macro">
       <param argument="-decoy_database" type="data" format="fasta" optional="true" label="Input file containing the decoy protein database" help="Decoys can also be included in the normal database file instead (or additionally) select fasta data sets(s)"/>
       <param argument="-force" type="boolean" truevalue="true" falsevalue="false" checked="false" label="Overrides tool-specific checks" help=""/>
-      <param argument="-test" type="hidden" optional="true" value="False" label="Enables the test mode (needed for internal use only)" help="">
+      <param argument="-test" type="hidden" value="False" label="Enables the test mode (needed for internal use only)" help="" optional="true">
         <expand macro="list_string_san" name="test"/>
       </param>
     </expand>
@@ -6093,7 +6170,8 @@
       <filter>OPTIONAL_OUTPUTS is not None and "ctd_out_FLAG" in OPTIONAL_OUTPUTS</filter>
     </data>
   </outputs>
-  <tests><!-- TOPP_OpenPepXLLF_1 -->
+  <tests>
+    <!-- TOPP_OpenPepXLLF_1 -->
     <test expect_num_outputs="5">
       <section name="adv_opts">
         <param name="force" value="false"/>
@@ -6103,10 +6181,10 @@
       <param name="database" value="OpenPepXLLF_input.fasta"/>
       <param name="decoy_string" value="decoy"/>
       <param name="decoy_prefix" value="true"/>
-      <output name="out_idXML" file="OpenPepXLLF_output.idXML" compare="sim_size" delta_frac="0.7" ftype="idxml"/>
-      <output name="out_mzIdentML" file="OpenPepXLLF_output.mzid" compare="sim_size" delta_frac="0.7" ftype="mzid"/>
-      <output name="out_xquestxml" file="OpenPepXLLF_output.xquest.xml" compare="sim_size" delta_frac="0.7" ftype="xquest.xml"/>
-      <output name="out_xquest_specxml" file="OpenPepXLLF_output.spec.xml" compare="sim_size" delta_frac="0.7" ftype="spec.xml"/>
+      <output name="out_idXML" value="OpenPepXLLF_output.idXML" compare="sim_size" delta_frac="0.7" ftype="idxml"/>
+      <output name="out_mzIdentML" value="OpenPepXLLF_output.mzid" compare="sim_size" delta_frac="0.7" ftype="mzid"/>
+      <output name="out_xquestxml" value="OpenPepXLLF_output.xquest.xml" compare="sim_size" delta_frac="0.7" ftype="xquest.xml"/>
+      <output name="out_xquest_specxml" value="OpenPepXLLF_output.spec.xml.tmp" compare="sim_size" delta_frac="0.7" ftype="spec.xml"/>
       <section name="precursor">
         <param name="mass_tolerance" value="10.0"/>
         <param name="mass_tolerance_unit" value="ppm"/>
@@ -6157,6 +6235,9 @@
           <is_valid_xml/>
         </assert_contents>
       </output>
+      <assert_stdout>
+        <has_text_matching expression="@EXECUTABLE@ took .* \(wall\), .* \(CPU\), .* \(system\), .* \(user\)(; Peak Memory Usage: 32 MB)?."/>
+      </assert_stdout>
     </test>
     <!-- TOPP_OpenPepXLLF_2 -->
     <test expect_num_outputs="2">
@@ -6168,7 +6249,7 @@
       <param name="database" value="OpenPepXLLF_input2.fasta"/>
       <param name="decoy_string" value="decoy_"/>
       <param name="decoy_prefix" value="true"/>
-      <output name="out_idXML" file="OpenPepXLLF_output2.idXML" compare="sim_size" delta_frac="0.7" ftype="idxml"/>
+      <output name="out_idXML" value="OpenPepXLLF_output2.idXML" compare="sim_size" delta_frac="0.7" ftype="idxml"/>
       <section name="precursor">
         <param name="mass_tolerance" value="10.0"/>
         <param name="mass_tolerance_unit" value="ppm"/>
@@ -6195,7 +6276,6 @@
         <param name="residue1" value="&quot;D&quot; &quot;E&quot; &quot;C-term&quot;"/>
         <param name="residue2" value="&quot;K&quot; &quot;S&quot; &quot;T&quot; &quot;Y&quot; &quot;N-term&quot;"/>
         <param name="mass" value="-18.010595"/>
-        <param name="mass_mono_link" value=""/>
         <param name="name" value="DMTMM"/>
       </section>
       <section name="algorithm">
@@ -6219,11 +6299,14 @@
           <is_valid_xml/>
         </assert_contents>
       </output>
+      <assert_stdout>
+        <has_text_matching expression="@EXECUTABLE@ took .* \(wall\), .* \(CPU\), .* \(system\), .* \(user\)(; Peak Memory Usage: 32 MB)?."/>
+      </assert_stdout>
     </test>
   </tests>
   <help><![CDATA[Tool for protein-protein cross linking with label-free linkers.
 
 
-For more information, visit http://www.openms.de/doxygen/release/2.8.0/html/TOPP_OpenPepXLLF.html]]></help>
+For more information, visit https://openms.de/doxygen/release/3.1.0/html/TOPP_OpenPepXLLF.html]]></help>
   <expand macro="references"/>
 </tool>
--- a/fill_ctd_clargs.py	Thu Dec 01 19:13:01 2022 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-#!/usr/bin/env python3
-
-import operator
-from argparse import ArgumentParser
-from functools import reduce  # forward compatibility for Python 3
-from io import StringIO
-
-from CTDopts.CTDopts import (
-    _Null,
-    CTDModel,
-    ModelTypeError,
-    Parameters
-)
-
-
-def getFromDict(dataDict, mapList):
-    return reduce(operator.getitem, mapList, dataDict)
-
-
-def setInDict(dataDict, mapList, value):
-    getFromDict(dataDict, mapList[:-1])[mapList[-1]] = value
-
-
-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 stdout",
-                            add_help=False, allow_abbrev=False)
-    parser.add_argument("--ini_file", dest="ini_file", help="input ini file",
-                        metavar='INI', default=None, required=True)
-    parser.add_argument("--ctd_file", dest="ctd_file", help="input ctd file"
-                        "if given then optional parameters from the ini file"
-                        "will be filled with the defaults from this CTD file",
-                        metavar='CTD', default=None, required=False)
-    args, cliargs = parser.parse_known_args()
-
-    # load CTDModel
-    ini_model = None
-    try:
-        ini_model = CTDModel(from_file=args.ini_file)
-    except ModelTypeError:
-        pass
-    try:
-        ini_model = Parameters(from_file=args.ini_file)
-    except ModelTypeError:
-        pass
-    assert ini_model is not None, "Could not parse %s, seems to be no CTD/PARAMS" % (args.ini_file)
-
-    # get a dictionary of the ctd arguments where the values of the parameters
-    # given on the command line are overwritten
-    ini_values = ini_model.parse_cl_args(cl_args=cliargs, ignore_required=True)
-
-    if args.ctd_file:
-        ctd_model = CTDModel(from_file=args.ctd_file)
-        ctd_values = ctd_model.get_defaults()
-        for param in ini_model.get_parameters():
-            if not param.required and (param.default is None or type(param.default) is _Null):
-                lineage = param.get_lineage(name_only=True)
-                try:
-                    default = getFromDict(ctd_values, lineage)
-                except KeyError:
-                    continue
-                setInDict(ini_values, lineage, default)
-
-    # write the ctd with the values taken from the dictionary
-    out = StringIO()
-    ctd_tree = ini_model.write_ctd(out, ini_values)
-    print(out.getvalue())
--- a/generate-foo.sh	Thu Dec 01 19:13:01 2022 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,215 +0,0 @@
-#!/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
-    # - OpenSwathMzMLFileCacher with -convert_back argument 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)
-    # - 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
-    # - OpenSwathAnalyzer 9/10: cachedMzML (not supported yet)
-    # - SiriusAdapter_4 depends on online service which may timeout .. so keep disabled https://github.com/OpenMS/OpenMS/pull/5010
-    # - SiriusAdapter_10 should work in >2.8 https://github.com/OpenMS/OpenMS/issues/5869
-    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}/""/' |
-        grep -v "MaRaClusterAdapter.*-consensus_out"|
-        grep -v "FileMerger_1_input1.dta2d.*FileMerger_1_input2.dta " |
-        sed 's@degenerate_cases/@@g' |
-        egrep -v 'TOPP_OpenSwathAnalyzer_test_3"|TOPP_OpenSwathAnalyzer_test_4"' |
-        sed 's/\("TOPP_SiriusAdapter_4".*\)-sirius:database all\(.*\)/\1-sirius:database pubchem\2/' |
-        grep -v '"TOPP_SiriusAdapter_10"')
-
-    # 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)
-        # >&2 echo "test_id $test_id"
-        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 $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
-        # >&2 echo "========================================================"
-        # >&2 echo "USING ini $ini"
-        cli=$(echo $line |cut -d" " -f3- | sed 's/-ini [^ ]\+//')
-
-        ctdtmp=$(mktemp)
-        # using eval: otherwise for some reason quoted values are not used properly ('A B' -> ["'A", "B'"])
-        # >&2 echo "python3 fill_ctd_clargs.py --ini_file $ini $cli" 
-        eval "python3 fill_ctd_clargs.py --ini_file $ini $cli" > "$ctdtmp"
-        # >&2 echo $ctdtmp
-        # >&2 cat $ctdtmp
-        testtmp=$(mktemp)
-        # >&2 echo CTDConverter galaxy -i $ctdtmp -o $testtmp -s aux/tools_blacklist.txt -f "$FILETYPES" -m macros.xml -t tool.conf  -p aux/hardcoded_params.json --tool-version $VERSION --test-only --test-unsniffable csv tsv txt dta dta2d edta mrm splib --test-condition "compare=sim_size" "delta_frac=0.7"
-        CTDConverter galaxy -i $ctdtmp -o $testtmp -s aux/tools_blacklist.txt -f "$FILETYPES" -m macros.xml -t tool.conf  -p aux/hardcoded_params.json --tool-version $VERSION --test-only --test-unsniffable csv tsv txt dta dta2d edta mrm splib --test-condition "compare=sim_size" "delta_frac=0.7" > /dev/null
-        echo "<!-- $test_id -->"
-        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
-        # >&2 echo "    a "$a
-        if [[ ! $a =~ .tmp$ ]] && [[ ! $a =~ _tmp_ ]]; then
-            ret="$ret $a"
-            continue
-        fi
-        diff_line=$(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 "    diff_line "$diff_line
-        in1=$(sed 's/.*-in1 \([^ ]\+\).*/\1/' <<<$diff_line)
-        # >&2 echo "    in1 "$in1
-        if [[  "$a" != "$in1" ]]; then
-            ret="$ret $a"
-            continue
-        fi
-        in2=$(sed 's/.*-in2 \([^ ]\+\).*/\1/' <<<$diff_line)
-        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
-    
-    find test-data/ -name "*.tmp" -print0 | 
-    while IFS= read -r -d '' i; do 
-        if [ ! -e test-data/$(basename $i .tmp) ]; then
-            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)?"
-
-    # TODO SiriusAdapter depends on online service which may timeout .. so keep disabled https://github.com/OpenMS/OpenMS/pull/5010
-    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}@./@g'|
-        sed 's@TOFCalibration_ref_masses @TOFCalibration_ref_masses.txt @g; s@TOFCalibration_const @TOFCalibration_const.csv @'| 
-	sed 's/\("TOPP_SiriusAdapter_4".*\)-sirius:database all\(.*\)/\1-sirius:database pubchem\2/' |
-    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 'echo executing "'$test_id'"'
-	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/get_tests.py	Fri Jun 14 21:31:30 2024 +0000
@@ -0,0 +1,344 @@
+#!/usr/bin/env python
+
+import argparse
+import os.path
+import re
+import shlex
+import sys
+import tempfile
+from typing import (
+    Dict,
+    List,
+    Optional,
+    TextIO,
+    Tuple,
+)
+
+from ctdconverter.common.utils import (
+    ParameterHardcoder,
+    parse_hardcoded_parameters,
+    parse_input_ctds,
+)
+from ctdconverter.galaxy.converter import convert_models
+from CTDopts.CTDopts import (
+    CTDModel,
+    ModelTypeError,
+    Parameters,
+)
+
+SKIP_LIST = [
+    r"_prepare\"",
+    r"_convert",
+    r"WRITEINI",
+    r"WRITECTD",
+    r"INVALIDVALUE",
+    r"\.ini\.json",
+    r"OpenSwathMzMLFileCacher .*-convert_back",  # - OpenSwathMzMLFileCacher with -convert_back argument https://github.com/OpenMS/OpenMS/issues/4399
+    r"MaRaClusterAdapter.*-consensus_out",  # - MaRaCluster with -consensus_out (parameter blacklister: https://github.com/OpenMS/OpenMS/issues/4456)
+    r"FileMerger_1_input1.dta2d.*FileMerger_1_input2.dta ",  # - FileMerger with mixed dta dta2d input (ftype can not be specified in the test, dta can not be sniffed)
+    r'^(TOPP_OpenSwathAnalyzer_test_3|TOPP_OpenSwathAnalyzer_test_4)$',  # no  suppert for cached mzML
+    r'TOPP_SiriusAdapter_[0-9]+$',  # Do not test SiriusAdapter https://github.com/OpenMS/OpenMS/issues/7000 .. will be removed anyway
+    r'TOPP_AssayGeneratorMetabo_(7|8|9|10|11|12|13|14|15|16|17|18)$'  # Skip AssayGeneratorMetabo tests using Sirius  https://github.com/OpenMS/OpenMS/issues/7150 (will be replaced by two tools)
+]
+
+
+def get_failing_tests(cmake: List[str]) -> List[str]:
+    failing_tests = []
+    re_fail = re.compile(r"set_tests_properties\(\"([^\"]+)\" PROPERTIES WILL_FAIL 1\)")
+
+    for cmake in args.cmake:
+        with open(cmake) as cmake_fh:
+            for line in cmake_fh:
+                match = re_fail.search(line)
+                if match:
+                    failing_tests.append(match.group(1))
+    return failing_tests
+
+
+def fix_tmp_files(line: str, diff_pairs: Dict[str, str]) -> str:
+    """
+    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.
+    """
+    cmd = shlex.split(line)
+    for i, e in enumerate(cmd):
+        if e in diff_pairs:
+            dst = os.path.join("test-data", diff_pairs[e])
+            if os.path.exists(dst):
+                os.unlink(dst)
+            sys.stderr.write(f"symlink {e} {dst}\n")
+            os.symlink(e, dst)
+            cmd[i] = diff_pairs[e]
+    return shlex.join(cmd)
+
+
+def get_ini(line: str, tool_id: str) -> Tuple[str, str]:
+    """
+    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
+    """
+    cmd = shlex.split(line)
+    ini = None
+    for i, e in enumerate(cmd):
+        if e == "-ini":
+            ini = cmd[i + 1]
+            cmd = cmd[:i] + cmd[i + 2:]
+    if ini:
+        return os.path.join("test-data", ini), shlex.join(cmd)
+    else:
+        return os.path.join("ctd", f"{tool_id}.ctd"), line
+
+
+def unique_files(line: str):
+    """
+    some tests use the same file twice which does not work in planemo tests
+    hence we create symlinks for each file used twice
+    """
+    cmd = shlex.split(line)
+    # print(f"{cmd}")
+    files = {}
+    # determine the list of indexes where each file argument (anything appearing in test-data/) appears
+    for idx, e in enumerate(cmd):
+        p = os.path.join("test-data", e)
+        if not os.path.exists(p) and not os.path.islink(p):
+            continue
+        try:
+            files[e].append(idx)
+        except KeyError:
+            files[e] = [idx]
+    # print(f"{files=}")
+    for f in files:
+        if len(files[f]) < 2:
+            continue
+        for i, idx in enumerate(files[f]):
+            f_parts = f.split(".")
+            f_parts[0] = f"{f_parts[0]}_{i}"
+            new_f = ".".join(f_parts)
+            # if os.path.exists(os.path.join("test-data", new_f)):
+            #     os.unlink(os.path.join("test-data", new_f))
+            sys.stderr.write(
+                f'\tsymlink {os.path.join("test-data", new_f)} {f}\n'
+            )
+            try:
+                os.symlink(f, os.path.join("test-data", new_f))
+            except FileExistsError:
+                pass
+            cmd[idx] = new_f
+    return shlex.join(cmd)
+
+
+def fill_ctd_clargs(ini: str, line: str, ctd_tmp: TextIO) -> None:
+    cmd = shlex.split(line)
+
+    # load CTDModel
+    ini_model = None
+    try:
+        ini_model = CTDModel(from_file=ini)
+    except ModelTypeError:
+        pass
+    try:
+        ini_model = Parameters(from_file=ini)
+    except ModelTypeError:
+        pass
+    assert ini_model is not None, "Could not parse %s, seems to be no CTD/PARAMS" % (
+        args.ini_file
+    )
+
+    # get a dictionary of the ctd arguments where the values of the parameters
+    # given on the command line are overwritten
+    ini_values = ini_model.parse_cl_args(cl_args=cmd, ignore_required=True)
+    ini_model.write_ctd(ctd_tmp, ini_values)
+
+
+def process_test_line(
+    id: str,
+    line: str,
+    failing_tests: List[str],
+    skip_list: List[str],
+    diff_pairs: Dict[str, str],
+) -> Optional[str]:
+
+    re_test_id = re.compile(r"add_test\(\"([^\"]+)\" ([^ ]+) (.*)")
+    re_id_out_test = re.compile(r"_out_?[0-9]?")
+
+    # TODO auto extract from  set(OLD_OSW_PARAM ... lin
+    line = line.replace(
+        "${OLD_OSW_PARAM}",
+        " -test -mz_extraction_window 0.05 -mz_extraction_window_unit Th -ms1_isotopes 0 -Scoring:TransitionGroupPicker:compute_peak_quality -Scoring:Scores:use_ms1_mi false -Scoring:Scores:use_mi_score false",
+    )
+
+    line = line.replace("${TOPP_BIN_PATH}/", "")
+    line = line.replace("${DATA_DIR_TOPP}/", "")
+    line = line.replace("THIRDPARTY/", "")
+    line = line.replace("${DATA_DIR_SHARE}/", "")
+    # IDRipper PATH gets empty causing problems. TODO But overall the option needs to be handled differently
+    line = line.replace("${TMP_RIP_PATH}/", "")
+    # some input files are originally in a subdir (degenerated cases/), but not in test-data
+    line = line.replace("degenerate_cases/", "")
+    # determine the test and tool ids and remove the 1) add_test("TESTID" 2) trailing )
+    match = re_test_id.match(line)
+    if not match:
+        sys.exit(f"Ill formated test line {line}\n")
+    test_id = match.group(1)
+    tool_id = match.group(2)
+
+    line = f"{match.group(2)} {match.group(3)}"
+
+    if test_id in failing_tests:
+        sys.stderr.write(f"    skip failing {test_id} {line}\n")
+        return
+
+    if id != tool_id:
+        sys.stderr.write(f"    skip {test_id} ({id} != {tool_id}) {line}\n")
+        return
+
+    if re_id_out_test.search(test_id):
+        sys.stderr.write(f"    skip {test_id} {line}\n")
+        return
+
+    for skip in skip_list:
+        if re.search(skip, line):
+            return
+        if re.search(skip, test_id):
+            return
+
+    line = fix_tmp_files(line, diff_pairs)
+    # print(f"fix {line=}")
+    line = unique_files(line)
+    # print(f"unq {line=}")
+    ini, line = get_ini(line, tool_id)
+
+    from dataclasses import dataclass, field
+
+    @dataclass
+    class CTDConverterArgs:
+        input_files: list
+        output_destination: str
+        default_executable_path: Optional[str] = None
+        hardcoded_parameters: Optional[str] = None
+        parameter_hardcoder: Optional[ParameterHardcoder] = None
+        xsd_location: Optional[str] = None
+        formats_file: Optional[str] = None
+        add_to_command_line: str = ""
+        required_tools_file: Optional[str] = None
+        skip_tools_file: Optional[str] = None
+        macros_files: Optional[List[str]] = field(default_factory=list)
+        test_macros_files: Optional[List[str]] = field(default_factory=list)
+        test_macros_prefix: Optional[List[str]] = field(default_factory=list)
+        test_test: bool = False
+        test_only: bool = False
+        test_unsniffable: Optional[List[str]] = field(default_factory=list)
+        test_condition: Optional[List[str]] = ("compare=sim_size", "delta_frac=0.05")
+        tool_version: str = None
+        tool_profile: str = None
+        bump_file: str = None
+
+    # create an ini/ctd file where the values are equal to the arguments from the command line
+    # and transform it to xml
+    test = [f"<!-- {test_id} -->\n"]
+    with tempfile.NamedTemporaryFile(
+        mode="w+", delete_on_close=False
+    ) as ctd_tmp, tempfile.NamedTemporaryFile(
+        mode="w+", delete_on_close=False
+    ) as xml_tmp:
+        fill_ctd_clargs(ini, line, ctd_tmp)
+        ctd_tmp.close()
+        xml_tmp.close()
+        parsed_ctd = parse_input_ctds(None, [ctd_tmp.name], xml_tmp.name, "xml")
+        ctd_args = CTDConverterArgs(
+            input_files=[ctd_tmp.name],
+            output_destination=xml_tmp.name,
+            macros_files=["macros.xml"],
+            skip_tools_file="aux/tools_blacklist.txt",
+            formats_file="aux/filetypes.txt",
+            # tool_conf_destination = "tool.conf",
+            hardcoded_parameters="aux/hardcoded_params.json",
+            tool_version="3.1",
+            test_only=True,
+            test_unsniffable=[
+                "csv",
+                "tsv",
+                "txt",
+                "dta",
+                "dta2d",
+                "edta",
+                "mrm",
+                "splib",
+            ],
+            test_condition=["compare=sim_size", "delta_frac=0.7"],
+        )
+        ctd_args.parameter_hardcoder = parse_hardcoded_parameters(
+            ctd_args.hardcoded_parameters
+        )
+        convert_models(ctd_args, parsed_ctd)
+        xml_tmp = open(xml_tmp.name, "r")
+        for l in xml_tmp:
+            test.append(l)
+
+    return "".join(test)
+
+
+parser = argparse.ArgumentParser(description="Create Galaxy tests for a OpenMS tools")
+parser.add_argument("--id", dest="id", help="tool id")
+parser.add_argument("--cmake", nargs="+", help="OpenMS test CMake files")
+args = parser.parse_args()
+sys.stderr.write(f"generate tests for {args.id}\n")
+
+re_comment = re.compile("#.*")
+re_empty_prefix = re.compile(r"^\s*")
+re_empty_suffix = re.compile(r"\s*$")
+re_add_test = re.compile(r"add_test\(\"(TOPP|UTILS)_.*/" + args.id)
+re_diff = re.compile(r"\$\{DIFF\}.* -in1 ([^ ]+) -in2 ([^ ]+)")
+failing_tests = get_failing_tests(args.cmake)
+tests = []
+
+# process the given CMake files and compile lists of
+# - test lines .. essentially add_test(...)
+# - and pairs of files that are diffed
+jline = ""
+test_lines = []
+diff_pairs = {}
+for cmake in args.cmake:
+    with open(cmake) as cmake_fh:
+        for line in cmake_fh:
+            # remove comments, empty prefixes and suffixes
+            line = re_comment.sub("", line)
+            line = re_empty_prefix.sub("", line)
+            line = re_empty_suffix.sub("", line)
+            # skip empty lines
+            if line == "":
+                continue
+
+            # join test statements that are split over multiple lines
+            if line.endswith(")"):
+                jline += " " + line[:-1]
+            else:
+                jline = line
+                continue
+            line, jline = jline.strip(), ""
+            match = re_diff.search(line)
+            if match:
+                in1 = match.group(1).split("/")[-1]
+                in2 = match.group(2).split("/")[-1]
+                if in1 != in2:
+                    diff_pairs[in1] = in2
+            elif re_add_test.match(line):
+                test_lines.append(line)
+
+for line in test_lines:
+    test = process_test_line(args.id, line, failing_tests, SKIP_LIST, diff_pairs)
+    if test:
+        tests.append(test)
+
+tests = "\n".join(tests)
+print(
+    f"""
+<xml name="autotest_{args.id}">
+{tests}
+</xml>
+"""
+)
--- a/macros.xml	Thu Dec 01 19:13:01 2022 +0000
+++ b/macros.xml	Fri Jun 14 21:31:30 2024 +0000
@@ -3,19 +3,19 @@
      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.8</token>
+  <token name="@TOOL_VERSION@">3.1</token>
   <token name="@VERSION_SUFFIX@">0</token>
+  <token name="@TEST_DATA_LOCATION@"/>
   <xml name="requirements">
     <requirements>
       <requirement type="package" version="@TOOL_VERSION@">openms</requirement>
       <requirement type="package" version="@TOOL_VERSION@">openms-thirdparty</requirement>
       <!-- omssa (which has been excluded from 3rdparty) and makeblastdb for OMSSAAdapter -->
-      <requirement type="package" version="2.1.9">omssa</requirement>
-      <requirement type="package" version="2.13.0">blast</requirement>
+      <requirement type="package" version="2.14.1">blast</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>
+	  <requirement type="package" version="1.5">ctdopts</requirement>
       <yield/>
     </requirements>
   </xml>
@@ -26,6 +26,8 @@
       <regex match="Could not allocate metaspace" level="fatal_oom" description="Java memory Exception"/>
       <regex match="Cannot create VM thread" level="fatal_oom" description="Java memory Exception"/>
       <regex match="qUncompress: could not allocate enough memory to uncompress data" level="fatal_oom" description="Java memory Exception"/>
+      <regex match="OMSSA ran out of RAM" level="fatal_oom" description="Could not allocate memory"/>
+      <regex match="comet' crashed hard (segfault-like). Please check the log." level="fatal_oom" description="Could not allocate memory"/>
     </stdio>
   </xml>
   <xml name="references">
@@ -113,11 +115,11 @@
   </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', 'mzQC': 'mzqc', 'mzTab': 'mztab', 'mzXML': 'mzxml', 'novor': 'txt', 'obo': 'obo', 'oms': 'sqlite', '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'}
+    #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', 'mzQC': 'mzqc', 'mzTab': 'mztab', 'mzXML': 'mzxml', 'novor': 'txt', 'obo': 'obo', 'oms': 'sqlite', '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': 'xsd', 'zip': 'zip'}
     #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', 'mzqc': 'mzQC', 'mztab': 'mzTab', 'mzxml': 'mzXML', 'obo': 'obo', 'sqlite': 'oms', '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'}
+    #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', 'mzqc': 'mzQC', 'mztab': 'mzTab', 'mzxml': 'mzXML', 'obo': 'obo', 'sqlite': 'oms', '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', 'xsd': 'xsd', 'zip': 'zip'}
     #return m[g]
 #end def
 ]]></token></macros>
--- a/prepare_test_data_manual.sh	Thu Dec 01 19:13:01 2022 +0000
+++ b/prepare_test_data_manual.sh	Fri Jun 14 21:31:30 2024 +0000
@@ -1,8 +1,3 @@
-MSSimulator -test -in DecoyDatabase_1.fasta -out MSsimulator.mzml -algorithm:RandomNumberGenerators:biological reproducible -algorithm:RandomNumberGenerators:technical reproducible > MSSimulator_1.stdout 2> stderr
-if [[ "$?" -ne "0" ]]; then >&2 echo 'MSSimulator_1 failed'; >&2 echo -e "stderr:\n$(cat stderr | sed 's/^/    /')"; fi
-
-MSSimulator -test -in DecoyDatabase_1.fasta -out MSsimulator_MALDI.mzml -algorithm:RandomNumberGenerators:biological reproducible -algorithm:RandomNumberGenerators:technical reproducible -algorithm:MSSim:Global:ionization_type MALDI > MSSimulator_2.stdout 2> stderr
-if [[ "$?" -ne "0" ]]; then >&2 echo 'MSSimulator_2 failed'; >&2 echo -e "stderr:\n$(cat stderr | sed 's/^/    /')"; fi
 
 ClusterMassTracesByPrecursor -test -in_ms1 ConsensusMapNormalizer_input.consensusXML -in_swath ConsensusMapNormalizer_input.consensusXML -out ClusterMassTracesByPrecursor.mzml > ClusterMassTracesByPrecursor.stdout 2> stderr
 if [[ "$?" -ne "0" ]]; then >&2 echo 'ClusterMassTracesByPrecursor failed'; >&2 echo -e "stderr:\n$(cat stderr | sed 's/^/    /')"; fi
@@ -13,8 +8,7 @@
 CVInspector -test -cv_files CHEMISTRY/XLMOD.obo -cv_names XLMOD -mapping_file MAPPING/ms-mapping.xml -html CVInspector.html > CVInspector.stdout 2> stderr
 if [[ "$?" -ne "0" ]]; then >&2 echo 'CVInspector failed'; >&2 echo -e "stderr:\n$(cat stderr | sed 's/^/    /')"; fi
 
-DeMeanderize -test -in MSsimulator_MALDI.mzml -out DeMeanderize.mzml > DeMeanderize.stdout 2> stderr
-if [[ "$?" -ne "0" ]]; then >&2 echo 'DeMeanderize failed'; >&2 echo -e "stderr:\n$(cat stderr | sed 's/^/    /')"; fi
+# TODO DeMeanderize
 
 # TODO DigestorMotif
 
@@ -30,26 +24,17 @@
 if [[ "$?" -ne "0" ]]; then >&2 echo 'FeatureFinderIsotopeWavelet failed'; >&2 echo -e "stderr:\n$(cat stderr | sed 's/^/    /')"; fi
 
 
-FFEval -test -in  FeatureFinderCentroided_1_output.featureXML -truth  FeatureFinderCentroided_1_output.featureXML -out  FFEval.featureXML -out_roc FFEval_roc.csv  > FFEval.stdout 2> stderr
-if [[ "$?" -ne "0" ]]; then >&2 echo 'FFEval failed'; >&2 echo -e "stderr:\n$(cat stderr | sed 's/^/    /')"; fi
-
 # TODO? deprecated IDDecoyProbability
 
 IDExtractor -test -in MSGFPlusAdapter_1_out.idXML -best_hits -number_of_peptides  1 -out  IDExtractor.idXML   > IDExtractor.stdout 2> stderr
 if [[ "$?" -ne "0" ]]; then >&2 echo 'IDExtractor failed'; >&2 echo -e "stderr:\n$(cat stderr | sed 's/^/    /')"; fi
 
-LabeledEval -test -in  FeatureLinkerLabeled_1_input.featureXML -truth  FeatureLinkerLabeled_1_output.consensusXML> LabeledEval.txt > LabeledEval.stdout 2> stderr
-if [[ "$?" -ne "0" ]]; then >&2 echo 'LabeledEval failed'; >&2 echo -e "stderr:\n$(cat stderr | sed 's/^/    /')"; fi
-
 MapStatistics -test -in SiriusAdapter_3_input.featureXML -out MapStatistics.txt > MapStatistics_1.stdout 2> stderr
 if [[ "$?" -ne "0" ]]; then >&2 echo 'MapStatistics_1 failed'; >&2 echo -e "stderr:\n$(cat stderr | sed 's/^/    /')"; fi
 
 MapStatistics -test -in ConsensusXMLFile_1.consensusXML -out MapStatistics2.txt > MapStatistics_2.stdout 2> stderr
 if [[ "$?" -ne "0" ]]; then >&2 echo 'MapStatistics_2 failed'; >&2 echo -e "stderr:\n$(cat stderr | sed 's/^/    /')"; fi
 
-MetaboliteAdductDecharger -test -in Decharger_input.featureXML -out_cm MetaboliteAdductDecharger_cm.consensusXML -out_fm MetaboliteAdductDecharger_fm.featureXML -outpairs MetaboliteAdductDecharger_pairs.consensusXML > MetaboliteAdductDecharger.stdout 2> stderr
-if [[ "$?" -ne "0" ]]; then >&2 echo 'MetaboliteAdductDecharger failed'; >&2 echo -e "stderr:\n$(cat stderr | sed 's/^/    /')"; fi
-
 MetaboliteSpectralMatcher -test -in spectra.mzML -database MetaboliteSpectralDB.mzML -out MetaboliteSpectralMatcher.mzTab > MetaboliteSpectralMatcher.stdout 2> stderr
 if [[ "$?" -ne "0" ]]; then >&2 echo 'MetaboliteSpectralMatcher failed'; >&2 echo -e "stderr:\n$(cat stderr | sed 's/^/    /')"; fi
 
@@ -68,20 +53,6 @@
 OpenSwathRewriteToFeatureXML -featureXML OpenSwathFeatureXMLToTSV_input.featureXML -out OpenSwathRewriteToFeatureXML.featureXML > OpenSwathRewriteToFeatureXML.stdout 2> stderr
 # if [[ "$?" -ne "0" ]]; then >&2 echo 'OpenSwathRewriteToFeatureXML failed'; >&2 echo -e "stderr:\n$(cat stderr | sed 's/^/    /')"; fi
 
-# adapted from the commented tests in OpenMS TODO may be removed later https://github.com/OpenMS/OpenMS/issues/4719
-FileConverter -in PepNovo.mzXML -out PepNovo_1.mzML > /dev/null 2> stderr
-if [[ "$?" -ne "0" ]]; then >&2 echo 'FileConverter failed'; >&2 echo -e "stderr:\n$(cat stderr | sed 's/^/    /')"; fi
-
-PepNovoAdapter -ini PepNovoAdapter_1_parameters.ini -in PepNovo_1.mzML -out PepNovoAdapter_3_output.idXML -model_directory pepnovo_models/ -pepnovo_executable pepnovo > PepNovo_1.stdout 2> stderr
-if [[ "$?" -ne "0" ]]; then >&2 echo 'PhosphoScoring failed'; >&2 echo -e "stderr:\n$(cat stderr | sed 's/^/    /')"; fi
-
-FileConverter -in PepNovo.mzData -out PepNovo_4.mzML > /dev/null 2> stderr
-if [[ "$?" -ne "0" ]]; then >&2 echo 'FileConverter failed'; >&2 echo -e "stderr:\n$(cat stderr | sed 's/^/    /')"; fi
-PepNovoAdapter -ini PepNovoAdapter_1_parameters.ini -in PepNovo_4.mzML -out PepNovoAdapter_4_output.idXML -model_directory pepnovo_models/ -pepnovo_executable pepnovo > PepNovo_1.stdout 2> stderr
-if [[ "$?" -ne "0" ]]; then >&2 echo 'PhosphoScoring failed'; >&2 echo -e "stderr:\n$(cat stderr | sed 's/^/    /')"; fi
-
-#PepNovoAdapter -ini PepNovoAdapter_5_parameters.ini -in PepNovoAdapter_5_output.pepnovo_out -out PepNovoAdapter_5_output.idXML -model_directory pepnovo_models/ 
-
 # TODO PhosphoScoring 
 PhosphoScoring -in spectra.mzML -id MSGFPlusAdapter_1_out1.tmp -out PhosphoScoring.idxml > PhosphoScoring.stdout 2> stderr
 if [[ "$?" -ne "0" ]]; then >&2 echo 'PhosphoScoring failed'; >&2 echo -e "stderr:\n$(cat stderr | sed 's/^/    /')"; fi
@@ -118,9 +89,6 @@
 RNPxlXICFilter -test -control FileFilter_1_input.mzML -treatment FileFilter_1_input.mzML -out RNPxlXICFilter.mzML > RNPxlXICFilter.stdout 2> stderr
 if [[ "$?" -ne "0" ]]; then >&2 echo 'RNPxlXICFilter failed'; >&2 echo -e "stderr:\n$(cat stderr | sed 's/^/    /')"; fi
 
-RTEvaluation -in PeptideIndexer_1.idXML -out RTEvaluation.tsv > RTEvaluation.stdout 2> stderr
-if [[ "$?" -ne "0" ]]; then >&2 echo 'RTEvaluation failed'; >&2 echo -e "stderr:\n$(cat stderr | sed 's/^/    /')"; fi
-
 SemanticValidator -test -in FileFilter_1_input.mzML -mapping_file MAPPING/ms-mapping.xml > SemanticValidator.stdout 2> stderr
 if [[ "$?" -ne "0" ]]; then >&2 echo 'SemanticValidator failed'; >&2 echo -e "stderr:\n$(cat stderr | sed 's/^/    /')"; fi
 
@@ -152,13 +120,8 @@
 SpectraFilterThresholdMower -test -in  SpectraFilterSqrtMower_1_input.mzML -out  SpectraFilterThresholdMower.mzML > SpectraFilterThresholdMower.stdout 2> stderr
 if [[ "$?" -ne "0" ]]; then >&2 echo 'SpectraFilterThresholdMower failed'; >&2 echo -e "stderr:\n$(cat stderr | sed 's/^/    /')"; fi
 
-SpectraMerger -test -in NovorAdapter_in.mzML -out SpectraMerger_1.mzML > SpectraMerger.stdout 2> stderr
+SpectraMerger -test -in NovorAdapter_in.mzML -out SpectraMerger_1.mzML -algorithm:average_gaussian:ms_level 2 > SpectraMerger.stdout 2> stderr
 if [[ "$?" -ne "0" ]]; then >&2 echo 'SpectraMerger failed'; >&2 echo -e "stderr:\n$(cat stderr | sed 's/^/    /')"; fi
 
-# TODO SvmTheoreticalSpectrumGeneratorTrainer
-
-TransformationEvaluation -test -in FileInfo_16_input.trafoXML -out TransformationEvaluation.trafoXML > TransformationEvaluation.stdout 2> stderr
-if [[ "$?" -ne "0" ]]; then >&2 echo 'TransformationEvaluation failed'; >&2 echo -e "stderr:\n$(cat stderr | sed 's/^/    /')"; fi
-
 XMLValidator -test -in FileFilter_1_input.mzML > XMLValidator.stdout 2> stderr
 if [[ "$?" -ne "0" ]]; then >&2 echo 'XMLValidator failed'; >&2 echo -e "stderr:\n$(cat stderr | sed 's/^/    /')"; fi
--- a/readme.md	Thu Dec 01 19:13:01 2022 +0000
+++ b/readme.md	Fri Jun 14 21:31:30 2024 +0000
@@ -11,7 +11,7 @@
  * https://www.openms.de/
 
 The wrappers for these tools and most of their tests are automatically
-generated using the `generate.sh` script. The generation of the tools is
+generated using the `./aux/generate.sh` script. The generation of the tools is
 based on the CTDConverter (https://github.com/WorkflowConversion/CTDConverter)
 which can be fine tuned via the `hardcoded_params.json` file. This file allows
 to blacklist and hardcode parameters and to modify or set arbitrary
@@ -129,15 +129,6 @@
 Open problems
 =============
 
-Some tools stall in CI testing using `--biocontainers` which is why the OpenMS
-tools are currently listed in `.tt_biocontainer_skip`. This is
-
-- AssayGeneratorMetabo and SiriusAdapter (both depend on sirius)
-- OMSSAAdapter
-
-Using `docker -t` seems to solve the problem (see
-https://github.com/galaxyproject/galaxy/issues/10153).
-
 Licence (MIT)
 =============
 
--- a/test-data.sh	Thu Dec 01 19:13:01 2022 +0000
+++ b/test-data.sh	Fri Jun 14 21:31:30 2024 +0000
@@ -1,11 +1,10 @@
 #!/usr/bin/env bash
 
-VERSION=2.8
+# set -x
+
+VERSION=3.1
 FILETYPES="aux/filetypes.txt"
-CONDAPKG="https://anaconda.org/bioconda/openms/2.8.0/download/linux-64/openms-2.8.0-h7ca0330_0.tar.bz2"
-
-# import the magic
-. ./generate-foo.sh
+CONDAPKG="https://anaconda.org/bioconda/openms/3.1.0/download/linux-64/openms-3.1.0-h8964181_1.tar.bz2"
 
 # install conda
 if [ -z "$tmp" ]; then
@@ -45,17 +44,20 @@
 
 echo "Clone OpenMS $VERSION sources"
 if [[ ! -d $OPENMSGIT ]]; then
-    # TODO >2.8 reenable original release branch .. also in else branch
-    # the plus branch contains commits from https://github.com/OpenMS/OpenMS/pull/5920 and https://github.com/OpenMS/OpenMS/pull/5917
-    # git clone -b release/$VERSION.0 https://github.com/OpenMS/OpenMS.git $OPENMSGIT
-    git clone -b release/$VERSION.0-plus https://github.com/bernt-matthias/OpenMS.git $OPENMSGIT
-    cd $OPENMSGIT
-    git submodule init
-    git submodule update
-    cd -
+    if [[ "$created" == "yes" ]]; then
+        GIT_DIR=$(mktemp -d --dry-run)
+        GIT_EXTRA_OPTS="--separate-git-dir=$GIT_DIR"
+    fi
+    git clone -b release/$VERSION.0 --depth 1 --recurse-submodules=THIRDPARTY --shallow-submodules $GIT_EXTRA_OPTS https://github.com/OpenMS/OpenMS.git $OPENMSGIT
+    ## save some space by just keeping the needed binaries
+    find $OPENMSGIT/THIRDPARTY/ -type f -not \( -name maracluster -o -name spectrast \) -delete
+    find $OPENMSGIT/THIRDPARTY/ -empty -type d -delete
+    if [[ "$created" == "yes" ]]; then
+        rm -rf $GIT_DIR
+    fi
 else
     cd $OPENMSGIT
-    git pull origin release/$VERSION.0-plus
+    git pull origin release/$VERSION.0
     cd -
 fi
 
@@ -65,7 +67,7 @@
 if conda env list | grep "$OPENMSENV"; then
     true
 else
-    conda create -y --quiet --override-channels --channel iuc --channel conda-forge --channel bioconda --channel defaults -n $OPENMSENV openms=$VERSION openms-thirdparty=$VERSION omssa=2.1.9 ctdopts=1.5 lxml
+    conda create -y --quiet --solver libmamba --override-channels --strict-channel-priority --channel conda-forge --channel bioconda -n $OPENMSENV openms=$VERSION openms-thirdparty=$VERSION ctdopts=1.5 lxml
 # chmod -R u-w $OPENMSENV 
 fi
 ###############################################################################
@@ -101,33 +103,34 @@
 conda deactivate
 
 
-# ###############################################################################
-# ## copy all the test data files to test-data
-# ## most of it (outputs) will be overwritten later, but its needed for
-# ## prepare_test_data
-# ###############################################################################
+# # ###############################################################################
+# # ## copy all the test data files to test-data
+# # ## most of it (outputs) will be overwritten later, but its needed for
+# # ## prepare_test_data
+# # ###############################################################################
 echo "Get test data"
-find test-data -type f,l,d ! -name "*fa" ! -name "*loc" ! -name "test-data" -delete
+find test-data -type f,l,d ! -name "*fa" ! -name "*loc" ! -name "test-data" ! -name MetaboliteSpectralDB.mzML -delete
 
 cp $(find $OPENMSGIT/src/tests/topp/ -type f | grep -Ev "third_party_tests.cmake|CMakeLists.txt|check_ini") test-data/
 cp -r $OPENMSGIT/share/OpenMS/MAPPING/ test-data/
 cp -r $OPENMSGIT/share/OpenMS/CHEMISTRY test-data/
 cp -r $OPENMSGIT/share/OpenMS/examples/ test-data/
 if [ ! -f test-data/MetaboliteSpectralDB.mzML ]; then 
-    wget -nc https://abibuilder.cs.uni-tuebingen.de/archive/openms/Tutorials/Data/latest/Example_Data/Metabolomics/databases/MetaboliteSpectralDB.mzML
+    wget -nc https://raw.githubusercontent.com/sneumann/OpenMS/master/share/OpenMS/CHEMISTRY/MetaboliteSpectralDB.mzML
+    # wget -nc https://abibuilder.cs.uni-tuebingen.de/archive/openms/Tutorials/Data/latest/Example_Data/Metabolomics/databases/MetaboliteSpectralDB.mzML
     mv MetaboliteSpectralDB.mzML test-data/
 fi
 ln -fs TOFCalibration_ref_masses test-data/TOFCalibration_ref_masses.txt
 ln -fs TOFCalibration_const test-data/TOFCalibration_const.csv
 
-if [ ! -d test-data/pepnovo_models/ ]; then
-    mkdir -p /tmp/pepnovo
-    wget -nc http://proteomics.ucsd.edu/Software/PepNovo/PepNovo.20120423.zip
-    unzip PepNovo.20120423.zip -d /tmp/pepnovo/
-    mv /tmp/pepnovo/Models test-data/pepnovo_models/
-    rm PepNovo.20120423.zip
-    rm -rf /tmp/pepnovo
-fi
+# if [ ! -d test-data/pepnovo_models/ ]; then
+#     mkdir -p /tmp/pepnovo
+#     wget -nc http://proteomics.ucsd.edu/Software/PepNovo/PepNovo.20120423.zip
+#     unzip PepNovo.20120423.zip -d /tmp/pepnovo/
+#     mv /tmp/pepnovo/Models test-data/pepnovo_models/
+#     rm PepNovo.20120423.zip
+#     rm -rf /tmp/pepnovo
+# fi
 ###############################################################################
 ## generate ctd files using the binaries in the conda package 
 ###############################################################################
@@ -170,6 +173,47 @@
 ###############################################################################
 ## create script to create results for the tests and run it
 ###############################################################################
+# 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)?"
+
+    OLD_OSW_PARAM=$(cat $OPENMSGIT/src/tests/topp/CMakeLists.txt |sed 's/#.*$//'| sed 's/^\s*//; s/\s*$//' |awk '{printf("%s@NEWLINE@", $0)}' |  sed 's/)@NEWLINE@/)\n/g' | sed 's/@NEWLINE@/ /g' | grep OLD_OSW_PARAM | head -n 1 | sed 's/^[^"]\+//; s/)$//; s/"//g')
+    # TODO SiriusAdapter depends on online service which may timeout .. so keep disabled https://github.com/OpenMS/OpenMS/pull/5010
+    cat $OPENMSGIT/src/tests/topp/CMakeLists.txt  $OPENMSGIT/src/tests/topp/THIRDPARTY/third_party_tests.cmake |
+        sed "s/\${OLD_OSW_PARAM}/$OLD_OSW_PARAM/" |
+        grep -v "\.ini\.json" |
+        sed 's/.ini.json /ini /' | 
+        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}@./@g'|
+        sed 's@TOFCalibration_ref_masses @TOFCalibration_ref_masses.txt @g; s@TOFCalibration_const @TOFCalibration_const.csv @'| 
+	sed 's/\("TOPP_SiriusAdapter_4".*\)-sirius:database all\(.*\)/\1-sirius:database pubchem\2/' |
+    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 'echo executing "'$test_id'"'
+        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
+}
+
 echo "Create test shell script"
 
 echo -n "" > prepare_test_data.sh
@@ -180,31 +224,19 @@
 echo 'export LUCIPHOR_BINARY="$(dirname $(realpath $(which luciphor2)))/luciphor2.jar"' >> prepare_test_data.sh
 
 echo 'export MARACLUSTER_BINARY="'"$OPENMSGIT"'/THIRDPARTY/Linux/64bit/MaRaCluster/maracluster"'>> prepare_test_data.sh
-echo 'export MSFRAGGER_BINARY="/home/berntm/Downloads/MSFragger-20171106/MSFragger-20171106.jar"'>> prepare_test_data.sh
+echo 'export MSFRAGGER_BINARY="/home/berntm/Downloads/MSFragger-3.5/MSFragger-3.5.jar"'>> prepare_test_data.sh
 echo 'export MSGFPLUS_BINARY="$(msgf_plus -get_jar_path)"' >> prepare_test_data.sh
 echo 'export MYRIMATCH_BINARY="myrimatch"'>> prepare_test_data.sh
 echo 'export NOVOR_BINARY="/home/berntm/Downloads/novor/lib/novor.jar"' >> prepare_test_data.sh
-echo 'export OMSSA_BINARY="$(dirname $(realpath $(which omssacl)))/omssacl"'>> prepare_test_data.sh
 echo 'export PERCOLATOR_BINARY="percolator"'>> prepare_test_data.sh
 echo 'export SIRIUS_BINARY="$(which sirius)"' >> prepare_test_data.sh
 echo 'export SPECTRAST_BINARY="'"$OPENMSGIT"'/THIRDPARTY/Linux/64bit/SpectraST/spectrast"' >> prepare_test_data.sh
 echo 'export XTANDEM_BINARY="xtandem"' >> prepare_test_data.sh
 echo 'export THERMORAWFILEPARSER_BINARY="ThermoRawFileParser.exe"' >> prepare_test_data.sh
+echo 'export SAGE_BINARY=sage' >> prepare_test_data.sh
 
 prepare_test_data >> prepare_test_data.sh #tmp_test_data.sh
 
-## prepare_test_data > tmp_test_data.sh
-## # remove calls not needed for the tools listed in any .list file
-## echo LIST $LIST
-## if [ ! -z "$LIST" ]; then
-##     REX=$(echo $LIST | sed 's/ /\n/g' | sed 's@.*/\([^/]\+\).xml$@\1@' | tr '\n' '|' | sed 's/|$//')
-## else
-##     REX=".*"
-## fi
-## echo REX $REX
-## cat tmp_test_data.sh | egrep "($REX)" >> prepare_test_data.sh
-## rm tmp_test_data.sh
-
 echo "Execute test shell script"
 chmod u+x prepare_test_data.sh
 cd ./test-data || exit
@@ -234,14 +266,11 @@
 for i in $(ls ctd/*ctd)
 do
     b=$(basename "$i" .ctd)
-    get_tests2 "$b" >> "$autotests"
+    ./get_tests.py --id "$b" --cmake "$OPENMSGIT"/src/tests/topp/CMakeLists.txt "$OPENMSGIT"/src/tests/topp/THIRDPARTY/third_party_tests.cmake >> "$autotests"
+    wc -l "$autotests"
 done
 echo "</macros>" >> "$autotests"
 
-# echo "Create test data links"
-# Breaks DecoyDatabase
-# link_tmp_files
-
 # tests for tools using output_prefix parameters can not be auto generated
 # hence we output the tests for manual curation in macros_test.xml
 # and remove them from the autotests
@@ -255,6 +284,7 @@
 #
 # not able to specify composite test data  
 # -> SpectraSTSearchAdapter 
+echo "Discard some tests"
 if [[ ! -z "$1" ]]; then
     echo "" > macros_discarded_auto.xml
     for i in OpenSwathFileSplitter IDRipper MzMLSplitter SeedListGenerator MSFraggerAdapter MaRaClusterAdapter NovorAdapter SpectraSTSearchAdapter
@@ -272,7 +302,7 @@
 ## remove broken symlinks in test-data
 find test-data/ -xtype l -delete
 
-if [ ! -z "$created" ]; then
+if [[ "$created" == "yes" ]]; then
     echo "Removing temporary directory"
     rm -rf "$tmp"
 fi