changeset 4:1183846e70a1 draft

Uploaded
author galaxyp
date Wed, 19 Jun 2013 13:15:44 -0400
parents 8fa16707e162
children 9816d9abb501
files feature_linker_unlabeled.xml feature_linker_unlabeled_qt.xml id_file_converter.xml idxml_to_tabular.xml isobaric_analyzer.xml macros.xml map_aligner_identification.xml map_aligner_spectrum.xml omssa_adapter.xml openms_wrapper.py peptide_indexer.xml protein_inference.xml protein_quantifier.xml silac_analyzer.xml
diffstat 14 files changed, 331 insertions(+), 56 deletions(-) [+]
line wrap: on
line diff
--- a/feature_linker_unlabeled.xml	Fri May 10 17:31:59 2013 -0400
+++ b/feature_linker_unlabeled.xml	Wed Jun 19 13:15:44 2013 -0400
@@ -1,4 +1,4 @@
-<tool id="openms_feature_linker_unlabeled" version="0.1.0" name="Feature Linker (Labeled)">
+<tool id="openms_feature_linker_unlabeled" version="0.1.0" name="Feature Linker (Unlabeled)">
   <description>
     Groups corresponding features from multiple maps.
   </description>
@@ -12,23 +12,31 @@
   </command>
   <configfiles>
     <configfile name="config">[simple_options]
-in=$input1
+in=${",".join(map(str, $inputs))}
 out=$output
+#if $type.input_type == "consensusxml"
+$keep_subelements
+#end if
+$ignore_charge
+$use_identifications
+algorithm!second_nearest_gap=$second_nearest_gap
+algorithm!distance_RT!max_difference=$rt_max_difference
+algorithm!distance_MZ!max_difference=$mz_max_difference
+algorithm!distance_MZ!unit=$mz_max_difference_unit
+#if $advanced.specify
+algorithm!distance_RT!weight=$advanced.rt_weight
+algorithm!distance_MZ!weight=$advanced.mz_weight
+algorithm!distance_intensity!weight=$advanced.intensity_weight
+algorithm!distance_RT!exponent=$advanced.rt_exponent
+algorithm!distance_MZ!exponent=$advanced.mz_exponent
+algorithm!distance_intensity!exponent=$advanced.intensity_exponent
+#end if
 </configfile>
   </configfiles>
   <inputs>
