rev |
line source |
bnagaev@147
|
1 """ Functions to get pdb information from fasta id |
bnagaev@138
|
2 and to generate fasta id from pdb information |
bnagaev@138
|
3 |
bnagaev@138
|
4 pdb information: code, chain, model |
bnagaev@138
|
5 |
bnagaev@138
|
6 TODO: same for local pdb files |
bnagaev@138
|
7 """ |
bnagaev@138
|
8 |
bnagaev@248
|
9 import re |
bnagaev@248
|
10 from Bio.PDB import PDBParser |
bnagaev@248
|
11 |
bnagaev@248
|
12 |
bnagaev@79
|
13 # for pdb-codes |
bnagaev@151
|
14 re1 = re.compile(r"(^|[^a-z0-9])(?P<code>[0-9][0-9a-z]{3})([^a-z0-9](?P<chain>[0-9a-z ]?)(?P<model>[^a-z0-9]([0-9]{1,3}))?)?", re.I) |
bnagaev@79
|
15 |
bnagaev@138
|
16 #~ # for files |
bnagaev@138
|
17 #~ re2 = re.compile(r"(^)([^^]+\.(ent|pdb))([^a-zA-Z0-9]([0-9A-Za-z ]?)([^a-zA-Z0-9]([0-9]{1,3}))?)?$") |
bnagaev@79
|
18 |
bnagaev@138
|
19 def std_id(pdb_id, pdb_chain, pdb_model=None): |
bnagaev@138
|
20 if pdb_model: |
bnagaev@138
|
21 return "%s_%s_%s" % \ |
bnagaev@138
|
22 (pdb_id.lower().strip(), pdb_chain.upper().strip(), pdb_model) |
bnagaev@138
|
23 else: |
bnagaev@138
|
24 return "%s_%s" % \ |
bnagaev@138
|
25 (pdb_id.lower().strip(), pdb_chain.upper().strip()) |
bnagaev@83
|
26 |
bnagaev@138
|
27 def pdb_id_parse(ID): |
bnagaev@139
|
28 match = re1.search(ID) |
bnagaev@138
|
29 if not match: |
bnagaev@138
|
30 return None |
bnagaev@139
|
31 d = match.groupdict() |
bnagaev@139
|
32 if 'chain' not in d or not d['chain']: |
bnagaev@139
|
33 d['chain'] = ' ' |
bnagaev@139
|
34 if 'model' not in d or not d['model']: |
bnagaev@139
|
35 d['model'] = 0 |
bnagaev@139
|
36 return d |
bnagaev@83
|
37 |
bnagaev@156
|
38 |
bnagaev@156
|
39 def get_structure(file, name): |
bnagaev@157
|
40 return PDBParser().get_structure(name, file) |
bnagaev@156
|
41 |
bnagaev@138
|
42 #~ def std_id_parse(ID): |
bnagaev@138
|
43 #~ """ |
bnagaev@138
|
44 #~ Parse standart ID to pdb_code, chain and model |
bnagaev@138
|
45 #~ """ |
bnagaev@138
|
46 #~ if '.ent' in ID.lower() or '.pdb' in ID.lower(): |
bnagaev@138
|
47 #~ # it is file |
bnagaev@138
|
48 #~ parseO = self.re2.search(ID) # files |
bnagaev@138
|
49 #~ else: |
bnagaev@138
|
50 #~ parseO = self.re1.search(ID.lower()) # pdb codes |
bnagaev@138
|
51 #~ if not parseO: |
bnagaev@138
|
52 #~ return None |
bnagaev@138
|
53 #~ parse = parseO.groups() |
bnagaev@138
|
54 #~ if len(parse) < 2: |
bnagaev@138
|
55 #~ return None |
bnagaev@138
|
56 #~ code = parse[1] |
bnagaev@138
|
57 #~ chain = '' |
bnagaev@138
|
58 #~ model = None |
bnagaev@138
|
59 #~ if len(parse) >= 4: |
bnagaev@138
|
60 #~ chain = parse[3] |
bnagaev@138
|
61 #~ if chain: |
bnagaev@138
|
62 #~ chain = chain.upper() |
bnagaev@138
|
63 #~ if len(parse) >= 6: |
bnagaev@138
|
64 #~ if parse[5]: |
bnagaev@138
|
65 #~ model = parse[5] |
bnagaev@138
|
66 #~ return code, chain, model |
bnagaev@83
|
67 |