diff msconvert_macros.xml @ 10:9d5de24e6ef7 draft

planemo upload for repository https://github.com/galaxyproteomics/tools-galaxyp/tree/master/tools/msconvert commit d595e3cfe190a61d81005f9be7c2652aa5f91292
author galaxyp
date Sat, 23 Feb 2019 06:25:48 -0500
parents dd4ba10d0c45
children cc5ccfa8ee28
line wrap: on
line diff
--- a/msconvert_macros.xml	Wed Dec 07 16:43:07 2016 -0500
+++ b/msconvert_macros.xml	Sat Feb 23 06:25:48 2019 -0500
@@ -1,60 +1,91 @@
 <macros>
-  <xml name="generic_requirements">
-    <requirements>
-      <requirement type="package" version="3.0.9016">proteowizard</requirement>
-    </requirements>
-  </xml>
-  <token name="@VERSION@">3.0</token>
+  <token name="@VERSION@">3.0.19052</token>
+  <token name="@FULL_VERSION@">@VERSION@-089e81090</token>
   
   <xml name="msconvertCommand">
-    <command interpreter="python">
+    <command detect_errors="exit_code">
 <![CDATA[
     #import re
     #set $ext = $input.ext
-    msconvert_wrapper.py
+
+    ## sanitize display name for use as temp filename
+    #set basename = $re.sub(r'[^\w\.\-\+]','_',$input.element_identifier)
+
     #if $ext == 'wiff':
-      #set basename = 'absciex'
-      #if hasattr($input, 'display_name')
-        #set basename = $re.sub('\W','_',$input.display_name)
+      ln -s '${input.extra_files_path}/wiff' '${basename}.wiff' &&
+      ln -s '${input.extra_files_path}/wiff_scan' '${basename}.wiff.scan' &&
+    #elif $ext.endswith('tar'):
+      ln -s '$input' '${basename}' &&
+      tar xf '${basename}' &&
+      #set basename = $os.path.splitext($basename)[0]
+    #else
+      ln -s '$input' '${basename}' &&
+    #end if
+    
+    #if $data_processing.precursor_refinement.use_mzrefinement
+      #set input_ident_name = ".".join((os.path.splitext($basename)[0], $data_processing.precursor_refinement.input_ident.ext))
+      #set output_refinement_name = os.path.splitext($basename)[0] + '.mzRefinement.tsv'
+      ln -s '$data_processing.precursor_refinement.input_ident' '$input_ident_name' &&
+    #end if
+
+    uid=`id -u` &&
+    gid=`id -g` &&
+
+    wine64_anyuser msconvert '${basename}'
+    --outdir outputs
+    --${output_type}
+
+    #if $general_options.combineIonMobilitySpectra:
+    --combineIonMobilitySpectra
+    #end if
+
+    #if $general_options.simAsSpectra:
+    --simAsSpectra
+    #end if
+
+    #if $general_options.srmAsSpectra:
+    --srmAsSpectra
+    #end if
+
+    #if $general_options.acceptZeroLengthSpectra:
+    --acceptZeroLengthSpectra
+    #end if
+
+    #if $general_options.ignoreUnknownInstrumentError:
+    --ignoreUnknownInstrumentError
+    #end if
+
+    #if $general_options.scan_summing.do_scan_summing:
+      --filter "scanSumming precursorTol=$general_options.scan_summing.precursorTol scanTimeTol=$general_options.scan_summing.scanTimeTol ionMobilityTol=$general_options.scan_summing.ionMobilityTol"
+    #end if
+
+    #if $general_options.multi_run_output.do_multi_run_output:
+      #if len($general_options.multi_run_output.run_index_set) > 0
+        --runIndexSet "
+        #for $index in $general_options.multi_run_output.run_index_set
+          [${index.from},${index.to}]
+        #end for
+        "
       #end if
-      --input=${input.extra_files_path}/wiff
-      --input_name='${basename}.wiff
-      --implicit=${input.extra_files_path}/wiff_scan
-      --input=${input.extra_files_path}/wiff_scan
-      --input_name='${basename}.wiff.scan
     #else
-      --input=${input}
-      #if hasattr($input, 'display_name')
-      --input_name='${input.display_name}'
-      #end if
+      --runIndexSet $general_options.multi_run_output.runIndexSet
     #end if
-    --output=${output}
-    ## BEGIN_VERSION_DEFAULT
-    --fromextension=$ext
-    ## END_VERSION_DEFAULT
-    --toextension=${output_type}
+
+    ## Strip sourceFile location since it is meaningless on HPC systems and causes problems with functional tests
+    --stripLocationFromSourceFiles
 
     ## DATA PROCESSING FILTERS (NOTE: FOR VENDOR METHOD TO WORK, PEAK PICKING MUST BE THE FIRST FILTER!)
+      #if $data_processing.peak_picking.pick_peaks
+        --filter "peakPicking $data_processing.peak_picking.pick_peaks_algorithm msLevel=$data_processing.peak_picking.pick_peaks_ms_levels"
+      #end if
+
       #if $data_processing.precursor_refinement.use_mzrefinement
-        #set $input_ident_name = $re.sub('\W','_',$data_processing.precursor_refinement.input_ident.display_name)
-        #if $data_processing.precursor_refinement.input_ident.ext == 'mzid':
-          #set $input_ident_name = $re.sub('(?i)([.]?mzid)*$','.mzid',$input_ident_name)
-        #elif $data_processing.precursor_refinement.input_ident.ext == 'pepxml':
-          #set $input_ident_name = $re.sub('(?i)([.]?pep[.]?xml)*$','.pep.xml',$input_ident_name)
-        #end if
-      --ident=$data_processing.precursor_refinement.input_ident
-      --ident_name=$input_ident_name
-      --refinement=$output_refinement
       --filter "mzRefiner $input_ident_name
         msLevels=$data_processing.precursor_refinement.precursor_refinement_ms_levels
         thresholdScore=$data_processing.precursor_refinement.thresholdScore
         thresholdValue=$data_processing.precursor_refinement.thresholdValue
         thresholdStep=$data_processing.precursor_refinement.thresholdStep
-        maxSteps=$data_processing.precursor_refinement.thresholdMaxSteps"
-      #end if
-
-      #if $data_processing.peak_picking.pick_peaks
-      --filter "peakPicking $data_processing.peak_picking.pick_peaks_algorithm msLevel=$data_processing.peak_picking.pick_peaks_ms_levels"
+        maxSteps=$data_processing.precursor_refinement.thresholdMaxSteps assumeHighRes=1"
       #end if
 
       #if str($data_processing.charge_state_calculation.charge_state_calculation_method) == "predictor"
@@ -76,27 +107,27 @@
       #end if
 
       #for threshold_entry in $data_processing.thresholds
-      --filter "threshold $threshold_entry.threshold_type $threshold_entry.value $threshold_entry.orientation"
+        --filter "threshold $threshold_entry.threshold_type $threshold_entry.value $threshold_entry.orientation"
       #end for
 
       #if $data_processing.filter_mz_windows.do_mzwindow_filter
-      --filter "mzWindow [$data_processing.filter_mz_windows.mz_window_from,$data_processing.filter_mz_windows.mz_window_to]"
+        --filter "mzWindow [$data_processing.filter_mz_windows.mz_window_from,$data_processing.filter_mz_windows.mz_window_to]"
       #end if
 
       #if $data_processing.etd_filtering.do_etd_filtering
-      --filter "ETDFilter $data_processing.etd_filtering.remove_precursor
-        $data_processing.etd_filtering.remove_charge_reduced
-        $data_processing.etd_filtering.remove_neutral_loss
-        $data_processing.etd_filtering.blanket_removal
-        $data_processing.etd_filtering.matching_tolerance $data_processing.etd_filtering.matching_tolerance_units"
+        --filter "ETDFilter $data_processing.etd_filtering.remove_precursor
+          $data_processing.etd_filtering.remove_charge_reduced
+          $data_processing.etd_filtering.remove_neutral_loss
+          $data_processing.etd_filtering.blanket_removal
+          $data_processing.etd_filtering.matching_tolerance$data_processing.etd_filtering.matching_tolerance_units"
       #end if
 
       #if $data_processing.ms2denoise.denoise
-      --filter "MS2Denoise $data_processing.ms2denoise.num_peaks $data_processing.ms2denoise.window_width $data_processing.ms2denoise.relax"
+        --filter "MS2Denoise $data_processing.ms2denoise.num_peaks $data_processing.ms2denoise.window_width $data_processing.ms2denoise.relax"
       #end if
 
       #if str($data_processing.ms2deisotope) == "true"
-      --filter "MS2Deisotope"
+        --filter "MS2Deisotope"
       #end if
 
 
@@ -106,39 +137,38 @@
       #end if
 
       #if len($filtering.indices) > 0
-      --filter "index
-      #for $index in $filtering.indices
-      [${index.from},${index.to}]
-      #end for
-      "
+        --filter "index
+        #for $index in $filtering.indices
+          [${index.from},${index.to}]
+        #end for
+        "
       #end if
 
       #if len($filtering.scan_numbers) > 0
-      --filter "scanNumber
-      #for $scan_number in $filtering.scan_numbers
-      [${scan_number.from},${scan_number.to}]
-      #end for
-      "
+        --filter "scanNumber
+        #for $scan_number in $filtering.scan_numbers
+          [${scan_number.from},${scan_number.to}]
+        #end for
+        "
       #end if
 
       #if $filtering.strip_it.value
-      --filter "stripIT"
+         --filter "stripIT"
       #end if
 
       #if $filtering.filter_ms_levels.do_ms_level_filter
-      --filter "msLevel [$filtering.filter_ms_levels.ms_level_from, $filtering.filter_ms_levels.ms_level_to]"
+        --filter "msLevel [$filtering.filter_ms_levels.ms_level_from, $filtering.filter_ms_levels.ms_level_to]"
       #end if
 
       #if str($filtering.polarity) != "false"
-      --filter "polarity $filtering.polarity"
+        --filter "polarity $filtering.polarity"
       #end if
 
       #if str($filtering.analyzer) != "false"
-      --filter "analyzer $filtering.analyzer"
+        --filter "analyzer $filtering.analyzer"
       #end if
       
     ## OUTPUT ENCODING
-      -- 
       #set $mz_encoding = str($settings.mz_encoding)
       #set $intensity_encoding = str($settings.intensity_encoding)
       #if $mz_encoding == $intensity_encoding
@@ -154,28 +184,43 @@
 
       #set binary_compression = str($settings.binary_compression)
       #if $binary_compression == "zlib"
-      --zlib
+        --zlib
       #else if $binary_compression == "numpressLinearPic"
-      --numpressLinear --numpressPic
+        --numpressLinear --numpressPic
       #else if $binary_compression == "numpressLinearSlof"
-      --numpressLinear --numpressSlof
+        --numpressLinear --numpressSlof
       #else if $binary_compression == "numpressLinear"
-      --numpressLinear
+        --numpressLinear
       #else if $binary_compression == "numpressPic"
-      --numpressPic
+        --numpressPic
       #else if $binary_compression == "numpressSlof"
-      --numpressSlof
+        --numpressSlof
       #end if
 
       #if $settings.gzip_compression
-      --gzip
+        --gzip
       #end if
 
+      #if $general_options.multi_run_output.do_multi_run_output == 'false':
+        --outfile '${os.path.splitext($basename)[0]}'
+        && sudo mv 'outputs/${os.path.splitext($basename)[0]}.${output_type}' '${output}' && sudo chown \$uid:\$gid '${output}'
+      #else
+        && sudo chown \$uid:\$gid 'outputs' -R
+        && ls -la outputs/
+      #end if
+
+      #if $data_processing.precursor_refinement.use_mzrefinement
+        && sudo mv '$output_refinement_name' '$output_refinement' && sudo chown \$uid:\$gid '$output_refinement'
+      #end if
 ]]>
     </command>
   </xml>
 
   <xml name="msconvertInputParameters">