-    <conditional name="type">
-      <param name="input_type" type="select" label="Input Type">
-        <option value="featurexml">Features (FeatureXML)</option>
-        <option value="consensusxml">Consensus (ConsensusXML)</option>
-      </param>
-      <when value="featurexml">
-        <param format="featurexml" name="input1" type="data" label="Input Features" />
-      </when>
-      <when value="consensusxml">
-        <param format="consensusxml" name="input1" type="data" label="Input Consensus" />
-      </when>
-    </conditional>
+    <expand macro="feature_linker_input" />
+    <param name="second_nearest_gap" value="2" type="integer" label="Second Nearest Gap" help="The distance to the second nearest neighbors must be larger by this factor than the distance to the matching element itself." />
+    <expand macro="feature_linker_algorithm_options" />
   </inputs>
   <outputs>
     <data format="consensusxml" name="output" />
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/feature_linker_unlabeled_qt.xml	Wed Jun 19 13:15:44 2013 -0400
@@ -0,0 +1,58 @@
+<tool id="openms_feature_linker_unlabeled_qt" version="0.1.0" name="Feature Linker (Unlabeled QT)">
+  <description>
+    Groups corresponding features from multiple maps using a QT clustering approach.
+  </description>
+  <macros>
+    <import>macros.xml</import>
+  </macros>
+  <expand macro="stdio" />
+  <expand macro="requires" />
+  <command interpreter="python">
+    openms_wrapper.py --executable 'FeatureLinkerUnlabeledQT' --config $config
+  </command>
+  <configfiles>
+    <configfile name="config">[simple_options]
+in=${",".join(map(str, $inputs))}
+out=$output
+#if $type.input_type == "consensusxml"
+$keep_subelements
+#end if
+$ignore_charge
+$use_identifications
+algorithm!distance_RT!max_difference=$rt_max_difference
+algorithm!distance_MZ!max_difference=$mz_max_difference
+algorithm!distance_MZ!unit=$mz_max_difference_unit
+#if $advanced.specify
+algorithm!distance_RT!weight=$advanced.rt_weight
+algorithm!distance_MZ!weight=$advanced.mz_weight
+algorithm!distance_intensity!weight=$advanced.intensity_weight
+algorithm!distance_RT!exponent=$advanced.rt_exponent
+algorithm!distance_MZ!exponent=$advanced.mz_exponent
+algorithm!distance_intensity!exponent=$advanced.intensity_exponent
+#end if
+</configfile>
+  </configfiles>
+  <inputs>
+    <expand macro="feature_linker_input" />
+    
+    <expand macro="feature_linker_algorithm_options" />
+  </inputs>
+  <outputs>
+    <data format="consensusxml" name="output" />
+  </outputs>
+  <help>
+**What it does**
+
+This tool provides an algorithm for grouping corresponding features in multiple runs of label-free experiments. For more details and algorithm-specific parameters (set in the INI file) see "Detailed Description" in the algorithm documentation or the INI file table below.
+
+FeatureLinkerUnlabeled takes several feature maps (featureXML files) and stores the corresponding features in a consensus map (consensusXML file). Feature maps can be created from MS experiments (peak data) using one of the FeatureFinder TOPP tools.
+
+Advanced users can convert the consensusXML generated by this tool to EDTA using FileConverter and plot the distribution of distances in RT (or m/z) between different input files (can be done in Excel). The distribution should be Gaussian-like with very few points beyond the tails. Points far away from the Gaussian indicate a too wide tolerance. A Gaussian with its left/right tail trimmed indicates a too narrow tolerance.
+
+**Citation**
+
+For the underlying tool, please cite ``Weisser et al.: An automated pipeline for high-throughput label-free quantitative proteomics (J. Proteome Res., 2013, PMID: 23391308).``
+
+If you use this tool in Galaxy, please cite Chilton J, et al. https://bitbucket.org/galaxyp/galaxyp-toolshed-openms
+  </help>
+</tool>
--- a/id_file_converter.xml	Fri May 10 17:31:59 2013 -0400
+++ b/id_file_converter.xml	Wed Jun 19 13:15:44 2013 -0400
@@ -13,7 +13,6 @@
   <configfiles>
     <configfile name="config">[simple_options]
 in=${in}
-in_type=${in.ext}
 out=${out}
 out_type=${output_type}
 </configfile>
@@ -21,18 +20,18 @@
   <inputs>
     <param format="pepxml,protxml,idxml" name="in" type="data" label="Input Identification File"/>
     <param name="output_type" type="select" label="Output Type">
-      <option value="idxml">idXML</option>
-      <option value="pepxml">pepXM</option>
+      <option value="idXML">idXML</option>
+      <option value="pepXML">pepXML</option>
       <option value="mzid">mzIdentML</option>
-      <option value="fasta">FASTA</option>
+      <option value="FASTA">FASTA</option>
     </param>    
   </inputs>
   <outputs>
     <data format="idxml" name="out">
       <change_format>
-        <when input="output_type" value="pepxml" format="pepxml" />
+        <when input="output_type" value="pepXML" format="pepxml" />
         <when input="output_type" value="mzid" format="mzid" />
-        <when input="output_type" value="fasta" format="fasta" />
+        <when input="output_type" value="FASTA" format="fasta" />
       </change_format>
     </data>
   </outputs>
--- a/idxml_to_tabular.xml	Fri May 10 17:31:59 2013 -0400
+++ b/idxml_to_tabular.xml	Wed Jun 19 13:15:44 2013 -0400
@@ -14,23 +14,18 @@
     <configfile name="config">[simple_options]
 in=${in}
 out=${out}
