# HG changeset patch
# User galaxyp
# Date 1428087349 14400
# Node ID 6430407e5869d66dc79b62b7555f10f143b20607
Uploaded
diff -r 000000000000 -r 6430407e5869 .shed.yml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/.shed.yml Fri Apr 03 14:55:49 2015 -0400
@@ -0,0 +1,18 @@
+categories:
+ - Proteomics
+ - Metaproteomics
+description: Unipept retrieves metaproteomics information
+homepage_url: https://github.com/galaxyproteomics/tools-galaxyp
+long_description: 'Unipept retrieves taxonomy for tryptic peptides using the unipept API.
+ http://unipept.ugent.be
+ http://unipept.ugent.be/apidocs
+
+ The Unipept metaproteomics analysis pipeline
+ Bart Mesuere1,*, Griet Debyser2, Maarten Aerts3, Bart Devreese2, Peter Vandamme3 andPeter Dawyndt1
+ Article first published online: 11 FEB 2015
+ DOI: 10.1002/pmic.201400361
+ http://onlinelibrary.wiley.com/doi/10.1002/pmic.201400361/abstract;jsessionid=BFF1994E4C14DA73D7C907EB208AD710.f04t04
+ '
+name: unipept
+owner: galaxyp
+remote_repository_url: http://unipept.ugent.be/apidocs
diff -r 000000000000 -r 6430407e5869 repository_dependencies.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/repository_dependencies.xml Fri Apr 03 14:55:49 2015 -0400
@@ -0,0 +1,4 @@
+
+
+
+
diff -r 000000000000 -r 6430407e5869 test-data/input.fasta
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/input.fasta Fri Apr 03 14:55:49 2015 -0400
@@ -0,0 +1,10 @@
+>1
+AIPQLEVARPADAYETAEAYR
+>2
+AAEGGLSR
+>3
+APVLSDSSCK
+>4
+DQIAHEGK
+>5
+ATLTSGAAR
diff -r 000000000000 -r 6430407e5869 test-data/input.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/input.tsv Fri Apr 03 14:55:49 2015 -0400
@@ -0,0 +1,5 @@
+1 AIPQLEVARPADAYETAEAYR AIPQLEVARPADAYETAEAYR
+2 AAEGGLSR AAEGQLSR
+3 APVLSDSSCK APVLJDSSCK
+4 DQIAHEGK DQUAHEGK
+5 ATLTSGAAR ATLTSGAAR
diff -r 000000000000 -r 6430407e5869 test-data/input_bad.fasta
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/input_bad.fasta Fri Apr 03 14:55:49 2015 -0400
@@ -0,0 +1,10 @@
+>1
+AIPQLEVARPADAYETAEAYR
+>2
+AAEGQLSR
+>3
+APVLJDSSCK
+>4
+DQUAHEGK
+>5
+ATLTSGAAR
diff -r 000000000000 -r 6430407e5869 unipept.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/unipept.py Fri Apr 03 14:55:49 2015 -0400
@@ -0,0 +1,194 @@
+#!/usr/bin/env python
+"""
+#
+#------------------------------------------------------------------------------
+# University of Minnesota
+# Copyright 2015, Regents of the University of Minnesota
+#------------------------------------------------------------------------------
+# Author:
+#
+# James E Johnson
+#
+#------------------------------------------------------------------------------
+"""
+
+import json
+import logging
+import optparse
+from optparse import OptionParser
+import os
+import sys
+import re
+import urllib
+import urllib2
+try:
+ import xml.etree.cElementTree as ET
+except ImportError:
+ import xml.etree.ElementTree as ET
+
+def warn_err(msg,exit_code=1):
+ sys.stderr.write(msg)
+ if exit_code:
+ sys.exit(exit_code)
+
+def read_fasta(fp):
+ name, seq = None, []
+ for line in fp:
+ line = line.rstrip()
+ if line.startswith(">"):
+ if name: yield (name, ''.join(seq))
+ name, seq = line, []
+ else:
+ seq.append(line)
+ if name: yield (name, ''.join(seq))
+
+def read_mzid(fp):
+ peptides = []
+ for event, elem in ET.iterparse(fp):
+ if event == 'end':
+ if re.search('PeptideSequence',elem.tag):
+ peptides.append(elem.text)
+ return peptides
+
+def read_pepxml(fp):
+ peptides = []
+ for event, elem in ET.iterparse(fp):
+ if event == 'end':
+ if re.search('search_hit',elem.tag):
+ peptides.append(elem.get('peptide'))
+ return peptides
+
+def __main__():
+ #Parse Command Line
+ parser = optparse.OptionParser()
+ # unipept API
+ parser.add_option( '-A', '--api', dest='unipept', default='pept2lca', choices=['pept2lca','pept2taxa','pept2prot'], help='The unipept application: pept2lca, pept2taxa, or pept2prot' )
+ # files
+ parser.add_option( '-t', '--tabular', dest='tabular', default=None, help='A tabular file that contains a peptide column' )
+ parser.add_option( '-c', '--column', dest='column', type='int', default=0, help='The column (zero-based) in the tabular file that contains peptide sequences' )
+ parser.add_option( '-f', '--fasta', dest='fasta', default=None, help='A fasta file containing peptide sequences' )
+ parser.add_option( '-m', '--mzid', dest='mzid', default=None, help='A mxIdentML file containing peptide sequences' )
+ parser.add_option( '-p', '--pepxml', dest='pepxml', default=None, help='A pepxml file containing peptide sequences' )
+ # Unipept Flags
+ parser.add_option( '-e', '--equate_il', dest='equate_il', action='store_true', default=False, help='isoleucine (I) and leucine (L) are equated when matching tryptic peptides to UniProt records' )
+ parser.add_option( '-x', '--extra', dest='extra', action='store_true', default=False, help='return the complete lineage of the taxonomic lowest common ancestor' )
+ parser.add_option( '-n', '--names', dest='names', action='store_true', default=False, help='return the names of all ranks in the lineage of the taxonomic lowest common ancestor' )
+ # Warn vs Error Flag
+ parser.add_option( '-S', '--strict', dest='strict', action='store_true', default=False, help='Print exit on invalid peptide' )
+ # outputs
+ parser.add_option( '-J', '--json', dest='json', default=None, help='Output file path for json formatted results')
+ parser.add_option( '-T', '--tsv', dest='tsv', default=None, help='Output file path for TAB-separated-values (.tsv) formatted results')
+ parser.add_option( '-C', '--csv', dest='csv', default=None, help='Output file path for Comma-separated-values (.csv) formatted results')
+ parser.add_option( '-M', '--mismatch', dest='mismatch', default=None, help='Output file path for peptide with no matches' )
+ (options, args) = parser.parse_args()
+ invalid_ec = 2 if options.strict else None
+ peptides = []
+ pep_pat = '^([ABCDEFGHIKLMNPQRSTVWXYZ]+)$'
+ ## Get peptide sequences
+ if options.mzid:
+ peptides += read_mzid(options.mzid)
+ if options.pepxml:
+ peptides += read_pepxml(options.pepxml)
+ if options.tabular:
+ with open(options.tabular) as fp:
+ for i,line in enumerate(fp):
+ if line.strip() == '' or line.startswith('#'):
+ continue
+ fields = line.rstrip('\n').split('\t')
+ peptide = fields[options.column]
+ if not re.match(pep_pat,peptide):
+ warn_err('"%s" is not a peptide (line %d column %d of tabular file: %s)\n' % (peptide,i,options.column,options.tabular),exit_code=invalid_ec)
+ peptides.append(peptide)
+ if options.fasta:
+ with open(options.fasta) as fp:
+ for id, peptide in read_fasta(fp):
+ if not re.match(pep_pat,peptide):
+ warn_err('"%s" is not a peptide (id %s of fasta file: %s)\n' % (peptide,id,options.fasta),exit_code=invalid_ec)
+ peptides.append(peptide)
+ if args and len(args) > 0:
+ for i,peptide in enumerate(args):
+ if not re.match(pep_pat,peptide):
+ warn_err('"%s" is not a peptide (arg %d)\n' % (peptide,i),exit_code=invalid_ec)
+ peptides.append(peptide)
+ if len(peptides) < 1:
+ warn_err("No peptides input!",exit_code=1)
+ ## unipept
+ post_data = []
+ if options.equate_il:
+ post_data.append(("equate_il","true"))
+ if options.names:
+ post_data.append(("extra","true"))
+ post_data.append(("names","true"))
+ elif options.extra:
+ post_data.append(("extra","true"))
+ post_data += [('input[]', x) for x in peptides]
+ headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': 'application/json'}
+ url = 'http://api.unipept.ugent.be/api/v1/%s' % options.unipept
+ req = urllib2.Request( url, headers = headers, data = urllib.urlencode(post_data) )
+ resp = json.loads( urllib2.urlopen( req ).read() )
+ ## output results
+ if not (options.mismatch or options.json or options.tsv or options.csv):
+ print >> sys.stdout, str(resp)
+ if options.mismatch:
+ peptides_matched = []
+ for i,pdict in enumerate(resp):
+ peptides_matched.append(pdict['peptide'])
+ with open(options.mismatch,'w') as outputFile:
+ for peptide in peptides:
+ if not peptide in peptides_matched:
+ outputFile.write("%s\n" % peptide)
+ if options.json:
+ with open(options.json,'w') as outputFile:
+ outputFile.write(str(resp))
+ if options.tsv or options.csv:
+ # 'pept2lca','pept2taxa','pept2prot'
+ pept2lca_column_order = [ 'peptide','superkingdom','kingdom','subkingdom','superphylum','phylum','subphylum','superclass','class_','subclass','infraclass','superorder','order','suborder','infraorder','parvorder','superfamily','family','subfamily','tribe','subtribe','genus','subgenus','species_group','species_subgroup','species','subspecies','varietas','forma' ]
+ pept2prot_column_order = [ 'peptide','uniprot_id','taxon_id','taxon_name','ec_references','go_references','refseq_ids','refseq_protein_ids','insdc_ids','insdc_protein_ids']
+ column_order = pept2prot_column_order if options.unipept == 'pept2prot' else pept2lca_column_order
+ found_keys = set()
+ results = []
+ for i,pdict in enumerate(resp):
+ results.append(pdict)
+ found_keys |= set(pdict.keys())
+ # print >> sys.stderr, "%s\n%s" % (pdict.keys(),found_keys)
+ column_names = []
+ column_keys = []
+ for col in column_order:
+ if col in found_keys:
+ column_names.append(col)
+ column_keys.append(col)
+ elif options.extra or options.names:
+ col_id = col+'_id'
+ col_name = col+'_name'
+ if options.extra:
+ if col_id in found_keys:
+ column_names.append(col_id)
+ column_keys.append(col_id)
+ if options.names:
+ if col_name in found_keys:
+ column_names.append(col)
+ column_keys.append(col_name)
+ else:
+ if col+'_name' in found_keys:
+ column_names.append(col)
+ column_keys.append(col+'_name')
+ elif col+'_id' in found_keys:
+ column_names.append(col)
+ column_keys.append(col+'_id')
+ # print >> sys.stderr, "%s\n%s" % (column_names,column_keys)
+ taxa = []
+ for i,pdict in enumerate(results):
+ vals = [str(pdict[x]) if x in pdict and pdict[x] else '' for x in column_keys]
+ taxa.append(vals)
+ if options.tsv:
+ with open(options.tsv,'w') as outputFile:
+ outputFile.write("#%s\n"% '\t'.join(column_names))
+ for vals in taxa:
+ outputFile.write("%s\n"% '\t'.join(vals))
+ if options.csv:
+ with open(options.csv,'w') as outputFile:
+ outputFile.write("%s\n"% ','.join(column_names))
+ for vals in taxa:
+ outputFile.write("%s\n"% ','.join(['"%s"' % (v if v else '') for v in vals]))
+
+if __name__ == "__main__" : __main__()
diff -r 000000000000 -r 6430407e5869 unipept.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/unipept.xml Fri Apr 03 14:55:49 2015 -0400
@@ -0,0 +1,306 @@
+
+ retrieve taxonomy for peptides
+
+
+
+ isoleucine (I) and leucine (L) are equated when matching tryptic peptides to UniProt records
+
+
+
+
+
+
+
+
+
+ return the names of taxons
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ Return the complete lineage of each organism.
+
+
+
+
+
+
+ Return the complete lineage of the taxonomic lowest common ancestor.
+
+
+
+
+
+
+ Return additional information fields: taxon_name, ec_references, go_references, refseq_ids, refseq_protein_ids, insdc_ids, insdc_protein_ids
+ WARNING: Huge perfomance penalty! Only use for small number of peptides when the extra infomation is required.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 'json' in outputs
+
+
+ 'tsv' in outputs
+
+
+ 'csv' in outputs
+
+
+ 'mismatch' in outputs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ doi:10.1002/pmic.201400361
+
+
+