+    <param name="license_agreement" type="boolean" label="Do you agree to the vendor licenses?" help="This tool uses proprietary vendor libraries; to run it you must agree to the vendor licenses. Read them at http://www.proteowizard.org/licenses.html">
+        <validator type="expression" message="You must agree to the vendor licenses to run msconvert.">True == value</validator>
+    </param>
+
     <param name="output_type" type="select" label="Output Type">
       <option value="mz5" selected="true">mz5</option>
       <option value="mzML">mzML</option>
@@ -184,23 +229,22 @@
       <option value="ms2">ms2</option>
     </param>
 
-    <section name="data_processing" title="Data Processing Filters">
-      
-      <conditional name="peak_picking">
-        <param type="boolean" name="pick_peaks" label="Apply peak picking?" truevalue="true" falsevalue="false" />
-        <when value="false" />
-        <when value="true">
-          <param name="pick_peaks_ms_levels" type="select" label="Peak Peaking - Apply to MS Levels">
-            <option value="1">MS1 Only (1)</option>
-            <option value="2">MS2 Only (2)</option>
-            <option value="2-">MS2 and on (2-)</option>
-            <option value="1-" selected="true">All Levels (1-)</option>
-          </param>
-          <param type="select" name="pick_peaks_algorithm" label="Peak Picking - Algorithm" help="The vendor method only works on Agilent, Bruker, Sciex, Thermo data, and only on Windows (although some vendors work on Wine)">
-            <option value="vendor" selected="true">Prefer vendor algorithm, fallback to local-maximum</option>
-            <option value="cwt">CantWaiT - continuous wavelet transform</option>
-          </param>
-        </when>
+    <section name="data_processing" title="Data Processing Filters">  
+        <conditional name="peak_picking">
+            <param type="boolean" name="pick_peaks" label="Apply peak picking?" truevalue="true" falsevalue="false" />
+            <when value="false" />
+            <when value="true">
+                <param name="pick_peaks_ms_levels" type="select" label="Peak Peaking - Apply to MS Levels">
+                    <option value="1">MS1 Only (1)</option>
+                    <option value="2">MS2 Only (2)</option>
+                    <option value="2-">MS2 and on (2-)</option>
+                    <option value="1-" selected="true">All Levels (1-)</option>
+                </param>
+                <param type="select" name="pick_peaks_algorithm" label="Peak Picking - Algorithm" help="The vendor method only works on Agilent, Bruker, Sciex, Thermo data, and only on Windows (although some vendors work on Wine)">
+                    <option value="vendor" selected="true">Prefer vendor algorithm, fallback to local-maximum</option>
+                    <option value="cwt">CantWaiT - continuous wavelet transform</option>
+                </param>
+            </when>
       </conditional>
 
       <conditional name="precursor_refinement">