-#if $dump_type == "protein"
-proteins_only=true
-#end if
-#if $dump_type == "pepetide"
-peptides_only=true
-#end if
-$extra_rt
+$dump_type
+id!first_dim_rt=$extra_rt
 </configfile>
   </configfiles>
   <inputs>
     <param format="idxml" name="in" type="data" label="Input Identification File"/>
     <param name="dump_type" type="select" label="Export type">
-      <option value="all">Run, peptide, and protein information</option>
-      <option value="protein">Run and protein information only</option>
-      <option value="peptide">Peptide information only</option>
+      <option value="">Run, peptide, and protein information</option>
+      <option value="id!proteins_only=true">Run and protein information only</option>
+      <option value="id!peptides_only=true">Peptide information only</option>
     </param>
-    <param name="extra_rt" type="boolean" truevalue="first_dim_rt=true" falsevalue="" label="Include RT information (if present)" />
+    <param name="extra_rt" type="boolean" label="Include RT information (if present)" />
   </inputs>
   <outputs>
     <data format="tabular" name="out">
--- a/isobaric_analyzer.xml	Fri May 10 17:31:59 2013 -0400
+++ b/isobaric_analyzer.xml	Wed Jun 19 13:15:44 2013 -0400
@@ -1,4 +1,4 @@
-<tool id="isobaric_analyzer" version="0.1.0" name="SILACAnalyzer">
+<tool id="isobaric_analyzer" version="0.1.0" name="iTRAQ/TMT Analyzer">
   <description>
     Extracts and normalizes iTRAQ/TMT information from an MS experiment.
   </description>
--- a/macros.xml	Fri May 10 17:31:59 2013 -0400
+++ b/macros.xml	Wed Jun 19 13:15:44 2013 -0400
@@ -80,4 +80,64 @@
       </change_format>
     </data>
   </macro>
+  <macro name="aligner_model">
+    <conditional name="model">
+      <param name="model_type" type="select" label="Model Type">
+        <option value="linear">Linear</option>
+        <option value="b_spline" selected="true">Smoothing spline (non-linear)</option>
+        <option value="interpolated">Interpolated</option>
+      </param>
+      <when value="linear">
+        <!-- TODO: Add symmetric_regression -->
+      </when>
+      <when value="b_spline">
+        <!-- TODO: Add num_breakpoints, break_positions -->
+      </when>
+      <when value="interpolated">
+        <param name="interpolation_type" type="select" label="Interpolation Type">
+          <option value="cspline" selected="true">cspline</option>
+          <option value="linear">linear</option>
+          <option value="akima">akima</option>
+        </param>
+      </when>
+    </conditional>
+  </macro>
+  <macro name="feature_linker_input">
+    <conditional name="type">
+      <param name="input_type" type="select" label="Input Type">
+        <option value="featurexml">Features (FeatureXML)</option>
+        <option value="consensusxml">Consensus (ConsensusXML)</option>
+      </param>
+      <when value="featurexml">
+        <param format="featurexml" name="inputs" type="data" label="Input Features" multiple="true" />
+      </when>
+      <when value="consensusxml">
+        <param format="consensusxml" name="inputs" type="data" label="Input Consensus" multiple="true" />
+        <param name="keep_subelements" type="boolean" label="Transfer sub-features of the inputs to the output." truevalue="keep_subelements=true" falsevalue="" />        
+      </when>
+    </conditional>
+  </macro>
+  <macro name="feature_linker_algorithm_options">
+    <param name="use_identifications" type="boolean" truevalue="algorithm!use_identifications=true" falsevalue="" label="Use Identifications" checked="false" help="Never link features that are annotated with different peptides (only the best hit per peptide identification is taken into account)." />
+    <param name="ignore_charge" type="boolean" truevalue="algorithm!ignore_charge=true" falsevalue="" label="Use Charge" help="Compare features normally even if their charge states are different." checked="false" />    
+    <param name="rt_max_difference" type="float" label="Max Difference (RT)" value="100" help="Maximum allowed difference in RT in seconds." />
+    <param name="mz_max_difference" type="float" label="Max Difference (m/z)" value="0.3" help="Maximum allowed difference in m/z" />
+    <param name="mz_max_difference_unit" type="select" label="Max Difference Units (m/z)">
+      <option value="Da" selected="true">Da</option>
+      <option value="ppm" selected="true">ppm</option>
+    </param>
+    <conditional name="advanced">
+      <param name="specify" type="boolean" label="Specify advanced exponents and weights for distances (RT, m/z, and intensity)" />
+      <when value="true">
+        <param name="rt_exponent" label="RT Exponent" help="Normalized RT differences are raised to this power (using 1 or 2 will be fast, everything else is REALLY slow)" type="float" value="1" />
+        <param name="mz_exponent" label="m/z Exponent" help="Normalized m/z differences are raised to this power (using 1 or 2 will be fast, everything else is REALLY slow)" type="float" value="1" />
+        <param name="intensity_exponent" label="Intensity Exponent" help="Differences in relative intensity are raised to this power (using 1 or 2 will be fast, everything else is REALLY slow)" type="float" value="1" />
+        <param name="rt_weight" label="RT Exponent" help="RT distances are weighted by this factor" type="float" value="1" />
+        <param name="mz_weight" label="m/z Exponent" help="m/z distances are weighted by this factor" type="float" value="2" />
+        <param name="intensity_weight" label="Intensity Exponent" help="Distances based on relative intensity are weighted by this factor" type="float" value="0" />
+      </when>
+      <when value="false">
+      </when>
+    </conditional>
+  </macro>
 </macros>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/map_aligner_identification.xml	Wed Jun 19 13:15:44 2013 -0400
