1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 from os import system
24 from re import match
25
26
29 """Operations, functions, etc common to the different model-free analysis methods."""
30
31 self.relax = relax
32
33
35 """Function for determining if the graph is of type xy, xydy, xydx, or xydxdy."""
36
37
38 x_errors = 0
39 y_errors = 0
40
41
42 for i in xrange(len(self.data)):
43
44 if self.x_data_type != 'res' and self.data[i][1] != None:
45 x_errors = 1
46
47
48 if self.data[i][3] != None:
49 y_errors = 1
50
51
52 if self.plot_data == 'value':
53
54 if x_errors and y_errors:
55 self.graph_type = 'xydxdy'
56
57
58 elif y_errors:
59 self.graph_type = 'xydy'
60
61
62 elif x_errors:
63 self.graph_type = 'xydx'
64
65
66 else:
67 self.graph_type = 'xy'
68
69
70 elif self.plot_data == 'error':
71
72 if self.x_data_type == 'res' and y_errors:
73 self.graph_type = 'xy'
74
75
76 elif x_errors and y_errors:
77 self.graph_type = 'xy'
78
79
80 else:
81 raise RelaxError, "When plotting errors, the errors must exist."
82
83
84 else:
85
86 self.graph_type = 'xy'
87
88
90 """Function for getting all the xy data."""
91
92
93 self.data = []
94
95
96 for i in xrange(len(self.relax.data.res[self.run])):
97
98 data = self.relax.data.res[self.run][i]
99
100
101 if type(self.res_num) == int:
102 if not data.num == self.res_num:
103 continue
104 elif type(self.res_num) == str:
105 if not match(self.res_num, `data.num`):
106 continue
107
108
109 if self.res_name != None:
110 if not match(self.res_name, data.name):
111 continue
112
113
114 if self.plot_data == 'sim':
115 points = self.relax.data.sim_number[self.run]
116 else:
117 points = 1
118
119
120 for j in xrange(points):
121
122 res_data = [None, None, None, None]
123
124
125 if self.x_data_type == 'res':
126 res_data[0] = data.num
127
128
129 else:
130
131 if self.plot_data == 'sim':
132 res_data[0], res_data[1] = self.x_return_value(self.run, i, self.x_data_type, sim=j)
133 else:
134 res_data[0], res_data[1] = self.x_return_value(self.run, i, self.x_data_type)
135
136
137 if self.plot_data == 'sim':
138 res_data[2], res_data[3] = self.y_return_value(self.run, i, self.y_data_type, sim=j)
139 else:
140 res_data[2], res_data[3] = self.y_return_value(self.run, i, self.y_data_type)
141
142
143 if res_data[0] == None or res_data[2] == None:
144 continue
145
146
147 if self.x_data_type != 'res':
148 res_data[0] = res_data[0] / self.x_return_conversion_factor(self.x_data_type)
149 if res_data[1]:
150 res_data[1] = res_data[1] / self.x_return_conversion_factor(self.x_data_type)
151
152
153 res_data[2] = res_data[2] / self.y_return_conversion_factor(self.y_data_type)
154 if res_data[3]:
155 res_data[3] = res_data[3] / self.y_return_conversion_factor(self.y_data_type)
156
157
158 self.data.append(res_data)
159
160
161 - def view(self, file=None, dir=None, grace_exe='xmgrace'):
169
170
171 - def write(self, run=None, x_data_type='res', y_data_type=None, res_num=None, res_name=None, plot_data='value', file=None, dir=None, force=0):
172 """Function for writing data to a file."""
173
174
175 self.run = run
176 self.x_data_type = x_data_type
177 self.y_data_type = y_data_type
178 self.res_num = res_num
179 self.res_name = res_name
180 self.plot_data = plot_data
181
182
183 if not self.run in self.relax.data.run_names:
184 raise RelaxNoRunError, self.run
185
186
187 if not self.relax.data.res.has_key(self.run):
188 raise RelaxNoSequenceError, self.run
189
190
191 if type(self.res_num) == str:
192 try:
193 compile(self.res_num)
194 except:
195 raise RelaxRegExpError, ('residue number', self.res_num)
196
197
198 if self.res_name:
199 try:
200 compile(self.res_name)
201 except:
202 raise RelaxRegExpError, ('residue name', self.res_name)
203
204
205 if self.plot_data not in ['value', 'error', 'sim']:
206 raise RelaxError, "The plot data argument " + `self.plot_data` + " must be set to either 'value', 'error', 'sim'."
207
208
209 if self.plot_data == 'sim' and (not hasattr(self.relax.data, 'sim_number') or not self.relax.data.sim_number.has_key(self.run)):
210 raise RelaxNoSimError, self.run
211
212
213 self.file = self.relax.IO.open_write_file(file, dir, force)
214
215
216 function_type = self.relax.data.run_types[self.relax.data.run_names.index(run)]
217
218
219 self.x_return_value = self.y_return_value = self.relax.specific_setup.setup('return_value', function_type)
220 self.x_return_conversion_factor = self.y_return_conversion_factor = self.relax.specific_setup.setup('return_conversion_factor', function_type)
221 self.x_return_units = self.y_return_units = self.relax.specific_setup.setup('return_units', function_type)
222 self.x_return_grace_string = self.y_return_grace_string = self.relax.specific_setup.setup('return_grace_string', function_type)
223
224
225 if self.x_data_type != 'res' and self.relax.generic.minimise.return_data_name(self.x_data_type):
226 self.x_return_value = self.relax.generic.minimise.return_value
227 self.x_return_conversion_factor = self.relax.generic.minimise.return_conversion_factor
228 self.x_return_units = self.relax.generic.minimise.return_units
229 self.x_return_grace_string = self.relax.generic.minimise.return_grace_string
230
231
232 if self.relax.generic.minimise.return_data_name(self.y_data_type):
233 self.y_return_value = self.relax.generic.minimise.return_value
234 self.y_return_conversion_factor = self.relax.generic.minimise.return_conversion_factor
235 self.y_return_units = self.relax.generic.minimise.return_units
236 self.y_return_grace_string = self.relax.generic.minimise.return_grace_string
237
238
239 self.get_data()
240
241
242 self.determine_graph_type()
243
244
245 self.write_header()
246
247
248 self.write_data()
249
250
251 self.file.close()
252
253
255 """Write the data into the grace file."""
256
257
258 for i in xrange(len(self.data)):
259
260 if self.graph_type == 'xy':
261
262 self.file.write("%-30s%-30s\n" % (self.data[i][0], self.data[i][2]))
263
264
265 elif self.graph_type == 'xydy':
266
267 y_error = self.data[i][3]
268 if y_error == None:
269 y_error = 0.0
270
271
272 self.file.write("%-30s%-30s%-30s\n" % (self.data[i][0], self.data[i][2], y_error))
273
274
275 elif self.graph_type == 'xydxdy':
276
277 x_error = self.data[i][1]
278 if x_error == None:
279 x_error = 0.0
280
281
282 y_error = self.data[i][3]
283 if y_error == None:
284 y_error = 0.0
285
286
287 self.file.write("%-30s%-30s%-30s%-30s\n" % (self.data[i][0], self.data[i][2], x_error, y_error))
288
289
290 self.file.write("&\n")
291
292
294 """Write the grace header."""
295
296
297 self.file.write("@with g0\n")
298
299
300 if self.x_data_type == 'res':
301 self.file.write("@ world xmin " + `self.relax.data.res[self.run][0].num - 1` + "\n")
302 self.file.write("@ world xmax " + `self.relax.data.res[self.run][-1].num + 1` + "\n")
303
304
305 if self.x_data_type == 'res':
306 self.file.write("@ xaxis label \"Residue number\"")
307 else:
308
309 units = self.x_return_units(self.x_data_type)
310
311
312 if units:
313 self.file.write("@ xaxis label \"" + self.x_return_grace_string(self.x_data_type) + "\\N (" + units + ")\"\n")
314 else:
315 self.file.write("@ xaxis label \"" + self.x_return_grace_string(self.x_data_type) + "\"\n")
316
317
318 self.file.write("@ xaxis label char size 1.48\n")
319 self.file.write("@ xaxis tick major size 0.75\n")
320 self.file.write("@ xaxis tick major linewidth 0.5\n")
321 self.file.write("@ xaxis tick minor linewidth 0.5\n")
322 self.file.write("@ xaxis tick minor size 0.45\n")
323 self.file.write("@ xaxis ticklabel char size 1.00\n")
324
325
326 units = self.y_return_units(self.y_data_type)
327 if units:
328 self.file.write("@ yaxis label \"" + self.y_return_grace_string(self.y_data_type) + "\\N (" + units + ")\"\n")
329 else:
330 self.file.write("@ yaxis label \"" + self.y_return_grace_string(self.y_data_type) + "\"\n")
331
332
333 self.file.write("@ yaxis label char size 1.48\n")
334 self.file.write("@ yaxis tick major size 0.75\n")
335 self.file.write("@ yaxis tick major linewidth 0.5\n")
336 self.file.write("@ yaxis tick minor linewidth 0.5\n")
337 self.file.write("@ yaxis tick minor size 0.45\n")
338 self.file.write("@ yaxis ticklabel char size 1.00\n")
339
340
341 self.file.write("@ frame linewidth 0.5\n")
342
343
344 self.file.write("@ s0 symbol 9\n")
345 self.file.write("@ s0 symbol size 1.00\n")
346 self.file.write("@ s0 symbol fill pattern 1\n")
347 self.file.write("@ s0 symbol linewidth 0.5\n")
348 self.file.write("@ s0 line linestyle 0\n")
349
350
351 self.file.write("@ s0 errorbar size 0.5\n")
352 self.file.write("@ s0 errorbar linewidth 0.5\n")
353 self.file.write("@ s0 errorbar riser linewidth 0.5\n")
354
355
356 self.file.write("@target G0.S0\n")
357 self.file.write("@type " + self.graph_type + "\n")
358