@@ -208,8 +252,18 @@
         <when value="false"></when>
         <when value="true">
           <param name="input_ident" type="data" format="pepxml,mzid" label="MZRefinery - Input identification data" />
-          <param name="thresholdScore" type="text" value="mvh" label="MZRefinery - Threshold Score Name" help="E.g. 'mvh' for MyriMatch, 'xcorr' for Sequest, 'specevalue' for MS-GF+" />
-          <param name="thresholdValue" type="text" value="50-" label="MZRefinery - Threshold Score Value" help="MZRefinery uses peptide-spectrum-matches with scores from this range to build its model. '100-' means score equal to or greater than 100. '-1e-10' means less than or equal to 1e-10." />
+          <param name="thresholdScore" type="text" value="mvh" label="MZRefinery - Threshold Score Name" help="E.g. 'mvh' for MyriMatch, 'xcorr' for Sequest, 'specevalue' for MS-GF+">
+            <sanitizer>
+              <valid initial="string.letters" />
+            </sanitizer>
+          </param>
+          <param name="thresholdValue" type="text" value="50-" label="MZRefinery - Threshold Score Value" help="MZRefinery uses peptide-spectrum-matches with scores from this range to build its model. '100-' means score equal to or greater than 100. '-1e-10' means less than or equal to 1e-10.">
+            <sanitizer>
+              <valid initial="string.letters,string.digits">
+                <add value="-" />
+              </valid>
+            </sanitizer>
+          </param>
           <param name="thresholdStep" type="float" value="0" label="MZRefinery - Threshold Score Step" help="If there are not enough quality hits at the given score threshold value, the threshold can be increased by this step (until maxSteps is reached)." />
           <param name="thresholdMaxSteps" type="integer" value="0" label="MZRefinery - At most, how many steps to widen the threshold?" />
           <param name="precursor_refinement_ms_levels" type="select" label="MZRefinery - Apply to MS Levels">