@@ -0,0 +1,86 @@
+<tool id="openms_map_aligner_identification" version="0.1.0" name="Map Aligner (Identification)">
+  <description>
+    Corrects retention time distortions between maps based on common peptide identifications.
+  </description>
+  <macros>
+    <import>macros.xml</import>
+  </macros>
+  <expand macro="stdio" />
+  <expand macro="requires" />
+  <command interpreter="python">
+    openms_wrapper.py --executable 'MapAlignerIdentification' --config $config
+  </command>
+  <configfiles>
+    <configfile name="config">[simple_options]
+#set $inputs_as_str = ",".join(map(str, $type.input))
+in=$inputs_as_str
+out=@MULTI_OUTPUT($output.extra_files_path,$inputs_as_str)@
+#if $generate_transformations
+trafo_out=@MULTI_OUTPUT($transformations.extra_files_path,$inputs_as_str)@
+#end if
+algorithm!peptide_score_threshold=$peptide_score_threshold
+algorithm!min_run_occur=$min_run_occur
+algorithm!max_rt_shift=$max_rt_shift
+algorithm!use_unassigned_peptides=$use_unassigned_peptides
+algorithm!use_feature_rt=$use_feature_rt
+#set $model_type = $model.model_type
+model!type=$model_type
+#if $model_type == "interpolated"
+model!interpolated!interpolation_type=$model.interpolation_type
+#end if
+</configfile>
+  </configfiles>
+  <inputs>
+    <conditional name="type">
+      <param name="input_type" type="select" label="Input Type">
+        <option value="featurexml">Features (FeatureXML)</option>
+        <option value="consensusxml">Consensus (ConsensusXML)</option>
+        <option value="idxml">Identifications (IdXML)</option>
+      </param>
+      <when value="featurexml">
+        <param format="m:featurexml" name="input" type="data" label="Input Features" />
+      </when>
+      <when value="consensusxml">
+        <param format="m:consensusxml" name="input" type="data" label="Input Consensus Files" />
+      </when>
+      <when value="idxml">
+        <param format="m:idxml" name="input" type="data" label="Input Identifications" />
+      </when>
+    </conditional>
+    <param name="generate_transformations" type="boolean" label="Generate Transformations" />
+    <param name="peptide_score_threshold" type="float" value="0" label="Peptide Score Threshold" help="Score threshold for peptide hits to be used in the alignment. Select a value that allows only 'high confidence' matches." />
+    <param name="min_run_occur" type="integer" value="2" label="Minimum Runs" help="Minimum number of runs (incl. reference, if any) a peptide must occur in to be used for the alignment. Unless you have very few runs or identifications, increase this value to focus on more informative peptides." />
+    <param name="max_rt_shift" type="float" value="0.5" label="Max RT Shift" help="Maximum realistic RT difference for a peptide (median per run vs. reference). Peptides with higher shifts (outliers) are not used to compute the alignment. If 0, no limit (disable filter); if &gt; 1, the final value in seconds; if &lt;= 1, taken as a fraction of the range of the reference RT scale." />
+    <param name="use_unassigned_peptides" type="boolean" label="Use Unassigned Peptides" help="Should unassigned peptide identifications be used when computing an alignment of feature maps? If 'false', only peptide IDs assigned to features will be used." truevalue="true" falsevalue="false" checked="true" />
+    <param name="use_feature_rt" type="boolean" label="Use Feature RT" help="When aligning feature maps, don't use the retention time of a peptide identification directly; instead, use the retention time of the centroid of the feature (apex of the elution profile) that the peptide was matched to. If different identifications are matched to one feature, only the peptide closest to the centroid in RT is used. Precludes 'use_unassigned_peptides'." truevalue="true" falsevalue="false" checked="false" />
+    <expand macro="aligner_model" />
+  </inputs>
+  <outputs>
+    <data format="m:consensusxml" name="output" label="Alignment of ${on_string}">
+      <change_format>
+        <when input="type.input_type" value="featurexml" format="m:featurexml" />
+        <when input="type.input_type" value="idxml" format="m:idxml" />
+      </change_format>
+    </data>
+    <data format="m:trafoxml" name="transformations" label="Aligned Transformations for ${on_string}">
+      <filter>generate_transformations</filter>
+    </data>
+  </outputs>
+  <help>
+**What it does**
+
+This tool provides an algorithm to align the retention time scales of multiple input files, correcting shifts and distortions between them. Retention time adjustment may be necessary to correct for chromatography differences e.g. before data from multiple LC-MS runs can be combined (feature grouping), or when one run should be annotated with peptide identifications obtained in a different run.
+
+All map alignment tools (MapAligner...) collect retention time data from the input files and - by fitting a model to this data - compute transformations that map all runs to a common retention time scale. 
+
+The map alignment tools differ in how they obtain retention time data for the modeling of transformations, and consequently what types of data they can be applied to. The alignment algorithm implemented here is based on peptide identifications, and thus applicable to files containing peptide IDs (idXML, annotated featureXML/consensusXML). It finds peptide sequences that different input files have in common and uses them as points of correspondence between the inputs.
+
+Note that alignment is based on the sequence including modifications, thus an exact match is required. I.e., a peptide with oxidised methionine will not be matched to its unmodified version. For some applications this behaviour is desired, while for others its not, but you can always remove all modifications from the input files if you want to ignore modifications.
+
+**Citation**
+
+For the underlying tool, please cite ``Weisser et al.: An automated pipeline for high-throughput label-free quantitative proteomics (J. Proteome Res., 2013, PMID: 23391308).``
+
+If you use this tool in Galaxy, please cite Chilton J, et al. https://bitbucket.org/galaxyp/galaxyp-toolshed-openms
+  </help>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/map_aligner_spectrum.xml	Wed Jun 19 13:15:44 2013 -0400
@@ -0,0 +1,64 @@
+<tool id="openms_map_aligner_spectrum" version="0.1.0" name="Map Aligner (Spectrum)">
+  <description>
+    Corrects retention time distortions between maps by aligning spectra.
+  </description>
+  <macros>
+    <import>macros.xml</import>
+  </macros>
+  <expand macro="stdio" />
+  <expand macro="requires" />
+  <command interpreter="python">
+    openms_wrapper.py --executable 'MapAlignerSpectrum' --config $config
+  </command>
+  <configfiles>
+    <configfile name="config">[simple_options]
+#set $inputs_as_str = ",".join(map(str, $input))
+in=$inputs_as_str
+out=@MULTI_OUTPUT($output.extra_files_path,$inputs_as_str)@
+#if $generate_transformations
+trafo_out=@MULTI_OUTPUT($transformations.extra_files_path,$inputs_as_str)@
+#end if
+algorithm!gapcost=$gapcost
+algorithm!affinegapcost=$affinegapcost
+algorithm!scorefunction=$scorefunction
+#set $model_type = $model.model_type
+model!type=$model_type
+#if $model_type == "interpolated"
+model!interpolated!interpolation_type=$model.interpolation_type
+#end if
+</configfile>
+  </configfiles>
+  <inputs>
+    <param format="m:mzml" name="input" type="data" label="Input Peak Lists" />
+    <param name="generate_transformations" type="boolean" label="Generate Transformations" />
+    <param name="gapcost" type="float" value="1.0" label="Gap Cost" help="This Parameter stands for the cost of opining a gap in the Alignment. A Gap means that one Spectrum can not be aligned directly to another Spectrum in the Map. This happens, when the similarity of both spectra a too low or even not present. Imagen as a insert or delete of the spectrum in the map. The gap is necessary for aligning, if we open a gap there is a possibility that an another spectrum can be correct aligned with a higher score as before without gap. But to open a gap is a negative event and has to be punished a bit, so such only in case it 's a good choice to open a gap, if the score is bad enough. The Parameter is to giving as a positive number, the implementation convert it to a negative number." />
+    <param name="affinegapcost" type="float" value="0.5" label="Affine Gap Cost" help="This Parameter controls the cost of extension a already open gap. The idea behind the affine gapcost lies under the assumption, that it is better to get a long distance of connected gaps than to have a structure gap match gap match. There for the punishment for the extension of a gap has to be lower than the normal gapcost. If the the result of the aligmnet show high compression, it is a good idea to lower the affine gapcost or the normal gapcost." />
+    <param name="scorefunction" type="select" label="Score Function" help="The score function is the core of an alignment. The success of an alignment depends mostly of the elected score function. The score function return the similarity of two Spectrum back. The score influence defines later the way of possible traceback. There exist many way of algorithm to calculate the score.">
+      <option value="SteinScottImproveScore">SteinScottImproveScore</option>
+      <option value="ZhangSimilarityScore">ZhangSimilarityScore</option>
+    </param>
+    <expand macro="aligner_model" />
+  </inputs>
+  <outputs>
+    <data format="m:mzml" name="output" label="Alignment of ${on_string}">
+    </data>
+    <data format="m:trafoxml" name="transformations" label="Aligned Transformations for ${on_string}">
+      <filter>generate_transformations</filter>
+    </data>
+  </outputs>
+  <help>
+**What it does**
+
+This tool provides an algorithm to align the retention time scales of multiple input files, correcting shifts and distortions between them. Retention time adjustment may be necessary to correct for chromatography differences e.g. before data from multiple LC-MS runs can be combined (feature grouping), or when one run should be annotated with peptide identifications obtained in a different run.
+
+All map alignment tools (MapAligner...) collect retention time data from the input files and - by fitting a model to this data - compute transformations that map all runs to a common retention time scale. They can apply the transformations right away and return output files with aligned time scales (parameter out), and/or return descriptions of the transformations in trafoXML format (parameter trafo_out). Transformations stored as trafoXML can be applied to arbitrary files with the MapRTTransformer tool.
+
+The map alignment tools differ in how they obtain retention time data for the modeling of transformations, and consequently what types of data they can be applied to. Here, an experimental algorithm based on spectrum alignment is implemented. It is only applicable to peak maps (mzML format).
+
+**Citation**
+
+For the underlying tool, please cite ``Weisser et al.: An automated pipeline for high-throughput label-free quantitative proteomics (J. Proteome Res., 2013, PMID: 23391308).``
+
+If you use this tool in Galaxy, please cite Chilton J, et al. https://bitbucket.org/galaxyp/galaxyp-toolshed-openms
+  </help>
+</tool>
--- a/omssa_adapter.xml	Fri May 10 17:31:59 2013 -0400
+++ b/omssa_adapter.xml	Wed Jun 19 13:15:44 2013 -0400
@@ -7,7 +7,7 @@
   <expand macro="stdio" />
   <expand macro="requires">
     <requirement type="package">omssa</requirement>
