1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 from re import match
24
25
28 """Class containing functions for relaxation data."""
29
30 self.relax = relax
31
32
34 """
35 Relaxation curve fitting data type string matching patterns
36 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
37
38 ____________________________________________________________________________________________
39 | | | |
40 | Data type | Object name | Patterns |
41 |________________________|______________|__________________________________________________|
42 | | | |
43 | rate | rate | '^[Rr]ate$' |
44 |________________________|______________|__________________________________________________|
45
46 """
47
48
49 if match('^[Rr]ate$', name):
50 return 'rate'
51
52
53 - def read(self, run=None, file=None, dir=None, relax_time=0.0, fit_type=None, format=None, heteronuc=None, proton=None, int_col=None):
54 """Function for reading peak intensity data."""
55
56
57 self.run = run
58 self.relax_time = relax_time
59 self.fit_type = fit_type
60 self.format = format
61 self.heteronuc = heteronuc
62 self.proton = proton
63 self.int_col = int_col
64
65
66 fit_type_list = ['exp', 'inv']
67 if self.fit_type not in fit_type_list:
68 raise RelaxArgNotInListError, ('fit type', self.fit_type, fit_type_list)
69 if self.fit_type == 'exp':
70 print "Two parameter exponential fit."
71 if self.fit_type == 'inv':
72 print "Three parameter inversion recovery fit."
73
74
75 self.relax.generic.intensity.read(run=run, file=file, dir=dir, format=format, heteronuc=heteronuc, proton=proton, int_col=int_col)
76
77
79 """Function for reading the results file."""
80
81
82 self.run = run
83
84
85 header = file_data[0]
86 file_data = file_data[1:]
87
88
89 col = {}
90 for i in xrange(len(header)):
91 if header[i] == 'Num':
92 col['num'] = i
93 elif header[i] == 'Name':
94 col['name'] = i
95 elif header[i] == 'Selected':
96 col['select'] = i
97 elif header[i] == 'Ref_intensity':
98 col['ref_int'] = i
99 elif header[i] == 'Ref_error':
100 col['ref_err'] = i
101 elif header[i] == 'Sat_intensity':
102 col['sat_int'] = i
103 elif header[i] == 'Sat_error':
104 col['sat_err'] = i
105 elif header[i] == 'NOE':
106 col['noe'] = i
107 elif header[i] == 'NOE_error':
108 col['noe_err'] = i
109
110
111 if len(col) < 2:
112 raise RelaxInvalidDataError
113
114
115
116
117
118
119 for i in xrange(len(file_data)):
120
121 try:
122 res_num = int(file_data[i][col['num']])
123 except ValueError:
124 raise RelaxError, "The residue number " + file_data[i][col['num']] + " is not an integer."
125 res_name = file_data[i][col['name']]
126
127
128 self.relax.generic.sequence.add(self.run, res_num, res_name, select=int(file_data[i][col['select']]))
129
130
131
132
133
134
135 for i in xrange(len(file_data)):
136
137 try:
138 res_num = int(file_data[i][col['num']])
139 except ValueError:
140 raise RelaxError, "The residue number " + file_data[i][col['num']] + " is not an integer."
141 res_name = file_data[i][col['name']]
142
143
144 index = None
145 for j in xrange(len(self.relax.data.res[self.run])):
146 if self.relax.data.res[self.run][j].num == res_num and self.relax.data.res[self.run][j].name == res_name:
147 index = j
148 break
149 if index == None:
150 raise RelaxError, "Residue " + `res_num` + " " + res_name + " cannot be found in the sequence."
151
152
153 data = self.relax.data.res[self.run][index]
154
155
156 if not data.select:
157 continue
158
159
160 try:
161 data.ref = float(file_data[i][col['ref_int']])
162 except ValueError:
163 data.ref = None
164
165
166 try:
167 data.ref_err = float(file_data[i][col['ref_err']])
168 except ValueError:
169 data.ref_err = None
170
171
172 try:
173 data.sat = float(file_data[i][col['sat_int']])
174 except ValueError:
175 data.sat = None
176
177
178 try:
179 data.sat_err = float(file_data[i][col['sat_err']])
180 except ValueError:
181 data.sat_err = None
182
183
184 try:
185 data.noe = float(file_data[i][col['noe']])
186 except ValueError:
187 data.noe = None
188
189
190 try:
191 data.noe_err = float(file_data[i][col['noe_err']])
192 except ValueError:
193 data.noe_err = None
194
195
197 """Function for returning the NOE value and error."""
198
199
200 self.run = run
201
202
203 data = self.relax.data.res[run][i]
204
205
206 object_name = self.get_data_name(data_type)
207 if not object_name:
208 raise RelaxError, "The NOE calculation data type " + `data_type` + " does not exist."
209 object_error = object_name + "_err"
210
211
212 value = None
213 if hasattr(data, object_name):
214 value = getattr(data, object_name)
215
216
217 error = None
218 if hasattr(data, object_error):
219 error = getattr(data, object_error)
220
221
222 return value, error
223
224
225 - def set_error(self, run=None, error=0.0, spectrum_type=None, res_num=None, res_name=None):
226 """Function for setting the errors."""
227
228
229 self.run = run
230 self.spectrum_type = spectrum_type
231 self.res_num = res_num
232 self.res_name = res_name
233
234
235 if not run in self.relax.data.run_names:
236 raise RelaxNoRunError, run
237
238
239 if not self.relax.data.res.has_key(run):
240 raise RelaxNoSequenceError, run
241
242
243 if type(res_num) == str:
244 try:
245 compile(res_num)
246 except:
247 raise RelaxRegExpError, ('residue number', res_num)
248
249
250 if res_name:
251 try:
252 compile(res_name)
253 except:
254 raise RelaxRegExpError, ('residue name', res_name)
255
256
257 for i in xrange(len(self.relax.data.res[run])):
258
259 data = self.relax.data.res[self.run][i]
260
261
262 if not data.select:
263 continue
264
265
266 if type(res_num) == int and not data.num == res_num:
267 continue
268 elif type(res_num) == str and not match(res_num, `data.num`):
269 continue
270
271
272 if res_name != None and not match(res_name, data.name):
273 continue
274
275
276 if self.spectrum_type == 'ref':
277 data.ref_err = float(error)
278 elif self.spectrum_type == 'sat':
279 data.sat_err = float(error)
280
281
282 - def write(self, run=None, file=None, dir=None, force=0):
304
305
306 - def write_columnar_line(self, file=None, num=None, name=None, select=None, ref_int=None, ref_err=None, sat_int=None, sat_err=None, noe=None, noe_err=None):
307 """Function for printing a single line of the columnar formatted results."""
308
309
310 file.write("%-4s %-5s " % (num, name))
311
312
313 file.write("%-9s " % select)
314 if not select:
315 file.write("\n")
316 return
317
318
319 file.write("%-25s %-25s " % (ref_int, ref_err))
320 file.write("%-25s %-25s " % (sat_int, sat_err))
321
322
323 file.write("%-25s %-25s " % (noe, noe_err))
324
325
326 file.write("\n")
327
328
330 """Function for printing the results into a file."""
331
332
333 self.run = run
334
335
336 if not self.run in self.relax.data.run_names:
337 raise RelaxNoRunError, self.run
338
339
340 if not self.relax.data.res.has_key(self.run):
341 raise RelaxNoSequenceError, self.run
342
343
344
345
346
347
348
349 self.write_columnar_line(file=file, num='Num', name='Name', select='Selected', ref_int='Ref_intensity', ref_err='Ref_error', sat_int='Sat_intensity', sat_err='Sat_error', noe='NOE', noe_err='NOE_error')
350
351
352
353
354
355
356 for i in xrange(len(self.relax.data.res[self.run])):
357
358 data = self.relax.data.res[self.run][i]
359
360
361 if not data.select:
362 self.write_columnar_line(file=file, num=data.num, name=data.name, select=0)
363 continue
364
365
366 ref_int = None
367 if hasattr(data, 'ref'):
368 ref_int = data.ref
369
370
371 ref_err = None
372 if hasattr(data, 'ref_err'):
373 ref_err = data.ref_err
374
375
376 sat_int = None
377 if hasattr(data, 'sat'):
378 sat_int = data.sat
379
380
381 sat_err = None
382 if hasattr(data, 'sat_err'):
383 sat_err = data.sat_err
384
385
386 noe = None
387 if hasattr(data, 'noe'):
388 noe = data.noe
389
390
391 noe_err = None
392 if hasattr(data, 'noe_err'):
393 noe_err = data.noe_err
394
395
396 self.write_columnar_line(file=file, num=data.num, name=data.name, select=data.select, ref_int=ref_int, ref_err=ref_err, sat_int=sat_int, sat_err=sat_err, noe=noe, noe_err=noe_err)
397