@@ -369,6 +423,37 @@
       </param>
     </section>
 
+    <section name="general_options" title="General Options">
+      <param argument="--combineIonMobilitySpectra" type="boolean" label="Combine ion mobility spectra" help="When false, each mobility scan is written as a separate spectrum. When true, each retention time point will have a single merged scan. For Bruker TIMS spectra, the ion mobilities will be preserved in a separate binaryDataArray, and for TIMS PASEF MS2s, each precursor will be merged separately." />
+
+      <conditional name="scan_summing">
+        <param name="do_scan_summing" type="boolean" truevalue="true" falsevalue="false" label="Sum adjacent scans" help="Sums MS2 sub-scans whose precursors are similar in the m/z, scan time, and/or ion mobility dimensions. It is useful for some Waters DDA data and Bruker PASEF data, where sub-scans should be summed together to increase the SNR" />
+        <when value="false" />
+        <when value="true">
+          <param name="precursorTol" type="float" label="Precursor m/z tolerance" value="0.05" min="0" optional="true" help="Spectra with precursor m/z values with a difference less than this tolerance are summed together." />
+          <param name="scanTimeTol" type="float" label="Scan time tolerance" value="10.0" min="0" optional="true" help="Spectra with scan times with a difference less than this tolerance (in seconds) are summed together." />
+          <param name="ionMobilityTol" type="float" label="Ion mobility tolerance" value="0.01" min="0" optional="true" help="Spectra with ion mobility values with a difference less than this tolerance are summed together. Only relevant for ion mobility spectra." />
+        </when>
+      </conditional>
+
+      <param argument="--simAsSpectra" type="boolean" label="SIM as Spectra" help="Write selected ion monitoring as spectra, not chromatograms" />
+      <param argument="--srmAsSpectra" type="boolean" label="SRM as Spectra" help="Write selected reaction monitoring as spectra, not chromatograms" />
+      <param argument="--acceptZeroLengthSpectra" type="boolean" label="Accept zero-length spectra" help="Some vendor readers have an efficient way of filtering out empty spectra, but it takes more time to open the file" />
+      <param argument="--ignoreUnknownInstrumentError" type="boolean" label="Ignore unknown instrument error" help="If true, if an instrument cannot be determined from a vendor file, it will not be an error" />
+
+      <conditional name="multi_run_output">
+        <param name="do_multi_run_output" type="boolean" truevalue="true" falsevalue="false" label="Output multiple runs per file" help="Some input types can store multiple runs (samples) in a single file (e.g. WIFF). Each run must be written to a separate output file, so check this option if you want to output all runs for a file (each file will create a dataset collection)" />
+        <when value="false">
+          <param argument="--runIndexSet" type="integer" label="Select a single run for multi-run sources" value="0" min="0" help="For multi-run sources (e.g. WIFF), select only the specified run index (first run is index 0)" />
+        </when>
+        <when value="true">
+          <repeat name="run_index_set" title="Select runs for multi-run sources" help="For multi-run sources (e.g. WIFF), select only the specified run indices">
+            <param name="from" type="integer" label="Run Index From" value="0" min="0" optional="false" />
+            <param name="to" type="integer" label="Run Index To" value="0" min="0" optional="true" />
+          </repeat>
+        </when>
+      </conditional>
+    </section>
 
     <section name="settings" title="Output Encoding Settings">
       <param type="select" name="mz_encoding" label="m/z Encoding Precision">
