Mercurial > repos > galaxyp > proteinpilot
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