1
2
3
4
5
6
7
8 import sys
9 from re import match
10
11 from common_ops import common_operations
12
13
14 -class farrow(common_operations):
16 """The model-free analysis of Farrow.
17
18 Farrow's method for model-free analysis. (Farrow et al., 1994)
19 """
20 self.mf = mf
21
22
24 "Check the 95% confidence limits and if the parameter is greater than its error."
25
26 data = self.mf.data.data
27 relax_data = self.mf.data.relax_data
28
29 for res in range(len(relax_data[0])):
30 for model in self.mf.data.runs:
31
32 fail = 0
33 for i in range(self.mf.data.num_ri):
34 label_fit = self.mf.data.frq_label[self.mf.data.remap_table[i]] + "_" + self.mf.data.data_types[i] + "_fit"
35 diff = self.mf.data.relax_data[i][res][2] - self.mf.data.data[model][res][label_fit]
36 if diff < 0:
37 diff = -diff
38 limit = 1.96 * float(relax_data[i][res][3])
39 if diff > limit:
40 fail = fail + 1
41 if fail == 0:
42 data[model][res]['conf_lim'] = 1
43 else:
44 data[model][res]['conf_lim'] = 0
45
46
47 if match('m1', model):
48 params = [ data[model][res]['s2'] ]
49 errs = [ data[model][res]['s2_err'] ]
50 if match('m2', model):
51 params = [ data[model][res]['s2'], data[model][res]['te'] ]
52 errs = [ data[model][res]['s2_err'], data[model][res]['te_err'] ]
53 if match('m3', model):
54 params = [ data[model][res]['s2'], data[model][res]['rex'] ]
55 errs = [ data[model][res]['s2_err'], data[model][res]['rex_err'] ]
56 if match('m4', model):
57 params = [ data[model][res]['s2'], data[model][res]['te'], data[model][res]['rex'] ]
58 errs = [ data[model][res]['s2_err'], data[model][res]['te_err'], data[model][res]['rex_err'] ]
59 if match('m5', model):
60 params = [ data[model][res]['s2f'], data[model][res]['s2s'], data[model][res]['te'] ]
61 errs = [ data[model][res]['s2f_err'], data[model][res]['s2s_err'], data[model][res]['te_err'] ]
62 data[model][res]['param_test'] = self.test_param(params, errs)
63
64
66 "Farrow's model selection."
67
68 data = self.mf.data.data
69 self.farrows_tests()
70
71 if self.mf.debug:
72 self.mf.log.write("\n\n<<< Farrow's model selection >>>\n\n")
73
74 for res in range(len(self.mf.data.relax_data[0])):
75 self.mf.data.results.append({})
76
77 if self.mf.debug:
78 self.mf.log.write('%-22s\n' % ( "Checking res " + data['m1'][res]['res_num'] ))
79
80 self.model = '0'
81
82
83 model_tests = [ 0, 0, 0, 0, 0 ]
84 if data['m1'][res]['conf_lim'] and data['m1'][res]['param_test']:
85 model_tests[0] = 1
86 if data['m2'][res]['conf_lim'] and data['m2'][res]['param_test']:
87 model_tests[1] = 1
88 if data['m3'][res]['conf_lim'] and data['m3'][res]['param_test']:
89 model_tests[2] = 1
90 if data['m4'][res]['conf_lim'] and data['m4'][res]['param_test']:
91 model_tests[3] = 1
92 if data['m5'][res]['conf_lim'] and data['m5'][res]['param_test']:
93 model_tests[4] = 1
94
95
96
97 for i in range(4):
98 if match('0', self.model) and model_tests[i]:
99 self.model = `i + 1`
100 elif not match('0', self.model) and model_tests[i]:
101
102 if data["m"+`i+1`][res]['chi2'] < data["m"+self.model][res]['chi2']:
103 self.model = `i + 1`
104
105
106 if match('0', self.model) and model_tests[4]:
107 self.model = '5'
108
109
110 if not match('0', self.model):
111 self.mf.data.results[res] = self.fill_results(data["m"+self.model][res], model=self.model)
112 else:
113 self.mf.data.results[res] = self.fill_results(data['m1'][res], model='0')
114
115
117 "Print all the data into the 'data_all' file."
118
119 file = open('data_all', 'w')
120
121 sys.stdout.write("[")
122 for res in range(len(self.mf.data.results)):
123 sys.stdout.write("-")
124 file.write("\n\n<<< Residue " + self.mf.data.results[res]['res_num'])
125 file.write(", Model " + self.mf.data.results[res]['model'] + " >>>\n")
126 file.write('%-20s' % '')
127 file.write('%-19s' % 'Model 1')
128 file.write('%-19s' % 'Model 2')
129 file.write('%-19s' % 'Model 3')
130 file.write('%-19s' % 'Model 4')
131 file.write('%-19s' % 'Model 5')
132
133
134 file.write('\n%-20s' % 'S2')
135 for model in self.mf.data.runs:
136 file.write('%9.3f' % self.mf.data.data[model][res]['s2'])
137 file.write('%1s' % '±')
138 file.write('%-9.3f' % self.mf.data.data[model][res]['s2_err'])
139
140
141 file.write('\n%-20s' % 'S2f')
142 for model in self.mf.data.runs:
143 file.write('%9.3f' % self.mf.data.data[model][res]['s2f'])
144 file.write('%1s' % '±')
145 file.write('%-9.3f' % self.mf.data.data[model][res]['s2f_err'])
146
147
148 file.write('\n%-20s' % 'S2s')
149 for model in self.mf.data.runs:
150 file.write('%9.3f' % self.mf.data.data[model][res]['s2s'])
151 file.write('%1s' % '±')
152 file.write('%-9.3f' % self.mf.data.data[model][res]['s2s_err'])
153
154
155 file.write('\n%-20s' % 'te')
156 for model in self.mf.data.runs:
157 file.write('%9.2f' % self.mf.data.data[model][res]['te'])
158 file.write('%1s' % '±')
159 file.write('%-9.2f' % self.mf.data.data[model][res]['te_err'])
160
161
162 file.write('\n%-20s' % 'Rex')
163 for model in self.mf.data.runs:
164 file.write('%9.3f' % self.mf.data.data[model][res]['rex'])
165 file.write('%1s' % '±')
166 file.write('%-9.3f' % self.mf.data.data[model][res]['rex_err'])
167
168
169 file.write('\n%-20s' % 'Chi2')
170 for model in self.mf.data.runs:
171 file.write('%-19.3f' % self.mf.data.data[model][res]['chi2'])
172
173
174 file.write('\n%-20s' % '95% conf limits')
175 for model in self.mf.data.runs:
176 file.write('%-19i' % self.mf.data.data[model][res]['conf_lim'])
177
178
179 file.write('\n%-20s' % 'params > errs')
180 for model in self.mf.data.runs:
181 file.write('%-19i' % self.mf.data.data[model][res]['param_test'])
182
183
184 for i in range(self.mf.data.num_ri):
185 file.write('\n%-20s' % (self.mf.data.frq_label[self.mf.data.remap_table[i]] + " " + self.mf.data.data_types[i]))
186 for model in self.mf.data.runs:
187 label_fit = self.mf.data.frq_label[self.mf.data.remap_table[i]] + "_" + self.mf.data.data_types[i] + "_fit"
188 file.write('%9.3f' % self.mf.data.relax_data[i][res][2])
189 file.write('%1s' % "|")
190 file.write('%-9.3f' % self.mf.data.data[model][res][label_fit])
191 file.write('\n %-20s' % "diff ± 95%")
192 for model in self.mf.data.runs:
193 label_fit = self.mf.data.frq_label[self.mf.data.remap_table[i]] + "_" + self.mf.data.data_types[i] + "_fit"
194 diff = self.mf.data.relax_data[i][res][2] - self.mf.data.data[model][res][label_fit]
195 if diff < 0:
196 diff = -diff
197 file.write('%9.3f' % diff)
198 file.write('%1s' % '±')
199 file.write('%-9.3f' % (1.96 * float(self.mf.data.relax_data[i][res][3])))
200
201
202 file.write('\n')
203 sys.stdout.write("]\n")
204 file.close()
205