@@ -394,7 +479,8 @@
   
   <xml name="msconvertOutput">
     <outputs>
-      <data format="mzml" name="output" label="${input.name.rsplit('.',1)[0]}.${output_type}" >
+      <data format="mzml" name="output" label="${($input.name[:-4] if $input.name.endswith('.tar') else $input.name).rsplit('.',1)[0]}.${output_type}" >
+        <filter>general_options['multi_run_output']['do_multi_run_output'] == False</filter>
         <change_format>
           <when input="output_type" value="mz5" format="mz5" />
           <when input="output_type" value="mzXML" format="mzxml" />
@@ -402,9 +488,13 @@
           <when input="output_type" value="mgf" format="mgf" />
         </change_format>
       </data>
-      <data format="csv" name="output_refinement" label="${input.name.rsplit('.',1)[0]}.mzRefinement.tsv">
+      <data format="tsv" name="output_refinement" label="${($input.name[:-4] if $input.name.endswith('.tar') else $input.name).rsplit('.',1)[0]}.mzRefinement.tsv">
         <filter>data_processing['precursor_refinement']['use_mzrefinement'] == True</filter>
       </data>
+      <collection name="multi_run_output_list" type="list" label="${($input.name[:-4] if $input.name.endswith('.tar') else $input.name).rsplit('.',1)[0]}.${output_type}">
+        <filter>general_options['multi_run_output']['do_multi_run_output'] == True</filter>
+        <discover_datasets pattern="__name_and_ext__" directory="outputs" />
+      </collection>
     </outputs>
   </xml>
 
@@ -412,35 +502,129 @@
   <xml name="msconvert_tests">
     <test>
       <param name="input" value="small.mzML" />
+      <param name="license_agreement" value="true" />
       <param name="output_type" value="mzML" />
       <param name="pick_peaks" value="true" />
       <param name="pick_peaks_algorithm" value="cwt" />
       <param name="pick_peaks_ms_levels" value="1-" />