-    <!--<requirement type="package">blast</requirement> -->
+    <requirement type="package">blast+</requirement>
   </expand>
   <command interpreter="python">
     openms_wrapper.py
--- a/openms_wrapper.py	Fri May 10 17:31:59 2013 -0400
+++ b/openms_wrapper.py	Wed Jun 19 13:15:44 2013 -0400
@@ -71,10 +71,10 @@
            required:
             _fail("Failed to find specific OpenMS option [%s] in node [%s]" % (key, node))
     else:
-        if not node:
+        if node is None:
             _fail("Failed to find specific OpenMS option [%s] in node [%s]" % (key, node))
         sub_node = node.find("./NODE[@name='%s']" % key)
-        if not sub_node:
+        if sub_node is None:
             _fail("Failed to find node for key %s" % key)
         _set_option(sub_node, key_parts[1:], value, required)
 
@@ -145,8 +145,16 @@
     return None
 
 
+def _mapped_outputs(output_directory, inputs):
+    inputs = inputs.split(",")
+    os.makedirs(output_directory)
+    outputs = [os.path.join(output_directory, os.path.basename(input)) for input in inputs]
+    return ",".join(outputs)
+
+
 VALUE_FUNCTIONS = {compile(r"\@WHICH\((.*)\)\@"): _which,
                    compile(r"\@PEPNOVO_MODELS_PATH\@"): _get_pepnovo_models_path,
+                   compile(r"\@MULTI_OUTPUT\(([^,]*),(.*)\)\@"): _mapped_outputs,
                   }
 
 
