annotate uniprot_ID_mapper/uniprot_id_mapping_3.py @ 3:6651ac4651f0 draft default tip

Uploaded
author rsajulga
date Thu, 16 Jul 2015 16:41:35 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
1 #!/usr/bin/env python
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
2 """
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
3 #
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
4 #------------------------------------------------------------------------------
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
5 # University of Minnesota
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
6 # Copyright 2015, Regents of the University of Minnesota
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
7 #------------------------------------------------------------------------------
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
8 # Author:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
9 #
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
10 # James E Johnson
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
11 #
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
12 #------------------------------------------------------------------------------
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
13 """
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
14 import json
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
15 import logging
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
16 import optparse
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
17 from optparse import OptionParser
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
18 import os
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
19 import sys
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
20 import re
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
21 import urllib
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
22 import urllib2
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
23 import timeit
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
24 start = timeit.default_timer()
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
25 try:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
26 import xml.etree.cElementTree as ET
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
27 except ImportError:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
28 import xml.etree.ElementTree as ET
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
29
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
30 """print
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
31 http://www.uniprot.org/help/programmatic_access#id_mapping_examples
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
32 http://www.uniprot.org/help/uploadlists
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
33
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
34 From input files or stdin get accessions/IDs to map.
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
35 An input option can specify what id_type the input accessions/IDs are,
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
36 otherwise, we should attempt to categorize the input accessions/IDs according to their inferred id_type
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
37
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
38 input_dict = dict()
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
39 for id_string in input_ids:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
40 (id,id_type) = getAccession(id_string)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
41 if not id_type in input_dict:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
42 input_dict[id_type] = []
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
43 input_dict[id_type].append(id)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
44
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
45
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
46 # We need to retrieve by from_id_type and to_id_type
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
47 for id_type in input_dict:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
48 for
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
49
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
50
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
51 tabular output:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
52 #input_id to_id to_id
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
53
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
54
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
55 """
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
56 def warn_err(msg,exit_code=1):
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
57 sys.stderr.write(msg)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
58 if exit_code:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
59 sys.exit(exit_code)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
60
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
61 def __main__():
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
62 version = '1.0'
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
63 idDict = {
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
64 #Category:UniProt
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
65 'ACC+ID':'UniProtKB AC/ID',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
66 'ACC':'UniProtKB AC',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
67 'ID':'UniProtKB ID',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
68 'UPARC':'UniParc',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
69 'NF50':'UniRef50',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
70 'NF90':'UniRef90',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
71 'NF100':'UniRef100',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
72 #Category:Other sequence databases
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
73 'EMBL_ID':'EMBL/GenBank/DDBJ',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
74 'EMBL':'EMBL/GenBank/DDBJ CDS',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
75 'PIR':'PIR',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
76 'UNIGENE_ID':'UniGene',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
77 'P_ENTREZGENEID':'Entrez Gene (GeneID)',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
78 'P_GI':'GI number*',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
79 'P_REFSEQ_AC':'RefSeq Protein',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
80 'REFSEQ_NT_ID':'RefSeq Nucleotide',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
81 #Category:3D structure databases
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
82 'PDB_ID':'PDB',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
83 'DISPROT_ID':'DisProt',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
84 #Category:Protein-protein interaction databases
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
85 'BIOGRID_ID':'BioGrid',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
86 'DIP_ID':'DIP',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
87 'MINT_ID':'MINT',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
88 'STRING_ID':'STRING',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
89 #Category:Chemistry
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
90 'CHEMBL_ID':'ChEMBL',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
91 'DRUGBANK_ID':'DrugBank',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
92 'GUIDETOPHARMACOLOGY_ID':'GuidetoPHARMACOLOGY',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
93 #Category:Protein family/group databases
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
94 'ALLERGOME_ID':'Allergome',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
95 'MEROPS_ID':'MEROPS',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
96 'MYCOCLAP_ID':'mycoCLAP',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
97 'PEROXIBASE_ID':'PeroxiBase',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
98 'REBASE_ID':'REBASE',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
99 'TCDB_ID':'TCDB',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
100 #Category:Polymorphism databases
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
101 'DMDM_ID':'DMDM',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
102 #Category:2D gel databases
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
103 'WORLD_2DPAGE_ID':'World-2DPAGE',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
104 #Category:Protocols and materials databases
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
105 'DNASU_ID':'DNASU',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
106 #Category:Genome annotation databases
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
107 'ENSEMBL_ID':'Ensembl',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
108 'ENSEMBL_PRO_ID':'Ensembl Protein',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
109 'ENSEMBL_TRS_ID':'Ensembl Transcript',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
110 'ENSEMBLGENOME_ID':'Ensembl Genomes',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
111 'ENSEMBLGENOME_PRO_ID':'Ensembl Genomes Protein',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
112 'ENSEMBLGENOME_TRS_ID':'Ensembl Genomes Transcript',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
113 'P_ENTREZGENEID':'GeneID',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
114 'KEGG_ID':'KEGG',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
115 'PATRIC_ID':'PATRIC',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
116 'UCSC_ID':'UCSC',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
117 'VECTORBASE_ID':'VectorBase',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
118 #Category:Organism-specific gene databases
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
119 'ARACHNOSERVER_ID':'ArachnoServer',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
120 'CGD':'CGD',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
121 'CONOSERVER_ID':'ConoServer',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
122 'CYGD_ID':'CYGD',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
123 'DICTYBASE_ID':'dictyBase',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
124 'ECHOBASE_ID':'EchoBASE',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
125 'ECOGENE_ID':'EcoGene',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
126 'EUHCVDB_ID':'euHCVdb',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
127 'EUPATHDB_ID':'EuPathDB',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
128 'FLYBASE_ID':'FlyBase',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
129 'GENECARDS_ID':'GeneCards',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
130 'GENEFARM_ID':'GeneFarm',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
131 'GENOLIST_ID':'GenoList',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
132 'H_INVDB_ID':'H-InvDB',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
133 'HGNC_ID':'HGNC',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
134 'HPA_ID':'HPA',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
135 'LEGIOLIST_ID':'LegioList',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
136 'LEPROMA_ID':'Leproma',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
137 'MAIZEGDB_ID':'MaizeGDB',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
138 'MIM_ID':'MIM',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
139 'MGI_ID':'MGI',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
140 'NEXTPROT_ID':'neXtProt',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
141 'ORPHANET_ID':'Orphanet',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
142 'PHARMGKB_ID':'PharmGKB',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
143 'POMBASE_ID':'PomBase',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
144 'PSEUDOCAP_ID':'PseudoCAP',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
145 'RGD_ID':'RGD',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
146 'SGD_ID':'SGD',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
147 'TAIR_ID':'TAIR',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
148 'TUBERCULIST_ID':'TubercuList',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
149 'WORMBASE_ID':'WormBase',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
150 'WORMBASE_TRS_ID':'WormBase Transcript',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
151 'WORMBASE_PRO_ID':'WormBase Protein',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
152 'XENBASE_ID':'Xenbase',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
153 'ZFIN_ID':'ZFIN',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
154 #Category:Phylogenomic databases
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
155 'EGGNOG_ID':'eggNOG',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
156 'GENETREE_ID':'GeneTree',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
157 'HOGENOM_ID':'HOGENOM',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
158 'HOVERGEN_ID':'HOVERGEN',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
159 'KO_ID':'KO',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
160 'OMA_ID':'OMA',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
161 'ORTHODB_ID':'OrthoDB',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
162 'PROTCLUSTDB_ID':'ProtClustDB',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
163 'TREEFAM_ID':'TreeFam',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
164 #Category:Enzyme and pathway databases
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
165 'BIOCYC_ID':'BioCyc',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
166 'REACTOME_ID':'Reactome',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
167 'UNIPATHWAY_ID':'UniPathWay',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
168 #Category:Gene expression databases
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
169 'CLEANEX_ID':'CleanEx',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
170 #Category:Other
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
171 'CHITARS_ID':'ChiTaRS',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
172 'GENOMERNAI_ID':'GenomeRNAi',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
173 'GENEWIKI_ID':'GeneWiki',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
174 'NEXTBIO_ID':'NextBio'
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
175 }
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
176
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
177 """
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
178 TODO:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
179 Would be better to be able to infer the from_id type for the input accession/ID especially for a fasta file
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
180 - Allow the options.from_id to be unspecified and empty, and try to determine the from_id by the input ID/Accession.
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
181
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
182 # rather than an array of input accessions, we need to put them in a dict() by type
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
183 def addAccession(id_dict,id_type,id):
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
184 if id_type not in id_dict:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
185 id_dict[id_type] = []-++
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
186 id_dict[id_type] = [].append(id)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
187
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
188 # returns(accession, id_type)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
189 def getAccession(header, matchType):
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
190 # (format regex pattern, FROM_ID)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
191 # TODO try to determine which type of accession ID we have by matching by regular expressions
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
192 # each regex match should have a groups[0] that given the accession
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
193 # for id_types, see: http://www.uniprot.org/help/programmatic_access#id_mapping_examples
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
194 fmts = [
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
195 ('>?(?:sp|tr|sw)\|(\w+).*','ACC+ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
196 ('>?gi|\d+\|ref\|(NP_\d+\.\d+).*','ACC+ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
197 ('>/UniRef\d+_(\w+).*','ACC+ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
198 ('>/(UPI\d+).*','ACC+ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
199 ('NP_\d+\.\d+','ACC+ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
200 ('ENSP\d+','ENSEMBL_PRO_ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
201 ('ENST\d+','ENSEMBL_TRS_ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
202 ]
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
203 for pat,cat in fmts:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
204 m = re.match(pat,header)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
205 if m:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
206 matchType.append(cat)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
207 return (m.groups()[0],cat)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
208 matchType.append('ACC+ID')
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
209 return (header,'ACC+ID')
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
210
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
211 # Then when we are retrieving the id mappings, we need to incrementally fetch by from_id / to_id types
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
212 idMaps = dict() # {to_id,idMap}
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
213 for to_id in options.to_id:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
214 idMap = dict()
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
215 idMaps[to_id] = idMap
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
216 for (from_id,ids) id_dict.items():
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
217 # limit the requests to 500 at a time
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
218 idx = range(0,len(ids),500)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
219 idx.append(len(ids))
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
220 for i in range(len(idx)-1):
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
221 getIdMapping(ids[idx[i]:idx[i+1]],from_id,to_id,idMap=idMap)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
222 """
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
223
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
224 """
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
225 Some examples of fasta ID lines From:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
226 https://code.google.com/p/compomics-utilities/source/browse/trunk/src/main/java/com/compomics/util/protein/Header.java
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
227 >sw|Pxxxx|ACTB_HUMAN xxxx xxx xxxx ...
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
228 >gi|xxxxx|xx|xxxxx|(x) xxxx xxx xxxx ...
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
229 >IPI:IPIxxxxxx.y|REFSEQ_XP:XP_aaaaa[|many more like this can be present] Tax_Id=9606 descr
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
230 >HIT000000001.10|HIX0021591.10|AB002292.2|NO|NO|HC|cds 185..4219|DH domain containing protein.
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
231 >OExyz (OExyz) xxx xxx xxx
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
232 >hflu_lsi_xxxx xxx xxx xxx
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
233 >C_tr_Lx_x [xxx - xxx] | xxx xxx
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
234 >M. tub.xxx|Rvxxx| xxx xxx
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
235 // Drosophile DB.
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
236 // We need to find two elements:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
237 // - the accession String (retrieved as the trimmed version of everything
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
238 // up to (and NOT including) " pep:"
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
239 // - the description (everything (trimmed) starting from (and including) the " pep:".
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
240 >CGxxxxxx pep:xxxxxx
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
241 >xxxx xxx SGDID:xxxx xxx
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
242 >generic_some_tag|proten_accession|a description for this protein
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
243 // Old (everything before 9.0 release (31 Oct 2006)) standard SwissProt header as
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
244 // present in the Expasy FTP FASTA file.
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
245 // Is formatted something like this:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
246 >XXX_YYYY (acc) rest
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
247 >sp|accession|ID descr rest (including taxonomy, if available
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
248 >tr|accession|ID descr rest (including taxonomy, if available)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
249 >nxp|NX_P02768-1|ALB|Serum albumin|Iso
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
250 // New (9.0 release (31 Oct 2006) and beyond) standard SwissProt header as
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
251 // present in the Expasy FTP FASTA file.
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
252 // Is formatted something like this:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
253 >accession|ID descr rest (including taxonomy, if available)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
254 // Flybase FASTA format.
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
255 >FBxxx type=xxx
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
256 // A header translating a genome sequence into a protein sequences.
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
257 // We need to find two elements, separated by a space:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
258 // - the accession string (retrieved as the first part of a space delimited String).
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
259 // - the nucleic acid start and stop site (between brackets, separated by a '-').
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
260 >dm345_3L-sense [234353534-234353938]
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
261 >dmic_c_1_469 Dialister micraerophilus DSM 19965 [161699 - 160872] aspartate-semialdehyde dehydrogenase Database
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
262 >synsp_j_c_8_5 Synergistes[G-2] sp. oral taxon 357 W5455 (JCVI) [820 - 1089] ORF
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
263 // The Arabidopsis thaliana database; TAIR format
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
264 >AT1G08520.1 | Symbol: PDE166 | magnesium-chelatase subunit chlD, chloroplast, putative / Mg-protoporphyrin IX chelatase, putative (CHLD), similar to Mg-chelatase SP:O24133 from Nicotiana tabacum, GB:AF014399 GI:2318116 from (Pisum sativum) | chr1:2696415-2700961 FORWARD | Aliases: T27G7.20, T27G7_20, PDE166, PIGMENT DEFECTIVE 166
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
265 ...
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
266 // Okay, try the often-used 'generic' approach. If this fails, we go to the worse-case scenario, ie. do not process at all.
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
267 // Testing for this is somewhat more complicated.
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
268 // Often used simple header; looks like:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
269 // >NP0465 (NP0465) A description for this protein.
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
270 // We need to find two elements:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
271 // - the accession String (easily retrieved as the next String until a space is encountered).
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
272 // - the description
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
273 >NP0465 (NP0465) A description for this protein.
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
274 GenBank gb|accession|locus
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
275 EMBL Data Library emb|accession|locus
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
276 DDBJ, DNA Database of Japan dbj|accession|locus
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
277 NBRF PIR pir||entry
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
278 Protein Research Foundation prf||name
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
279 SWISS-PROT sp|accession|entry name
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
280 Brookhaven Protein Data Bank pdb|entry|chain
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
281 Patents pat|country|number
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
282 GenInfo Backbone Id bbs|number
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
283 General database identifier gnl|database|identifier
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
284 NCBI Reference Sequence ref|accession|locus
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
285 Local Sequence identifier lcl|identifier
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
286 """
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
287
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
288
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
289 def getFastaAccession(header):
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
290 # TODO parse the ID and return the accession
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
291 # (format regex pattern, FROM_ID)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
292 # TODO try to determine which type of accession ID we have by matching by reg|([A-NR-Z][0-9](?:[A-Z][A-Z0-9]{2}[0-9]){1,2})ular expressions
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
293 # each regex match should have a groups[0] that given the accession
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
294 # for id_types, see: http://www.uniprot.org/help/programmatic_access#id_mapping_examples
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
295 fmts = [
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
296 ('>?(?:sp|tr|sw)\|(\w+).*','ACC+ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
297 ('>?gi|\d+\|ref\|(NP_\d+\.\d+).*','ACC+ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
298 ('NP_\d+\.\d+','ACC+ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
299
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
300 ('([OPQ][0-9][A-Z0-9]{3}[0-9])|([A-NR-Z][0-9](?:[A-Z][A-Z0-9]{2}[0-9]){1,2})','ACC'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
301 ('(...*)_....*','ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
302 ('>/(UPI\d+).*','UPARC'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
303 ('>/UniRef50_(\w+).*','NF50'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
304 ('UniRef90_(\w+).*','NF90'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
305 ('UniRef100_(\w+).*','NF100'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
306 ('([A-C][A-Z]?\d{6})|(DM-Z)\d{5})','EMBL_ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
307 ('ENSP\d+','ENSEMBL_PRO_ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
308 ('ENST\d+','ENSEMBL_TRS_ID')
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
309 ]
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
310 for pat,cat in fmts:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
311 m = re.match(pat,header)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
312 if m:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
313 return m.groups()[0]
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
314 return header
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
315
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
316 # rather than an array of input accessions, we need to put them in a dict() by type
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
317 def addAccession(id_dict,id_type,id):
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
318 for idtype in id_type:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
319 if idtype not in id_dict:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
320 id_dict[idtype] = []
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
321 id_dict[idtype].append(id)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
322
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
323 # returns(accession, id_type)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
324 def getAccession(header, matchType):
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
325 # (format regex pattern, FROM_ID)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
326 # TODO try to determine which type of accession ID we have by matching by regular expressions
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
327 # each regex match should have a groups[0] that given the accession
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
328 # for id_types, see: http://www.uniprot.org/help/programmatic_access#id_mapping_examples
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
329 fmts = [
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
330 ('([OPQ][0-9][A-Z0-9]{3}[0-9])','ACC'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
331 ('([A-NR-Z][0-9](?:[A-Z][A-Z0-9]{2}[0-9]){1,2})','ACC'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
332 ('(THISDOESNTWORK...*)_....*','ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
333 ('UPI(\d+).*','UPARC'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
334 ('(UniRef50_\w+.*)','NF50'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
335 ('UniRef90_(\w+).*','NF90'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
336 ('(UniRef100_\w+.*)','NF100'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
337 ('([A-L][A-Z]?\d{6})|([A-NR-Z]\d{5})|([A-Z]{4}\d{8})','EMBL_ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
338 ('([A-Z]*\d*\.\d$)','EMBL'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
339 ('([IBC]\d{5})','PIR'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
340 ('(Hs\.\d*)','UNIGENE_ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
341 ('[A-Z]P_(\d*\.\d)','P_REFSEQ_AC'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
342 ('[NX][MC]_(\d*\.\d)','REFSEQ_NT_ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
343 ('(\d[A-Z0-9]{3})','PDB_ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
344 ('(DP\d{5})','DISPROT_ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
345
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
346 ('(\d*$)','P_ENTREZGENEID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
347 ('(\d*$)','P_GI'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
348 ('(\d*$)','BIOGRID_ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
349 ('(\d*$)','GUIDETOPHARMACOLOGY_ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
350 ('(\d*$)','ALLERGOME_ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
351 ('(\d*$)','PEROXIBASE_ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
352 ('(\d*$)','REBASE_ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
353 ('(\d*$)','DNASU_ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
354 ('(\d*$)','DMDM_ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
355
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
356 ('(DIP-\d*N$)','DIP_ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
357 ('(MINT-\d*)','MINT_ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
358 ('(9606\.ENSP\d*)','STRING_ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
359 ('(CHEMBL\d*)','CHEMBL_ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
360 ('(DB\d*)','DRUGBANK_ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
361 ('([A-Z]\d\d\.[A-Z0-9]\d{2})','MEROPS_ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
362 ('NOTHING POPS UP','MYCOCLAP_ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
363 ('(\d\.[A-Z](?:\.\d*){3})','TCDB_ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
364 ('NOTHING POPS UP','WORLD_2DPAGE_ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
365 ('(ENSG\d*)','ENSEMBAF85406.1BL_ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
366 ('(ENSP\d+)','ENSEMBL_PRO_ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
367 ('(ENST\d+)','ENSEMBL_TRS_ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
368 (' ','ENSEMBLGENOME_ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
369 (' ','ENSEMBLGENOME_PRO_ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
370 (' ','ENSEMBLGENOME_TRS_ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
371 ('(hsa:\d*)','KEGG_ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
372 ('(uc\d*[a-z]*\.\d$)','UCSC_ID'),
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
373 ('(.*[CKN]OG\d*)','EGGNOG_ID')
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
374 ]
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
375 n = re.match('\d*$', header)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
376 if n: # For ambiguous number only ID types
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
377 numIDtypes = [
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
378 'P_ENTREZGENEID',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
379 'P_GI',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
380 'DMDM_ID',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
381 'BIOGRID_ID',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
382 'GUIDETOPHARMACOLOGY_ID',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
383 'ALLERGOME_ID',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
384 'PEROXIBASE_ID',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
385 'REBASE_ID',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
386 'DNASU_ID']
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
387 ambiguous = []
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
388 for numIDs in numIDtypes:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
389 nm = getIdMapping([header],numIDs,'ACC',numReturn=True)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
390 if nm != None:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
391 ambiguous.append(nm)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
392 matchType.append(ambiguous)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
393 return (header, ambiguous)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
394 for pat,cat in fmts:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
395 m = re.match(pat,header)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
396 if m:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
397 matchType.append([cat])
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
398 return (m.groups()[0],[cat])
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
399 matchType.append(['ACC+ID'])
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
400 return (header,['ACC+ID'])
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
401
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
402
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
403 def read_tabular(filepath,col):
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
404 accessions = []
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
405 with open(filepath) as fp:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
406 for i,line in enumerate(fp):
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
407 if line.strip() == '' or line.startswith('#'):
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
408 continue
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
409 fields = line.rstrip('\n').split('\t')
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
410 accession = fields[col]
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
411 accessions.append(accession)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
412 return accessions
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
413
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
414 def get_fasta_entries(fp):
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
415 name, seq = None, []
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
416 for line in fp:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
417 line = line.rstrip()
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
418 if line.startswith(">"):
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
419 if name: yield (name, ''.join(seq))
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
420 name, seq = line, []
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
421 else:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
422 seq.append(line)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
423 if name: yield (name, ''.join(seq))
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
424
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
425 def read_fasta(filepath):
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
426 accessions = []
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
427 with open(filepath) as fp:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
428 for id, peptide in get_fasta_entries(fp):
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
429 accessions.append(getFastaAccession(id))
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
430 return accessions
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
431
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
432 def read_mzid(fp):
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
433 accessions = []
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
434 for event, elem in ET.iterparse(fp):
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
435 if event == 'end':
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
436 if re.search('DBSequence',elem.tag):
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
437 accessions.append(elem.attrib['accession'])
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
438 return accessions
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
439
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
440 def read_pepxml(fp):
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
441 accessions = []
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
442 for event, elem in ET.iterparse(fp):
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
443 if event == 'end':
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
444 if re.search('search_hit',elem.tag):
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
445 accessions.append(elem.get('protein'))
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
446 return accessions
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
447
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
448 def getUniprotSequence(uniprot_id):
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
449 url = "http://www.uniprot.org/uniprot/%s.fasta" % uniprot_id
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
450 print url
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
451 fp = urllib2.urlopen(url)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
452 for id, seq in get_fasta_entries(fp):
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
453 if seq:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
454 return seq
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
455 return ''
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
456
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
457
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
458
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
459
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
460 def getIdMapping(accessions,from_id,to_id,fh=None,idMap=None,numReturn=None,crossReference=None,idMaps=None):
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
461 # print >> sys.stderr, "%s accessions(%d): %s ..." % (to_id,len(accessions),' '.join(accessions[:min(len(accessions),3)]))
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
462 if not accessions:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
463 return
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
464 url = 'http://www.uniprot.org/mapping/'
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
465 if to_id != 'ACC' and from_id != 'ACC':
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
466 crossReference = True
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
467 oldto_id = to_id
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
468 to_id = 'ACC'
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
469 #accessions= getIdMapping(accessions,from_id,'ACC',idMap=idMap,crossReference=False)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
470 #if accessions != None:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
471 # if idMap != None:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
472 # idMap[accessions[0]] = {from_id:['N/A']}
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
473 params = {
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
474 'from': from_id,
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
475 'to': to_id,
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
476 'format':'tab',
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
477 'query': '\n'.join(accessions)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
478 }
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
479 data = urllib.urlencode(params)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
480 request = urllib2.Request(url, data)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
481 contact = "" # Please set your email address here to help us debug in case of problems.
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
482 request.add_header('User-Agent', 'Python %s' % contact)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
483 response = None
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
484 for i in range(3):
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
485 try:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
486 response = urllib2.urlopen(request)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
487 break
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
488 except Exception, e:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
489 warn_err("%s",exit_code=None)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
490 if response:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
491 response.next()
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
492 id3 = []
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
493 for line in response:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
494 # print >> sys.stderr, "idMap: %s" % line
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
495 if fh:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
496 fh.write(line)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
497 if numReturn:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
498 id1,id2 = line.strip().split('\t')
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
499 return from_id
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
500 if idMap != None:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
501 id1,id2 = line.strip().split('\t')
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
502 # print >> sys.stderr, "idMap: %s:%s" % (id1,id2)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
503 if crossReference==True:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
504 id2 = getIdMapping([id2],'ACC',oldto_id,crossReference='return',idMap={})
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
505 print id2
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
506 if crossReference=='return':
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
507 id3.append(id2)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
508 print id3
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
509 else:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
510 # break
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
511 if idMap.get(id1,'nothing') == 'nothing':
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
512 #idMap[id1] = [id2]
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
513 idMap[id1] = {from_id:[id2]}
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
514 else:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
515 id3 = idMap[id1]
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
516 #if id2 not in id3:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
517 #print id3
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
518 if id3.get(from_id,'nothing') == 'nothing':
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
519 if crossReference:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
520 id3[from_id] = id2
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
521 else:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
522 id3[from_id] = [id2]
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
523 else:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
524 id4 = id3[from_id]
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
525 if crossReference:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
526 id4.extend(id2)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
527 else:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
528 id4.append(id2)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
529 else:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
530 id1,id2 = line.strip().split('\t')
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
531 id3[id1] = id2
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
532 try:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
533 return id3
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
534 except:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
535 return
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
536 #idMap[id1] = id3
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
537
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
538 #Parse Command Line
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
539 parser = optparse.OptionParser()
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
540 # input files
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
541 parser.add_option( '-t', '--tabular', dest='tabular', default=None, help='A tabular file that contains a peptide column' )
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
542 parser.add_option( '-c', '--column', dest='column', type='int', default=0, help='The column (zero-based) in the tabular file that contains peptide sequences' )
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
543 parser.add_option( '-f', '--fasta', dest='fasta', default=None, help='A fasta file containing peptide sequences' )
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
544 parser.add_option( '-m', '--mzid', dest='mzid', default=None, help='A mxIdentML file containing peptide sequences' )
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
545 parser.add_option( '-p', '--pepxml', dest='pepxml', default=None, help='A pepxml file containing peptide sequences' )
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
546 # Decoy pattern
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
547 parser.add_option( '-D', '--decoy', dest='decoy', default=None, help='Decoy pattern to be trimmed from IDs , e.g. _REVERSED' )
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
548 # filter patterns
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
549 parser.add_option( '-I', '--include', dest='include_pat', default=None, help='Include pattern to filter IDs' )
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
550 parser.add_option( '-X', '--exclude', dest='exclude_pat', default=None, help='Exclude pattern to filter IDs' )
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
551 # Unipept Flags
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
552 parser.add_option( '-F', '--from', dest='from_id', default='ACC+ID', choices=idDict.keys(), help='From ID type' )
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
553 parser.add_option( '-T', '--to', dest='to_id', default=[], action="append", choices=idDict.keys(), help='To ID type' )
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
554 # output files
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
555 parser.add_option( '-o', '--output', dest='output', default=None, help='Output file path for TAB-separated-values')
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
556 # parser.add_option( '-O', '--format', dest='format', default='tab', choices=['list','tab','json'], help='output format' )
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
557 parser.add_option( '-v', '--version', dest='version', action='store_true', default=False, help='print version and exit' )
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
558 (options, args) = parser.parse_args()
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
559 if options.version:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
560 print >> sys.stdout,"%s" % version
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
561 sys.exit(0)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
562
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
563 accessions = []
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
564 ## Get accessions
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
565 if options.mzid:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
566 accessions += read_mzid(options.mzid)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
567 if options.pepxml:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
568 accessions += read_pepxml(options.pepxml)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
569 if options.tabular:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
570 accessions += read_tabular(options.tabular,options.column)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
571 if options.fasta:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
572 accessions += read_fasta(options.fasta)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
573 if args and len(args) > 0:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
574 for i,accession in enumerate(args):
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
575 accessions.append(accession)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
576 # filter accessions
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
577 if options.decoy:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
578 filtered_accs = [re.sub(options.decoy,'',x) for x in accessions]
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
579 accessions = filtered_accs
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
580 if options.include_pat:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
581 filtered_accs = []
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
582 for acc in accessions:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
583 if re.match(options.include_pat,acc):
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
584 filtered_accs.append(acc)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
585 accessions = filtered_accs
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
586 if options.exclude_pat:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
587 filtered_accs = []
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
588 for acc in accessions:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
589 if not re.match(options.exclude_pat,acc):
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
590 filtered_accs.append(acc)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
591 accessions = filtered_accs
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
592 if len(accessions) < 1:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
593 warn_err("No accessions input!",exit_code=1)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
594 if options.output != None:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
595 try:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
596 outputPath = os.path.abspath(options.output)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
597 outputFile = open(outputPath, 'w')
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
598 except Exception, e:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
599 print >> sys.stderr, "failed: %s" % e
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
600 exit(3)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
601 else:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
602 outputFile = sys.stdout
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
603
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
604
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
605 # Removes duplicates in accessions
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
606 seen = set()
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
607 seen_add = seen.add
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
608 accessions = [x for x in accessions if not (x in seen or seen_add(x))]
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
609 # Sorts accessions to inferred ID types i+n a dictionary
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
610 id_dict = {}
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
611 matchType = []
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
612 for header in accessions:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
613 id , id_types = getAccession(header,matchType)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
614 addAccession(id_dict,id_types,id)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
615 #print id_dict
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
616 #print id_dict
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
617 idMaps = dict() # {to_id,idMap}
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
618 #print matchType
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
619 #print id_dict.items()
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
620 for to_id in options.to_id:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
621 idMap = dict()
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
622 idMaps[to_id] = idMap
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
623 for (from_id,ids) in id_dict.items():
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
624 # limit the requests to 500 at a time
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
625 idx = range(0,len(ids),500)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
626 idx.append(len(ids))
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
627 for i in range(len(idx)-1):
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
628 getIdMapping(ids[idx[i]:idx[i+1]],from_id,to_id,idMap=idMap,idMaps=idMaps)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
629 #Write output
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
630 #Output Table Header
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
631 outputFile.write("\n#%-17s" % (options.from_id))
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
632 for t in options.to_id:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
633 outputFile.write("%-18s" % t)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
634 outputFile.write("\n" + ("=" * 18) + ("=" * 18 * len(options.to_id)) + "\n")
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
635
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
636 # Create an output-friendly matrix
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
637 idArray = [[[] for x in range(len(options.to_id))] for x in range(len(accessions))]
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
638 for a, acc in enumerate(accessions):
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
639 idLength = 0
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
640 for i, to_id in enumerate(options.to_id): # [[ids],[ids]]
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
641 idArrayColumn = []
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
642 idPairs = idMaps[to_id][acc] #{from_id:[IDs]} -> [from_id1,from_id2,from_id3]
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
643 for from_id in idPairs:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
644 ids = idPairs[from_id]
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
645 for id_ in ids:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
646 idArrayColumn.append("%s[%s]" % (id_,from_id))
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
647 if idLength < len(idArrayColumn):
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
648 idLength = len(idArrayColumn)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
649 idArray[a][i].extend(idArrayColumn)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
650 for y in range(idLength):
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
651 outputFile.write("%-18s" % acc)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
652 for x in range(len(options.to_id)):
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
653 try:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
654 outputFile.write("%-18s" % idArray[a][x][y])
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
655 except:
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
656 outputFile.write(" " * 18)
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
657 outputFile.write("\n")
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
658 # Output Matrix
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
659
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
660
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
661
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
662 #print idMaps
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
663 # python uniprot_id_mapping.py -T ACC -T PDB_ID -T ENSEMBL_PRO_ID -T ENSEMBL_TRS_ID -t test-data/old-inputs/var.tsv
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
664 stop = timeit.default_timer()
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
665 outputFile.write("%s %s %-s\n\n" % ("run time: ", stop - start, "seconds"))
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
666
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
667 if __name__ == "__main__" : __main__()
6651ac4651f0 Uploaded
rsajulga
parents:
diff changeset
668