-      <output name="output" file="small-peakpicking-cwt-allMS.mzML" />
+      <output name="output" file="small-peakpicking-cwt-allMS.mzML" lines_diff="8" />
+    </test>
+    <test>
+      <param name="input" value="small.RAW" ftype="thermo.raw" />
+      <param name="license_agreement" value="true" />
+      <param name="output_type" value="mzML" />
+      <param name="pick_peaks" value="true" />
+      <param name="pick_peaks_algorithm" value="vendor" />
+      <param name="pick_peaks_ms_levels" value="1-" />
+      <output name="output" file="small-peakpicking-vendor-allMS.mzML" lines_diff="4" />
+    </test>
+    <test>
+      <param name="input" value="ThyroglobMRM000003.d.tar" />
+      <param name="license_agreement" value="true" />
+      <param name="output_type" value="mzML" />
+      <param name="combineIonMobilitySpectra" value="true" />
+      <param name="do_scan_summing" value="true" />
+      <output name="output" file="ThyroglobMRM000003.mzML" lines_diff="4" />
+    </test>
+    <test>
+      <param name="input" value="MassLynxTest.raw.tar" />
+      <param name="license_agreement" value="true" />
+      <param name="output_type" value="mzML" />
+      <output name="output" file="MassLynxTest.mzML" lines_diff="4" />
+    </test>
+    <test>
+      <param name="input" value="AgilentMassHunterTest.d.tar" />
+      <param name="license_agreement" value="true" />
+      <param name="output_type" value="mzXML" />
+      <output name="output" file="AgilentMassHunterTest.mzXML" lines_diff="4" />
+    </test>
+    <test>
+      <param name="input" value="BrukerBafTest.d.tar" />
+      <param name="license_agreement" value="true" />
+      <param name="output_type" value="mzML" />
+      <param name="pick_peaks" value="true" />
+      <param name="pick_peaks_algorithm" value="vendor" />
+      <param name="pick_peaks_ms_levels" value="1-" />
+      <output name="output" file="BrukerBafTest.mzML" lines_diff="4" />
+    </test>
+    <test>
+      <param name="input" value="SciexTest.wiff.tar" />
+      <param name="license_agreement" value="true" />
+      <param name="output_type" value="mzML" />
+      <param name="do_multi_run_output" value="false" />
+      <param name="runIndexSet" value="0" />
+      <output name="output" file="SciexTest-HPINalone.mzML" lines_diff="4" />
+    </test>
+    <test>
+      <param name="input" value="SciexTest.wiff.tar" />
+      <param name="license_agreement" value="true" />
+      <param name="output_type" value="mzXML" />
+      <param name="do_multi_run_output" value="false" />
+      <param name="runIndexSet" value="0" />
+      <param name="indices_0|from" value="0" />
+      <param name="indices_0|to" value="499" />
+      <param name="srmAsSpectra" value="true" />
+      <output name="output" file="SciexTest-HPINalone-srmAsSpectra.mzXML" lines_diff="4" />
+    </test>
+    <test>
+      <param name="input" value="SciexTest.wiff.tar" />
+      <param name="license_agreement" value="true" />
+      <param name="output_type" value="mzXML" />
+      <param name="do_multi_run_output" value="false" />
+      <param name="runIndexSet" value="1" />
+      <param name="indices_0|from" value="0" />
+      <param name="indices_0|to" value="499" />
+      <param name="srmAsSpectra" value="true" />
+      <output name="output" file="SciexTest-HPINalone-NE-srmAsSpectra.mzXML" lines_diff="4" />
+    </test>
+    <test>
+      <param name="input" value="SciexTest.wiff.tar" />
+      <param name="license_agreement" value="true" />
+      <param name="output_type" value="mzML" />
+      <param name="do_multi_run_output" value="true" />
+      <param name="run_index_set_0|from" value="0" />
+      <param name="run_index_set_0|to" value="1" />
+      <output_collection name="multi_run_output_list" type="list">
+        <element name="SciexTest-HPINalone" file="SciexTest-HPINalone.mzML" lines_diff="4" />
+        <element name="SciexTest-HPINalone+NE" file="SciexTest-HPINalone-NE.mzML" lines_diff="4" />
+      </output_collection>
+    </test>
+    <test>
+      <param name="input" value="SciexTest.wiff.tar" />
+      <param name="license_agreement" value="true" />
+      <param name="output_type" value="mzML" />
+      <param name="do_multi_run_output" value="true" />
+      <output_collection name="multi_run_output_list" type="list">
+        <element name="SciexTest-HPINalone" file="SciexTest-HPINalone.mzML" lines_diff="4" />
+        <element name="SciexTest-HPINalone+NE" file="SciexTest-HPINalone-NE.mzML" lines_diff="4" />
+      </output_collection>
     </test>
 
     <!-- this data file only has profile MS1, so the result is the same -->
     <test>
       <param name="input" value="small.mzML" />
+      <param name="license_agreement" value="true" />
       <param name="output_type" value="mzML" />
       <param name="pick_peaks" value="true" />
       <param name="pick_peaks_algorithm" value="cwt" />
       <param name="pick_peaks_ms_levels" value="1" />
-      <output name="output" file="small-peakpicking-cwt-allMS.mzML" /> 
+      <output name="output" file="small-peakpicking-cwt-allMS.mzML" lines_diff="8" /> 
     </test>
     <test>
       <param name="input" value="small-peakpicking-cwt-allMS.mzML" />
+      <param name="license_agreement" value="true" />
       <param name="output_type" value="mz5" />
       <param name="mz_encoding" value="64" />
       <param name="intensity_encoding" value="64" />
-      <output name="output" file="small-zlib-64.mz5" compare="sim_size" delta="100" />
+      <output name="output" file="small-zlib-64.mz5" compare="sim_size" delta="150000" />
     </test>
     <test>
       <param name="input" value="small-peakpicking-cwt-allMS.mzML" />
+      <param name="license_agreement" value="true" />
       <param name="output_type" value="mzXML" />
       <param name="mz_encoding" value="32" />
       <param name="intensity_encoding" value="32" />
-      <output name="output" file="small-zlib-32.mzXML" />
+      <output name="output" file="small-zlib-32.mzXML" lines_diff="6" />
     </test>
     <!-- TODO: how to test gzipped output?
     <test>
@@ -464,53 +648,60 @@
 
     <test>
       <param name="input" value="small-peakpicking-cwt-allMS.mzML" />
+      <param name="license_agreement" value="true" />
       <param name="output_type" value="mzML" />
       <param name="binary_compression" value="numpressLinearPic" />
-      <output name="output" file="small-numpressLP.mzML" />
+      <output name="output" file="small-numpressLP.mzML" lines_diff="114" />
     </test>
 
     <test>
       <param name="input" value="small-peakpicking-cwt-allMS.mzML" />
+      <param name="license_agreement" value="true" />
       <param name="output_type" value="mzML" />
       <param name="binary_compression" value="numpressLinearSlof" />
-      <output name="output" file="small-numpressLS.mzML" />
+      <output name="output" file="small-numpressLS.mzML" lines_diff="114" />
     </test>
 
     <test>
       <param name="input" value="small-peakpicking-cwt-allMS.mzML" />
+      <param name="license_agreement" value="true" />
       <param name="output_type" value="mzML" />
       <param name="binary_compression" value="numpressLinear" />
