changeset 0:7dcb26ce559c

Uploaded
author galaxyp
date Wed, 19 Dec 2012 00:22:55 -0500
parents
children 790d80981060
files LICENSE README.md README_GALAXYP.md README_REPO.md proteinpilot.xml proteinpilot_tabular.xml proteinpilot_wrapper.py proteinpilot_xml.xml update.sh
diffstat 9 files changed, 857 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LICENSE	Wed Dec 19 00:22:55 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 [yyyy] [name of copyright owner]
+
+   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:22:55 2012 -0500
@@ -0,0 +1,23 @@
+TODO: Document this tool repository.
+# 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:22:55 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:22:55 2012 -0500
@@ -0,0 +1,6 @@
+# proteinpilot
+
+Tools for working with ProteinPilot. ProteinPilot only runs on Windows
+machines and will require the use of the LWR job runner
+(https://bitbucket.org/jmchilton/lwr).
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/proteinpilot.xml	Wed Dec 19 00:22:55 2012 -0500
@@ -0,0 +1,188 @@
+<tool id="proteinpilot" version="0.2.1" name="ProteinPilot">
+  <description></description>
+  <!-- ESCAPE input and database name -->
+  <command interpreter="python">proteinpilot_wrapper.py 
+    #for $input in $inputs:
+    --input="${input}"
+    --input_name="${input.name}"
+    #end for
+    --database="${database}"
+    --database_name="${database.name}"
+    --output=$output
+    --output_methods=$output_methods
+    --sample_type="$sample_type"
+    --quantitative=$quantitative
+    --bias_correction=$bias_correction
+    --background_correction=$background_correction
+    --cys_alkylation="$cys_alkylation"
+    --digestion="$digestion"
+    --instrument="$instrument"
+    --search_effort=$search_effort
+    --pspep=$pspep
+    #if $pspep
+    --output_pspep_report=$output_pspep_report
+    #end if
+    --min_unused_protscore=$min_unused_protscore
+    #if $factors.factors_use
+    --special_factors="$factors.special_factors"
+    #else
+    --special_factors=""
+    #end if 
+    --search_foci="$search_foci"
+  </command>
+  <inputs>
+    <param format="mgf" multiple="true" name="inputs" type="data" label="Peaklist (MGF)" help="" />
+    <param type="select" name="sample_type" label="Sample Type">
+      <option value="Identification">Identification</option>
+      <option value="iTRAQ 4plex (Peptide Labeled)">iTRAQ 4plex (Peptide Labeled)</option>
+      <option value="iTRAQ 4plex (Protein Labeled)">iTRAQ 4plex (Protein Labeled)</option>
+      <option value="iTRAQ 8plex (Peptide Labeled)">iTRAQ 8plex (Peptide Labeled)</option>
+      <option value="iTRAQ 8plex (Protein Labeled)">iTRAQ 8plex (Protein Labeled)</option>
+      <option value="mTRAQ (Peptide Labeled - M00, M04)">mTRAQ (Peptide Labeled - M00, M04)</option>
+      <option value="mTRAQ (Peptide Labeled - M00, M08)">mTRAQ (Peptide Labeled - M00, M08)</option>
+      <option value="mTRAQ (Peptide Labeled - M04, M08)">mTRAQ (Peptide Labeled - M04, M08)</option>
+      <option value="mTRAQ (Peptide Labeled - M00, M04, M08)">mTRAQ (Peptide Labeled - M00, M04, M08)</option>
+      <option value="SILAC (Lys+6, Arg+6)">SILAC (Lys+6, Arg+6)</option>
+      <option value="SILAC (Lys+4, Arg+10)">SILAC (Lys+4, Arg+10)</option>
+      <option value="SILAC (Lys+6, Arg+10)">SILAC (Lys+6, Arg+10)</option>
+      <option value="SILAC (Lys+8, Arg+10)">SILAC (Lys+8, Arg+10)</option>
+      <option value="SILAC (Lys+8, Arg+10, Glu+6, Asp+5)">SILAC (Lys+8, Arg+10, Glu+6, Asp+5)</option>
+      <!-- TODO: Add remaining SILAC options. -->
+      <option value="RABA +0,+6 (Peptide Labeled)">RABA +0,+6 (Peptide Labeled)</option>
+      <option value="Dimethyl +0,+4 (Peptide Labeled)">Dimethyl +0,+4 (Peptide Labeled)</option>
+      <option value="Dimethyl +0,+6 (Peptide Labeled)">Dimethyl +0,+6 (Peptide Labeled)</option>
+      <option value="Dimethyl +0,+8 (Peptide Labeled)">Dimethyl +0,+8 (Peptide Labeled)</option>
+      <option value="Dimethyl +0,+4,+8 (Peptide Labeled)">Dimethyl +0,+4,+8 (Peptide Labeled)</option>
+      <option value="Proteolytic O-18 labeling">Proteolytic O-18 labeling</option>
+      <option value="Cleavable ICAT">Cleavable ICAT</option>
+      <option value="ICPL Light, Heavy (Peptide Labeled)">ICPL Light, Heavy (Peptide Labeled)</option>
+      <option value="ICPL Light, Heavy (Protein Labeled)">ICPL Light, Heavy (Protein Labeled)</option>
+      <!-- TODO: Handle additional mTRAQ and iTRAQ options. 
+      handle TMT (doesn't seem like UI lets quantatate these)
+      <UI_SAMPLE_TYPE>TMT6plex ID-only (Peptide Labeled)</UI_SAMPLE_TYPE>
+      <UI_QUANT_TYPE></UI_QUANT_TYPE>
+      
+      <UI_SAMPLE_TYPE>TMT6plex ID-only (Protein Labeled)</UI_SAMPLE_TYPE>
+      <UI_QUANT_TYPE></UI_QUANT_TYPE>
+
+      <UI_SAMPLE_TYPE>TMT2plex ID-only (Peptide Labeled)</UI_SAMPLE_TYPE>
+      <UI_QUANT_TYPE></UI_QUANT_TYPE>
+
+      <UI_SAMPLE_TYPE>TMT ID-only (Peptide Labeled)</UI_SAMPLE_TYPE>
+      <UI_QUANT_TYPE></UI_QUANT_TYPE>
+    -->
+      <option value="SILAC unlabeled, N-15 labeled">SILAC unlabeled, N-15 labeled</option>
+    </param>
+    <param type="select" name="cys_alkylation" label="Cys Alkylation">
+      <option value="None">None</option>
+      <option value="Iodoacetamide">Iodoacetamide</option>      
+      <option value="MMTS">MMTS</option>
+      <option value="Acrylamide">Acrylamide</option>
+      <option value="Iodoacetic acid">Iodoacetic acid</option>
+      <option value="Iodoethanol">Iodoethanol</option>
+      <option value="Vinylpyridine">Vinylpyridine</option>
+      <option value="N-Ethylmaleimide">N-Ethylmaleimide</option>
+      <option value="N-Methylmaleimide">N-Methylmaleimide</option>
+      <option value="Iodoacetyl-PEO-Biotin">Iodoacetyl-PEO-Biotin</option>
+      <option value="Iodoacetamide with Iodoacetyl-PEO-Biotin chase">Iodoacetamide with Iodoacetyl-PEO-Biotin chase</option>
+      <option value="Iodoacetamide w other Cys mods possible">Iodoacetamide w other Cys mods possible</option>
+      <option value="MMTS w other Cys mods possible">MMTS w other Cys mods possible</option>
+      <option value="Unknown">Unknown</option>
+    </param>
+    <param type="select" name="digestion" label="Digestion">
+      <option value="Trypsin">Trypsin</option>
+      <option value="Glu C">Glu C</option>
+      <option value="Chymotrypsin">Chymotrypsin</option>
+      <option value="CNBr">CNBr</option>
+      <option value="Lys C">Lys C</option>
+      <option value="Acid Cleavage">Acid Cleavage</option>
+      <option value="Arg C">Arg C</option>
+      <option value="Asp N">Asp N</option>
+      <option value="Lys N">Lys N</option>
+      <option value="Thermolysin">Thermolysin</option>
+      <option value="Trypsin + Chymotrypsin">Trypsin + Chymotrypsin</option>
+      <option value="Trypsin + Glu C">Trypsin + Glu C</option>
+      <option value="Trypsin + Asp N">Trypsin + Asp N</option>
+      <option value="Lys C + Chymotrypsin">Lys C + Chymotrypsin</option>
+      <option value="Lys C + Glu C">Lys C + Glu C</option>
+      <option value="Glu C + Asp N">Glu C + Asp N</option>
+      <option value="Trypsin using MSIPI database">Trypsin using MSIPI database</option>
+    </param>
+    <param type="select" name="instrument" label="Instrument">
+      <option value="TripleTOF 5600">TripleTOF 5600</option>
+      <option value="TripleTOF 4600">TripleTOF 4600</option>
+      <option value="5800">5800</option>
+      <option value="4800">4800</option>
+      <option value="4700">4700</option>
+      <option value="QSTAR Elite ESI">QSTAR Elite ESI</option>
+      <option value="QSTAR Elite">QSTAR Elite</option>
+      <option value="QSTAR oMALDI">QSTAR oMALDI</option>
+      <option value="6500 QTRAP ESI">6500 QTRAP ESI</option>
+      <option value="4500 QTRAP ESI">4500 QTRAP ESI</option>
+      <option value="5500 QTRAP ESI">5500 QTRAP ESI</option>
+      <option value="4000 QTRAP ESI">4000 QTRAP ESI</option>
+      <option value="QTRAP ESI">QTRAP ESI</option>
+      <option value="4000 QTRAP AP-MALDI">4000 QTRAP AP-MALDI</option>
+      <option value="3200 QTRAP AP-MALDI">3200 QTRAP AP-MALDI</option>
+      <option value="LTQ">LTQ</option>
+      <option value="Orbi/FT MS (1-3ppm), LTQ MS/MS">Orbi/FT MS (1-3ppm), LTQ MS/MS</option>      
+      <option value="Orbi/FT MS (sub-ppm), LTQ MS/MS">Orbi/FT MS (sub-ppm), LTQ MS/MS</option>
+      <option value="Orbi MS, Orbi MS/MS">Orbi MS, Orbi MS/MS</option>
+      <option value="Orbi MS (sub-ppm), Orbi MS/MS">Orbi MS (sub-ppm), Orbi MS/MS</option>
+    </param>
+    <conditional name="factors">
+      <param name="factors_use" type="boolean" label="Specify Special Factors?" help="" truevalue="true" falsevalue="false" />
+      <when value="false" />
+      <when value="true">
+        <param type="select" name="special_factors" label="Special Factors" display="checkboxes" multiple="true" help="">
+          <option value="Phosphorylation emphasis">Phosphorylation emphasis</option>
+          <option value="Methyl esterification">Methyl esterification</option>
+          <option value="Phos-Tyr affinity column">Phos-Tyr affinity column</option>
+          <option value="Gel-based ID">Gel-based ID</option>
+          <option value="Urea denaturation">Urea denaturation</option>
+          <option value="Acetylation emphasis">Acetylation emphasis</option>
+          <option value="Ubiquitin/SUMO enrichment">Ubiquitin/SUMO enrichment</option>
+          <option value="BONCAT workflow">BONCAT workflow</option>
+          <option value="PNGase F in O-18 water">PNGase F in O-18 water</option>
+          <option value="Pronota">Pronota</option>
+          <option value="O-methylisourea treatment">O-methylisourea treatment</option>
+          <option value="Purified Histones">Purified Histones</option>
+          <option value="Propionylation pre-digestion">Propionylation pre-digestion</option>
+          <option value="Propionylation post-digestion">Propionylation post-digestion</option>
+          <option value="Deuteroacetylation pre-digestion">Deuteroacetylation pre-digestion</option>
+          <option value="Deuteroacetylation post-digestion">Deuteroacetylation post-digestion</option>
+          <option value="Iodo and Thyroxine mods enrichment">Iodo and Thyroxine mods enrichment</option>
+        </param>
+      </when>
+    </conditional>
+    <param format="fasta" name="database" type="data" label="Database" />
+    <param name="quantitative" type="boolean" truevalue="True" falsevalue="False" label="Run Quantitation (if applicable)" checked="False" help="" />    
+    <param name="background_correction" type="boolean" truevalue="True" falsevalue="False" label="Use Background Correction (if applicable)" checked="False" help="" />
+    <param name="bias_correction" type="boolean" truevalue="True" falsevalue="False" label="Use Bias Correction (if applicable)" checked="False" help="" />
+    <param type="select" name="search_foci" label="Search Focus" display="checkboxes" multiple="true" help="">
+      <option value="Biological modifications">Biological modifications</option>
+      <option value="Amino acid substitutions">Amino acid substitutions</option>
+    </param>
+    <param name="search_effort" type="boolean" truevalue="Thorough" falsevalue="Rapid" label="Thorough Search" checked="True" help="" />
+    <param name="pspep" type="boolean" truevalue="TRUE" falsevalue="FALSE" label="Use PSPEP" checked="True" help="" />
+    <param type="select" name="min_unused_protscore" label="Detected Protein Threshold [Unused ProtScore (Conf)]">
+      <option value="3.0">3.0 (99.9)</option>
+      <option value="2.0">2.0 (99.0%)</option>
+      <option value="1.3">1.3 (95.0%)</option>
+      <option value="1.0">1.0 (90.0%)</option>
+      <option value="0.70">0.70 (80.0%)</option>
+      <option value="0.47">0.47 (66.0%)</option>
+      <option value="0.10">0.10 (20.0%)</option>
+      <option value="0.05" selected="true">0.05 (10.0%)</option>
+    </param>
+  </inputs>
+  <outputs>
+    <data format="group" name="output" label="ProteinPilot results for ${on_string}"/>
+    <data format="xml" name="output_methods" label="ProteinPilot methods xml for ${on_string}" />
+    <data format="xlsx" name="output_pspep_report" label="ProteinPilot PSPEP Report for ${on_string}">
+      <filter>pspep</filter>
+    </data>
+  </outputs>
+  <help>
+  </help>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/proteinpilot_tabular.xml	Wed Dec 19 00:22:55 2012 -0500
@@ -0,0 +1,41 @@
+<tool id="proteinpilot_tabular" version="0.1" name="Convert ProteinPilot Group to Tabular">
+  <description></description>
+  <command>
+    #if $quant.use
+    #set $denom = $quant.type
+    #else
+    #set $denom = ""
+    #end if
+    group2xml.exe ${type} $input $output $denom
+  </command>
+  <inputs>
+    <param format="group" name="input" type="data" label="ProteinPilot Group Data" help=""/>
+    <param name="type" type="select" label="Summary Type">
+      <option value="PROTEIN">Protein</option>
+      <option value="PEPTIDE">Peptide</option>
+    </param>
+    <conditional name="quant">
+      <param name="use" type="boolean" label="Include quantation results" truevalue="true" falsevalue="false" />
+      <when value="true">
+        <param name="type" type="select" label="Denominator">
+          <option value="IT113">113</option>
+          <option value="IT114" selected="true">114</option>
+          <option value="IT115">115</option>
+          <option value="IT116">116</option>
+          <option value="IT117">117</option>
+          <option value="IT118">118</option>
+          <option value="IT119">119</option>
+          <option value="IT121">121</option>
+          <option value="Light">Light</option>
+          <option value="Heavy">Heavy</option>
+          <option value="Medium">Medium</option>
+        </param>
+      </when>
+    </conditional>
+  </inputs>
+  <outputs>
+    <data format="tabular" name="output" label="${type} report for ${on_string}"/>
+  </outputs>
+  <help>
+  </help>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/proteinpilot_wrapper.py	Wed Dec 19 00:22:55 2012 -0500
@@ -0,0 +1,326 @@
+#!/usr/bin/env python
+import optparse
+import os
+import sys
+import tempfile
+import shutil 
+import subprocess
+import re
+import time
+from os.path import basename
+import logging
+
+assert sys.version_info[:2] >= ( 2, 6 )
+
+log = logging.getLogger(__name__)
+
+DEBUG = True
+
+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(64000)
+        print open(tmp_stdout_name, "r").read(64000)
+
+
+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):
+        shutil.copy(data_file, relative_path)
+    return relative_path
+
+def __main__():
+    run_script()
+
+#ENDTEMPLATE
+
+from string import Template
+
+METHOD_TEMPLATE = """<UISETTINGS>
+<UI_SAMPLE_TYPE>$sample_type</UI_SAMPLE_TYPE>
+<UI_QUANT_TYPE>$quant_type</UI_QUANT_TYPE>
+<UI_BACKGROUND_CORRECTION>$background_correction</UI_BACKGROUND_CORRECTION>
+<UI_BIAS_CORRECTION>$bias_correction</UI_BIAS_CORRECTION>
+<UI_CYS_ALKYLATION>$cys_alkylation</UI_CYS_ALKYLATION>
+<UI_DIGESTION>$digestion</UI_DIGESTION>
+<UI_SPECIAL_FACTOR>$special_factors</UI_SPECIAL_FACTOR>
+<UI_INSTRUMENT>$instrument</UI_INSTRUMENT>
+<UI_SPECIES></UI_SPECIES>
+<UI_USER_NAME></UI_USER_NAME>
+<UI_MACHINE_NAME></UI_MACHINE_NAME>
+<UI_START_TIME></UI_START_TIME>
+<UI_SEARCH_ID></UI_SEARCH_ID>
+<UI_ID_FOCUS>$search_foci</UI_ID_FOCUS>
+<UI_SEARCH_EFFORT>$search_effort</UI_SEARCH_EFFORT>
+<UI_SEARCH_RESOURCE>$database_name</UI_SEARCH_RESOURCE>
+<UI_MIN_UNUSED_PROTSCORE>$min_unused_protscore</UI_MIN_UNUSED_PROTSCORE>
+<UI_PSPEP>$pspep</UI_PSPEP>
+<UI_MAX_QUANT_LABELS>$max_quant_labels</UI_MAX_QUANT_LABELS>
+$quant_labels
+</UISETTINGS>
+"""
+
+quant_special_cases = {
+    "iTRAQ 4plex (Peptide Labeled)": "iTRAQ4PLEX",
+    "iTRAQ 4plex (Protein Labeled)": "iTRAQ4PLEX",
+    "iTRAQ 8plex (Peptide Labeled)": "iTRAQ8PLEX",
+    "iTRAQ 8plex (Protein Labeled)": "iTRAQ8PLEX",
+    "mTRAQ (Peptide Labeled - M00, M04)": "mTRAQ_0-4",
+    "mTRAQ (Peptide Labeled - M00, M08)": "mTRAQ_0-8",
+    "mTRAQ (Peptide Labeled - M04, M08)": "mTRAQ_4-8",
+    "mTRAQ (Peptide Labeled - M00, M04, M08)": "mTRAQ_0-4-8",
+    "Proteolytic O-18 labeling": "Proteolytic O-18 v O-16",
+    "Cleavable ICAT": "ICAT9",
+    "ICPL Light, Heavy (Peptide Labeled)": "ICPL peptide",
+    "ICPL Light, Heavy (Protein Labeled)": "ICPL protein",
+}
+
+
+def get_env_property(name, default):
+    if name in os.environ:
+        return os.environ[name]
+    else:
+        return default
+
+
+def build_quant_label(reagent, quant_type="Not Used", treatment="", minus2="0", minus1="0", plus1="0", plus2="0"):
+    return {
+    "reagent": reagent,
+    "type": quant_type,
+    "treatment": treatment,
+    "minus2": minus2,
+    "minus1": minus1,
+    "plus1": plus1,
+    "plus2": plus2,
+    }
+
+
+def build_quant_labels(options, quant_type):
+    if quant_type == "iTRAQ8PLEX":
+        return [
+            build_quant_label("iTRAQ113", plus1="6.89", plus2="0.24"),
+            build_quant_label("iTRAQ114", minus1="0.94", plus1="5.9", plus2="0.16"),
+            build_quant_label("iTRAQ115", minus1="1.88", plus1="4.9", plus2="0.1"),
+            build_quant_label("iTRAQ116", minus1="2.82", plus1="3.9", plus2="0.07"),
+            build_quant_label("iTRAQ117", minus2="0.06", minus1="3.77", plus1="2.88"),
+            build_quant_label("iTRAQ118", minus2="0.09", minus1="4.71", plus1="1.91"),
+            build_quant_label("iTRAQ119", minus2="0.14", minus1="5.66", plus1="0.87"),
+            build_quant_label("iTRAQ121", minus2="0.27", minus1="7.44", plus1="0.18"),
+        ]
+    elif quant_type == "iTRAQ4PLEX":
+        return [
+            build_quant_label("iTRAQ114", minus1="1.00", plus1="5.9", plus2="0.20"),
+            build_quant_label("iTRAQ115", minus1="2.00", plus1="5.6", plus2="0.1"),
+            build_quant_label("iTRAQ116", minus1="3.00", plus1="4.5", plus2="0.1"),
+            build_quant_label("iTRAQ117", minus2="0.10", minus1="4.00", plus1="3.50", plus2="0.1"),
+        ]
+    else:
+        return []
+
+
+def join_quant_labels(labels):
+    template = '<QUANT_LABEL_SETTING reagent="$reagent" type="$type" treatment="$treatment" minus2="$minus2" minus1="$minus1" plus1="$plus1" plus2="$plus2"/>'
+    return "\n".join([Template(template).substitute(quant_label) for quant_label in labels])
+
+
+def handle_sample_type(options, parameter_dict):
+    sample_type = options.sample_type
+    if sample_type in quant_special_cases:
+        quant_type = quant_special_cases[sample_type]
+    else:
+        quant_type = sample_type
+    if options.quantitative.upper() != "TRUE":
+        quant_type = ""
+    parameter_dict["sample_type"] = sample_type
+    parameter_dict["quant_type"] = quant_type
+    parameter_dict["quant_labels"] = join_quant_labels(build_quant_labels(options, quant_type))
+
+
+def setup_database(options):
+    PROTEINPILOT_DATABASE_DIR = get_env_property("PROTEIN_PILOT_DATABASE_FOLDER", "C:\\AB SCIEX\\ProteinPilot Data\\SearchDatabases")
+    database_path = options.database
+    database_name = options.database_name
+    database_name = database_name.replace(" ", "_")
+    (database_basename, extension) = os.path.splitext(database_name)
+    base = os.path.join(PROTEINPILOT_DATABASE_DIR, "gx_%s" % database_basename)
+    database_destination = get_unique_path(base, ".fasta")
+    symlink(database_path, database_destination)
+    return (database_destination, os.path.basename(os.path.splitext(database_destination)[0]))
+
+
+def extract_list(parameter):
+    if parameter == None or parameter == "None":
+        parameter = ""
+    return parameter.replace(",", ";")
+
+
+def setup_methods(options):
+    ## Setup methods file
+    (database_path, database_name) = setup_database(options)
+    special_factors = extract_list(options.special_factors)
+    search_foci = extract_list(options.search_foci)
+    method_parameters = {
+        "background_correction": options.background_correction,
+        "bias_correction": options.bias_correction,
+        "cys_alkylation": options.cys_alkylation,
+        "digestion": options.digestion,
+        "instrument": options.instrument,
+        "search_effort": options.search_effort,
+        "search_foci": search_foci,
+        "pspep": options.pspep,
+        "min_unused_protscore": options.min_unused_protscore,
+        "max_quant_labels": "3",
+        "database_name": database_name,
+        "quantitative": options.quantitative,
+        "special_factors": special_factors
+    }
+    handle_sample_type(options, method_parameters)
+    method_contents = Template(METHOD_TEMPLATE).substitute(method_parameters)
+    PROTEINPILOT_METHODS_DIR = get_env_property("PROTEIN_PILOT_METHODS_FOLDER", "C:\\ProgramData\\AB SCIEX\\ProteinPilot\\ParagonMethods\\")
+    methods_name = "gx_%s" % os.path.split(os.getcwd())[-1]
+    methods_path = os.path.join(PROTEINPILOT_METHODS_DIR, "%s.xml" % methods_name)
+    open(methods_path, "w").write(method_contents)
+    return (methods_name, methods_path, database_path)
+
+
+def setup_inputs(inputs, input_names):
+    links = []
+    for input, input_name in zip(inputs, input_names):
+        if DEBUG:
+            print "Processing input %s with name %s and size %d" % (input, input_name, os.stat(input).st_size)
+        if not input_name.upper().endswith(".MGF"):
+            input_name = "%s.mgf" % input_name
+        link_path = os.path.abspath(input_name)
+        symlink(input, link_path)
+        links.append(link_path)
+    return ",".join(["<DATA type=\"MGF\" filename=\"%s\" />" % link for link in links])
+
+
+def get_unique_path(base, extension):
+    """
+    """
+    return "%s_%d%s" % (base, int(time.time() * 1000), extension)
+
+
+def move_pspep_output(options, destination, suffix):
+    if destination:
+        source = "%s__FalsePositiveAnalysis__%s.csv" % (options.output, suffix)
+        shutil.move(source, destination)
+
+
+def run_script():
+    parser = optparse.OptionParser()
+    parser.add_option("--input", dest="input", action="append", default=[])
+    parser.add_option("--input_name", dest="input_name", action="append", default=[])
+    parser.add_option("--database")
+    parser.add_option("--database_name")
+    parser.add_option("--instrument")
+    parser.add_option("--sample_type")  # TODO: Restrict values
+    parser.add_option("--bias_correction", default="False")
+    parser.add_option("--background_correction", default="False")
+    parser.add_option("--cys_alkylation", default="None")
+    parser.add_option("--digestion", default="Trypsin")
+    parser.add_option("--special_factors", default="")
+    parser.add_option("--search_foci", default="")
+    parser.add_option("--search_effort", default="Rapid")
+    parser.add_option("--min_unused_protscore", default="3")
+    parser.add_option("--quantitative", default="False")
+    parser.add_option("--pspep", default="TRUE")
+    parser.add_option("--output")
+    parser.add_option("--output_methods")
+    #parser.add_option("--output_pspep_peptide", default="")
+    #parser.add_option("--output_pspep_protein", default="")
+    #parser.add_option("--output_pspep_spectra", default="")
+    parser.add_option("--output_pspep_report", default="")
+    (options, args) = parser.parse_args()
+
+    (methods_name, methods_path, database_path) = setup_methods(options)
+    try:
+        group_file = "%s.group" % options.output
+        input_contents_template = """<PROTEINPILOTPARAMETERS>
+    <METHOD name="$methods_name" />
+    $inputs
+    <RESULT filename="$output" />
+</PROTEINPILOTPARAMETERS>"""
+        input_parameters = {
+            "inputs": setup_inputs(options.input, options.input_name),
+            "output": group_file,
+            "methods_name": methods_name
+        }
+
+        input_contents = Template(input_contents_template).substitute(input_parameters)
+        open("input.xml", "w").write(input_contents)
+
+        protein_pilot_path = get_env_property("PROTEIN_PILOT_PATH", "")
+        if protein_pilot_path and not protein_pilot_path.endswith("\\"):
+            protein_pilot_path = "%s" % protein_pilot_path
+        execute("%sProteinPilot.exe input.xml" % protein_pilot_path)
+        shutil.move(group_file, options.output)
+        #move_pspep_output(options, options.output_pspep_spectra, "SpectralLevelData")
+        #move_pspep_output(options, options.output_pspep_peptide, "DistinctPeptideLevelData")
+        #move_pspep_output(options, options.output_pspep_protein, "ProteinLevelData")
+        if options.output_pspep_report:
+            source = "%s__FDR.xlsx" % (options.output)
+            shutil.move(source, options.output_pspep_report)
+        shutil.move(methods_path, options.output_methods)
+    finally:
+        delete_file(database_path)
+        delete_file(methods_path)
+
+if __name__ == '__main__':
+    __main__()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/proteinpilot_xml.xml	Wed Dec 19 00:22:55 2012 -0500
@@ -0,0 +1,14 @@
+<tool id="proteinpilot_xml" version="0.1" name="Convert ProteinPilot Group to XML">
+  <description></description>
+  <command>
+    group2xml.exe XML $input $output
+  </command>
+  <inputs>
+    <param format="group" name="input" type="data" label="ProteinPilot Group Data" help=""/>
+  </inputs>
+  <outputs>
+    <data format="proteinpilot.xml" name="output" label="XML from ${on_string}"/>
+  </outputs>
+  <help>
+  </help>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/update.sh	Wed Dec 19 00:22:55 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