Mercurial > repos > jjohnson > iedb_api
changeset 1:4a89ba6cfc63 draft
"planemo upload for repository https://github.com/jj-umn/galaxytools/tree/master/iedb_api commit 18698e056ccc2d6d37836bd22728e2d8765e92ec"
author | jjohnson |
---|---|
date | Tue, 25 Feb 2020 17:37:34 -0500 |
parents | 991424605492 |
children | 883cdf0ffae5 |
files | iedb_api.py iedb_api.xml test-data/bcell.fa test-data/seqs.fa test-data/seqs.tsv |
diffstat | 5 files changed, 600 insertions(+), 283 deletions(-) [+] |
line wrap: on
line diff
--- a/iedb_api.py Mon Feb 17 16:04:07 2020 -0500 +++ b/iedb_api.py Tue Feb 25 17:37:34 2020 -0500 @@ -1,142 +1,281 @@ #!/usr/bin/env python -""" -""" -import sys + +import argparse import os.path import re -import optparse -import urllib -import urllib2 -from optparse import OptionParser +import sys +import time + +from urllib.error import HTTPError +from urllib.parse import urlencode, unquote +from urllib.request import urlopen -mhci_methods = ['recommended','consensus','netmhcpan','ann','smmpmbec','smm','comblib_sidney2008','netmhccons','pickpocket'] -mhcii_methods = ['recommended','consensus3','NetMHCIIpan','nn_align','smm_align','comblib','tepitope'] -processing_methods = ['recommended','consensus','netmhcpan','ann','smmpmbec','smm','comblib_sidney2008'] -mhcnp_methods = ['mhcnp'] -bcell_methods = ['Bepipred','Chou-FasmanEmini','Karplus-Schulz','Kolaskar-Tongaonkar','Parker'] -prediction_methods = {'mhci':mhci_methods,'mhcii':mhcii_methods,'processing':processing_methods,'mhcnp':mhcnp_methods,'bcell':bcell_methods} +mhci_methods = ['recommended', 'consensus', + 'netmhcpan_ba', 'netmhcpan_el', + 'ann', 'smmpmbec', 'smm', + 'comblib_sidney2008', 'netmhccons', + 'pickpocket', 'netmhcstabpan'] +mhcii_methods = ['recommended', 'consensus', 'NetMHCIIpan', + 'nn_align', 'smm_align', 'comblib', 'tepitope'] +processing_methods = ['recommended', 'netmhcpan', 'ann', + 'smmpmbec', 'smm', 'comblib_sidney2008', + 'netmhccons', 'pickpocket'] +mhcnp_methods = ['mhcnp', 'netmhcpan'] +bcell_methods = ['Bepipred', 'Chou-Fasman', 'Emini', 'Karplus-Schulz', + 'Kolaskar-Tongaonkar', 'Parker', 'Bepipred-2.0'] +prediction_methods = {'mhci': mhci_methods, + 'mhcii': mhcii_methods, + 'processing': processing_methods, + 'mhcnp': mhcnp_methods, + 'bcell': bcell_methods} +all_methods = set(mhci_methods + mhcii_methods + + mhcnp_methods + bcell_methods) +prediction_lengths = {'mhci': range(8, 16), + 'mhcii': range(11, 31), + 'processing': range(8, 15), + 'mhcnp': range(8, 12), + 'bcell': range(8, 16)} -def warn_err(msg,exit_code=1): - sys.stderr.write(msg) - if exit_code: - sys.exit(exit_code) + +def warn_err(msg, exit_code=1): + sys.stderr.write(msg) + if exit_code: + sys.exit(exit_code) def __main__(): - #Parse Command Line - parser = optparse.OptionParser() - parser.add_option( '-p', '--prediction', dest='prediction', default='mhci', choices=['mhci','mhcii','processing','mhcnp','bcell'], help='IEDB API prediction service' ) - parser.add_option( '-s', '--sequence', dest='sequence', action="append", default=None, help='Peptide Sequence' ) - parser.add_option( '-m', '--method', dest='method', default='recommended', choices=['recommended','consensus','netmhcpan','ann','smmpmbec','smm','comblib_sidney2008','netmhccons','pickpocket' ], help='prediction method' ) - parser.add_option( '-a', '--allele', dest='allele', action="append", default=[], help='Alleles for which to make predictions' ) - parser.add_option( '-l', '--length', dest='length', action="append", default=[], choices=['8', '9', '10', '11', '12', '13', '14', '15'], help='lengths for which to make predictions, 1 per allele' ) - parser.add_option( '-i', '--input', dest='input', default=None, help='Input file for peptide sequences (fasta or tabular)' ) - parser.add_option( '-c', '--column', dest='column', default=None, help='Peptide Column in a tabular input file' ) - parser.add_option( '-C', '--id_column', dest='id_column', default=None, help='ID Column in a tabular input file' ) - parser.add_option( '-o', '--output', dest='output', default=None, help='Output file for query results' ) - parser.add_option( '-d', '--debug', dest='debug', action='store_true', default=False, help='Turn on wrapper debugging to stderr' ) - (options, args) = parser.parse_args() - - aapat = '^[ABCDEFGHIKLMNPQRSTVWY]+$' - - if not options.allele and options.prediction != 'bcell': - warn_err('-a allele required\n', exit_code=1) - - if not (options.sequence or options.input): - warn_err('NO Sequences given: either -s sequence or -i input_file is required\n', exit_code=1) + # Parse Command Line + parser = argparse.ArgumentParser(description='', epilog='') + parser.add_argument('-p', '--prediction', + default='mhci', + choices=prediction_methods.keys(), + help='IEDB API prediction service') + parser.add_argument('-s', '--sequence', + action="append", + default=None, + help='Peptide Sequence') + parser.add_argument('-m', '--method', + default='recommended', + choices=all_methods, + help='prediction method') + parser.add_argument('-P', '--proteasome', + default=None, + choices=['immuno', 'constitutive'], + help='IEDB processing proteasome type') + parser.add_argument('-a', '--allele', + action="append", + default=[], + help='Alleles for which to make predictions') + parser.add_argument('-l', '--length', + action="append", + default=[], + help='lengths for which to make predictions, ' + + '1 per allele') + parser.add_argument('-w', '--window_size', + type=int, + default=None, + help='window_size for bcell prediction') + parser.add_argument('-i', '--input', + default=None, + help='Input file for peptide sequences ' + + '(fasta or tabular)') + parser.add_argument('-c', '--column', + default=None, + help='Peptide Column in a tabular input file') + parser.add_argument('-C', '--id_column', + default=None, + help='ID Column in a tabular input file') + parser.add_argument('-o', '--output', + default=None, + help='Output file for query results') + parser.add_argument('-O', '--output2', + default='iedb_results2', + help='Output file for secondary query results') + parser.add_argument('-t', '--timeout', + type=int, + default=600, + help='Seconds to wait for server response') + parser.add_argument('-r', '--retries', + type=int, + default=5, + help='Number of times to retry server query') + parser.add_argument('-S', '--sleep', + type=int, + default=300, + help='Seconds to wait between retries') + parser.add_argument('-d', '--debug', + action='store_true', + default=False, + help='Turn on wrapper debugging to stderr') + args = parser.parse_args() - if options.output != None: - try: - outputPath = os.path.abspath(options.output) - outputFile = open(outputPath, 'w') - except Exception, e: - warn_err("Unable to open output file: %s\n" % e, exit_code=1) - else: - outputFile = sys.stdout + aapat = '^[ABCDEFGHIKLMNPQRSTVWY]+$' + + if not args.allele and args.prediction != 'bcell': + warn_err('-a allele required\n', exit_code=1) - url = 'http://tools-api.iedb.org/tools_api/%s/' % options.prediction + if not (args.sequence or args.input): + warn_err('NO Sequences given: ' + + 'either -s sequence or -i input_file is required\n', + exit_code=1) - #TODO parse alleles from the options.alleles file - alleles = ','.join(options.allele) - lengths = ','.join(options.length) - method = options.method + if args.output is not None: + try: + outputPath = os.path.abspath(args.output) + outputFile = open(outputPath, 'w') + except Exception as e: + warn_err("Unable to open output file: %s\n" % e, exit_code=1) + else: + outputFile = sys.stdout - results = [] - global header - header = None + url = 'http://tools-cluster-interface.iedb.org/tools_api/%s/' %\ + args.prediction + len_param = 'length' if args.prediction != 'bcell' else 'window_size' - sequence_text = [] - def add_seq(seqid,seq): - sequence_text.append(">%s\n%s" % (seqid if seqid else "peptide%d" % len(sequence_text),seq)) - - def query(url,seq,allele,length,seqid=None,method='recommended'): + # TODO parse alleles from the args.alleles file + alleles = ','.join(args.allele) if args.prediction != 'bcell' else None + lengths = ','.join(args.length) + if args.prediction == 'bcell': + lengths = args.window_size + method = args.method + proteasome = args.proteasome if args.prediction == 'processcing' else None global header - params = dict() - if method: - params['method'] = method - params['sequence_text'] = seq - params['allele'] = allele - params['length'] = length - data = urllib.urlencode(params) - request = urllib2.Request(url, data) - if options.debug: - print >> sys.stderr, "url %s %s %s" % (request.get_full_url(), seqid if seqid else "None", seq) - response = None - response = urllib2.urlopen(request) - if response and response.getcode() == 200: - resp_data = response.readlines() - for line in resp_data: - if line.find('eptide') > 0: - header = "#%s%s" % ("ID\t" if seqid else "", line) - continue - if seqid: - results.append("%s\t%s" % (seqid,line)) - else: - results.append(line) - elif not response: - warn_err("NO response from IEDB server\n", exit_code=3) - else: - warn_err("Error connecting to IEDB server\n", exit_code=response.getcode()) + header = None + results = [] + global header2 + header2 = None + results2 = [] + + sequence_text = [] + + def add_seq(seqid, seq): + sid = seqid if seqid else "peptide%d" % len(sequence_text) + sequence_text.append(">%s\n%s" % (sid, seq)) - if options.sequence: - for i,seq in enumerate(options.sequence): - query(url,seq,alleles,lengths,seqid=None,method=method) - if options.input: - try: - fh = open(options.input,'r') - if options.column: ## tabular - col = int(options.column) - idcol = int(options.id_column) if options.id_column else None - for i,line in enumerate(fh): - fields = line.split('\t') - if len(fields) > col: - seq = re.sub('[_*]','',fields[col]) - if re.match(aapat,seq): - seqid = fields[idcol] if idcol != None and idcol < len(fields) else None - query(url,seq,alleles,lengths,seqid=seqid,method=method) - else: - warn_err('Line %d, Not a peptide: %s\n' % (i,seq),exit_code=None) - else: ## fasta - seqid = None - seq = '' - for i,line in enumerate(fh): - if line.startswith('>'): - if seqid and len(seq) > 0: - query(url,seq,alleles,lengths,seqid=seqid,method=method) - seqid = line[1:].strip() - seq = '' - else: - seq += line.strip() - if seqid and len(seq) > 0: - query(url,seq,alleles,lengths,seqid=seqid,method=method) - fh.close() - except Exception, e: - warn_err("Unable to open input file: %s\n" % e, exit_code=1) + def query(url, seq, allele, length, seqid=None, method='recommended'): + global header + global header2 + params = dict() + if method: + params['method'] = method.encode() + if proteasome: + params['proteasome'] = proteasome.encode() + params['sequence_text'] = seq.encode() + if allele is not None: + params['allele'] = allele.encode() + if length is not None: + params[len_param] = str(length).encode() + req_data = urlencode(params) + if args.debug: + print('url %s %s' % (url, unquote(req_data)), file=sys.stderr) + retries = max(0, args.retries) + 1 + for retry in range(1, retries): + response = None + try: + response = urlopen(url, data=req_data.encode('utf-8'), + timeout=args.timeout) + if response and response.getcode() == 200: + data = [line.decode() for line in response.readlines()] + if args.debug: + print(data, file=sys.stderr) + rslts = results + for ln, line in enumerate(data): + if line.lower().find('invalid') >= 0: + msg = '%s %s\n%s' % (url, unquote(req_data), + ''.join(data)) + warn_err(msg, exit_code=1) + if line.find('eptide') > 0: + header = "#%s%s" %\ + ("ID\t" if seqid else "", line) + if args.debug: + print(header, file=sys.stderr) + continue + elif method == 'Bepipred' and line.find('Residue') > 0: + header2 = "#%s%s" %\ + ("ID\t" if seqid else "", line) + if args.debug: + print(header2, file=sys.stderr) + rslts = results2 + continue + if seqid: + rslts.extend("%s\t%s" % (seqid, line)) + else: + rslts.extend(line) + break + else: + code = response.getcode() if response else 1 + warn_err("Error connecting to IEDB server\n", + exit_code=code) + except HTTPError as e: + code = None if retry < args.retries else e.code + warn_err("%d of %d Error connecting to IEDB server %s\n" % + (retry, retries, e), + exit_code=code) + time.sleep(args.sleep) + except Exception as e: + warn_err("Error connecting to IEDB server %s\n" % e, + exit_code=3) - if header: - outputFile.write(header) - for line in results: - outputFile.write(line) + if args.sequence: + for i, seq in enumerate(args.sequence): + query(url, seq, alleles, lengths, seqid=None, method=method) + if args.input: + try: + fh = open(args.input, 'r') + if args.column: # tabular + col = int(args.column) + idcol = int(args.id_column) if args.id_column else None + for i, line in enumerate(fh): + fields = line.split('\t') + if len(fields) > col: + seq = re.sub('[_*]', '', fields[col]) + if re.match(aapat, seq): + if idcol is not None and idcol < len(fields): + seqid = fields[idcol] + else: + seqid = None + query(url, seq, alleles, lengths, + seqid=seqid, method=method) + else: + warn_err('Line %d, Not a peptide: %s\n' % (i, seq), + exit_code=None) + else: # fasta + seqid = None + seq = '' + for i, line in enumerate(fh): + if line.startswith('>'): + if seqid and len(seq) > 0: + query(url, seq, alleles, lengths, + seqid=seqid, method=method) + seqid = line[1:].strip() + seq = '' + else: + seq += line.strip() + if seqid and len(seq) > 0: + query(url, seq, alleles, lengths, + seqid=seqid, method=method) + fh.close() + except Exception as e: + warn_err("Unable to open input file: %s\n" % e, exit_code=1) -if __name__ == "__main__": __main__() + if header: + outputFile.write(header) + for line in results: + outputFile.write(line) + if results2: + if args.output2: + try: + outPath = os.path.abspath(args.output2) + outFile = open(outPath, 'w') + except Exception as e: + warn_err("Unable to open output file: %s\n" % e, exit_code=1) + else: + outFile = sys.stdout + if header2: + outFile.write(header2) + for line in results2: + outFile.write(line) + +if __name__ == "__main__": + __main__()
--- a/iedb_api.xml Mon Feb 17 16:04:07 2020 -0500 +++ b/iedb_api.xml Tue Feb 25 17:37:34 2020 -0500 @@ -1,17 +1,81 @@ -<tool id="iedb_api" name="IEDB" version="0.1.0"> +<tool id="iedb_api" name="IEDB" version="2.15.0"> <description>MHC Binding prediction</description> + <macros> + <xml name="alleles" token_hla_regex="" token_hla_examples="" token_hlalen_examples=""> + <conditional name="alleles"> + <param name="allelesrc" type="select" label="Alleles"> + <option value="history">From history</option> + <option value="entry">Entered</option> + </param> + <when value="history"> + <param name="allele_file" type="data" format="txt" label="Alleles file"> + <help>The dataset should have on allele per line. The allele may be followed by an optional comma-separated list of peptide lengths, e.g.: @HLALEN_EXAMPLES@</help> + </param> + </when> + <when value="entry"> + <param name="allele_text" type="text" size="80" label="Alleles"> + <help>Enter alleles separated by white space: @HLA_EXAMPLES@ (The peptide lengths may follow each allele: @HLALEN_EXAMPLES@)</help> + <validator type="regex" message="Doesn't appear to be a valid allele">^@HLA_REGEX@(\s+@HLA_REGEX@)*$</validator> + </param> + </when> + </conditional> + </xml> + </macros> <requirements> + <requirement type="package" version="3.7">python</requirement> </requirements> - <stdio> - <exit_code range="1:" /> - </stdio> - <command interpreter="python"><![CDATA[ + <command detect_errors="exit_code"><![CDATA[ #import re - iedb_api.py --prediction=$prediction.tool --method=$prediction.method + python '${__tool_directory__}/iedb_api.py' + --prediction=$prediction.tool + --method=$prediction.method + #if $prediction.tool == 'bcell': + #if $prediction.window_size: + -w $prediction.window_size + #end if + #else + #if $prediction.tool == 'processing' and $prediction.proteasome: + --proteasome $prediction.proteasome + #end if + #if $prediction.alleles.allelesrc == 'history': + #for $line in open(str($prediction.alleles.allele_file)): + #set $fields = $line.strip().split(',') + #set $allele = $fields[0].strip() + #if len($allele) > 0: + #if len($fields) > 1: + #for $alen in $fields[1:]: + -a '$allele' -l $alen + #end for + #else: + #for $alen in str($prediction.lengths).split(','): + -a '$allele' -l $alen + #end for + #end if + #end if + #end for + #else: + #for $word in str($prediction.alleles.allele_text).strip().split(): + #set $fields = $word.strip().split(',') + #set $allele = $fields[0].strip() + #if len($allele) > 0: + #if len($fields) > 1: + #for $alen in $fields[1:]: + -a '$allele' -l $alen + #end for + #else: + #for $alen in str($prediction.lengths).split(','): + -a '$allele' -l $alen + #end for + #end if + #end if + #end for + #end if + #end if + #if $sequence.seqsrc == 'fasta': - -i $sequence.seq_fasta + -i '$sequence.seq_fasta' #else if $sequence.seqsrc == 'tabular': - -i $sequence.seq_tsv + -i '$sequence.seq_tsv' -c #echo int(str($sequence.pep_col)) - 1 #if $sequence.id_col: -C #echo int(str($sequence.id_col)) - 1 @@ -21,42 +85,131 @@ -s $seq.strip() #end for #end if - #if $alleles.allelesrc == 'history': - #for $line in open(str($alleles.allele_file)): - #set $fields = $line.strip().split(',') - #set $allele = $fields[0].strip() - #if len($allele) > 0: - #if len($fields) > 1: - #for $alen in $fields[1:]: - -a $allele -l $alen - #end for - #else: - #for $alen in str($lengths).split(','): - -a $allele -l $alen - #end for - #end if - #end if - #end for - #else: - #for $word in str($alleles.allele_text).strip().split(): - #set $fields = $word.strip().split(',') - #set $allele = $fields[0].strip() - #if len($allele) > 0: - #if len($fields) > 1: - #for $alen in $fields[1:]: - -a $allele -l $alen - #end for - #else: - #for $alen in str($lengths).split(','): - -a $allele -l $alen - #end for - #end if - #end if - #end for - #end if -o $output ]]></command> <inputs> + <conditional name="prediction"> + <param name="tool" type="select" label="Prediction"> + <option value="mhci">MHC-I Binding</option> + <option value="mhcii">MHC-II Binding</option> + <option value="processing">MHC-I Processing</option> + <option value="mhcnp">MHC-NP T-Cell Epitope</option> + <option value="bcell">Antibody Epitope Prediction</option> + </param> + <when value="mhci"> + <param name="method" type="select" label="prediction method"> + <option value="recommended" selected="true">recommended</option> + <option value="consensus">consensus</option> + <option value="netmhcpan">netmhcpan</option> + <option value="ann">ann</option> + <option value="smmpmbec">smmpmbec</option> + <option value="smm">smm</option> + <option value="comblib_sidney2008">comblib_sidney2008</option> + <option value="netmhccons">netmhccons</option> + <option value="pickpocket">pickpocket</option> + </param> + <expand macro="alleles" hla_regex="(HLA-[A-CEG]\*[0-8][[0-9]:[0-9][0-9][0-9]*|BoLA-.+|Gogo-.+|H-2-[DKL][bdk]|Mamu-.+|Patr-.+|RT.+|SLA-.+)(,([8-9]|1[0-5]))*" hla_examples="HLA-A*03:01 HLA-B*07:02" hlalen_examples="HLA-A*03:01,8,9,10 HLA-B*07:02,9"/> + <param name="lengths" type="select" multiple="true" optional="false" label="peptide lengths for prediction"> + <help>Used for any alleles which don't include specified lengths</help> + <option value="8" selected="true">8</option> + <option value="9">9</option> + <option value="10">10</option> + <option value="11">11</option> + <option value="12">12</option> + <option value="13">13</option> + <option value="14">14</option> + <option value="15">15</option> + </param> + + </when> + <when value="mhcii"> + <param name="method" type="select" label="prediction method"> + <option value="recommended" selected="true">recommended</option> + <option value="consensus3">consensus3</option> + <option value="NetMHCIIpan">NetMHCIIpan</option> + <option value="nn_align">nn_align</option> + <option value="smm_align">smm_align</option> + <option value="comblib">comblib</option> + <option value="tepitope">tepitope</option> + </param> + <expand macro="alleles" hla_regex="((DPA1\*0[1-3](:0[1-3])?/DPB1\*0[1-6]:0[12]|DQA1\*0[1-5]:0[12]/DQB1\*0[2-6]:0[12]|DRB[1-5]\*[01][1-9]:0[1-5]|H2-IA[bd]),(asis|[1-2][0-9]|30))*" hla_examples="DPA1*01/DPB1*04:01 HLA-DRB1*01:01 H2-IAb" hlalen_examples="DPA1*01/DPB1*04:01,11,15"/> + <param name="lengths" type="select" multiple="true" optional="false" label="peptide lengths for prediction"> + <help>Used for any alleles which don't include specified lengths</help> + <option value="asis">asis</option> + <option value="11">11</option> + <option value="12">12</option> + <option value="13">13</option> + <option value="14">14</option> + <option value="15" selected="true">15</option> + <option value="16">16</option> + <option value="17">17</option> + <option value="18">18</option> + <option value="19">19</option> + <option value="20">20</option> + <option value="21">21</option> + <option value="22">22</option> + <option value="23">23</option> + <option value="24">24</option> + <option value="25">25</option> + <option value="26">26</option> + <option value="27">27</option> + <option value="28">28</option> + <option value="29">29</option> + <option value="30">30</option> + </param> + </when> + <when value="processing"> + <param name="method" type="select" label="prediction method"> + <option value="recommended" selected="true">recommended</option> + <option value="consensus">consensus</option> + <option value="netmhcpan">netmhcpan</option> + <option value="ann">ann</option> + <option value="smmpmbec">smmpmbec</option> + <option value="smm">smm</option> + <option value="comblib_sidney2008">comblib_sidney2008</option> + </param> + <param name="proteasome" type="select" label="proteasome type"> + <option value="immuno">immuno</option> + <option value="constitutive">constitutive</option> + </param> + <expand macro="alleles" hla_regex="(HLA-[A-CE]\*[0-8][[0-9]:[0-9][0-9]|BoLA-.+|Gogo-.+|H-2-[DKL][bdk]|Mamu-.+|Patr-.+|RT.+|SLA-.+)(,([8-9]|1[0-4]))*" hla_examples="HLA-A*03:01 HLA-B*07:02" hlalen_examples="HLA-A*03:01,8,9,10 HLA-B*07:02,9"/> + <param name="lengths" type="select" multiple="true" optional="false" label="peptide lengths for prediction"> + <help>Used for any alleles which don't include specified lengths</help> + <option value="8" selected="true">8</option> + <option value="9">9</option> + <option value="10">10</option> + <option value="11">11</option> + <option value="12">12</option> + <option value="13">13</option> + <option value="14">14</option> + </param> + </when> + <when value="mhcnp"> + <param name="method" type="select" label="prediction method"> + <option value="mhcnp" selected="true">mhcnp</option> + <option value="netmhcpan">netmhcpan</option> + </param> + <expand macro="alleles" hla_regex="(HLA-(A\*02:01|B\*07:02|B\*35:01|B\*44:03|B\*53:01|B\*57:01)|H-2-[DK]b)(,[8-9]|1[0-1])*" hla_examples="HLA-A*02:01 H-2-Db" hlalen_examples="HLA-A*02:01,8,9,10"/> + <param name="lengths" type="select" multiple="true" optional="false" label="peptide lengths for prediction"> + <help>Used for any alleles which don't include specified lengths</help> + <option value="8" selected="true">8</option> + <option value="9">9</option> + <option value="10">10</option> + <option value="11">11</option> + </param> + </when> + <when value="bcell"> + <param name="method" type="select" label="prediction method"> + <option value="Bepipred" selected="true">Bepipred</option> + <option value="Chou-Fasman">Chou-Fasman</option> + <option value="Emini">Emini</option> + <option value="Karplus-Schulz">Karplus-Schulz</option> + <option value="Kolaskar-Tongaonkar">Kolaskar-Tongaonkar</option> + <option value="Parker">Parker</option> + </param> + <param name="window_size" type="integer" value="" optional="true" min="1" label="window_size" help="window_size should be less than the sequence length, and less than 8 for Karplus-Schulz method"/> + </when> + </conditional> <conditional name="sequence"> <param name="seqsrc" type="select" label="Peptide sequences"> <option value="fasta">Fasta file</option> @@ -75,139 +228,157 @@ <param name="seq_text" type="text" size="80" label="Peptide Sequence"/> </when> </conditional> - <conditional name="alleles"> - <param name="allelesrc" type="select" label="Alleles"> - <option value="history">From history</option> - <option value="entry">Entered</option> - </param> - <when value="history"> - <param name="allele_file" type="data" format="txt" label="Alleles file"> - <help>The dataset should have on allele per line. The allele may be followed by an optional comma-separated list of pepttide lengths, e.g.: HLA-A*02:01,8,9</help> - </param> - </when> - <when value="entry"> - <param name="allele_text" type="text" size="80" label="Alleles"> - <help>Enter alleles separated by white space: HLA-A*03:01 HLA-B*07:02 (The peptide lengths may follow each allele: HLA-A*03:01,8,9,10 HLA-B*07:02,9</help> - <validator type="regex" message="IDs separted by commas">^(HLA-([A-C]|D[PQR][AB]1)\*[0-9][[0-9]:[0-9][0-9](,(8|9|10|11|12|13|14|15))*)(\s+HLA-([A-C]|D[PQR][AB]1)\*[0-9][[0-9]:[0-9][0-9](,(8|9|10|11|12|13|14|15))*)*$</validator> - </param> - </when> - </conditional> - <param name="lengths" type="select" multiple="true" label="peptide lengths for prediction"> - <help>Used for any alleles which don't include specified lengths</help> - <option value="8">8</option> - <option value="9">9</option> - <option value="10">10</option> - <option value="11">11</option> - <option value="12">12</option> - <option value="13">13</option> - <option value="14">14</option> - <option value="15">15</option> - </param> - <conditional name="prediction"> - <param name="tool" type="select" label="Prediction"> - <option value="mhci">MHC-I Binding</option> - <option value="mhcii">MHC-II Binding</option> - <option value="processing">MHC-I Processing</option> - <option value="mhcnp">MHC-NP T-Cell Epitope</option> - <option value="bcell">Antibody Epitope Prediction</option> - </param> - <when value="mhci"> - <param name="method" type="select" label="prediction method"> - <option value="recommended" selected="true">recommended</option> - <option value="consensus">consensus</option> - <option value="netmhcpan">netmhcpan</option> - <option value="ann">ann</option> - <option value="smmpmbec">smmpmbec</option> - <option value="smm">smm</option> - <option value="comblib_sidney2008">comblib_sidney2008</option> - <option value="netmhccons">netmhccons</option> - <option value="pickpocket">pickpocket</option> - </param> - </when> - <when value="mhcii"> - <param name="method" type="select" label="prediction method"> - <option value="recommended" selected="true">recommended</option> - <option value="consensus3">consensus3</option> - <option value="NetMHCIIpan">NetMHCIIpan</option> - <option value="nn_align">nn_align</option> - <option value="smm_align">smm_align</option> - <option value="comblib">comblib</option> - <option value="tepitope">tepitope</option> - </param> - </when> - <when value="processing"> - <param name="method" type="select" label="prediction method"> - <option value="recommended" selected="true">recommended</option> - <option value="consensus">consensus</option> - <option value="netmhcpan">netmhcpan</option> - <option value="ann">ann</option> - <option value="smmpmbec">smmpmbec</option> - <option value="smm">smm</option> - <option value="comblib_sidney2008">comblib_sidney2008</option> - </param> - </when> - <when value="mhcnp"> - <param name="method" type="select" label="prediction method"> - <option value="mhcnp" selected="true">mhcnp</option> - </param> - </when> - <when value="bcell"> - <param name="method" type="select" label="prediction method"> - <option value="Bepipred" selected="true">Bepipred</option> - <option value="Chou-Fasman">Chou-Fasman</option> - <option value="Emini">Emini</option> - <option value="Karplus-Schulz">Karplus-Schulz</option> - <option value="Kolaskar-Tongaonkar">Kolaskar-Tongaonkar</option> - <option value="Parker">Parker</option> - </param> - <param name="window_size" type="integer" value="" optional="true" min="1" label="window_size" help="window_size should be less than the sequence length, and less than 8 for Karplus-Schulz method"/> - </when> - </conditional> + </inputs> <outputs> + <!-- <data name="output" format="tabular"/> + --> + <data name="output" format="tabular" label="IEDB ${prediction.tool} ${prediction.method}"/> + <data name="output2" format="tabular" label="IEDB ${prediction.tool} ${prediction.method} residue scores" from_work_dir="iedb_results2"> + <filter>prediction['method'].startswith('Bepipred')</filter> + </data> </outputs> <tests> - <test> - <param name="seqsrc" value="entry"/> - <param name="seq_text" value="SLYNTVATLYCVHQRIDV"/> - <param name="allelesrc" value="entry"/> - <param name="allele_text" value="HLA-A*01:01,9"/> - <param name="tool" value="mhci"/> - <param name="method" value="recommended"/> + <!-- test1 --> + <test> + <conditional name="prediction"> + <param name="tool" value="mhci"/> + <param name="method" value="recommended"/> + <conditional name="alleles"> + <param name="allelesrc" value="entry"/> + <param name="allele_text" value="HLA-A*01:01,9"/> + </conditional> + </conditional> + <conditional name="sequence"> + <param name="seqsrc" value="entry"/> + <param name="seq_text" value="SLYNTVATLYCVHQRIDV"/> + </conditional> <output name="output"> <assert_contents> <has_text text="LYNTVATLY" /> </assert_contents> </output> </test> + <!-- test2 --> <test> - <param name="seqsrc" value="fasta"/> - <param name="seq_fasta" ftype="fasta" value="seqs.fa"/> - <param name="allelesrc" value="history"/> - <param name="allele_file" ftype="txt" value="alleles.txt"/> - <param name="tool" value="mhci"/> - <param name="method" value="recommended"/> + <conditional name="prediction"> + <param name="tool" value="mhci"/> + <param name="method" value="recommended"/> + <conditional name="alleles"> + <param name="allelesrc" value="history"/> + <param name="allele_file" ftype="tabular" value="alleles.tsv"/> + </conditional> + </conditional> + <conditional name="sequence"> + <param name="seqsrc" value="fasta"/> + <param name="seq_fasta" ftype="fasta" value="seqs.fa"/> + </conditional> <output name="output"> <assert_contents> <has_text text="peptide1" /> - <has_text text="AHKVPRRLLK" /> + <has_text text="HKVPRRLLK" /> + </assert_contents> + </output> + </test> + <!-- test3 --> + <test> + <conditional name="prediction"> + <param name="tool" value="mhci"/> + <param name="method" value="recommended"/> + <conditional name="alleles"> + <param name="allelesrc" value="history"/> + <param name="allele_file" ftype="tabular" value="alleles.tsv"/> + </conditional> + </conditional> + <conditional name="sequence"> + <param name="seqsrc" value="tabular"/> + <param name="seq_tsv" ftype="tabular" value="seqs.tsv"/> + <param name="pep_col" value="3"/> + <param name="id_col" value="1"/> + </conditional> + <output name="output"> + <assert_contents> + <has_text text="peptide1" /> + <has_text text="HKVPRRLLK" /> </assert_contents> </output> </test> + <!-- test4 --> <test> - <param name="seqsrc" value="tabular"/> - <param name="seq_tsv" ftype="tabular" value="seqs.tsv"/> - <param name="pep_col" value="3"/> - <param name="id_col" value="1"/> - <param name="allelesrc" value="history"/> - <param name="allele_file" ftype="txt" value="alleles.txt"/> - <param name="tool" value="mhci"/> - <param name="method" value="recommended"/> + <conditional name="prediction"> + <param name="tool" value="mhcii"/> + <param name="method" value="recommended"/> + <conditional name="alleles"> + <param name="allelesrc" value="entry"/> + <param name="allele_text" value="DPA1*01/DPB1*04:01"/> + </conditional> + <param name="lengths" value="asis"/> + </conditional> + <conditional name="sequence"> + <param name="seqsrc" value="entry"/> + <param name="seq_text" value="SLYNTVATLYCVHQRIDV"/> + </conditional> + <output name="output"> + <assert_contents> + <has_text text="LYNTVATLY" /> + </assert_contents> + </output> + </test> + <!-- test5 --> + <test> + <conditional name="prediction"> + <param name="tool" value="processing"/> + <param name="method" value="recommended"/> + <conditional name="alleles"> + <param name="allelesrc" value="entry"/> + <param name="allele_text" value="HLA-A*01:01,8 HLA-A*02:01,9"/> + </conditional> + <param name="proteasome" value="constitutive"/> + </conditional> + <conditional name="sequence"> + <param name="seqsrc" value="entry"/> + <param name="seq_text" value="SLYNTVATLYCVHQRIDV"/> + </conditional> <output name="output"> <assert_contents> - <has_text text="peptide1" /> - <has_text text="AHKVPRRLLK" /> + <has_text text="LYNTVATLY" /> + </assert_contents> + </output> + </test> + <!-- test6 --> + <test> + <conditional name="prediction"> + <param name="tool" value="mhcnp"/> + <param name="method" value="mhcnp"/> + <conditional name="alleles"> + <param name="allelesrc" value="entry"/> + <param name="allele_text" value="HLA-A*02:01,9"/> + </conditional> + </conditional> + <conditional name="sequence"> + <param name="seqsrc" value="entry"/> + <param name="seq_text" value="SLYNTVATLYCVHQRIDV"/> + </conditional> + <output name="output"> + <assert_contents> + <has_text text="LYNTVATLY" /> + </assert_contents> + </output> + </test> + <!-- test7 --> + <test> + <conditional name="prediction"> + <param name="tool" value="bcell"/> + <param name="method" value="Emini"/> + </conditional> + <conditional name="sequence"> + <param name="seqsrc" value="entry"/> + <param name="seq_text" value="VLSEGEWQLVLHVWAKVEADVAGHGQDILIRLFKSHPETLEKFDRFKHLKTE"/> + </conditional> + <output name="output"> + <assert_contents> + <has_text text="VLSEGE" /> </assert_contents> </output> </test> @@ -215,14 +386,15 @@ <help><![CDATA[ The IEDB is a free resource, funded by a contract from the National Institute of Allergy and Infectious Diseases. It offers easy searching of experimental data characterizing antibody and T cell epitopes studied in humans, non-human primates, and other animal species. -This tool retrieves epitope information about input peptide sequences by using the RESTful web services provided by IEDB. +This tool retrieves epitope binding information about input peptide sequences by using the RESTful web services provided by IEDB. The webservices are described at: http://tools.immuneepitope.org/main/tools-api/ +That page also describes how to retrieve the available HLA alleles for class of epitope binding. **INPUTS** peptide sequences from a fasta file or a column in a tabular file - HLA alleles either entered as text or on per line in a text file + HLA alleles either entered as text or one per line in a text file **OUTPUTS**
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/bcell.fa Tue Feb 25 17:37:34 2020 -0500 @@ -0,0 +1,6 @@ +>pep1 +VLSEGEWQLVLHVWAKVEADVAGHGQDILIRLFKSHPETLEKFDRFKHLKTE +>pep2 +AGHAHKVPRRLLKAAR +>pep3 +ALKAADASADADGSGSGSGSGAGHAHKVPRRLLKAAR