-      <output name="output" file="small-numpressL.mzML" />
+      <output name="output" file="small-numpressL.mzML" lines_diff="114" />
     </test>
 
     <test>
       <param name="input" value="small-peakpicking-cwt-allMS.mzML" />
+      <param name="license_agreement" value="true" />
       <param name="output_type" value="mzML" />
       <param name="binary_compression" value="numpressPic" />
-      <output name="output" file="small-numpressP.mzML" />
+      <output name="output" file="small-numpressP.mzML" lines_diff="114" />
     </test>
 
     <test>
       <param name="input" value="small-peakpicking-cwt-allMS.mzML" />
+      <param name="license_agreement" value="true" />
       <param name="output_type" value="mzML" />
       <param name="binary_compression" value="numpressSlof" />
-      <output name="output" file="small-numpressS.mzML" />
+      <output name="output" file="small-numpressS.mzML" lines_diff="114" />
     </test>
 
     <test>
       <param name="input" value="Rpal_01.mz5" />
+      <param name="license_agreement" value="true" />
       <param name="output_type" value="mzML" />
       <param name="binary_compression" value="numpressLinearPic" />
       <param name="use_mzrefinement" value="true" />
-      <param name="input_ident" value="Rpal_01.pepXML.gz" />
+      <param name="input_ident" value="Rpal_01.pepXML" />
       <param name="thresholdScore" value="mvh" />
       <param name="thresholdValue" value="40-" />
       <output name="output" file="Rpal_01-mzRefinement.mzML" compare="sim_size" delta="0" />
-      <output name="output.refinement" file="Rpal_01.pepXML.mzRefinement.tsv" />
+      <output name="output_refinement" file="Rpal_01.pepXML.mzRefinement.tsv" />
     </test>
     
     <test>
       <param name="input" value="small-peakpicking-cwt-allMS.mzML" />
+      <param name="license_agreement" value="true" />
       <param name="output_type" value="mzML" />
       <param name="binary_compression" value="numpressLinearPic" />
       <param name="charge_state_calculation_method" value="predictor" />
@@ -519,10 +710,11 @@
       <param name="maxMultipleCharge" value="5" />
       <param name="singleChargeFractionTIC" value="0.95" />
       <param name="maxKnownCharge" value="8" />
-      <output name="output" file="small-chargeStatePredictor.mzML" />
+      <output name="output" file="small-chargeStatePredictor.mzML" lines_diff="114" />
     </test>
     <test>
       <param name="input" value="small-peakpicking-cwt-allMS.mzML" />
+      <param name="license_agreement" value="true" />
       <param name="output_type" value="mzML" />
       <param name="binary_compression" value="numpressLinearPic" />
       <param name="charge_state_calculation_method" value="turbocharger" />
@@ -533,10 +725,11 @@
       <param name="halfIsoWidth" value="1.5" />
       <param name="defaultMinCharge" value="1" />
       <param name="defaultMaxCharge" value="5" />
-      <output name="output" file="small-turbocharger.mzML" />
+      <output name="output" file="small-turbocharger.mzML" lines_diff="114" />
     </test>
     <test>
       <param name="input" value="D100930_yeast_SCX10S_rak_ft8E_pc_01.mz5" />
+      <param name="license_agreement" value="true" />
       <param name="output_type" value="mzML" />
       <param name="do_etd_filtering" value="true" />
       <param name="remove_precursor" value="true" />
@@ -550,6 +743,7 @@
     </test>
     <test>
       <param name="input" value="small-peakpicking-cwt-allMS.mzML" />
+      <param name="license_agreement" value="true" />
       <param name="output_type" value="mzML" />
       <param name="thresholds_0|threshold_type" value="count" />
       <param name="thresholds_0|value" value="100" />
@@ -558,43 +752,48 @@
       <param name="thresholds_1|value" value="1" />
       <param name="thresholds_1|orientation" value="most-intense" />
       <param name="binary_compression" value="numpressLinearPic" />
-      <output name="output" file="small-threshold.mzML" />
+      <output name="output" file="small-threshold.mzML" lines_diff="114" />
     </test>
     <test>
       <param name="input" value="small-peakpicking-cwt-allMS.mzML" />
+      <param name="license_agreement" value="true" />
       <param name="output_type" value="mzML" />
       <param name="do_mzwindow_filter" value="true" />
       <param name="mz_window_from" value="420" />
       <param name="mz_window_to" value="840" />
       <param name="binary_compression" value="numpressLinearPic" />
-      <output name="output" file="small-mzWindow.mzML" />
+      <output name="output" file="small-mzWindow.mzML" lines_diff="114" />
     </test>
     <test>
       <param name="input" value="small-peakpicking-cwt-allMS.mzML" />
+      <param name="license_agreement" value="true" />
       <param name="output_type" value="mzML" />
       <param name="denoise" value="true" />
       <param name="num_peaks" value="10" />
       <param name="window_width" value="40" />
       <param name="relax" value="false" />
       <param name="binary_compression" value="numpressLinearPic" />
