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