--- a/peptide_indexer.xml	Fri May 10 17:31:59 2013 -0400
+++ b/peptide_indexer.xml	Wed Jun 19 13:15:44 2013 -0400
@@ -16,9 +16,7 @@
 fasta=$database
 out=$output
 decoy_string=$decoy_string
-#if $decoy_string_position == "prefix"
-prefix=true
-#end if
+prefix=$prefix
 $extact_search
 $write_protein_sequence
 $keep_unreferenced_proteins
@@ -29,9 +27,9 @@
     <param name="input1" label="Identification Input" type="data" format="idxml" />
     <param name="database" label="Database" type="data" format="fasta" />
     <param name="decoy_string" type="text" value="_rev" label="Decoy string"/>
-    <param name="decoy_string_position" type="select" label="Decoy Position">
-      <option value="suffix" selected="true">Suffix</option>
-      <option value="prefix">Prefix</option>
+    <param name="prefix" type="select" label="Decoy Position">
+      <option value="false" selected="true">Suffix</option>
+      <option value="true">Prefix</option>
     </param>    
     <param name="extact_search" label="Exact Search" type="boolean" truevalue="" falsevalue="full_tolerant_search=true" checked="true" />
     <param name="write_protein_sequence" type="boolean" truevalue="write_protein_sequence=true" falsevalue="" checked="false" label="Store Protein Sequences" />
