1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 from math import pi
25 from os import sep
26 from tempfile import mkdtemp
27
28
29 from data_store import Relax_data_store; ds = Relax_data_store()
30 import dep_check
31 from pipe_control import pipes
32 from pipe_control.mol_res_spin import return_spin
33 from lib.errors import RelaxError
34 from lib.io import test_binary
35 from status import Status; status = Status()
36 from test_suite.system_tests.base_classes import SystemTestCase
37
38
40 """Class for testing various aspects specific to model-free analysis using the program 'Modelfree4'."""
41
42 - def __init__(self, methodName='runTest'):
43 """Skip the tests if the subprocess module is not available (Python 2.3 and earlier).
44
45 @keyword methodName: The name of the test.
46 @type methodName: str
47 """
48
49
50 super(Palmer, self).__init__(methodName)
51
52
53 if not dep_check.subprocess_module:
54
55 status.skipped_tests.append([methodName, 'subprocess', self._skip_type])
56
57
58 try:
59 test_binary('modelfree4')
60 except:
61 status.skipped_tests.append([methodName, "Art Palmer's Modelfree4 software", self._skip_type])
62
63
65 """Set up for all the functional tests."""
66
67
68 ds.tmpdir = mkdtemp()
69
70
72 """Test a complete model-free analysis using the program 'Modelfree4'."""
73
74
75 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'palmer.py')
76
77
78 spin = return_spin(spin_id=':0@N', pipe='m2')
79 if spin.te == 1.951*1e-12:
80 binary = 'linux-i386-gcc'
81 else:
82 binary = 'linux-i386-pgf'
83 spin = return_spin(spin_id=':-2@N', pipe='m1')
84 if spin.chi2 == 36.62:
85 binary = 'mac-i386'
86 if not binary:
87 raise RelaxError("The Modelfree4 binary cannot be identified, therefore the parameters cannot be meaningfully checked.")
88 print("\nDetected the '%s' Modelfree4 binary." % binary)
89
90
91 models = ['m1', 'm2', 'm3']
92 params = [['s2'], ['s2', 'te'], ['s2', 'rex']]
93 spin_names = [':-2@N', ':-1@N', ':0@N']
94 s2 = [[0.869, 0.732, None], [0.869, 0.730, None], [0.715, 0.643, None]]
95 if binary == 'linux-i386-gcc':
96 te = [[None, None, None], [0.0, 1.951, None], [None, None, None]]
97 else:
98 te = [[None, None, None], [0.0, 1.952, None], [None, None, None]]
99 rex = [[None, None, None], [None, None, None], [4.308, 4.278, None]]
100 chi2 = [[36.6223, 20.3954, None], [36.6223, 20.3299, None], [1.9763, 0.6307, None]]
101 if binary == 'mac-i386':
102 chi2 = [[36.62, 20.40, None], [36.62, 20.33, None], [1.976, 0.6307, None]]
103 for model_index in range(3):
104 print("Model " + repr(models[model_index]))
105 for spin_index in range(3):
106 print("Spin " + repr(spin_names[spin_index]))
107
108
109 spin = return_spin(spin_id=spin_names[spin_index], pipe=models[model_index])
110
111
112 if te[model_index][spin_index]:
113 te[model_index][spin_index] = te[model_index][spin_index] * 1e-12
114 if rex[model_index][spin_index]:
115 rex[model_index][spin_index] = rex[model_index][spin_index] / (2.0 * pi * cdp.spectrometer_frq[cdp.ri_ids[0]])**2
116
117
118 self.assertEqual(spin.model, models[model_index])
119 self.assertEqual(spin.params, params[model_index])
120 self.assertEqual(spin.s2, s2[model_index][spin_index])
121 self.assertEqual(spin.s2f, None)
122 self.assertEqual(spin.s2s, None)
123 if te[model_index][spin_index] == None:
124 self.assertEqual(spin.te, te[model_index][spin_index])
125 else:
126 self.assertAlmostEqual(spin.te, te[model_index][spin_index])
127 self.assertEqual(spin.tf, None)
128 self.assertEqual(spin.ts, None)
129 self.assertEqual(spin.rex, rex[model_index][spin_index])
130 self.assertEqual(spin.chi2, chi2[model_index][spin_index])
131
132
133 models = ['m3', 'm3']
134 params = [['s2', 'rex'], ['s2', 'rex']]
135 s2 = [0.844, 0.760]
136 te = [None, None]
137 rex = [0.005, 0.404]
138 chi2 = [1.7966, 0.7389]
139 if binary == 'mac-i386':
140 chi2 = [1.796, 0.7392]
141 for spin_index in range(3):
142
143 spin = return_spin(spin_id=spin_names[spin_index], pipe='aic')
144
145
146 if not spin.select:
147 continue
148
149
150 if te[spin_index]:
151 te[spin_index] = te[spin_index] * 1e-12
152 if rex[spin_index]:
153 rex[spin_index] = rex[spin_index] / (2.0 * pi * cdp.spectrometer_frq[cdp.ri_ids[0]])**2
154
155
156 self.assertEqual(spin.model, models[spin_index])
157 self.assertEqual(spin.params, params[spin_index])
158 self.assertAlmostEqual(spin.s2, s2[spin_index])
159 self.assertEqual(spin.s2f, None)
160 self.assertEqual(spin.s2s, None)
161 if te[spin_index]:
162 self.assertAlmostEqual(spin.te, te[spin_index])
163 else:
164 self.assertEqual(spin.te, None)
165 self.assertEqual(spin.tf, None)
166 self.assertEqual(spin.ts, None)
167 self.assertAlmostEqual(spin.rex, rex[spin_index])
168 self.assertEqual(spin.chi2, chi2[spin_index])
169
170
171 final_pipe = pipes.get_pipe('aic')
172 if binary == 'mac-i386':
173 self.assertAlmostEqual(final_pipe.chi2, 2.5355)
174 self.assertAlmostEqual(final_pipe.diff_tensor.tm, 12.051)
175 else:
176 self.assertAlmostEqual(final_pipe.chi2, 2.5356)
177 self.assertAlmostEqual(final_pipe.diff_tensor.tm, 12.045)
178
179
181 """Test a complete model-free analysis using 'Modelfree4' with the OMP relaxation data, a PDB file, and a spheroid tensor."""
182
183
184 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'palmer_omp.py')
185
186
187 spin = return_spin(spin_id=':9@N', pipe='m2')
188 if spin.s2 == 0.855:
189 raise RelaxError("You are using an old, buggy Modelfree4 version! You must upgrade to version 4.20 or later.")
190
191
192 spin = return_spin(spin_id=':9@N', pipe='aic')
193 binary = None
194 if spin.te * 1e12 == 52.195:
195 binary = 'linux-i386-gcc'
196 elif spin.te * 1e12 == 52.197:
197 binary = 'linux-i386-pgf'
198 elif spin.te * 1e12 == 52.194:
199 binary = 'linux-x86_64-gcc'
200 elif spin.te * 1e12 == 52.199:
201 binary = 'linux-x86_64-gcc_2024'
202 spin = return_spin(spin_id=':9@N', pipe='m1')
203 if binary == None and spin.chi2 == 143.7:
204 binary = 'mac-i386'
205 if not binary:
206 raise RelaxError("The Modelfree4 binary cannot be identified, therefore the parameters cannot be meaningfully checked.")
207 print("\nDetected the '%s' Modelfree4 binary." % binary)
208
209
210 models = ['m1', 'm2', 'm3']
211 params = [['s2'], ['s2', 'te'], ['s2', 'rex']]
212 spin_names = [':9@N', ':10@N', ':11@N']
213 s2 = [[0.822, 0.799, 0.823], [0.788, 0.777, 0.812], [0.822, 0.799, 0.823]]
214 te = [[None, None, None], [61.506, 36.087, 20.039], [None, None, None]]
215 if binary in ['mac-i386', 'linux-x86_64-gcc', 'linux-x86_64-gcc_2024']:
216 te = [[None, None, None], [61.504, 36.087, 20.039], [None, None, None]]
217 rex = [[None, None, None], [None, None, None], [0.0, 0.0, 0.0]]
218 chi2 = [[143.6773, 105.1767, 61.6684], [40.9055, 57.1562, 48.4927], [143.6773, 105.1767, 61.6684]]
219 if binary in ['mac-i386', 'linux-x86_64-gcc', 'linux-x86_64-gcc_2024']:
220 chi2 = [[143.7, 105.2, 61.67], [40.91, 57.16, 48.49], [143.7, 105.2, 61.67]]
221
222
223 for model_index in range(3):
224 print("Model " + repr(models[model_index]))
225 for spin_index in range(3):
226 print("Spin " + repr(spin_names[spin_index]))
227
228
229 spin = return_spin(spin_id=spin_names[spin_index], pipe=models[model_index])
230
231
232 if rex[model_index][spin_index]:
233 rex[model_index][spin_index] = rex[model_index][spin_index] / (2.0 * pi * cdp.spectrometer_frq[cdp.ri_ids[0]])**2
234
235
236 self.assertEqual(spin.model, models[model_index])
237 self.assertEqual(spin.params, params[model_index])
238 self.assertAlmostEqual(spin.s2, s2[model_index][spin_index])
239 self.assertEqual(spin.s2f, None)
240 self.assertEqual(spin.s2s, None)
241 if te[model_index][spin_index]:
242 self.assertAlmostEqual(spin.te * 1e12, te[model_index][spin_index])
243 self.assertEqual(spin.tf, None)
244 self.assertEqual(spin.ts, None)
245 self.assertEqual(spin.rex, rex[model_index][spin_index])
246 self.assertEqual(spin.chi2, chi2[model_index][spin_index])
247
248
249 models = ['m2', 'm2', 'm2']
250 params = [['s2', 'te'], ['s2', 'te'], ['s2', 'te']]
251 s2 = [0.755, 0.761, 0.787]
252 if binary == 'linux-i386-gcc':
253 te = [52.195, 29.356, 12.678]
254 elif binary == 'linux-i386-pgf':
255 te = [52.197, 29.361, 12.677]
256 elif binary == 'mac-i386':
257 te = [52.197, 29.357, 12.676]
258 elif binary == 'linux-x86_64-gcc':
259 te = [52.194, 29.351, 12.673]
260 elif binary == 'linux-x86_64-gcc_2024':
261 te = [52.199, 29.357, 12.677]
262 chi2 = [7.254, 8.0437, 0.5327]
263 if binary in ['mac-i386', 'linux-x86_64-gcc', 'linux-x86_64-gcc_2024']:
264 chi2 = [7.254, 8.044, 0.5327]
265
266
267 for spin_index in range(3):
268
269 spin = return_spin(spin_id=spin_names[spin_index], pipe='aic')
270
271
272 self.assertEqual(spin.model, models[spin_index])
273 self.assertEqual(spin.params, params[spin_index])
274 self.assertAlmostEqual(spin.s2, s2[spin_index])
275 self.assertEqual(spin.s2f, None)
276 self.assertEqual(spin.s2s, None)
277 if te[spin_index]:
278 self.assertAlmostEqual(spin.te * 1e12, te[spin_index])
279 self.assertEqual(spin.tf, None)
280 self.assertEqual(spin.ts, None)
281 self.assertEqual(spin.rex, None)
282 self.assertAlmostEqual(spin.chi2, chi2[spin_index])
283
284
285 final_pipe = pipes.get_pipe('aic')
286 if binary == 'linux-i386-gcc':
287 self.assertEqual(final_pipe.chi2, 15.8304)
288 self.assertAlmostEqual(final_pipe.diff_tensor.tm, 8.443)
289 self.assertAlmostEqual(final_pipe.diff_tensor.Dratio, 1.053)
290 self.assertAlmostEqual(final_pipe.diff_tensor.theta * 360 / 2.0 / pi, 68.592)
291 self.assertAlmostEqual(final_pipe.diff_tensor.phi * 360 / 2.0 / pi, 73.756)
292 elif binary == 'linux-i386-pgf':
293 self.assertEqual(final_pipe.chi2, 15.8304)
294 self.assertAlmostEqual(final_pipe.diff_tensor.tm, 8.443)
295 self.assertAlmostEqual(final_pipe.diff_tensor.Dratio, 1.053)
296 self.assertAlmostEqual(final_pipe.diff_tensor.theta * 360 / 2.0 / pi, 68.864)
297 self.assertAlmostEqual(final_pipe.diff_tensor.phi * 360 / 2.0 / pi, 73.913)
298 elif binary == 'mac-i386':
299 self.assertEqual(final_pipe.chi2, 15.8304)
300 self.assertAlmostEqual(final_pipe.diff_tensor.tm, 8.459)
301 self.assertAlmostEqual(final_pipe.diff_tensor.Dratio, 1.049)
302 self.assertAlmostEqual(final_pipe.diff_tensor.theta * 360 / 2.0 / pi, 64.611)
303 self.assertAlmostEqual(final_pipe.diff_tensor.phi * 360 / 2.0 / pi, 79.281)
304 elif binary == 'linux-x86_64-gcc':
305 self.assertEqual(final_pipe.chi2, 15.8308)
306 self.assertAlmostEqual(final_pipe.diff_tensor.tm, 8.394)
307 self.assertAlmostEqual(final_pipe.diff_tensor.Dratio, 1.073)
308 self.assertAlmostEqual(final_pipe.diff_tensor.theta * 360 / 2.0 / pi, 77.152)
309 self.assertAlmostEqual(final_pipe.diff_tensor.phi * 360 / 2.0 / pi, 63.848)
310