1 """
2 Simple WhatIf/WhatCheck Summary parser
3 """
4
5 import re
6 import os
7 import shutil
8
9 from csb.io import Shell
10 from csb.io import TempFolder
11
13 """
14 Simple WhatIf/WhatCheck Summary parser
15 """
16
17 - def __init__(self, binary='DO_WHATCHECK.COM'):
19
21 """
22 @param fn: whatif pdbout.txt file to parse
23 @type fn: str
24
25 @return: A dict containing some of the WhatCheck results
26 @rtype: a dict
27 """
28 f_handler = open(os.path.expanduser(fn))
29 text = f_handler.read()
30
31 info = dict()
32 re_ramachandran = re.compile('Ramachandran\s*Z-score\s*:\s*([0-9.Ee-]+)')
33 re_1st = re.compile('1st\s*generation\s*packing\s*quality\s*:\s*([0-9.Ee-]+)')
34 re_2nd = re.compile('2nd\s*generation\s*packing\s*quality\s*:\s*([0-9.Ee-]+)')
35 re_backbone = re.compile('Backbone\s*conformation\s*Z-score\s*:\s*([0-9.Ee-]+)')
36 re_rotamer = re.compile('chi-1\S*chi-2\s*rotamer\s*normality\s*:\s*([0-9.Ee-]+)')
37
38
39 info['rama_z_score'] = float(re_ramachandran.search(text).groups(0)[0])
40 info['bb_z_score'] = float(re_backbone.search(text).groups(0)[0])
41 info['1st_packing_z_score'] = float(re_1st.search(text).groups(0)[0])
42 info['2nd_packing_z_score'] = float(re_2nd.search(text).groups(0)[0])
43 info['rotamer_score'] = float(re_rotamer.search(text).groups(0)[0])
44
45 f_handler.close()
46 return info
47
48 parse = parse_summary
49
50
51 - def run(self, pdb_file):
52 """
53 Runs WhatCheck for the given pdbfile and parses the output.
54 Will fail if the WhatCheck binary is not in the path.
55
56 @param pdb_file: file to parse
57 @return: dict of parsed values
58 """
59 wd = os.getcwd()
60 base = os.path.basename(pdb_file)
61
62 with TempFolder() as tmp:
63 shutil.copy(os.path.expanduser(pdb_file), tmp.name)
64 os.chdir(tmp.name)
65 Shell.run('{0} {1}'.format(self.binary,
66 os.path.join(tmp.name, base)))
67 out = self.parse_summary(os.path.join(tmp.name, 'pdbout.txt'))
68 os.chdir(wd)
69
70 return out
71