1
2
3
4
5
6 import os.path
7 import Bio.PDB.mmCIF.MMCIFlex
8 from UserDict import UserDict
9
10 __doc__="Turn an mmCIF file into a dictionary."
11
12
14
15 NAME=1
16 LOOP=2
17 DATA=3
18 SEMICOLONS=4
19 DOUBLEQUOTED=5
20 QUOTED=6
21 SIMPLE=7
22
33
35
36 NAME=self.NAME
37 LOOP=self.LOOP
38 DATA=self.DATA
39 SEMICOLONS=self.SEMICOLONS
40 DOUBLEQUOTED=self.DOUBLEQUOTED
41 QUOTED=self.QUOTED
42 SIMPLE=self.SIMPLE
43 get_token=Bio.PDB.mmCIF.MMCIFlex.get_token
44
45 loop_flag=0
46
47 temp_list=[]
48
49 current_name=None
50
51 token, value=get_token()
52
53 mmcif_dict=self.data
54
55 while token:
56 if token==NAME:
57 if loop_flag:
58
59 while token==NAME:
60
61 new_list=mmcif_dict[value]=[]
62 temp_list.append(new_list)
63 token, value=get_token()
64
65 loop_flag=0
66
67 data_counter=0
68
69 pos=0
70 nr_fields=len(temp_list)
71
72 while token>3:
73 pos=data_counter%nr_fields
74 data_counter=data_counter+1
75 temp_list[pos].append(value)
76 token, value=get_token()
77
78 if pos!=nr_fields-1:
79 warnings.warn("ERROR: broken name-data pair "
80 "(data missing)!", RuntimeWarning)
81
82
83
84 else:
85
86
87 next_token, data=get_token()
88
89 mmcif_dict[value]=data
90 if next_token<4:
91 warnings.warn("ERROR: broken name-data pair "
92 "(name-non data pair)!", RuntimeWarning)
93
94 else:
95
96 token=None
97 elif token==LOOP:
98 loop_flag=1
99 temp_list=[]
100
101 token=None
102 elif token==DATA:
103 mmcif_dict[value[0:5]]=value[5:]
104 token=None
105 else:
106
107 warnings.warn("ERROR: broken name-data pair "
108 "(missing name)!\n%s %s" % (token, value),
109 RuntimeWarning)
110 mmcif_dict[None].append(value)
111
112 token=None
113 if token==None:
114 token, value=get_token()
115
116
119
120
121 if __name__=="__main__":
122
123 import sys
124
125 if len(sys.argv)!=2:
126 print "Usage: python MMCIF2Dict filename."
127
128 filename=sys.argv[1]
129
130 mmcif_dict=MMCIF2Dict(filename)
131
132 input=""
133 print "Now type a key ('q' to end, 'k' for a list of all keys):"
134 while(input!="q"):
135 input=raw_input("MMCIF dictionary key ==> ")
136 if input=="q":
137 sys.exit()
138 if input=="k":
139 for key in mmcif_dict.keys():
140 print key
141 continue
142 try:
143 value=mmcif_dict[input]
144 if type(value)==type([]):
145 for item in value:
146 print item
147 else:
148 print value
149 except KeyError:
150 print "No such key found."
151