-      <output name="output" file="small-denoise.mzML" />
+      <output name="output" file="small-denoise.mzML" lines_diff="114" />
     </test>
     <test>
       <param name="input" value="small-peakpicking-cwt-allMS.mzML" />
+      <param name="license_agreement" value="true" />
       <param name="output_type" value="mzML" />
       <param name="ms2deisotope" value="true" />
       <param name="binary_compression" value="numpressLinearPic" />
-      <output name="output" file="small-deisotope.mzML" />
+      <output name="output" file="small-deisotope.mzML" lines_diff="114" />
     </test>
     <test>
       <param name="input" value="small-peakpicking-cwt-allMS.mzML" />
+      <param name="license_agreement" value="true" />
       <param name="output_type" value="mzML" />
       <param name="activation" value="CID" />
       <param name="binary_compression" value="numpressLinearPic" />
-      <output name="output" file="small-activation.mzML" />
+      <output name="output" file="small-activation.mzML" lines_diff="114" />
     </test>
     <test>
       <param name="input" value="small-peakpicking-cwt-allMS.mzML" />
+      <param name="license_agreement" value="true" />
       <param name="output_type" value="mzML" />
       <param name="indices_0|from" value="2" />
       <param name="indices_0|to" value="4" />
@@ -603,40 +802,45 @@
       <param name="indices_2|from" value="13" />
       <param name="indices_2|to" value="15" />
       <param name="binary_compression" value="numpressLinearPic" />
-      <output name="output" file="small-index-filter.mzML" />
+      <output name="output" file="small-index-filter.mzML" lines_diff="32" />
     </test>
     <test>
       <param name="input" value="small-peakpicking-cwt-allMS.mzML" />
+      <param name="license_agreement" value="true" />
       <param name="output_type" value="mzML" />
       <param name="strip_it" value="true" />
       <param name="binary_compression" value="numpressLinearPic" />
-      <output name="output" file="small-strip-it.mzML" />
+      <output name="output" file="small-strip-it.mzML" lines_diff="100" />
     </test>
     <test>
       <param name="input" value="small-peakpicking-cwt-allMS.mzML" />
+      <param name="license_agreement" value="true" />
       <param name="output_type" value="mzML" />
       <param name="do_ms_level_filter" value="true" />
       <param name="ms_level_from" value="2" />
       <param name="ms_level_to" value="2" />
       <param name="binary_compression" value="numpressLinearPic" />
-      <output name="output" file="small-ms-level-filter.mzML" />
+      <output name="output" file="small-ms-level-filter.mzML" lines_diff="86" />
     </test>
     <test>
       <param name="input" value="small-peakpicking-cwt-allMS.mzML" />
+      <param name="license_agreement" value="true" />
       <param name="output_type" value="mzML" />
       <param name="polarity" value="positive" />
       <param name="binary_compression" value="numpressLinearPic" />
-      <output name="output" file="small-polarity-filter.mzML" />
+      <output name="output" file="small-polarity-filter.mzML" lines_diff="114" />
     </test>
     <test>
       <param name="input" value="small-peakpicking-cwt-allMS.mzML" />
+      <param name="license_agreement" value="true" />
       <param name="output_type" value="mzML" />
       <param name="analyzer" value="IT" />
       <param name="binary_compression" value="numpressLinearPic" />
-      <output name="output" file="small-analyzer-filter.mzML" />
+      <output name="output" file="small-analyzer-filter.mzML" lines_diff="100" />
     </test>
     <test>
       <param name="input" value="small-peakpicking-cwt-allMS.mzML" />
+      <param name="license_agreement" value="true" />
       <param name="output_type" value="mzML" />
       <param name="scan_numbers_0|from" value="3" />
       <param name="scan_numbers_0|to" value="5" />
@@ -645,7 +849,7 @@
       <param name="scan_numbers_2|from" value="14" />
       <param name="scan_numbers_2|to" value="16" />
       <param name="binary_compression" value="numpressLinearPic" />
-      <output name="output" file="small-index-filter.mzML" /> <!-- the scan numbers here produce the same output as the index test above -->
+      <output name="output" file="small-index-filter.mzML" lines_diff="86"/> <!-- the scan numbers here produce the same output as the index test above -->
     </test>
     <!--<test>
       <param name="input" value="small.mzML" />
@@ -657,7 +861,7 @@
   <xml name="msconvert_help">
 **What it does**
 
-Allows interconversion within various mass spectrometry peak list formats. Additional options such as filtering and/or precursor recalculation are available.
+Converts mass spectrometry (MS) files: proprietary MS vendor formats can be converted to open MS formats (mzML, mzXML, MGF, MS1/MS2) and open formats can be converted to other open formats. Additional options such as filtering and/or precursor recalculation are available.
 
 You can view the original documentation here_.