changeset 0:10f4a0356342

Uploaded
author galaxyp
date Wed, 19 Dec 2012 00:10:08 -0500
parents
children 861e3f0c2bb6
files LICENSE README.md README_GALAXYP.md README_REPO.md msconvert.xml.template msconvert2.xml msconvert2_raw.xml msconvert3.xml msconvert3_raw.xml msconvert_raw_wrapper.py msconvert_subset.xml msconvert_wrapper.py update.sh update_repo.sh version
diffstat 15 files changed, 2572 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LICENSE	Wed Dec 19 00:10:08 2012 -0500
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright 2012 University of Minnesota
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/README.md	Wed Dec 19 00:10:08 2012 -0500
@@ -0,0 +1,47 @@
+# msconvert
+
+This repository contains Galaxy tool wrappers for msconvert, part of
+the ProteoWizard (http://proteowizard.sourceforge.net/) package.
+
+# Installing
+
+Due to potential difficulties installing ProteoWizard with vendor
+library support, tools for interacting with vendor types are seperated
+out into their own wrappers. Galaxy is generally deployed under Linux,
+but vendor support in ProteoWizard requires .NET 4.0. There are at
+least two ways to get this to work:
+
+  * Galaxy jobs may be configured to submit to a Windows host with
+    ProteoWizard installed using the
+    LWR. http://wiki.g2.bx.psu.edu/Admin/Config/LWR
+
+  * ProteoWizard can be installed under Wine. Guidance on how to set
+    this up and package such environments for cloud deployments can be
+    found here: https://github.com/jmchilton/proteomics-wine-env
+
+Wrappers for both msconvert version 2 and version 3+ are provided
+because version 3+ of msconvert with vendor library support requires
+.NET 4.0 and this may difficult or impossible under Wine in Linux with
+all but the most recent versions of Wine (1.4+).
+# Obtaining Tools
+
+Repositories for all Galaxy-P tools can be found at
+https:/bitbucket.org/galaxyp/.
+
+# Contact
+
+Please send suggestions for improvements and bug reports to
+jmchilton@gmail.com.
+
+# License
+
+All Galaxy-P tools are licensed under the Apache License Version 2.0
+unless otherwise documented.
+
+# Tool Versioning
+
+Galaxy-P tools will have versions of the form X.Y.Z. Versions
+differing only after the second decimal should be completely
+compatible with each other. Breaking changes should result in an
+increment of the number before and/or after the first decimal. All
+tools of version less than 1.0.0 should be considered beta.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/README_GALAXYP.md	Wed Dec 19 00:10:08 2012 -0500
@@ -0,0 +1,22 @@
+# Obtaining Tools
+
+Repositories for all Galaxy-P tools can be found at
+https:/bitbucket.org/galaxyp/.
+
+# Contact
+
+Please send suggestions for improvements and bug reports to
+jmchilton@gmail.com.
+
+# License
+
+All Galaxy-P tools are licensed under the Apache License Version 2.0
+unless otherwise documented.
+
+# Tool Versioning
+
+Galaxy-P tools will have versions of the form X.Y.Z. Versions
+differing only after the second decimal should be completely
+compatible with each other. Breaking changes should result in an
+increment of the number before and/or after the first decimal. All
+tools of version less than 1.0.0 should be considered beta.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/README_REPO.md	Wed Dec 19 00:10:08 2012 -0500
@@ -0,0 +1,25 @@
+# msconvert
+
+This repository contains Galaxy tool wrappers for msconvert, part of
+the ProteoWizard (http://proteowizard.sourceforge.net/) package.
+
+# Installing
+
+Due to potential difficulties installing ProteoWizard with vendor
+library support, tools for interacting with vendor types are seperated
+out into their own wrappers. Galaxy is generally deployed under Linux,
+but vendor support in ProteoWizard requires .NET 4.0. There are at
+least two ways to get this to work:
+
+  * Galaxy jobs may be configured to submit to a Windows host with
+    ProteoWizard installed using the
+    LWR. http://wiki.g2.bx.psu.edu/Admin/Config/LWR
+
+  * ProteoWizard can be installed under Wine. Guidance on how to set
+    this up and package such environments for cloud deployments can be
+    found here: https://github.com/jmchilton/proteomics-wine-env
+
+Wrappers for both msconvert version 2 and version 3+ are provided
+because version 3+ of msconvert with vendor library support requires
+.NET 4.0 and this may difficult or impossible under Wine in Linux with
+all but the most recent versions of Wine (1.4+).
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/msconvert.xml.template	Wed Dec 19 00:10:08 2012 -0500
@@ -0,0 +1,386 @@
+<tool id="msconvert$VERSION$DESCRIPTION" name="msconvert$VERSION$DESCRIPTION" version="0.1.0">
+  <!-- BEGIN_VERSION_RAW -->
+  <description>Convert and filter a Thermo Finnigan RAW file</description>
+  <!-- END_VERSION_RAW -->
+  <!-- BEGIN_VERSION_DEFAULT -->
+  <description>Convert and filter a mass spec peak list</description>
+  <!-- END_VERSION_DEFAULT -->
+
+  <command interpreter="python">
+    msconvert_wrapper.py 
+    --input=${input}
+    #if hasattr($input, 'display_name')
+    --input_name='${input.display_name}'
+    #end if
+    --output=${output} 
+    ## BEGIN_VERSION_DEFAULT    
+    --fromextension=${input.ext} 
+    ## END_VERSION_DEFAULT
+
+    ## BEGIN_VERSION_RAW
+    --fromextension=RAW
+    ## END_VERSION_RAW
+
+    --toextension=${output_type} 
+
+    #if $settings.settingsType == "full"
+    --binaryencoding=${settings.binary_encoding} 
+    --mzencoding=${settings.mz_encoding} 
+    --intensityencoding=${settings.intensity_encoding}
+    --zlib=${settings.zlib}
+    #end if
+
+    #if $filtering.filtering_use
+
+    #if $filtering.precursor_recalculation.value
+    --filter "precursorRecalculation"
+    #end if
+
+    #if $filtering.peak_picking.pick_peaks
+    --filter "peakPicking $filtering.peak_picking.prefer_vendor_peaks $filtering.peak_picking.ms_levels"
+    #end if
+
+    #if str($filtering.activation) != "false"
+    --filter "activation $filtering.activation"
+    #end if
+
+    #if len($filtering.indices) > 0
+    --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
+    "
+    #end if
+
+    #for threshold_entry in $filtering.threshold_repeat
+    --filter "threshold $threshold_entry.threshold.threshold_type $threshold_entry.threshold.value $threshold_entry.orientation"
+    #end for
+
+
+    #if $filtering.strip_it.value
+    --filter "stripIT"
+    #end if
+
+    #if $filtering.filter_mz_windows.do_filter
+    --filter "mzWindow [$filtering.filter_mz_windows.from,$filtering.filter_mz_windows.to]"
+    #end if
+
+    
+    #if $filtering.filter_ms_levels.do_filter
+    --filter "msLevel [$filtering.filter_ms_levels.from, $filtering.filter_ms_levels.to]"
+    #end if
+
+    #if str($filtering.etd_filtering.do_etd_filtering) == "default"
+    --filter "ETDFilter"
+    #end if
+
+    #if str($filtering.etd_filtering.do_etd_filtering) == "advanced"
+    --filter "ETDFilter removePrecursor:$filtering.etd_filtering.remove_precursor removeChargeReduced:$filtering.etd_filtering.remove_charge_reduced  removeNeutralLoss:$filtering.etd_filtering.remove_neutral_loss  blanketRemoval:$filtering.etd_filtering.blanket_removal  MatchingTolerance:$filtering.etd_filtering.matching_tolerance $filtering.etd_filtering.matching_tolerance_units"
+    #end if
+
+    ## BEGIN_VERSION_3
+
+    #if $filtering.precursor_refine.value
+    --filter "precursorRefine"
+    #end if
+
+    #if $filtering.ms2denoise.denoise
+    --filter "MS2Denoise $filtering.ms2denoise.num_peaks $filtering.ms2denoise.window_width $filtering.ms2denoise.relax"
+    #end if 
+
+    #if str($filtering.ms2deisotope) == "true"
+    --filter "MS2Deisotope"
+    #end if
+
+    #if str($filtering.polarity) != "false"
+    --filter "polarity $filtering.polarity"
+    #end if
+
+    #if str($filtering.analyzer) != "false"
+    --filter "analyzer $filtering.analyzer"
+    #end if
+
+    ## END_VERSION_3
+
+    #end if
+
+  </command>
+
+  <inputs>
+    <!-- BEGIN_VERSION_RAW -->
+    <param format="RAW" name="input" type="data" label="Thermo Finnigan RAW Input"/>
+    <!-- END_VERSION_RAW -->
+
+    <!-- BEGIN_VERSION_DEFAULT -->
+    <conditional name="type">
+      <param name="input_type" type="select" label="Input Type">
+        <option value="mzml">mzML</option>
+        <option value="mzxml">mzXML</option>
+        <option value="mgf">mgf</option>
+        <option value="ms2">ms2</option>
+      </param>
+      <when value="mzml">
+        <param format="mzml" name="input" type="data" label="Input mzML"/>
+      </when>
+      <when value="mzxml">
+        <param format="mzxml" name="input" type="data" label="Input mzXML"/>
+      </when>
+      <when value="mgf">
+        <param format="mgf" name="input" type="data" label="Input mgf"/>
+      </when>
+      <when value="ms2">
+        <param format="ms2" name="input" type="data" label="Input ms2"/>
+      </when>
+    </conditional>
+    <!-- END_VERSION_DEFAULT -->    
+    <param name="output_type" type="select" label="Output Type">
+      <option value="mzML">mzML (indexed)</option>
+      <option value="unindexed_mzML">mzML (unindexed)</option>
+      <option value="mzXML">mzXML (indexed)</option>      
+      <option value="unindexed_mzXML">mzXML (unindexed)</option>
+      <option value="mgf">mgf</option>
+      <option value="ms2">ms2</option>  
+    </param>    
+    <conditional name="filtering">
+      <param name="filtering_use" type="boolean" label="Use Filtering?" help="" truevalue="true" falsevalue="false" />
+      <when value="false" />
+      <when value="true">
+        <param type="boolean" name="precursor_recalculation" label="Recalculate Precursor?" />
+        <!-- BEGIN_VERSION_3 -->
+        <param type="boolean" name="precursor_refine" label="Refine Precursor?" />
+        <!-- END_VERSION_3 -->
+
+
+        <conditional name="peak_picking">
+          <param type="boolean" name="pick_peaks" label="Use Peak Picking?" truevalue="true" falsevalue="false" />
+          <when value="false" />
+          <when value="true">
+            <param name="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-">All Levels (1-)</option>
+            </param>
+            <param type="boolean" name="prefer_vendor_peaks" label="Peak Picking - Prefer Vendor Peaks?" truevalue="true" falsevalue="false" checked="true"/>
+          </when>
+        </conditional>
+
+        <repeat name="threshold_repeat" title="Filter by Threshold">
+          <conditional name="threshold">
+            <param type="select" label="Specify threshold on" name="threshold_type" help="">
+              <option value="count">Peak count</option>
+              <option value="count-after-ties">Peak count (after ties)</option>
+              <option value="absolute">Peak absolute intensity</option><!-- TODO: absolute what? m/z -->
+              <option value="bpi-relative">Percent of base peak intensity</option>
+              <option value="tic-relative">Percent of total ion current</option>
+              <option value="tic-fraction">Aggregate percent of total ion current</option>
+            </param>
+            <when value="count">
+              <param type="integer" name="value" label="Number of peaks to keep" value="100" />
+            </when>
+            <when value="count-after-ties">
+              <param type="integer" name="value" label="Number of peaks to keep (after ties)" value="100" />
+            </when>
+            <when value="absolute">
+              <param type="float" name="value" label="Absolute intensity cut-off" value="100.0" />
+            </when>
+            <when value="bpi-relative">
+              <param type="float" name="value" label="Keep peaks above (or below) this fraction of base peak intensity" value="0.2"
+              />
+            </when>
+            <when value="tic-relative">
+              <param type="float" name="value" label="Keep peaks above (or below) this fraction of total ion current" value="0.2"
+              />
+            </when>
+            <when value="tic-fraction">
+              <param type="float" name="value" label="Keep peaks until this fraction of total ion current is accounted for" value="0.8" />
+            </when>
+          </conditional>
+          <param type="select" label="Keep" name="orientation">
+            <option value="most-intense">Most intense peaks</option>
+            <option value="least-intense">Least intense peaks</option>
+          </param>
+        </repeat>
+
+
+        <param name="activation" type="select" label="Filter by Activation">
+          <option value="false" selected="true">no</option>
+          <option value="ETD">ETD</option>
+          <option value="CID">CID</option>
+          <option value="SA">SA</option>
+          <option value="HCD">HCD</option>
+          <!-- BEGIN_VERSION_3 -->
+          <option>BIRD</option>
+          <option>ECD</option>
+          <option>IRMPD</option>
+          <option>PD</option>
+          <option>PSD</option>
+          <option>PQD</option>
+          <option>SID</option>
+          <option>SORI</option>
+          <!-- END_VERSION_3 -->
+        </param>
+
+        <repeat name="indices" title="Filter Scan Indices">
+          <param name="from" type="integer" label="Filter Scan Index From" value="0" optional="false" />
+          <param name="to" type="integer" label="Filter Scan Index To" value="0" optional="true" />
+        </repeat>
+
+        <repeat name="scan_numbers" title="Filter Scan Numbers">
+          <param name="from" type="integer" label="Filter Scan Number From" value="0" optional="false" />
+          <param name="to" type="integer" label="Filter Scan Number To" value="0" optional="true" />
+        </repeat>
+
+        <conditional name="filter_mz_windows">
+          <param name="do_filter" type="boolean" truevalue="true" falsevalue="false" label="Filter m/z Window" help="" />
+          <when value="false" />          
+          <when value="true">
+            <param name="from" type="float" label="Filter m/z From" value="0.0" optional="false" />
+            <param name="to" type="float" label="Filter m/z To" value="0.0" optional="true" />
+          </when>
+        </conditional>
+
+        <param type="boolean" name="strip_it" label="Strip Ion Trap MS1 Scans" />
+
+        <conditional name="filter_ms_levels">
+          <param name="do_filter" type="boolean" label="Filter MS Levels" />
+          <when value="false" />
+          <when value="true">
+            <param name="from" type="integer" label="Filter MS Level From" value="0" optional="false" />
+            <param name="to" type="integer" label="Filter MS Level To" value="0" optional="true" />
+          </when>
+        </conditional>
+
+        <conditional name="etd_filtering">
+          <param name="do_etd_filtering" type="select" label="ETD Filtering">
+            <option value="none" selected="true">none</option>
+            <option value="default">yes (with default options)</option>
+            <option value="advanced">yes (show advanced options) </option>
+          </param>
+          <when value="none" />
+          <when value="default" />
+          <when value="advanced">
+            <param name="matching_tolerance" type="float" label="ETD Matching Tolernace" value="3.1">
+            </param>
+            <param name="matching_tolerance_units" type="select" label="Units for ETD Matching Tolerance">
+              <option value="MZ" selected="true">mz</option>              
+              <option value="PPM">ppm</option>
+            </param>
+            <param name="remove_precursor" type="select" label="ETD Remove Precursor">
+              <option value="true" selected="true">yes</option>              
+              <option value="false">no</option>
+            </param>
+            <param name="remove_charge_reduced" type="select" label="ETD Remove Charge Reduced">
+              <option value="true" selected="true">yes</option>              
+              <option value="false">no</option>
+            </param>            
+            <param name="remove_neutral_loss" type="select" label="ETD Remove Neutral Loss">
+              <option value="true" selected="true">yes</option>              
+              <option value="false">no</option>
+            </param>
+            <param name="blanket_removal" type="select" label="ETD Blanket Removal">
+              <option value="true" selected="true">yes</option>              
+              <option value="false">no</option>
+            </param>
+          </when>
+        </conditional>
+
+
+        <!-- BEGIN_VERSION_3 -->
+        <conditional name="ms2denoise">
+          <param name="denoise" type="boolean" label="De-noise MS2 with moving window filter"  />
+          <when value="true">
+            <param name="num_peaks" label="De-noise: Number of peaks in window" value="6" type="integer" />
+            <param name="window_width" type="float" label="De-noise: Window width (Daltons)" value="30" />
+            <param name="relax" label="De-noise: Multicharge fragment relaxation" checked="true" type="boolean" truevalue="true" falsevalue="false" />
+          </when>
+          <when value="false" />
+        </conditional>
+        <param name="ms2deisotope" type="boolean" label="Deisotope MS2 using Markey method" help="" truevalue="true" falsevalue="false" />
+
+        <param name="polarity" type="select" label="Filter by Polarity">
+          <option value="false" selected="true">no</option>
+          <option value="positive">positive</option>
+          <option value="negative">negative</option>
+        </param>
+
+        <param name="analyzer" type="select" label="Filter by Analyzer">
+          <option value="false" selected="true">no</option>
+          <option value="quad">quad</option>
+          <option value="orbi">orbi</option>
+          <option value="FT">FT</option>
+          <option value="IT">IT</option>
+          <option value="TOF">TOF</option>
+        </param>
+        <!-- END_VERSION_3 -->
+      </when>
+    </conditional>
+
+    <conditional name="settings">
+      <param name="settingsType" type="select" label="Advanced Settings" help="">
+        <option value="default">Use Defaults</option>
+        <option value="full">Full Parameter List</option>
+      </param>
+      <when value="default" />
+      <when value="full">
+        <param type="select" name="binary_encoding" label="Binary Encoding Precision">
+          <option value="64" selected="true">64</option>
+          <option value="32">32</option>
+        </param>
+        <param type="select" name="mz_encoding" label="m/z Encoding Precision">
+          <option value="64" selected="true">64</option>
+          <option value="32">32</option>
+        </param>
+        <param type="select" name="intensity_encoding" label="Intensity Encoding Precision" value="32">
+          <option value="64">64</option>
+          <option value="32" selected="true">32</option>
+        </param>
+        <param type="boolean" name="zlib" label="Use zlib">      
+        </param>
+      </when>
+    </conditional>
+
+
+  </inputs>
+  <outputs>
+    <data format="mzml" name="output">
+      <change_format>
+        <when input="output_type" value="mzXML" format="mzxml" />
+        <when input="output_type" value="unindexed_mzXML" format="mzxml" />
+        <when input="output_type" value="ms2" format="ms2" />
+        <when input="output_type" value="mgf" format="mgf" />
+      </change_format>
+    </data>
+  </outputs>
+
+  <requirements>
+    <requirement type="package">proteowizard</requirement>    
+  </requirements>
+
+  <help>
+**What it does**
+
+Converts between various mass spectrometry peak list representations. Additional options such as filtering and/or precursor recalculation are available.
+
+You can view the original documentation here_.
+    
+.. _here: http://proteowizard.sourceforge.net/tools/msconvert.html
+
+------
+
+**Citation**
+
+For the underlying tool, please cite `ProteoWizard: Open Source Software for Rapid Proteomics Tools Development. Darren Kessner; Matt Chambers; Robert Burke; David Agus; Parag Mallick. Bioinformatics 2008; doi: 10.1093/bioinformatics/btn323.`
+
+If you use this tool in Galaxy, please cite Chilton J, et al. https://bitbucket.org/galaxyp/galaxyp-toolshed-msconvert
+
+  </help>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/msconvert2.xml	Wed Dec 19 00:10:08 2012 -0500
@@ -0,0 +1,314 @@
+<tool id="msconvert2" name="msconvert2" version="0.1.0">
+  <!-- BEGIN_VERSION_DEFAULT -->
+  <description>Convert and filter a mass spec peak list</description>
+  <!-- END_VERSION_DEFAULT -->
+
+  <command interpreter="python">
+    msconvert_wrapper.py 
+    --input=${input}
+    #if hasattr($input, 'display_name')
+    --input_name='${input.display_name}'
+    #end if
+    --output=${output} 
+    ## BEGIN_VERSION_DEFAULT    
+    --fromextension=${input.ext} 
+    ## END_VERSION_DEFAULT
+
+
+    --toextension=${output_type} 
+
+    #if $settings.settingsType == "full"
+    --binaryencoding=${settings.binary_encoding} 
+    --mzencoding=${settings.mz_encoding} 
+    --intensityencoding=${settings.intensity_encoding}
+    --zlib=${settings.zlib}
+    #end if
+
+    #if $filtering.filtering_use
+
+    #if $filtering.precursor_recalculation.value
+    --filter "precursorRecalculation"
+    #end if
+
+    #if $filtering.peak_picking.pick_peaks
+    --filter "peakPicking $filtering.peak_picking.prefer_vendor_peaks $filtering.peak_picking.ms_levels"
+    #end if
+
+    #if str($filtering.activation) != "false"
+    --filter "activation $filtering.activation"
+    #end if
+
+    #if len($filtering.indices) > 0
+    --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
+    "
+    #end if
+
+    #for threshold_entry in $filtering.threshold_repeat
+    --filter "threshold $threshold_entry.threshold.threshold_type $threshold_entry.threshold.value $threshold_entry.orientation"
+    #end for
+
+
+    #if $filtering.strip_it.value
+    --filter "stripIT"
+    #end if
+
+    #if $filtering.filter_mz_windows.do_filter
+    --filter "mzWindow [$filtering.filter_mz_windows.from,$filtering.filter_mz_windows.to]"
+    #end if
+
+    
+    #if $filtering.filter_ms_levels.do_filter
+    --filter "msLevel [$filtering.filter_ms_levels.from, $filtering.filter_ms_levels.to]"
+    #end if
+
+    #if str($filtering.etd_filtering.do_etd_filtering) == "default"
+    --filter "ETDFilter"
+    #end if
+
+    #if str($filtering.etd_filtering.do_etd_filtering) == "advanced"
+    --filter "ETDFilter removePrecursor:$filtering.etd_filtering.remove_precursor removeChargeReduced:$filtering.etd_filtering.remove_charge_reduced  removeNeutralLoss:$filtering.etd_filtering.remove_neutral_loss  blanketRemoval:$filtering.etd_filtering.blanket_removal  MatchingTolerance:$filtering.etd_filtering.matching_tolerance $filtering.etd_filtering.matching_tolerance_units"
+    #end if
+
+
+    #end if
+
+  </command>
+
+  <inputs>
+
+    <!-- BEGIN_VERSION_DEFAULT -->
+    <conditional name="type">
+      <param name="input_type" type="select" label="Input Type">
+        <option value="mzml">mzML</option>
+        <option value="mzxml">mzXML</option>
+        <option value="mgf">mgf</option>
+        <option value="ms2">ms2</option>
+      </param>
+      <when value="mzml">
+        <param format="mzml" name="input" type="data" label="Input mzML"/>
+      </when>
+      <when value="mzxml">
+        <param format="mzxml" name="input" type="data" label="Input mzXML"/>
+      </when>
+      <when value="mgf">
+        <param format="mgf" name="input" type="data" label="Input mgf"/>
+      </when>
+      <when value="ms2">
+        <param format="ms2" name="input" type="data" label="Input ms2"/>
+      </when>
+    </conditional>
+    <!-- END_VERSION_DEFAULT -->    
+    <param name="output_type" type="select" label="Output Type">
+      <option value="mzML">mzML (indexed)</option>
+      <option value="unindexed_mzML">mzML (unindexed)</option>
+      <option value="mzXML">mzXML (indexed)</option>      
+      <option value="unindexed_mzXML">mzXML (unindexed)</option>
+      <option value="mgf">mgf</option>
+      <option value="ms2">ms2</option>  
+    </param>    
+    <conditional name="filtering">
+      <param name="filtering_use" type="boolean" label="Use Filtering?" help="" truevalue="true" falsevalue="false" />
+      <when value="false" />
+      <when value="true">
+        <param type="boolean" name="precursor_recalculation" label="Recalculate Precursor?" />
+
+
+        <conditional name="peak_picking">
+          <param type="boolean" name="pick_peaks" label="Use Peak Picking?" truevalue="true" falsevalue="false" />
+          <when value="false" />
+          <when value="true">
+            <param name="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-">All Levels (1-)</option>
+            </param>
+            <param type="boolean" name="prefer_vendor_peaks" label="Peak Picking - Prefer Vendor Peaks?" truevalue="true" falsevalue="false" checked="true"/>
+          </when>
+        </conditional>
+
+        <repeat name="threshold_repeat" title="Filter by Threshold">
+          <conditional name="threshold">
+            <param type="select" label="Specify threshold on" name="threshold_type" help="">
+              <option value="count">Peak count</option>
+              <option value="count-after-ties">Peak count (after ties)</option>
+              <option value="absolute">Peak absolute intensity</option><!-- TODO: absolute what? m/z -->
+              <option value="bpi-relative">Percent of base peak intensity</option>
+              <option value="tic-relative">Percent of total ion current</option>
+              <option value="tic-fraction">Aggregate percent of total ion current</option>
+            </param>
+            <when value="count">
+              <param type="integer" name="value" label="Number of peaks to keep" value="100" />
+            </when>
+            <when value="count-after-ties">
+              <param type="integer" name="value" label="Number of peaks to keep (after ties)" value="100" />
+            </when>
+            <when value="absolute">
+              <param type="float" name="value" label="Absolute intensity cut-off" value="100.0" />
+            </when>
+            <when value="bpi-relative">
+              <param type="float" name="value" label="Keep peaks above (or below) this fraction of base peak intensity" value="0.2"
+              />
+            </when>
+            <when value="tic-relative">
+              <param type="float" name="value" label="Keep peaks above (or below) this fraction of total ion current" value="0.2"
+              />
+            </when>
+            <when value="tic-fraction">
+              <param type="float" name="value" label="Keep peaks until this fraction of total ion current is accounted for" value="0.8" />
+            </when>
+          </conditional>
+          <param type="select" label="Keep" name="orientation">
+            <option value="most-intense">Most intense peaks</option>
+            <option value="least-intense">Least intense peaks</option>
+          </param>
+        </repeat>
+
+
+        <param name="activation" type="select" label="Filter by Activation">
+          <option value="false" selected="true">no</option>
+          <option value="ETD">ETD</option>
+          <option value="CID">CID</option>
+          <option value="SA">SA</option>
+          <option value="HCD">HCD</option>
+        </param>
+
+        <repeat name="indices" title="Filter Scan Indices">
+          <param name="from" type="integer" label="Filter Scan Index From" value="0" optional="false" />
+          <param name="to" type="integer" label="Filter Scan Index To" value="0" optional="true" />
+        </repeat>
+
+        <repeat name="scan_numbers" title="Filter Scan Numbers">
+          <param name="from" type="integer" label="Filter Scan Number From" value="0" optional="false" />
+          <param name="to" type="integer" label="Filter Scan Number To" value="0" optional="true" />
+        </repeat>
+
+        <conditional name="filter_mz_windows">
+          <param name="do_filter" type="boolean" truevalue="true" falsevalue="false" label="Filter m/z Window" help="" />
+          <when value="false" />          
+          <when value="true">
+            <param name="from" type="float" label="Filter m/z From" value="0.0" optional="false" />
+            <param name="to" type="float" label="Filter m/z To" value="0.0" optional="true" />
+          </when>
+        </conditional>
+
+        <param type="boolean" name="strip_it" label="Strip Ion Trap MS1 Scans" />
+
+        <conditional name="filter_ms_levels">
+          <param name="do_filter" type="boolean" label="Filter MS Levels" />
+          <when value="false" />
+          <when value="true">
+            <param name="from" type="integer" label="Filter MS Level From" value="0" optional="false" />
+            <param name="to" type="integer" label="Filter MS Level To" value="0" optional="true" />
+          </when>
+        </conditional>
+
+        <conditional name="etd_filtering">
+          <param name="do_etd_filtering" type="select" label="ETD Filtering">
+            <option value="none" selected="true">none</option>
+            <option value="default">yes (with default options)</option>
+            <option value="advanced">yes (show advanced options) </option>
+          </param>
+          <when value="none" />
+          <when value="default" />
+          <when value="advanced">
+            <param name="matching_tolerance" type="float" label="ETD Matching Tolernace" value="3.1">
+            </param>
+            <param name="matching_tolerance_units" type="select" label="Units for ETD Matching Tolerance">
+              <option value="MZ" selected="true">mz</option>              
+              <option value="PPM">ppm</option>
+            </param>
+            <param name="remove_precursor" type="select" label="ETD Remove Precursor">
+              <option value="true" selected="true">yes</option>              
+              <option value="false">no</option>
+            </param>
+            <param name="remove_charge_reduced" type="select" label="ETD Remove Charge Reduced">
+              <option value="true" selected="true">yes</option>              
+              <option value="false">no</option>
+            </param>            
+            <param name="remove_neutral_loss" type="select" label="ETD Remove Neutral Loss">
+              <option value="true" selected="true">yes</option>              
+              <option value="false">no</option>
+            </param>
+            <param name="blanket_removal" type="select" label="ETD Blanket Removal">
+              <option value="true" selected="true">yes</option>              
+              <option value="false">no</option>
+            </param>
+          </when>
+        </conditional>
+
+
+      </when>
+    </conditional>
+
+    <conditional name="settings">
+      <param name="settingsType" type="select" label="Advanced Settings" help="">
+        <option value="default">Use Defaults</option>
+        <option value="full">Full Parameter List</option>
+      </param>
+      <when value="default" />
+      <when value="full">
+        <param type="select" name="binary_encoding" label="Binary Encoding Precision">
+          <option value="64" selected="true">64</option>
+          <option value="32">32</option>
+        </param>
+        <param type="select" name="mz_encoding" label="m/z Encoding Precision">
+          <option value="64" selected="true">64</option>
+          <option value="32">32</option>
+        </param>
+        <param type="select" name="intensity_encoding" label="Intensity Encoding Precision" value="32">
+          <option value="64">64</option>
+          <option value="32" selected="true">32</option>
+        </param>
+        <param type="boolean" name="zlib" label="Use zlib">      
+        </param>
+      </when>
+    </conditional>
+
+
+  </inputs>
+  <outputs>
+    <data format="mzml" name="output">
+      <change_format>
+        <when input="output_type" value="mzXML" format="mzxml" />
+        <when input="output_type" value="unindexed_mzXML" format="mzxml" />
+        <when input="output_type" value="ms2" format="ms2" />
+        <when input="output_type" value="mgf" format="mgf" />
+      </change_format>
+    </data>
+  </outputs>
+
+  <requirements>
+    <requirement type="package">proteowizard</requirement>    
+  </requirements>
+
+  <help>
+**What it does**
+
+Converts between various mass spectrometry peak list representations. Additional options such as filtering and/or precursor recalculation are available.
+
+You can view the original documentation here_.
+    
+.. _here: http://proteowizard.sourceforge.net/tools/msconvert.html
+
+------
+
+**Citation**
+
+For the underlying tool, please cite `ProteoWizard: Open Source Software for Rapid Proteomics Tools Development. Darren Kessner; Matt Chambers; Robert Burke; David Agus; Parag Mallick. Bioinformatics 2008; doi: 10.1093/bioinformatics/btn323.`
+
+If you use this tool in Galaxy, please cite Chilton J, et al. https://bitbucket.org/galaxyp/galaxyp-toolshed-msconvert
+
+  </help>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/msconvert2_raw.xml	Wed Dec 19 00:10:08 2012 -0500
@@ -0,0 +1,295 @@
+<tool id="msconvert2_raw" name="msconvert2_raw" version="0.1.0">
+  <!-- BEGIN_VERSION_RAW -->
+  <description>Convert and filter a Thermo Finnigan RAW file</description>
+  <!-- END_VERSION_RAW -->
+
+  <command interpreter="python">
+    msconvert_wrapper.py 
+    --input=${input}
+    #if hasattr($input, 'display_name')
+    --input_name='${input.display_name}'
+    #end if
+    --output=${output} 
+
+    ## BEGIN_VERSION_RAW
+    --fromextension=RAW
+    ## END_VERSION_RAW
+
+    --toextension=${output_type} 
+
+    #if $settings.settingsType == "full"
+    --binaryencoding=${settings.binary_encoding} 
+    --mzencoding=${settings.mz_encoding} 
+    --intensityencoding=${settings.intensity_encoding}
+    --zlib=${settings.zlib}
+    #end if
+
+    #if $filtering.filtering_use
+
+    #if $filtering.precursor_recalculation.value
+    --filter "precursorRecalculation"
+    #end if
+
+    #if $filtering.peak_picking.pick_peaks
+    --filter "peakPicking $filtering.peak_picking.prefer_vendor_peaks $filtering.peak_picking.ms_levels"
+    #end if
+
+    #if str($filtering.activation) != "false"
+    --filter "activation $filtering.activation"
+    #end if
+
+    #if len($filtering.indices) > 0
+    --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
+    "
+    #end if
+
+    #for threshold_entry in $filtering.threshold_repeat
+    --filter "threshold $threshold_entry.threshold.threshold_type $threshold_entry.threshold.value $threshold_entry.orientation"
+    #end for
+
+
+    #if $filtering.strip_it.value
+    --filter "stripIT"
+    #end if
+
+    #if $filtering.filter_mz_windows.do_filter
+    --filter "mzWindow [$filtering.filter_mz_windows.from,$filtering.filter_mz_windows.to]"
+    #end if
+
+    
+    #if $filtering.filter_ms_levels.do_filter
+    --filter "msLevel [$filtering.filter_ms_levels.from, $filtering.filter_ms_levels.to]"
+    #end if
+
+    #if str($filtering.etd_filtering.do_etd_filtering) == "default"
+    --filter "ETDFilter"
+    #end if
+
+    #if str($filtering.etd_filtering.do_etd_filtering) == "advanced"
+    --filter "ETDFilter removePrecursor:$filtering.etd_filtering.remove_precursor removeChargeReduced:$filtering.etd_filtering.remove_charge_reduced  removeNeutralLoss:$filtering.etd_filtering.remove_neutral_loss  blanketRemoval:$filtering.etd_filtering.blanket_removal  MatchingTolerance:$filtering.etd_filtering.matching_tolerance $filtering.etd_filtering.matching_tolerance_units"
+    #end if
+
+
+    #end if
+
+  </command>
+
+  <inputs>
+    <!-- BEGIN_VERSION_RAW -->
+    <param format="RAW" name="input" type="data" label="Thermo Finnigan RAW Input"/>
+    <!-- END_VERSION_RAW -->
+
+    <param name="output_type" type="select" label="Output Type">
+      <option value="mzML">mzML (indexed)</option>
+      <option value="unindexed_mzML">mzML (unindexed)</option>
+      <option value="mzXML">mzXML (indexed)</option>      
+      <option value="unindexed_mzXML">mzXML (unindexed)</option>
+      <option value="mgf">mgf</option>
+      <option value="ms2">ms2</option>  
+    </param>    
+    <conditional name="filtering">
+      <param name="filtering_use" type="boolean" label="Use Filtering?" help="" truevalue="true" falsevalue="false" />
+      <when value="false" />
+      <when value="true">
+        <param type="boolean" name="precursor_recalculation" label="Recalculate Precursor?" />
+
+
+        <conditional name="peak_picking">
+          <param type="boolean" name="pick_peaks" label="Use Peak Picking?" truevalue="true" falsevalue="false" />
+          <when value="false" />
+          <when value="true">
+            <param name="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-">All Levels (1-)</option>
+            </param>
+            <param type="boolean" name="prefer_vendor_peaks" label="Peak Picking - Prefer Vendor Peaks?" truevalue="true" falsevalue="false" checked="true"/>
+          </when>
+        </conditional>
+
+        <repeat name="threshold_repeat" title="Filter by Threshold">
+          <conditional name="threshold">
+            <param type="select" label="Specify threshold on" name="threshold_type" help="">
+              <option value="count">Peak count</option>
+              <option value="count-after-ties">Peak count (after ties)</option>
+              <option value="absolute">Peak absolute intensity</option><!-- TODO: absolute what? m/z -->
+              <option value="bpi-relative">Percent of base peak intensity</option>
+              <option value="tic-relative">Percent of total ion current</option>
+              <option value="tic-fraction">Aggregate percent of total ion current</option>
+            </param>
+            <when value="count">
+              <param type="integer" name="value" label="Number of peaks to keep" value="100" />
+            </when>
+            <when value="count-after-ties">
+              <param type="integer" name="value" label="Number of peaks to keep (after ties)" value="100" />
+            </when>
+            <when value="absolute">
+              <param type="float" name="value" label="Absolute intensity cut-off" value="100.0" />
+            </when>
+            <when value="bpi-relative">
+              <param type="float" name="value" label="Keep peaks above (or below) this fraction of base peak intensity" value="0.2"
+              />
+            </when>
+            <when value="tic-relative">
+              <param type="float" name="value" label="Keep peaks above (or below) this fraction of total ion current" value="0.2"
+              />
+            </when>
+            <when value="tic-fraction">
+              <param type="float" name="value" label="Keep peaks until this fraction of total ion current is accounted for" value="0.8" />
+            </when>
+          </conditional>
+          <param type="select" label="Keep" name="orientation">
+            <option value="most-intense">Most intense peaks</option>
+            <option value="least-intense">Least intense peaks</option>
+          </param>
+        </repeat>
+
+
+        <param name="activation" type="select" label="Filter by Activation">
+          <option value="false" selected="true">no</option>
+          <option value="ETD">ETD</option>
+          <option value="CID">CID</option>
+          <option value="SA">SA</option>
+          <option value="HCD">HCD</option>
+        </param>
+
+        <repeat name="indices" title="Filter Scan Indices">
+          <param name="from" type="integer" label="Filter Scan Index From" value="0" optional="false" />
+          <param name="to" type="integer" label="Filter Scan Index To" value="0" optional="true" />
+        </repeat>
+
+        <repeat name="scan_numbers" title="Filter Scan Numbers">
+          <param name="from" type="integer" label="Filter Scan Number From" value="0" optional="false" />
+          <param name="to" type="integer" label="Filter Scan Number To" value="0" optional="true" />
+        </repeat>
+
+        <conditional name="filter_mz_windows">
+          <param name="do_filter" type="boolean" truevalue="true" falsevalue="false" label="Filter m/z Window" help="" />
+          <when value="false" />          
+          <when value="true">
+            <param name="from" type="float" label="Filter m/z From" value="0.0" optional="false" />
+            <param name="to" type="float" label="Filter m/z To" value="0.0" optional="true" />
+          </when>
+        </conditional>
+
+        <param type="boolean" name="strip_it" label="Strip Ion Trap MS1 Scans" />
+
+        <conditional name="filter_ms_levels">
+          <param name="do_filter" type="boolean" label="Filter MS Levels" />
+          <when value="false" />
+          <when value="true">
+            <param name="from" type="integer" label="Filter MS Level From" value="0" optional="false" />
+            <param name="to" type="integer" label="Filter MS Level To" value="0" optional="true" />
+          </when>
+        </conditional>
+
+        <conditional name="etd_filtering">
+          <param name="do_etd_filtering" type="select" label="ETD Filtering">
+            <option value="none" selected="true">none</option>
+            <option value="default">yes (with default options)</option>
+            <option value="advanced">yes (show advanced options) </option>
+          </param>
+          <when value="none" />
+          <when value="default" />
+          <when value="advanced">
+            <param name="matching_tolerance" type="float" label="ETD Matching Tolernace" value="3.1">
+            </param>
+            <param name="matching_tolerance_units" type="select" label="Units for ETD Matching Tolerance">
+              <option value="MZ" selected="true">mz</option>              
+              <option value="PPM">ppm</option>
+            </param>
+            <param name="remove_precursor" type="select" label="ETD Remove Precursor">
+              <option value="true" selected="true">yes</option>              
+              <option value="false">no</option>
+            </param>
+            <param name="remove_charge_reduced" type="select" label="ETD Remove Charge Reduced">
+              <option value="true" selected="true">yes</option>              
+              <option value="false">no</option>
+            </param>            
+            <param name="remove_neutral_loss" type="select" label="ETD Remove Neutral Loss">
+              <option value="true" selected="true">yes</option>              
+              <option value="false">no</option>
+            </param>
+            <param name="blanket_removal" type="select" label="ETD Blanket Removal">
+              <option value="true" selected="true">yes</option>              
+              <option value="false">no</option>
+            </param>
+          </when>
+        </conditional>
+
+
+      </when>
+    </conditional>
+
+    <conditional name="settings">
+      <param name="settingsType" type="select" label="Advanced Settings" help="">
+        <option value="default">Use Defaults</option>
+        <option value="full">Full Parameter List</option>
+      </param>
+      <when value="default" />
+      <when value="full">
+        <param type="select" name="binary_encoding" label="Binary Encoding Precision">
+          <option value="64" selected="true">64</option>
+          <option value="32">32</option>
+        </param>
+        <param type="select" name="mz_encoding" label="m/z Encoding Precision">
+          <option value="64" selected="true">64</option>
+          <option value="32">32</option>
+        </param>
+        <param type="select" name="intensity_encoding" label="Intensity Encoding Precision" value="32">
+          <option value="64">64</option>
+          <option value="32" selected="true">32</option>
+        </param>
+        <param type="boolean" name="zlib" label="Use zlib">      
+        </param>
+      </when>
+    </conditional>
+
+
+  </inputs>
+  <outputs>
+    <data format="mzml" name="output">
+      <change_format>
+        <when input="output_type" value="mzXML" format="mzxml" />
+        <when input="output_type" value="unindexed_mzXML" format="mzxml" />
+        <when input="output_type" value="ms2" format="ms2" />
+        <when input="output_type" value="mgf" format="mgf" />
+      </change_format>
+    </data>
+  </outputs>
+
+  <requirements>
+    <requirement type="package">proteowizard</requirement>    
+  </requirements>
+
+  <help>
+**What it does**
+
+Converts between various mass spectrometry peak list representations. Additional options such as filtering and/or precursor recalculation are available.
+
+You can view the original documentation here_.
+    
+.. _here: http://proteowizard.sourceforge.net/tools/msconvert.html
+
+------
+
+**Citation**
+
+For the underlying tool, please cite `ProteoWizard: Open Source Software for Rapid Proteomics Tools Development. Darren Kessner; Matt Chambers; Robert Burke; David Agus; Parag Mallick. Bioinformatics 2008; doi: 10.1093/bioinformatics/btn323.`
+
+If you use this tool in Galaxy, please cite Chilton J, et al. https://bitbucket.org/galaxyp/galaxyp-toolshed-msconvert
+
+  </help>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/msconvert3.xml	Wed Dec 19 00:10:08 2012 -0500
@@ -0,0 +1,377 @@
+<tool id="msconvert3" name="msconvert3" version="0.1.0">
+  <!-- BEGIN_VERSION_DEFAULT -->
+  <description>Convert and filter a mass spec peak list</description>
+  <!-- END_VERSION_DEFAULT -->
+
+  <command interpreter="python">
+    msconvert_wrapper.py 
+    --input=${input}
+    #if hasattr($input, 'display_name')
+    --input_name='${input.display_name}'
+    #end if
+    --output=${output} 
+    ## BEGIN_VERSION_DEFAULT    
+    --fromextension=${input.ext} 
+    ## END_VERSION_DEFAULT
+
+
+    --toextension=${output_type} 
+
+    #if $settings.settingsType == "full"
+    --binaryencoding=${settings.binary_encoding} 
+    --mzencoding=${settings.mz_encoding} 
+    --intensityencoding=${settings.intensity_encoding}
+    --zlib=${settings.zlib}
+    #end if
+
+    #if $filtering.filtering_use
+
+    #if $filtering.precursor_recalculation.value
+    --filter "precursorRecalculation"
+    #end if
+
+    #if $filtering.peak_picking.pick_peaks
+    --filter "peakPicking $filtering.peak_picking.prefer_vendor_peaks $filtering.peak_picking.ms_levels"
+    #end if
+
+    #if str($filtering.activation) != "false"
+    --filter "activation $filtering.activation"
+    #end if
+
+    #if len($filtering.indices) > 0
+    --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
+    "
+    #end if
+
+    #for threshold_entry in $filtering.threshold_repeat
+    --filter "threshold $threshold_entry.threshold.threshold_type $threshold_entry.threshold.value $threshold_entry.orientation"
+    #end for
+
+
+    #if $filtering.strip_it.value
+    --filter "stripIT"
+    #end if
+
+    #if $filtering.filter_mz_windows.do_filter
+    --filter "mzWindow [$filtering.filter_mz_windows.from,$filtering.filter_mz_windows.to]"
+    #end if
+
+    
+    #if $filtering.filter_ms_levels.do_filter
+    --filter "msLevel [$filtering.filter_ms_levels.from, $filtering.filter_ms_levels.to]"
+    #end if
+
+    #if str($filtering.etd_filtering.do_etd_filtering) == "default"
+    --filter "ETDFilter"
+    #end if
+
+    #if str($filtering.etd_filtering.do_etd_filtering) == "advanced"
+    --filter "ETDFilter removePrecursor:$filtering.etd_filtering.remove_precursor removeChargeReduced:$filtering.etd_filtering.remove_charge_reduced  removeNeutralLoss:$filtering.etd_filtering.remove_neutral_loss  blanketRemoval:$filtering.etd_filtering.blanket_removal  MatchingTolerance:$filtering.etd_filtering.matching_tolerance $filtering.etd_filtering.matching_tolerance_units"
+    #end if
+
+    ## BEGIN_VERSION_3
+
+    #if $filtering.precursor_refine.value
+    --filter "precursorRefine"
+    #end if
+
+    #if $filtering.ms2denoise.denoise
+    --filter "MS2Denoise $filtering.ms2denoise.num_peaks $filtering.ms2denoise.window_width $filtering.ms2denoise.relax"
+    #end if 
+
+    #if str($filtering.ms2deisotope) == "true"
+    --filter "MS2Deisotope"
+    #end if
+
+    #if str($filtering.polarity) != "false"
+    --filter "polarity $filtering.polarity"
+    #end if
+
+    #if str($filtering.analyzer) != "false"
+    --filter "analyzer $filtering.analyzer"
+    #end if
+
+    ## END_VERSION_3
+
+    #end if
+
+  </command>
+
+  <inputs>
+
+    <!-- BEGIN_VERSION_DEFAULT -->
+    <conditional name="type">
+      <param name="input_type" type="select" label="Input Type">
+        <option value="mzml">mzML</option>
+        <option value="mzxml">mzXML</option>
+        <option value="mgf">mgf</option>
+        <option value="ms2">ms2</option>
+      </param>
+      <when value="mzml">
+        <param format="mzml" name="input" type="data" label="Input mzML"/>
+      </when>
+      <when value="mzxml">
+        <param format="mzxml" name="input" type="data" label="Input mzXML"/>
+      </when>
+      <when value="mgf">
+        <param format="mgf" name="input" type="data" label="Input mgf"/>
+      </when>
+      <when value="ms2">
+        <param format="ms2" name="input" type="data" label="Input ms2"/>
+      </when>
+    </conditional>
+    <!-- END_VERSION_DEFAULT -->    
+    <param name="output_type" type="select" label="Output Type">
+      <option value="mzML">mzML (indexed)</option>
+      <option value="unindexed_mzML">mzML (unindexed)</option>
+      <option value="mzXML">mzXML (indexed)</option>      
+      <option value="unindexed_mzXML">mzXML (unindexed)</option>
+      <option value="mgf">mgf</option>
+      <option value="ms2">ms2</option>  
+    </param>    
+    <conditional name="filtering">
+      <param name="filtering_use" type="boolean" label="Use Filtering?" help="" truevalue="true" falsevalue="false" />
+      <when value="false" />
+      <when value="true">
+        <param type="boolean" name="precursor_recalculation" label="Recalculate Precursor?" />
+        <!-- BEGIN_VERSION_3 -->
+        <param type="boolean" name="precursor_refine" label="Refine Precursor?" />
+        <!-- END_VERSION_3 -->
+
+
+        <conditional name="peak_picking">
+          <param type="boolean" name="pick_peaks" label="Use Peak Picking?" truevalue="true" falsevalue="false" />
+          <when value="false" />
+          <when value="true">
+            <param name="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-">All Levels (1-)</option>
+            </param>
+            <param type="boolean" name="prefer_vendor_peaks" label="Peak Picking - Prefer Vendor Peaks?" truevalue="true" falsevalue="false" checked="true"/>
+          </when>
+        </conditional>
+
+        <repeat name="threshold_repeat" title="Filter by Threshold">
+          <conditional name="threshold">
+            <param type="select" label="Specify threshold on" name="threshold_type" help="">
+              <option value="count">Peak count</option>
+              <option value="count-after-ties">Peak count (after ties)</option>
+              <option value="absolute">Peak absolute intensity</option><!-- TODO: absolute what? m/z -->
+              <option value="bpi-relative">Percent of base peak intensity</option>
+              <option value="tic-relative">Percent of total ion current</option>
+              <option value="tic-fraction">Aggregate percent of total ion current</option>
+            </param>
+            <when value="count">
+              <param type="integer" name="value" label="Number of peaks to keep" value="100" />
+            </when>
+            <when value="count-after-ties">
+              <param type="integer" name="value" label="Number of peaks to keep (after ties)" value="100" />
+            </when>
+            <when value="absolute">
+              <param type="float" name="value" label="Absolute intensity cut-off" value="100.0" />
+            </when>
+            <when value="bpi-relative">
+              <param type="float" name="value" label="Keep peaks above (or below) this fraction of base peak intensity" value="0.2"
+              />
+            </when>
+            <when value="tic-relative">
+              <param type="float" name="value" label="Keep peaks above (or below) this fraction of total ion current" value="0.2"
+              />
+            </when>
+            <when value="tic-fraction">
+              <param type="float" name="value" label="Keep peaks until this fraction of total ion current is accounted for" value="0.8" />
+            </when>
+          </conditional>
+          <param type="select" label="Keep" name="orientation">
+            <option value="most-intense">Most intense peaks</option>
+            <option value="least-intense">Least intense peaks</option>
+          </param>
+        </repeat>
+
+
+        <param name="activation" type="select" label="Filter by Activation">
+          <option value="false" selected="true">no</option>
+          <option value="ETD">ETD</option>
+          <option value="CID">CID</option>
+          <option value="SA">SA</option>
+          <option value="HCD">HCD</option>
+          <!-- BEGIN_VERSION_3 -->
+          <option>BIRD</option>
+          <option>ECD</option>
+          <option>IRMPD</option>
+          <option>PD</option>
+          <option>PSD</option>
+          <option>PQD</option>
+          <option>SID</option>
+          <option>SORI</option>
+          <!-- END_VERSION_3 -->
+        </param>
+
+        <repeat name="indices" title="Filter Scan Indices">
+          <param name="from" type="integer" label="Filter Scan Index From" value="0" optional="false" />
+          <param name="to" type="integer" label="Filter Scan Index To" value="0" optional="true" />
+        </repeat>
+
+        <repeat name="scan_numbers" title="Filter Scan Numbers">
+          <param name="from" type="integer" label="Filter Scan Number From" value="0" optional="false" />
+          <param name="to" type="integer" label="Filter Scan Number To" value="0" optional="true" />
+        </repeat>
+
+        <conditional name="filter_mz_windows">
+          <param name="do_filter" type="boolean" truevalue="true" falsevalue="false" label="Filter m/z Window" help="" />
+          <when value="false" />          
+          <when value="true">
+            <param name="from" type="float" label="Filter m/z From" value="0.0" optional="false" />
+            <param name="to" type="float" label="Filter m/z To" value="0.0" optional="true" />
+          </when>
+        </conditional>
+
+        <param type="boolean" name="strip_it" label="Strip Ion Trap MS1 Scans" />
+
+        <conditional name="filter_ms_levels">
+          <param name="do_filter" type="boolean" label="Filter MS Levels" />
+          <when value="false" />
+          <when value="true">
+            <param name="from" type="integer" label="Filter MS Level From" value="0" optional="false" />
+            <param name="to" type="integer" label="Filter MS Level To" value="0" optional="true" />
+          </when>
+        </conditional>
+
+        <conditional name="etd_filtering">
+          <param name="do_etd_filtering" type="select" label="ETD Filtering">
+            <option value="none" selected="true">none</option>
+            <option value="default">yes (with default options)</option>
+            <option value="advanced">yes (show advanced options) </option>
+          </param>
+          <when value="none" />
+          <when value="default" />
+          <when value="advanced">
+            <param name="matching_tolerance" type="float" label="ETD Matching Tolernace" value="3.1">
+            </param>
+            <param name="matching_tolerance_units" type="select" label="Units for ETD Matching Tolerance">
+              <option value="MZ" selected="true">mz</option>              
+              <option value="PPM">ppm</option>
+            </param>
+            <param name="remove_precursor" type="select" label="ETD Remove Precursor">
+              <option value="true" selected="true">yes</option>              
+              <option value="false">no</option>
+            </param>
+            <param name="remove_charge_reduced" type="select" label="ETD Remove Charge Reduced">
+              <option value="true" selected="true">yes</option>              
+              <option value="false">no</option>
+            </param>            
+            <param name="remove_neutral_loss" type="select" label="ETD Remove Neutral Loss">
+              <option value="true" selected="true">yes</option>              
+              <option value="false">no</option>
+            </param>
+            <param name="blanket_removal" type="select" label="ETD Blanket Removal">
+              <option value="true" selected="true">yes</option>              
+              <option value="false">no</option>
+            </param>
+          </when>
+        </conditional>
+
+
+        <!-- BEGIN_VERSION_3 -->
+        <conditional name="ms2denoise">
+          <param name="denoise" type="boolean" label="De-noise MS2 with moving window filter"  />
+          <when value="true">
+            <param name="num_peaks" label="De-noise: Number of peaks in window" value="6" type="integer" />
+            <param name="window_width" type="float" label="De-noise: Window width (Daltons)" value="30" />
+            <param name="relax" label="De-noise: Multicharge fragment relaxation" checked="true" type="boolean" truevalue="true" falsevalue="false" />
+          </when>
+          <when value="false" />
+        </conditional>
+        <param name="ms2deisotope" type="boolean" label="Deisotope MS2 using Markey method" help="" truevalue="true" falsevalue="false" />
+
+        <param name="polarity" type="select" label="Filter by Polarity">
+          <option value="false" selected="true">no</option>
+          <option value="positive">positive</option>
+          <option value="negative">negative</option>
+        </param>
+
+        <param name="analyzer" type="select" label="Filter by Analyzer">
+          <option value="false" selected="true">no</option>
+          <option value="quad">quad</option>
+          <option value="orbi">orbi</option>
+          <option value="FT">FT</option>
+          <option value="IT">IT</option>
+          <option value="TOF">TOF</option>
+        </param>
+        <!-- END_VERSION_3 -->
+      </when>
+    </conditional>
+
+    <conditional name="settings">
+      <param name="settingsType" type="select" label="Advanced Settings" help="">
+        <option value="default">Use Defaults</option>
+        <option value="full">Full Parameter List</option>
+      </param>
+      <when value="default" />
+      <when value="full">
+        <param type="select" name="binary_encoding" label="Binary Encoding Precision">
+          <option value="64" selected="true">64</option>
+          <option value="32">32</option>
+        </param>
+        <param type="select" name="mz_encoding" label="m/z Encoding Precision">
+          <option value="64" selected="true">64</option>
+          <option value="32">32</option>
+        </param>
+        <param type="select" name="intensity_encoding" label="Intensity Encoding Precision" value="32">
+          <option value="64">64</option>
+          <option value="32" selected="true">32</option>
+        </param>
+        <param type="boolean" name="zlib" label="Use zlib">      
+        </param>
+      </when>
+    </conditional>
+
+
+  </inputs>
+  <outputs>
+    <data format="mzml" name="output">
+      <change_format>
+        <when input="output_type" value="mzXML" format="mzxml" />
+        <when input="output_type" value="unindexed_mzXML" format="mzxml" />
+        <when input="output_type" value="ms2" format="ms2" />
+        <when input="output_type" value="mgf" format="mgf" />
+      </change_format>
+    </data>
+  </outputs>
+
+  <requirements>
+    <requirement type="package">proteowizard</requirement>    
+  </requirements>
+
+  <help>
+**What it does**
+
+Converts between various mass spectrometry peak list representations. Additional options such as filtering and/or precursor recalculation are available.
+
+You can view the original documentation here_.
+    
+.. _here: http://proteowizard.sourceforge.net/tools/msconvert.html
+
+------
+
+**Citation**
+
+For the underlying tool, please cite `ProteoWizard: Open Source Software for Rapid Proteomics Tools Development. Darren Kessner; Matt Chambers; Robert Burke; David Agus; Parag Mallick. Bioinformatics 2008; doi: 10.1093/bioinformatics/btn323.`
+
+If you use this tool in Galaxy, please cite Chilton J, et al. https://bitbucket.org/galaxyp/galaxyp-toolshed-msconvert
+
+  </help>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/msconvert3_raw.xml	Wed Dec 19 00:10:08 2012 -0500
@@ -0,0 +1,358 @@
+<tool id="msconvert3_raw" name="msconvert3_raw" version="0.1.0">
+  <!-- BEGIN_VERSION_RAW -->
+  <description>Convert and filter a Thermo Finnigan RAW file</description>
+  <!-- END_VERSION_RAW -->
+
+  <command interpreter="python">
+    msconvert_wrapper.py 
+    --input=${input}
+    #if hasattr($input, 'display_name')
+    --input_name='${input.display_name}'
+    #end if
+    --output=${output} 
+
+    ## BEGIN_VERSION_RAW
+    --fromextension=RAW
+    ## END_VERSION_RAW
+
+    --toextension=${output_type} 
+
+    #if $settings.settingsType == "full"
+    --binaryencoding=${settings.binary_encoding} 
+    --mzencoding=${settings.mz_encoding} 
+    --intensityencoding=${settings.intensity_encoding}
+    --zlib=${settings.zlib}
+    #end if
+
+    #if $filtering.filtering_use
+
+    #if $filtering.precursor_recalculation.value
+    --filter "precursorRecalculation"
+    #end if
+
+    #if $filtering.peak_picking.pick_peaks
+    --filter "peakPicking $filtering.peak_picking.prefer_vendor_peaks $filtering.peak_picking.ms_levels"
+    #end if
+
+    #if str($filtering.activation) != "false"
+    --filter "activation $filtering.activation"
+    #end if
+
+    #if len($filtering.indices) > 0
+    --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
+    "
+    #end if
+
+    #for threshold_entry in $filtering.threshold_repeat
+    --filter "threshold $threshold_entry.threshold.threshold_type $threshold_entry.threshold.value $threshold_entry.orientation"
+    #end for
+
+
+    #if $filtering.strip_it.value
+    --filter "stripIT"
+    #end if
+
+    #if $filtering.filter_mz_windows.do_filter
+    --filter "mzWindow [$filtering.filter_mz_windows.from,$filtering.filter_mz_windows.to]"
+    #end if
+
+    
+    #if $filtering.filter_ms_levels.do_filter
+    --filter "msLevel [$filtering.filter_ms_levels.from, $filtering.filter_ms_levels.to]"
+    #end if
+
+    #if str($filtering.etd_filtering.do_etd_filtering) == "default"
+    --filter "ETDFilter"
+    #end if
+
+    #if str($filtering.etd_filtering.do_etd_filtering) == "advanced"
+    --filter "ETDFilter removePrecursor:$filtering.etd_filtering.remove_precursor removeChargeReduced:$filtering.etd_filtering.remove_charge_reduced  removeNeutralLoss:$filtering.etd_filtering.remove_neutral_loss  blanketRemoval:$filtering.etd_filtering.blanket_removal  MatchingTolerance:$filtering.etd_filtering.matching_tolerance $filtering.etd_filtering.matching_tolerance_units"
+    #end if
+
+    ## BEGIN_VERSION_3
+
+    #if $filtering.precursor_refine.value
+    --filter "precursorRefine"
+    #end if
+
+    #if $filtering.ms2denoise.denoise
+    --filter "MS2Denoise $filtering.ms2denoise.num_peaks $filtering.ms2denoise.window_width $filtering.ms2denoise.relax"
+    #end if 
+
+    #if str($filtering.ms2deisotope) == "true"
+    --filter "MS2Deisotope"
+    #end if
+
+    #if str($filtering.polarity) != "false"
+    --filter "polarity $filtering.polarity"
+    #end if
+
+    #if str($filtering.analyzer) != "false"
+    --filter "analyzer $filtering.analyzer"
+    #end if
+
+    ## END_VERSION_3
+
+    #end if
+
+  </command>
+
+  <inputs>
+    <!-- BEGIN_VERSION_RAW -->
+    <param format="RAW" name="input" type="data" label="Thermo Finnigan RAW Input"/>
+    <!-- END_VERSION_RAW -->
+
+    <param name="output_type" type="select" label="Output Type">
+      <option value="mzML">mzML (indexed)</option>
+      <option value="unindexed_mzML">mzML (unindexed)</option>
+      <option value="mzXML">mzXML (indexed)</option>      
+      <option value="unindexed_mzXML">mzXML (unindexed)</option>
+      <option value="mgf">mgf</option>
+      <option value="ms2">ms2</option>  
+    </param>    
+    <conditional name="filtering">
+      <param name="filtering_use" type="boolean" label="Use Filtering?" help="" truevalue="true" falsevalue="false" />
+      <when value="false" />
+      <when value="true">
+        <param type="boolean" name="precursor_recalculation" label="Recalculate Precursor?" />
+        <!-- BEGIN_VERSION_3 -->
+        <param type="boolean" name="precursor_refine" label="Refine Precursor?" />
+        <!-- END_VERSION_3 -->
+
+
+        <conditional name="peak_picking">
+          <param type="boolean" name="pick_peaks" label="Use Peak Picking?" truevalue="true" falsevalue="false" />
+          <when value="false" />
+          <when value="true">
+            <param name="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-">All Levels (1-)</option>
+            </param>
+            <param type="boolean" name="prefer_vendor_peaks" label="Peak Picking - Prefer Vendor Peaks?" truevalue="true" falsevalue="false" checked="true"/>
+          </when>
+        </conditional>
+
+        <repeat name="threshold_repeat" title="Filter by Threshold">
+          <conditional name="threshold">
+            <param type="select" label="Specify threshold on" name="threshold_type" help="">
+              <option value="count">Peak count</option>
+              <option value="count-after-ties">Peak count (after ties)</option>
+              <option value="absolute">Peak absolute intensity</option><!-- TODO: absolute what? m/z -->
+              <option value="bpi-relative">Percent of base peak intensity</option>
+              <option value="tic-relative">Percent of total ion current</option>
+              <option value="tic-fraction">Aggregate percent of total ion current</option>
+            </param>
+            <when value="count">
+              <param type="integer" name="value" label="Number of peaks to keep" value="100" />
+            </when>
+            <when value="count-after-ties">
+              <param type="integer" name="value" label="Number of peaks to keep (after ties)" value="100" />
+            </when>
+            <when value="absolute">
+              <param type="float" name="value" label="Absolute intensity cut-off" value="100.0" />
+            </when>
+            <when value="bpi-relative">
+              <param type="float" name="value" label="Keep peaks above (or below) this fraction of base peak intensity" value="0.2"
+              />
+            </when>
+            <when value="tic-relative">
+              <param type="float" name="value" label="Keep peaks above (or below) this fraction of total ion current" value="0.2"
+              />
+            </when>
+            <when value="tic-fraction">
+              <param type="float" name="value" label="Keep peaks until this fraction of total ion current is accounted for" value="0.8" />
+            </when>
+          </conditional>
+          <param type="select" label="Keep" name="orientation">
+            <option value="most-intense">Most intense peaks</option>
+            <option value="least-intense">Least intense peaks</option>
+          </param>
+        </repeat>
+
+
+        <param name="activation" type="select" label="Filter by Activation">
+          <option value="false" selected="true">no</option>
+          <option value="ETD">ETD</option>
+          <option value="CID">CID</option>
+          <option value="SA">SA</option>
+          <option value="HCD">HCD</option>
+          <!-- BEGIN_VERSION_3 -->
+          <option>BIRD</option>
+          <option>ECD</option>
+          <option>IRMPD</option>
+          <option>PD</option>
+          <option>PSD</option>
+          <option>PQD</option>
+          <option>SID</option>
+          <option>SORI</option>
+          <!-- END_VERSION_3 -->
+        </param>
+
+        <repeat name="indices" title="Filter Scan Indices">
+          <param name="from" type="integer" label="Filter Scan Index From" value="0" optional="false" />
+          <param name="to" type="integer" label="Filter Scan Index To" value="0" optional="true" />
+        </repeat>
+
+        <repeat name="scan_numbers" title="Filter Scan Numbers">
+          <param name="from" type="integer" label="Filter Scan Number From" value="0" optional="false" />
+          <param name="to" type="integer" label="Filter Scan Number To" value="0" optional="true" />
+        </repeat>
+
+        <conditional name="filter_mz_windows">
+          <param name="do_filter" type="boolean" truevalue="true" falsevalue="false" label="Filter m/z Window" help="" />
+          <when value="false" />          
+          <when value="true">
+            <param name="from" type="float" label="Filter m/z From" value="0.0" optional="false" />
+            <param name="to" type="float" label="Filter m/z To" value="0.0" optional="true" />
+          </when>
+        </conditional>
+
+        <param type="boolean" name="strip_it" label="Strip Ion Trap MS1 Scans" />
+
+        <conditional name="filter_ms_levels">
+          <param name="do_filter" type="boolean" label="Filter MS Levels" />
+          <when value="false" />
+          <when value="true">
+            <param name="from" type="integer" label="Filter MS Level From" value="0" optional="false" />
+            <param name="to" type="integer" label="Filter MS Level To" value="0" optional="true" />
+          </when>
+        </conditional>
+
+        <conditional name="etd_filtering">
+          <param name="do_etd_filtering" type="select" label="ETD Filtering">
+            <option value="none" selected="true">none</option>
+            <option value="default">yes (with default options)</option>
+            <option value="advanced">yes (show advanced options) </option>
+          </param>
+          <when value="none" />
+          <when value="default" />
+          <when value="advanced">
+            <param name="matching_tolerance" type="float" label="ETD Matching Tolernace" value="3.1">
+            </param>
+            <param name="matching_tolerance_units" type="select" label="Units for ETD Matching Tolerance">
+              <option value="MZ" selected="true">mz</option>              
+              <option value="PPM">ppm</option>
+            </param>
+            <param name="remove_precursor" type="select" label="ETD Remove Precursor">
+              <option value="true" selected="true">yes</option>              
+              <option value="false">no</option>
+            </param>
+            <param name="remove_charge_reduced" type="select" label="ETD Remove Charge Reduced">
+              <option value="true" selected="true">yes</option>              
+              <option value="false">no</option>
+            </param>            
+            <param name="remove_neutral_loss" type="select" label="ETD Remove Neutral Loss">
+              <option value="true" selected="true">yes</option>              
+              <option value="false">no</option>
+            </param>
+            <param name="blanket_removal" type="select" label="ETD Blanket Removal">
+              <option value="true" selected="true">yes</option>              
+              <option value="false">no</option>
+            </param>
+          </when>
+        </conditional>
+
+
+        <!-- BEGIN_VERSION_3 -->
+        <conditional name="ms2denoise">
+          <param name="denoise" type="boolean" label="De-noise MS2 with moving window filter"  />
+          <when value="true">
+            <param name="num_peaks" label="De-noise: Number of peaks in window" value="6" type="integer" />
+            <param name="window_width" type="float" label="De-noise: Window width (Daltons)" value="30" />
+            <param name="relax" label="De-noise: Multicharge fragment relaxation" checked="true" type="boolean" truevalue="true" falsevalue="false" />
+          </when>
+          <when value="false" />
+        </conditional>
+        <param name="ms2deisotope" type="boolean" label="Deisotope MS2 using Markey method" help="" truevalue="true" falsevalue="false" />
+
+        <param name="polarity" type="select" label="Filter by Polarity">
+          <option value="false" selected="true">no</option>
+          <option value="positive">positive</option>
+          <option value="negative">negative</option>
+        </param>
+
+        <param name="analyzer" type="select" label="Filter by Analyzer">
+          <option value="false" selected="true">no</option>
+          <option value="quad">quad</option>
+          <option value="orbi">orbi</option>
+          <option value="FT">FT</option>
+          <option value="IT">IT</option>
+          <option value="TOF">TOF</option>
+        </param>
+        <!-- END_VERSION_3 -->
+      </when>
+    </conditional>
+
+    <conditional name="settings">
+      <param name="settingsType" type="select" label="Advanced Settings" help="">
+        <option value="default">Use Defaults</option>
+        <option value="full">Full Parameter List</option>
+      </param>
+      <when value="default" />
+      <when value="full">
+        <param type="select" name="binary_encoding" label="Binary Encoding Precision">
+          <option value="64" selected="true">64</option>
+          <option value="32">32</option>
+        </param>
+        <param type="select" name="mz_encoding" label="m/z Encoding Precision">
+          <option value="64" selected="true">64</option>
+          <option value="32">32</option>
+        </param>
+        <param type="select" name="intensity_encoding" label="Intensity Encoding Precision" value="32">
+          <option value="64">64</option>
+          <option value="32" selected="true">32</option>
+        </param>
+        <param type="boolean" name="zlib" label="Use zlib">      
+        </param>
+      </when>
+    </conditional>
+
+
+  </inputs>
+  <outputs>
+    <data format="mzml" name="output">
+      <change_format>
+        <when input="output_type" value="mzXML" format="mzxml" />
+        <when input="output_type" value="unindexed_mzXML" format="mzxml" />
+        <when input="output_type" value="ms2" format="ms2" />
+        <when input="output_type" value="mgf" format="mgf" />
+      </change_format>
+    </data>
+  </outputs>
+
+  <requirements>
+    <requirement type="package">proteowizard</requirement>    
+  </requirements>
+
+  <help>
+**What it does**
+
+Converts between various mass spectrometry peak list representations. Additional options such as filtering and/or precursor recalculation are available.
+
+You can view the original documentation here_.
+    
+.. _here: http://proteowizard.sourceforge.net/tools/msconvert.html
+
+------
+
+**Citation**
+
+For the underlying tool, please cite `ProteoWizard: Open Source Software for Rapid Proteomics Tools Development. Darren Kessner; Matt Chambers; Robert Burke; David Agus; Parag Mallick. Bioinformatics 2008; doi: 10.1093/bioinformatics/btn323.`
+
+If you use this tool in Galaxy, please cite Chilton J, et al. https://bitbucket.org/galaxyp/galaxyp-toolshed-msconvert
+
+  </help>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/msconvert_raw_wrapper.py	Wed Dec 19 00:10:08 2012 -0500
@@ -0,0 +1,124 @@
+#!/usr/bin/env python
+import optparse
+import os
+import sys
+import tempfile
+import shutil 
+import subprocess
+import re
+from os.path import basename
+import logging
+
+assert sys.version_info[:2] >= ( 2, 6 )
+
+log = logging.getLogger(__name__)
+working_directory = os.getcwd()
+tmp_stderr_name = tempfile.NamedTemporaryFile(dir = working_directory, suffix = '.stderr').name
+tmp_stdout_name = tempfile.NamedTemporaryFile(dir = working_directory, suffix = '.stdout').name
+
+def stop_err( msg ):
+    sys.stderr.write( "%s\n" % msg )
+    sys.exit()
+
+def read_stderr():
+    stderr = ''
+    if(os.path.exists(tmp_stderr_name)):
+        with open(tmp_stderr_name, 'rb') as tmp_stderr:
+            buffsize = 1048576
+            try:
+                while True:
+                    stderr += tmp_stderr.read(buffsize)
+                    if not stderr or len(stderr) % buffsize != 0:
+                        break
+            except OverflowError:
+                pass
+    return stderr
+    
+def execute(command, stdin=None):
+    with open(tmp_stderr_name, 'wb') as tmp_stderr:
+        with open(tmp_stdout_name, 'wb') as tmp_stdout:
+            proc = subprocess.Popen(args=command, shell=True, stderr=tmp_stderr.fileno(), stdout=tmp_stdout.fileno(), stdin=stdin, env=os.environ)
+            returncode = proc.wait()
+            if returncode != 0:
+                raise Exception, "Program returned with non-zero exit code %d. stderr: %s" % (returncode, read_stderr())
+
+def delete_file(path):
+    if os.path.exists(path):
+        try:
+            os.remove(path)
+        except:
+            pass
+
+def delete_directory(directory):
+    if os.path.exists(directory):
+        try:
+            shutil.rmtree(directory)
+        except:
+            pass
+
+def symlink(source, link_name):
+    import platform
+    if platform.system() == 'Windows':
+        import win32file
+        win32file.CreateSymbolicLink(source, link_name, 1)
+    else:
+        os.symlink(source, link_name)
+
+
+def copy_to_working_directory(data_file, relative_path):
+    if os.path.abspath(data_file) != os.path.abspath(relative_path):
+        shutil.copy(data_file, relative_path)
+    return relative_path
+
+def __main__():
+    run_script()
+
+#ENDTEMPLATE
+
+to_extensions = ['mzML', 'mzXML', 'mgf', 'txt', 'ms2', 'cms2']
+
+def str_to_bool(v):
+    """ From http://stackoverflow.com/questions/715417/converting-from-a-string-to-boolean-in-python """
+    return v.lower() in ["yes", "true", "t", "1"]
+
+
+def run_script():
+    parser = optparse.OptionParser()
+    parser.add_option('--input', dest='input')
+    parser.add_option('--output', dest='output')
+    parser.add_option('--fromextension', dest='fromextension')
+    parser.add_option('--toextension', dest='toextension', default='mzML', choices=to_extensions)
+    parser.add_option('--binaryencoding', dest='binaryencoding', choices=['32', '64'])
+    parser.add_option('--mzencoding', dest='mzencoding', choices=['32', '64'])
+    parser.add_option('--intensityencoding', dest='intensityencoding', choices=['32', '64'])
+    parser.add_option('--noindex', dest='noindex')
+    parser.add_option('--zlib', dest='zlib')
+    parser.add_option('--filter', dest='filter', action='append', default=[])
+
+    (options, args) = parser.parse_args()
+
+    filter_commands = ''
+    for filter in options.filter:
+        filter_commands = "%s --filter \"%s\"" % (filter_commands, filter)
+
+    input_file = 'input.%s' % options.fromextension
+    copy_to_working_directory(options.input, input_file)
+    os.mkdir('output')
+    cmd = "msconvert --%s -o output" % (options.toextension)
+    if str_to_bool(options.noindex):
+        cmd = "%s %s" % (cmd, "--noindex")
+    if str_to_bool(options.zlib):
+        cmd = "%s %s" % (cmd, "--zlib")
+    cmd = "%s --%s" % (cmd, options.binaryencoding)
+    cmd = "%s --mz%s" % (cmd, options.mzencoding)
+    cmd = "%s --inten%s" % (cmd, options.intensityencoding)
+    cmd = "%s %s" % (cmd, input_file)
+    cmd = "%s %s" % (cmd, filter_commands)
+    print cmd
+    execute(cmd)
+    output_files = os.listdir('output')
+    assert len(output_files) == 1
+    output_file = output_files[0]
+    shutil.copy(os.path.join('output', output_file), options.output)
+
+if __name__ == '__main__': __main__()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/msconvert_subset.xml	Wed Dec 19 00:10:08 2012 -0500
@@ -0,0 +1,105 @@
+<tool id="msconvert_subset" name="Subset Peak List" version="0.1.0">
+  <description>against list of scan numbers or indices.</description>
+  <command interpreter="python">
+    msconvert_wrapper.py 
+    --input=${input} 
+    --output=${output} 
+    --fromextension=${input.ext} 
+    --toextension=${output_type} 
+    #if $settings.settingsType == "full"
+    --binaryencoding=${settings.binary_encoding} 
+    --mzencoding=${settings.mz_encoding} 
+    --intensityencoding=${settings.intensity_encoding}
+    --zlib=${settings.zlib}
+    #end if
+    --filter_table="$filter.filterList"
+    #if $filter.filterType == "scan_number"
+    --filter_table_type="number"
+    #else
+    --filter_table_type="index"
+    #end if
+  </command>
+
+  <inputs>
+    <conditional name="type">
+      <param name="input_type" type="select" label="Input Type">
+        <option value="mzml">mzML</option>
+        <option value="mzxml">mzXML</option>
+        <option value="mgf">mgf</option>
+        <option value="ms2">ms2</option>
+      </param>
+      <when value="mzml">
+        <param format="mzml" name="input" type="data" label="Input mzML"/>
+      </when>
+      <when value="mzxml">
+        <param format="mzxml" name="input" type="data" label="Input mzXML"/>
+      </when>
+      <when value="mgf">
+        <param format="mgf" name="input" type="data" label="Input mgf"/>
+      </when>
+      <when value="ms2">
+        <param format="ms2" name="input" type="data" label="Input ms2"/>
+      </when>
+    </conditional>
+    <param name="output_type" type="select" label="Output Type">
+      <option value="mzML">mzML (indexed)</option>
+      <option value="unindexed_mzML">mzML (unindexed)</option>
+      <option value="mzXML">mzXML (indexed)</option>      
+      <option value="unindexed_mzXML">mzXML (unindexed)</option>
+      <option value="mgf">mgf</option>
+      <option value="ms2">ms2</option>  
+    </param>
+    <conditional name="filter">
+      <param name="filterType" type="select" label="Filter by" help="">
+        <option value="scan_number" selected="true">Scan Number</option>
+        <option value="scan_index">Scan Index</option>
+      </param>    
+      <when value="scan_number">
+        <param format="text" name="filterList" type="data" label="Scan Numbers"/>
+      </when>
+      <when value="scan_index">
+        <param format="text" name="filterList" type="data" label="Scan Indices"/>
+      </when>
+    </conditional>
+    <conditional name="settings">
+      <param name="settingsType" type="select" label="Advanced msconvert Settings" help="">
+        <option value="default">Use Defaults</option>
+        <option value="full">Full Parameter List</option>
+      </param>
+      <when value="default" />
+      <when value="full">
+        <param type="select" name="binary_encoding" label="Binary Encoding Precision">
+          <option value="64" selected="true">64</option>
+          <option value="32">32</option>
+        </param>
+        <param type="select" name="mz_encoding" label="m/z Encoding Precision">
+          <option value="64" selected="true">64</option>
+          <option value="32">32</option>
+        </param>
+        <param type="select" name="intensity_encoding" label="Intensity Encoding Precision" value="32">
+          <option value="64">64</option>
+          <option value="32" selected="true">32</option>
+        </param>
+        <param type="boolean" name="zlib" label="Use zlib">      
+        </param>
+      </when>
+    </conditional>
+  </inputs>
+  <outputs>
+    <data format="mzml" name="output">
+      <change_format>
+        <when input="output_type" value="mzXML" format="mzxml" />
+        <when input="output_type" value="unindexed_mzXML" format="mzxml" />
+        <when input="output_type" value="ms2" format="ms2" />
+        <when input="output_type" value="mgf" format="mgf" />
+      </change_format>
+    </data>
+  </outputs>
+
+  <requirements>
+    <requirement type="package">proteowizard</requirement>    
+  </requirements>
+
+  <help>
+  </help>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/msconvert_wrapper.py	Wed Dec 19 00:10:08 2012 -0500
@@ -0,0 +1,272 @@
+#!/usr/bin/env python
+import optparse
+import os
+import sys
+import tempfile
+import shutil
+import subprocess
+import re
+import logging
+
+assert sys.version_info[:2] >= (2, 6)
+
+log = logging.getLogger(__name__)
+working_directory = os.getcwd()
+tmp_stderr_name = tempfile.NamedTemporaryFile(dir=working_directory, suffix='.stderr').name
+tmp_stdout_name = tempfile.NamedTemporaryFile(dir=working_directory, suffix='.stdout').name
+
+
+def stop_err(msg):
+    sys.stderr.write("%s\n" % msg)
+    sys.exit()
+
+
+def read_stderr():
+    stderr = ''
+    if(os.path.exists(tmp_stderr_name)):
+        with open(tmp_stderr_name, 'rb') as tmp_stderr:
+            buffsize = 1048576
+            try:
+                while True:
+                    stderr += tmp_stderr.read(buffsize)
+                    if not stderr or len(stderr) % buffsize != 0:
+                        break
+            except OverflowError:
+                pass
+    return stderr
+
+
+def execute(command, stdin=None):
+    try:
+        with open(tmp_stderr_name, 'wb') as tmp_stderr:
+            with open(tmp_stdout_name, 'wb') as tmp_stdout:
+                proc = subprocess.Popen(args=command, shell=True, stderr=tmp_stderr.fileno(), stdout=tmp_stdout.fileno(), stdin=stdin, env=os.environ)
+                returncode = proc.wait()
+                if returncode != 0:
+                    raise Exception("Program returned with non-zero exit code %d. stderr: %s" % (returncode, read_stderr()))
+    finally:
+        print open(tmp_stderr_name, "r").read()
+        print open(tmp_stdout_name, "r").read()
+
+
+def delete_file(path):
+    if os.path.exists(path):
+        try:
+            os.remove(path)
+        except:
+            pass
+
+
+def delete_directory(directory):
+    if os.path.exists(directory):
+        try:
+            shutil.rmtree(directory)
+        except:
+            pass
+
+
+def symlink(source, link_name):
+    import platform
+    if platform.system() == 'Windows':
+        try:
+            import win32file
+            win32file.CreateSymbolicLink(source, link_name, 1)
+        except:
+            shutil.copy(source, link_name)
+    else:
+        os.symlink(source, link_name)
+
+
+def copy_to_working_directory(data_file, relative_path):
+    if os.path.abspath(data_file) != os.path.abspath(relative_path):
+        symlink(data_file, relative_path)
+    return relative_path
+
+
+def __main__():
+    run_script()
+
+#ENDTEMPLATE
+
+to_extensions = ['mzML', 'mzXML', 'unindexed_mzML', 'unindexed_mzXML', 'mgf', 'txt', 'ms2', 'cms2']
+
+
+def str_to_bool(v):
+    """ From http://stackoverflow.com/questions/715417/converting-from-a-string-to-boolean-in-python """
+    return v.lower() in ["yes", "true", "t", "1"]
+
+
+def _add_filter(filters_file, contents):
+    filters_file.write("filter=%s\n" % contents)
+
+
+def _skip_line(options, file_num, line_parts):
+    file_num_column = options.filter_table_file_column
+    if not file_num_column:
+        return False
+    else:
+        target_file_num_val = str(file_num).strip()
+        query_file_num_val = line_parts[int(file_num_column) - 1].strip()
+        #print "target %s, query %s" % (target_file_num_val, query_file_num_val)
+        return target_file_num_val != query_file_num_val
+
+
+def _read_table_numbers(path, options, file_num=None):
+    unique_numbers = set([])
+    column_num = options.filter_table_column
+    input = open(path, "r")
+    first_line = True
+    for line in input:
+        if not line:
+            continue
+        line = line.strip()
+        if line.startswith("#"):
+            first_line = False
+            continue
+        if column_num == None:
+            column = line
+        else:
+            line_parts = line.split("\t")
+            if _skip_line(options, file_num, line_parts):
+                continue
+            column = line_parts[int(column_num) - 1]
+        match = re.match("\d+", column)
+        if match:
+            unique_numbers.add(int(match.group()))
+        first_line = False
+    return unique_numbers
+
+
+# TODO: Test on windows
+def shellquote(s):
+    return "'" + s.replace("'", "'\\''") + "'"
+
+
+def _add_filter_line_from_file(filter_file, options, file_num=None):
+    file = options.filter_table
+    if not file:
+        return
+    numbers = _read_table_numbers(file, options, file_num)
+    msconvert_int_set = " ".join([str(number) for number in numbers])
+    filter_type = options.filter_table_type
+    if filter_type == 'number':
+        filter_prefix = 'scanNumber'
+    else:
+        filter_prefix = 'index'
+    _add_filter(filter_file, "%s %s" % (filter_prefix, msconvert_int_set))
+
+
+def _create_filters_file(options, file_num=None, debug=False):
+    suffix = "" if not file_num else str(file_num)
+    filters_file_path = "filters%s" % suffix
+    filters_file = open(filters_file_path, "w")
+    if options.filters_file:
+        filters_file.write(open(options.filters_file, "r").read())
+    for filter in options.filter:
+        _add_filter(filters_file, filter)
+    _add_filter_line_from_file(filters_file, options, file_num=file_num)
+
+    filters_file.close()
+    if debug:
+        print open(filters_file_path, "r").read()
+    return filters_file_path
+
+
+def _build_base_cmd(options):
+    to_extension = options.toextension
+    if to_extension.startswith("unindexed_"):
+        to_extension = to_extension[len("unindexed_"):]
+        to_params = "--noindex"
+    else:
+        to_params = ""
+    cmd = "msconvert --%s %s" % (to_extension, to_params)
+    if str_to_bool(options.zlib):
+        cmd = "%s %s" % (cmd, "--zlib")
+    if options.binaryencoding:
+        cmd = "%s --%s" % (cmd, options.binaryencoding)
+    if options.mzencoding:
+        cmd = "%s --mz%s" % (cmd, options.mzencoding)
+    if options.intensityencoding:
+        cmd = "%s --inten%s" % (cmd, options.intensityencoding)
+    return cmd
+
+
+def _run(base_cmd, output_dir='output', inputs=[], debug=False):
+    inputs_as_str = " ".join(['%s' % shellquote(input) for input in inputs])
+    os.mkdir(output_dir)
+    cmd = "%s -o %s %s" % (base_cmd, shellquote(output_dir), inputs_as_str)
+    if debug:
+        print cmd
+    execute(cmd)
+    output_files = os.listdir(output_dir)
+    assert len(output_files) == 1
+    output_file = output_files[0]
+    return os.path.join(output_dir, output_file)
+
+
+def run_script():
+    parser = optparse.OptionParser()
+    parser.add_option('--input', dest='inputs', action='append', default=[])
+    parser.add_option('--input_name', dest='input_names', action='append', default=[])
+    parser.add_option('--output', dest='output')
+    parser.add_option('--fromextension', dest='fromextension')
+    parser.add_option('--toextension', dest='toextension', default='mzML', choices=to_extensions)
+    parser.add_option('--binaryencoding', dest='binaryencoding', choices=['32', '64'])
+    parser.add_option('--mzencoding', dest='mzencoding', choices=['32', '64'])
+    parser.add_option('--intensityencoding', dest='intensityencoding', choices=['32', '64'])
+    parser.add_option('--zlib', dest='zlib', default="false")
+    parser.add_option('--filter', dest='filter', action='append', default=[])
+    parser.add_option('--filters_file', dest='filters_file', default=None)
+    parser.add_option('--filter_table', default=None)
+    parser.add_option('--filter_table_type', default='index', choices=['index', 'number'])
+    parser.add_option('--filter_table_column', default=None)
+    parser.add_option('--filter_table_file_column', default=None)
+    parser.add_option('--debug', dest='debug', action='store_true', default=False)
+
+    (options, args) = parser.parse_args()
+    if len(options.inputs) < 1:
+        stop_err("No input files to msconvert specified")
+    if len(options.input_names) > 0 and len(options.input_names) != len(options.inputs):
+        stop_err("Number(s) of supplied input names and input files do not match")
+    if not options.output:
+        stop_err("Must specify output location")
+    input_files = []
+    for i, input in enumerate(options.inputs):
+        input_base = None
+        if len(options.input_names) > i:
+            input_base = options.input_names[i]
+        if not input_base:
+            input_base = 'input%s' % i
+        if not input_base.lower().endswith(options.fromextension.lower()):
+            input_file = '%s.%s' % (input_base, options.fromextension)
+        else:
+            input_file = input_base
+        input_file = input_file
+        copy_to_working_directory(input, input_file)
+        input_files.append(input_file)
+
+    cmd = _build_base_cmd(options)
+    file_column = options.filter_table_file_column
+    if not file_column:
+        # Apply same filters to all files, just create a unviersal filter files
+        # and run msconvert once.
+        filters_file_path = _create_filters_file(options, debug=options.debug)
+        cmd = "%s -c %s" % (cmd, filters_file_path)
+    else:
+        # Dispatching on a column to filter different files differently, need to filter
+        # each input once with msconvert and then merge once.
+        filtered_files = []
+        for index, input_file in enumerate(input_files):
+            filters_file_path = _create_filters_file(options, index + 1, debug=options.debug)
+            filter_cmd = "%s -c %s" % (cmd, filters_file_path)
+            filtered_output_file = _run(filter_cmd, output_dir='output%d' % index, inputs=[input_file], debug=options.debug)
+            filtered_files.append(filtered_output_file)
+        input_files = filtered_files
+    if len(input_files) > 1:
+        cmd = "%s --merge" % cmd
+    output_file = _run(cmd, output_dir='output', inputs=input_files, debug=options.debug)
+    shutil.copy(output_file, options.output)
+
+
+if __name__ == '__main__':
+    __main__()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/update.sh	Wed Dec 19 00:10:08 2012 -0500
@@ -0,0 +1,35 @@
+#!/bin/bash
+
+LICENSE_FILE=LICENSE
+# Ensure repository contains license file.
+if [ ! -e "$LICENSE_FILE" ];
+then
+    wget http://www.apache.org/licenses/LICENSE-2.0.txt -O "$LICENSE_FILE"
+fi
+
+# Run repository specific update actions.
+if [ -f update_repo.sh ];
+then
+    ./update_repo.sh
+fi
+
+wget https://raw.github.com/gist/3749747/README_GALAXYP.md -O README_GALAXYP.md
+
+# Create repository README
+if [ ! -e README_REPO.md ];
+then
+    echo "TODO: Document this tool repository." > README_REPO.md
+fi
+cat README_REPO.md README_GALAXYP.md > README.md
+
+
+# If version file exists, update all tools to this version
+VERSION_FILE=version
+if [ -e "$VERSION_FILE" ];
+then
+    VERSION=`cat $VERSION_FILE`
+    
+    # Replace tool version in each tool XML file   `
+    find -iname "*xml" -exec sed -i'' -e '0,/version="\(.\+\)"/s/version="\(.\+\)"/version="'$VERSION'"/1g' {} \;
+
+fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/update_repo.sh	Wed Dec 19 00:10:08 2012 -0500
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+sed -e '/BEGIN_VERSION_RAW/,/END_VERSION_RAW/d'  -e '/BEGIN_VERSION_3/,/END_VERSION_3/d'  -e 's/\$VERSION/2/g' -e 's/\$DESCRIPTION//g' msconvert.xml.template > msconvert2.xml
+sed -e '/BEGIN_VERSION_DEFAULT/,/END_VERSION_DEFAULT/d' -e '/BEGIN_VERSION_3/,/END_VERSION_3/d'  -e 's/\$VERSION/2/g' -e 's/\$DESCRIPTION/_raw/g' msconvert.xml.template > msconvert2_raw.xml
+
+
+sed -e '/BEGIN_VERSION_RAW/,/END_VERSION_RAW/d' -e 's/\$VERSION/3/g' -e 's/\$DESCRIPTION//g' msconvert.xml.template > msconvert3.xml
+sed -e '/BEGIN_VERSION_DEFAULT/,/END_VERSION_DEFAULT/d' -e 's/\$VERSION/3/g' -e 's/\$DESCRIPTION/_raw/g' msconvert.xml.template > msconvert3_raw.xml
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/version	Wed Dec 19 00:10:08 2012 -0500
@@ -0,0 +1,1 @@
+0.1.0
\ No newline at end of file