--- a/protein_inference.xml	Fri May 10 17:31:59 2013 -0400
+++ b/protein_inference.xml	Wed Jun 19 13:15:44 2013 -0400
@@ -8,7 +8,7 @@
   <expand macro="stdio" />
   <expand macro="requires" />
   <command interpreter="python">
-    openms_wrapper.py --executable 'PeptideIndexer' --config $config
+    openms_wrapper.py --executable 'ProteinInference' --config $config
   </command>
   <configfiles>
     <configfile name="config">[simple_options]
--- a/protein_quantifier.xml	Fri May 10 17:31:59 2013 -0400
+++ b/protein_quantifier.xml	Wed Jun 19 13:15:44 2013 -0400
@@ -23,7 +23,18 @@
 </configfile>
   </configfiles>
   <inputs>
-    <expand macro="map_input" />
+    <conditional name="type">
+      <param name="input_type" type="select" label="Input Type">
+        <option value="featurexml">Features (FeatureXML)</option>
+        <option value="consensusxml">Consensus (ConsensusXML)</option>
+      </param>
+      <when value="featurexml">
+        <param format="featurexml" name="map_input" type="data" label="Input Features" />
+      </when>
+      <when value="consensusxml">
+        <param format="consensusxml" name="map_input" type="data" label="Input Consensus" />
+      </when>
+    </conditional>
     <conditional name="protein_prophet">
       <param name="use" label="Use ProteinProphet Results (converted to idXML)" help="For information about indistinguishable proteins." type="boolean" />
       <when value="false">
