1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 import numpy
25 from os import F_OK, access, sep
26 import wx
27
28
29 from data import Relax_data_store; ds = Relax_data_store()
30 from generic_fns.mol_res_spin import spin_loop
31 from generic_fns.pipes import cdp_name
32 from status import Status; status = Status()
33 from test_suite.gui_tests.base_classes import GuiTestCase
34
35
36 from gui.analyses import auto_model_free
37 from gui.interpreter import Interpreter; interpreter = Interpreter()
38 from gui.string_conv import float_to_gui, str_to_gui
39 from gui.uf_objects import Uf_storage; uf_store = Uf_storage()
40 from gui.wizard import Wiz_window
41
42
43 -class Mf(GuiTestCase):
44 """Class for testing various aspects specific to the model-free auto-analysis."""
45
47 """Test the model-free auto-analysis."""
48
49
50 self.app.gui.analysis.menu_new(None)
51 page = self.app.gui.analysis.new_wizard.wizard.get_page(0)
52 page.select_mf(None)
53 page.analysis_name.SetValue(str_to_gui("Model-free test"))
54 self.app.gui.analysis.new_wizard.wizard._go_next(None)
55 page = self.app.gui.analysis.new_wizard.wizard.get_page(1)
56 self.app.gui.analysis.new_wizard.wizard._go_next(None)
57
58
59 analysis_type, analysis_name, pipe_name, pipe_bundle = self.app.gui.analysis.new_wizard.get_data()
60
61
62 self.app.gui.analysis.new_analysis(analysis_type=analysis_type, analysis_name=analysis_name, pipe_name=pipe_name, pipe_bundle=pipe_bundle)
63
64
65 analysis = self.app.gui.analysis.get_page_from_name("Model-free test")
66
67
68 analysis.field_results_dir.SetValue(str_to_gui(ds.tmpdir))
69
70
71 data_path = status.install_path + sep + 'test_suite' + sep + 'shared_data' + sep + 'model_free' + sep + 'sphere' + sep
72
73
74 analysis._about()
75 analysis.about_dialog.Close()
76
77
78 self.app.gui.show_tree()
79
80
81 self.app.gui.spin_viewer.load_spins_wizard()
82 self.app.gui.spin_viewer.wizard._go_next()
83 page = self.app.gui.spin_viewer.wizard.get_page(1)
84 page.SetValue('file', data_path+'noe.500.out')
85 self.app.gui.spin_viewer.wizard._go_next()
86 self.app.gui.spin_viewer.wizard._go_next()
87
88
89 self.app.gui.spin_viewer.handler_close()
90
91
92 interpreter.flush()
93
94
95 data = [
96 ['noe.500.out', 'noe_500', 'NOE', 500e6],
97 ['r1.500.out', 'r1_500', 'R1', 500e6],
98 ['r2.500.out', 'r2_500', 'R2', 500e6],
99 ['noe.900.out', 'noe_900', 'NOE', 900e6],
100 ['r1.900.out', 'r1_900', 'R1', 900e6],
101 ['r2.900.out', 'r2_900', 'R2', 900e6]
102 ]
103 for i in range(len(data)):
104 self._execute_uf(uf_name='relax_data.read', file=data_path+data[i][0], ri_id=data[i][1], ri_type=data[i][2], frq=data[i][3], mol_name_col=1, res_num_col=2, res_name_col=3, spin_num_col=4, spin_name_col=5, data_col=6, error_col=7)
105
106
107 analysis.value_set_csa()
108 uf_store['value.set'].wizard._ok()
109 interpreter.flush()
110 analysis.value_set_r()
111 uf_store['value.set'].wizard._ok()
112 interpreter.flush()
113 analysis.value_set_heteronuc_type()
114 uf_store['value.set'].wizard._ok()
115 interpreter.flush()
116 analysis.value_set_proton_type()
117 uf_store['value.set'].wizard._ok()
118 interpreter.flush()
119
120
121 analysis.load_unit_vectors()
122
123
124 page = analysis.vect_wizard.get_page(0)
125 page.uf_args['file'].SetValue(str_to_gui(status.install_path + sep + 'test_suite' + sep + 'shared_data' + sep + 'model_free' + sep + 'sphere' + sep + 'sphere.pdb'))
126 analysis.vect_wizard._go_next()
127 interpreter.flush()
128
129
130 analysis.vect_wizard._go_next()
131 interpreter.flush()
132
133
134 analysis.local_tm_model_field.select = [True, True, False, False, False, False, False, False, False, False]
135 analysis.local_tm_model_field.modify()
136
137
138 analysis.mf_model_field.select = [False, True, True, False, False, False, False, False, False, False]
139 analysis.mf_model_field.modify()
140
141
142 analysis.grid_inc.SetValue(3)
143 analysis.data.diff_tensor_grid_inc = {'sphere': 5, 'prolate': 5, 'oblate': 5, 'ellipsoid': 3}
144
145
146 analysis.mc_sim_num.SetValue(2)
147
148
149 analysis.max_iter.control.SetRange(0, 100)
150 analysis.max_iter.SetValue(1)
151
152
153 analysis.mode_win.select_full_analysis()
154 analysis.mode_dialog()
155
156
157 analysis.sync_ds(upload=True)
158 self.assertEqual(analysis.data.save_dir, ds.tmpdir)
159 self.assertEqual(analysis.data.local_tm_models, ['tm0', 'tm1'])
160 self.assertEqual(analysis.data.mf_models, ['m1', 'm2'])
161 self.assertEqual(analysis.data.grid_inc, 3)
162 self.assertEqual(analysis.data.mc_sim_num, 2)
163 self.assertEqual(analysis.data.max_iter, 1)
164 self.assertEqual(analysis.data.diff_tensor_grid_inc['sphere'], 5)
165 self.assertEqual(analysis.data.diff_tensor_grid_inc['prolate'], 5)
166 self.assertEqual(analysis.data.diff_tensor_grid_inc['oblate'], 5)
167 self.assertEqual(analysis.data.diff_tensor_grid_inc['ellipsoid'], 3)
168
169
170 auto_model_free.dauvergne_protocol.dAuvergne_protocol.opt_func_tol = 1e-5
171 auto_model_free.dauvergne_protocol.dAuvergne_protocol.opt_max_iterations = 1000
172
173
174 analysis.execute(wx.CommandEvent(wx.wxEVT_COMMAND_BUTTON_CLICKED, analysis.button_exec_relax.GetId()))
175
176
177 analysis.thread.join()
178
179
180 wx.Yield()
181
182
183 self.check_exceptions()
184
185
186 if status.relax_mode != 'gui':
187 self.assertEqual(self.app.gui.controller.mc_gauge_mf.GetValue(), 100)
188 self.assertEqual(self.app.gui.controller.progress_gauge_mf.GetValue(), 100)
189 self.assertEqual(self.app.gui.controller.main_gauge.GetValue(), 100)
190
191
192 self.assertEqual(cdp.diff_tensor.type, 'sphere')
193 self.assertAlmostEqual(cdp.diff_tensor.tm, 1e-8)
194 self.assertEqual(cdp.diff_tensor.fixed, True)
195
196
197 self.assertAlmostEqual(cdp.chi2, 4e-19)
198
199
200 mol_names = ["sphere_mol1"] * 9
201 res_names = ["GLY"] * 9
202 res_nums = range(1, 10)
203 spin_names = ["N"] * 9
204 spin_nums = numpy.array(range(9)) * 2 + 1
205
206
207 i = 0
208 for spin, mol_name, res_num, res_name in spin_loop(full_info=True):
209
210 self.assertEqual(mol_name, mol_names[i])
211 self.assertEqual(res_name, res_names[i])
212 self.assertEqual(res_num, res_nums[i])
213 self.assertEqual(spin.name, spin_names[i])
214 self.assertEqual(spin.num, spin_nums[i])
215
216
217 self.assertEqual(spin.select, True)
218 self.assertEqual(spin.fixed, False)
219 self.assertEqual(spin.proton_type, '1H')
220 self.assertEqual(spin.heteronuc_type, '15N')
221 self.assertEqual(spin.attached_proton, None)
222 self.assertAlmostEqual(spin.r, 1.02 * 1e-10)
223 self.assertAlmostEqual(spin.csa, -172e-6)
224
225
226 self.assertEqual(spin.model, 'm2')
227 self.assertEqual(spin.equation, 'mf_orig')
228 self.assertEqual(len(spin.params), 2)
229 self.assertEqual(spin.params[0], 's2')
230 self.assertEqual(spin.params[1], 'te')
231 self.assertAlmostEqual(spin.s2, 0.8)
232 self.assertEqual(spin.s2f, None)
233 self.assertEqual(spin.s2s, None)
234 self.assertEqual(spin.local_tm, None)
235 self.assertAlmostEqual(spin.te, 20e-12)
236 self.assertEqual(spin.tf, None)
237 self.assertEqual(spin.ts, None)
238 self.assertEqual(spin.rex, None)
239
240
241 self.assertEqual(spin.chi2, None)
242 self.assertEqual(spin.iter, None)
243 self.assertEqual(spin.f_count, None)
244 self.assertEqual(spin.g_count, None)
245 self.assertEqual(spin.h_count, None)
246 self.assertEqual(spin.warning, None)
247
248
249 i += 1
250