0
|
1 '''
|
|
2 Annotates a tabular file with information from the Drug-Gene Interaction (DGI) database.
|
|
3 '''
|
|
4
|
1
|
5 import optparse, json, urllib2, sys, re
|
0
|
6
|
|
7 def __main__():
|
|
8 # -- Parse command line. --
|
|
9 parser = optparse.OptionParser()
|
|
10 parser.add_option('-g', '--gene-name-col', dest='gene_name_col', help='column of gene names')
|
|
11 parser.add_option('-a', '--print-all', dest='print_all', action='store_true', help='print all lines, even though without a result')
|
|
12 parser.add_option('-e', '--expert-curated', dest='expert_curated', action='store_true', help='use only expert curated results')
|
|
13 (options, args) = parser.parse_args()
|
|
14 gene_name_col = int(options.gene_name_col) - 1
|
|
15
|
|
16 # Open input stream.
|
|
17 if len(args) > 0:
|
|
18 input_file = open(args[0], 'r')
|
|
19 else:
|
|
20 input_file = sys.stdin
|
|
21
|
|
22 # -- Make connection and get results. --
|
|
23
|
|
24 # Get gene list.
|
|
25 gene_list = []
|
|
26 lines = []
|
|
27 for line in input_file:
|
1
|
28 entry = line.split('\t')[gene_name_col].strip()
|
|
29 # Some annotations may be of the form
|
|
30 # <gene_name>(<splicing_info>) or <gene_name>;<gene_name>(splicing_info)
|
|
31 gene_list.append(entry.split(';')[0].split('(')[0])
|
0
|
32 lines.append(line.strip())
|
|
33
|
|
34 # Query for results.
|
|
35 query_str = 'http://dgidb.genome.wustl.edu/api/v1/interactions.json?genes=%s' % ','.join(set(gene_list))
|
|
36 if options.expert_curated:
|
|
37 query_str += '&source_trust_levels=Expert%20curated'
|
1
|
38 print query_str
|
0
|
39 results = urllib2.urlopen(query_str).read()
|
|
40 results_dict = json.loads(results)
|
|
41
|
|
42 # Process results.
|
|
43 matched_results = results_dict['matchedTerms']
|
|
44 for result in matched_results:
|
|
45 # Process result.
|
|
46 processed_results = []
|
|
47 result_fields = [ result['geneName'], result['geneLongName'], ','.join( result['geneCategories'] ) ]
|
|
48 for interaction in result['interactions']:
|
|
49 result_fields = result_fields[0:3]
|
|
50 result_fields.extend( [
|
|
51 interaction['interactionType'], interaction['drugName'], interaction['source']
|
|
52 ] )
|
|
53 processed_results.append( '\t'.join( result_fields ) )
|
|
54
|
|
55 # Store processed results.
|
|
56 results_dict[ result['searchTerm'] ] = processed_results
|
|
57
|
|
58 # -- Annotate input file and produce output. --
|
|
59 for line in lines:
|
|
60 fields = line.split('\t')
|
|
61 gene = fields[gene_name_col]
|
|
62 if gene in results_dict:
|
|
63 for result in results_dict[gene]:
|
|
64 print line.strip() + '\t' + result
|
|
65 elif options.print_all:
|
|
66 print line
|
|
67
|
1
|
68 if __name__=="__main__": __main__()
|