@@ -32,7 +43,7 @@
         <param name="protxml" label="Protein/Peptide Identifications Input" type="data" format="idxml" />
       </when>
     </conditional>
-    <param name="top" label="Top" value="0" type="integer" />
+    <param name="top" label="Top" value="3" type="integer" help="Calculate protein abundance from this number of proteotypic peptides (most abundant first; '0' for all) (default: '3' min: '0')" />
   </inputs>
   <outputs>
     <data format="tabular" name="protein_output" />
--- a/silac_analyzer.xml	Fri May 10 17:31:59 2013 -0400
+++ b/silac_analyzer.xml	Wed Jun 19 13:15:44 2013 -0400
@@ -27,7 +27,6 @@
   </configfiles>
   <inputs>
     <param name="input1" type="data" format="mzml" label="Input peak list" />
-    <!-- TODO -->
     <param name="labels" type="select" multiple="true" label="Labels">
       <option value="Arg6" >Arg6</option>
       <option value="Arg10">Arg10</option>
@@ -46,17 +45,6 @@
     </param>
     <param name="missed_cleavages" type="integer" value="2" label="Allowed Missed Cleavages" />
     <expand macro="raw_feature_finder_params" />
-    <!--
-    <param name="rt_threshold" type="float" value="50" label="RT Threshold" help="Upper bound for the retention time [s] over which a characteristic peptide elutes." />
-    <param name="rt_min" type="float" value="0" label="RT Minimum" help="Lower bound for the retention time [s]." />
-    <param name="intensity_cutoff" type="float" value="10000" label="Intensity Cutoff" help="Lower bound for the intensity of isotopic peaks in a SILAC pattern." />
-    <param name="intensity_correlation" type="float" value="0.9" label="Intensity Correlation" help="Lower bound for the Pearson correlation coefficient, which measures how well intensity profiles of different isotopic peaks correlate." />
-    <param name="model_deviation" type="float" value="6" label="Model Deviation" help="Upper bound on the factor by which the ratios of observed isotopic peaks are allowed to differ from the ratios of the theoretic averagine model, i.e. ( theoretic_ratio / model_deviation ) &lt; observed_ratio &lt; ( theoretic_ratio * model_deviation )." />
-    <param name="min_charge" type="integer" value="1" label="Minimum Charge" />
-    <param name="max_charge" type="integer" value="5" label="Maximum Charge" />
-    <param name="min_peaks_per_peptide" type="integer" value="3" label="Minimum Number of Peaks Per Peptide" />
-    <param name="max_peaks_per_peptide" type="integer" value="5" label="Maximum Number of Peaks Per Peptide" />
-    -->
   </inputs>
   <outputs>
     <data format="consensusxml" name="out" />