1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 from math import pi
24 from numpy import array, dot, float64, transpose, zeros
25 from os import sep
26 import sys
27
28
29 from data import Relax_data_store; ds = Relax_data_store()
30 from data.diff_tensor import DiffTensorSimList
31 from generic_fns.mol_res_spin import spin_loop
32 from generic_fns.pipes import get_pipe
33 from generic_fns.reset import reset
34 from maths_fns.coord_transform import spherical_to_cartesian
35 from maths_fns.rotation_matrix import axis_angle_to_R, euler_to_R_zyz, two_vect_to_R
36 from relax_io import delete
37 from status import Status; status = Status()
38 from tempfile import mktemp
39 from test_suite.system_tests.base_classes import SystemTestCase
40
41
43 """Class for testing various aspects specific to the diffusion tensor."""
44
46 """Function for initialising a spherical, spheroidal, and ellipsoidal diffusion tensor."""
47
48
49 status = Status()
50
51
52 self.interpreter.pipe.create('sphere', 'mf')
53 self.interpreter.pipe.create('spheroid', 'mf')
54 self.interpreter.pipe.create('ellipsoid', 'mf')
55
56
57 self.interpreter.pipe.switch('sphere')
58 self.interpreter.structure.read_pdb(file='Ap4Aase_res1-12.pdb', dir=status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures', read_model=1)
59 self.interpreter.sequence.read(file='Ap4Aase.seq', dir=status.install_path + sep+'test_suite'+sep+'shared_data'+sep, res_num_col=1, res_name_col=2)
60 self.interpreter.diffusion_tensor.init(10e-9, fixed=True)
61 self.tmpfile_sphere = mktemp()
62
63
64 self.interpreter.pipe.switch('spheroid')
65 self.interpreter.structure.read_pdb(file='Ap4Aase_res1-12.pdb', dir=status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures', read_model=1)
66 self.interpreter.sequence.read(file='Ap4Aase.seq', dir=status.install_path + sep+'test_suite'+sep+'shared_data'+sep, res_num_col=1, res_name_col=2)
67 self.interpreter.diffusion_tensor.init((5e-09, -10000000., 1.6, 2.7), angle_units='rad', spheroid_type='oblate', fixed=True)
68 self.tmpfile_spheroid = mktemp()
69
70
71 self.interpreter.pipe.switch('ellipsoid')
72 self.interpreter.structure.read_pdb(file='Ap4Aase_res1-12.pdb', dir=status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures', read_model=1)
73 self.interpreter.sequence.read(file='Ap4Aase.seq', dir=status.install_path + sep+'test_suite'+sep+'shared_data'+sep, res_num_col=1, res_name_col=2)
74 self.interpreter.diffusion_tensor.init((9e-8, 5e6, 0.3, 60+360, 290, 100), fixed=False)
75 self.tmpfile_ellipsoid = mktemp()
76
77
78
79 self.interpreter.pipe.switch('sphere')
80 cdp.diff_tensor.set(param='tm', value=10e-11, category='err')
81 cdp.diff_tensor.set_sim_num(5)
82 tm_sim = [8.98e-8, 8.99e-8, 9.00e-7, 9.01e-8, 9.02e-8]
83 for i in range(5):
84 cdp.diff_tensor.set(param='tm', value=tm_sim[i], category='sim', sim_index=i)
85
86
87 cdp.diff_tensor.set(param='tm', value=9.00e-8, category='sim', sim_index=0)
88
89
90
91 self.interpreter.pipe.switch('spheroid')
92
93
94 cdp.diff_tensor.set(param='Da', value=1000000, category='err')
95 cdp.diff_tensor.set(param='theta', value=0.01, category='err')
96 cdp.diff_tensor.set(param='tm', value=1e-11, category='err')
97 cdp.diff_tensor.set(param='phi', value=0.01, category='err')
98
99
100 cdp.diff_tensor.set_sim_num(5)
101 Da_sim = [-12000000., -11000000., -10000000., -9000000., -8000000.]
102 theta_sim = [1.70, 1.65, 1.6, 1.55, 1.50]
103 tm_sim = [5.4e-09, 4.8e-09, 5e-09, 5.4e-09, 5.8e-09]
104 phi_sim = [2.5, 2.6, 2.7, 2.8, 100]
105 for i in range(5):
106 cdp.diff_tensor.set(param='Da', value=Da_sim[i], category='sim', sim_index=i)
107 cdp.diff_tensor.set(param='theta', value=theta_sim[i], category='sim', sim_index=i)
108 cdp.diff_tensor.set(param='tm', value=tm_sim[i], category='sim', sim_index=i)
109 cdp.diff_tensor.set(param='phi', value=phi_sim[i], category='sim', sim_index=i)
110
111
112 cdp.diff_tensor.set(param='tm', value=4.4e-9, category='sim', sim_index=0)
113 cdp.diff_tensor.set(param='phi', value=2.9, category='sim', sim_index=4)
114
115
116
117 self.interpreter.pipe.switch('ellipsoid')
118
119
120 cdp.diff_tensor.set_sim_num(5)
121 Dr_sim = [0.28, 0.29, 0.3, 0.31, 0.32]
122 tm_sim = [8.97e-8, 8.99e-8, 9.00e-8, 9.01e-8, 9.02e-8]
123 Da_sim = [5.02e6, 5.01e6, 5.00e6, 4.99e6, 4.98e6]
124 alpha_sim = [80.0/360*2*pi, 70.0/360*2*pi, 60.0/360*2*pi, 50.0/360*2*pi, 40.0/360*2*pi]
125 beta_sim = [295.0/360*2*pi, 292.5/360*2*pi, 290.0/360*2*pi, 289.5/360*2*pi, 288.0/360*2*pi]
126 gamma_sim = [102.0/360*2*pi, 101.0/360*2*pi, 0, 99.0/360*2*pi, 98.0/360*2*pi]
127 for i in range(5):
128 cdp.diff_tensor.set(param='Dr', value=Dr_sim[i], category='sim', sim_index=i)
129 cdp.diff_tensor.set(param='tm', value=tm_sim[i], category='sim', sim_index=i)
130 cdp.diff_tensor.set(param='Da', value=Da_sim[i], category='sim', sim_index=i)
131 cdp.diff_tensor.set(param='alpha', value=alpha_sim[i], category='sim', sim_index=i)
132 cdp.diff_tensor.set(param='beta', value=beta_sim[i], category='sim', sim_index=i)
133 cdp.diff_tensor.set(param='gamma', value=gamma_sim[i], category='sim', sim_index=i)
134
135
136 cdp.diff_tensor.set(param='tm', value=8.98e-8, category='sim', sim_index=0)
137 cdp.diff_tensor.set(param='gamma', value=100.0/360*2*pi, category='sim', sim_index=2)
138
139
141 """Reset the relax data storage object."""
142
143
144 reset()
145
146
147 delete(self.tmpfile_sphere, fail=False)
148 delete(self.tmpfile_spheroid, fail=False)
149 delete(self.tmpfile_ellipsoid, fail=False)
150
151
152 - def check_ellipsoid(self, Dx, Dy, Dz, Diso, Da, Dr, alpha, beta, gamma, D, D_prime, R):
153 """Check if the ellipsoid in the cdp has the same values as given."""
154
155
156 print("The relax data store diffusion tensor:\n\n%s\n\n" % cdp.diff_tensor)
157 print("\nThe real tensor:\n%s" % D)
158 print("\nThe tensor in relax:\n%s" % cdp.diff_tensor.tensor)
159 print("\nThe real tensor (in eig frame):\n%s" % D_prime)
160 print("\nThe tensor in relax (in eig frame):\n%s" % cdp.diff_tensor.tensor_diag)
161
162
163 self.assertAlmostEqual(Dx * 1e-7, cdp.diff_tensor.Dx * 1e-7)
164 self.assertAlmostEqual(Dy * 1e-7, cdp.diff_tensor.Dy * 1e-7)
165 self.assertAlmostEqual(Dz * 1e-7, cdp.diff_tensor.Dz * 1e-7)
166 self.assertAlmostEqual(Diso * 1e-7, cdp.diff_tensor.Diso * 1e-7)
167 self.assertAlmostEqual(Da * 1e-7, cdp.diff_tensor.Da * 1e-7)
168 self.assertAlmostEqual(Dr * 1e-7, cdp.diff_tensor.Dr * 1e-7)
169 self.assertAlmostEqual(alpha, cdp.diff_tensor.alpha)
170 self.assertAlmostEqual(beta, cdp.diff_tensor.beta)
171 self.assertAlmostEqual(gamma, cdp.diff_tensor.gamma)
172
173
174 for i in range(3):
175 for j in range(3):
176 self.assertAlmostEqual(cdp.diff_tensor.tensor[i, j] * 1e-7, D[i, j] * 1e-7)
177 self.assertAlmostEqual(cdp.diff_tensor.tensor_diag[i, j] * 1e-7, D_prime[i, j] * 1e-7)
178 self.assertAlmostEqual(cdp.diff_tensor.rotation[i, j], R[i, j])
179
180
181 - def check_spheroid(self, tm, Dpar, Dper, Diso, Da, Dratio, theta, phi, D, D_prime, R, spheroid_type=None):
182 """Check if the spheroid in the cdp has the same values as given."""
183
184
185 print("The relax data store diffusion tensor:\n\n%s\n\n" % cdp.diff_tensor)
186 print("\nThe real tensor:\n%s" % D)
187 print("\nThe tensor in relax:\n%s" % cdp.diff_tensor.tensor)
188 print("\nThe real tensor (in eig frame):\n%s" % D_prime)
189 print("\nThe tensor in relax (in eig frame):\n%s" % cdp.diff_tensor.tensor_diag)
190 print("\nThe real rotation matrix:\n%s" % R)
191 print("\nThe rotation matrix in relax:\n%s" % cdp.diff_tensor.rotation)
192
193
194 self.assertAlmostEqual(tm * 1e8, cdp.diff_tensor.tm * 1e8)
195 self.assertAlmostEqual(Dpar * 1e-7, cdp.diff_tensor.Dpar * 1e-7)
196 self.assertAlmostEqual(Dper * 1e-7, cdp.diff_tensor.Dper * 1e-7)
197 self.assertAlmostEqual(Diso * 1e-7, cdp.diff_tensor.Diso * 1e-7)
198 self.assertAlmostEqual(Da * 1e-7, cdp.diff_tensor.Da * 1e-7)
199 self.assertAlmostEqual(Dratio, cdp.diff_tensor.Dratio)
200 self.assertAlmostEqual(theta, cdp.diff_tensor.theta)
201 self.assertAlmostEqual(phi, cdp.diff_tensor.phi)
202
203
204 for i in range(3):
205 for j in range(3):
206 self.assertAlmostEqual(cdp.diff_tensor.tensor_diag[i, j] * 1e-7, D_prime[i, j] * 1e-7)
207
208
209 vects = []
210 vects.append([1, 0, 0])
211 vects.append([0, 1, 0])
212 vects.append([0, 0, 1])
213 vects = array(vects)
214 for vect in vects:
215
216 proj1 = dot(vect, dot(cdp.diff_tensor.tensor, vect))
217 proj2 = dot(vect, dot(D, vect))
218
219
220 self.assertAlmostEqual(proj1, proj2)
221
222
223 if spheroid_type:
224 self.assertEqual(spheroid_type, cdp.diff_tensor.spheroid_type)
225
226
228 """Check if the ellipsoid in the cdp has the same values as given spheroid."""
229
230
231 print("The relax data store diffusion tensor:\n\n%s\n\n" % cdp.diff_tensor)
232 print("\nThe real tensor:\n%s" % D)
233 print("\nThe tensor in relax:\n%s" % cdp.diff_tensor.tensor)
234 print("\nThe real tensor (in eig frame):\n%s" % D_prime)
235 print("\nThe tensor in relax (in eig frame):\n%s" % cdp.diff_tensor.tensor_diag)
236 print("\nThe real rotation matrix:\n%s" % R)
237 print("\nThe rotation matrix in relax:\n%s" % cdp.diff_tensor.rotation)
238
239
240 self.assertAlmostEqual(tm * 1e8, cdp.diff_tensor.tm * 1e8)
241 self.assertAlmostEqual(Dx * 1e-7, cdp.diff_tensor.Dx * 1e-7)
242 self.assertAlmostEqual(Dy * 1e-7, cdp.diff_tensor.Dy * 1e-7)
243 self.assertAlmostEqual(Dz * 1e-7, cdp.diff_tensor.Dz * 1e-7)
244 self.assertAlmostEqual(Diso * 1e-7, cdp.diff_tensor.Diso * 1e-7)
245
246
247 for i in range(3):
248 for j in range(3):
249 self.assertAlmostEqual(cdp.diff_tensor.tensor_diag[i, j] * 1e-7, D_prime[i, j] * 1e-7)
250
251
252 vects = []
253 vects.append([1, 0, 0])
254 vects.append([0, 1, 0])
255 vects.append([0, 0, 1])
256 vects = array(vects)
257 for vect in vects:
258
259 proj1 = dot(vect, dot(cdp.diff_tensor.tensor, vect))
260 proj2 = dot(vect, dot(D, vect))
261
262
263 print("\nVector: %s" % vect)
264 print("Real proj: %s" % proj1)
265 print("Proj in relax: %s" % proj2)
266
267
268 self.assertAlmostEqual(proj1, proj2)
269
270
272 """Return all the diffusion tensor info about the {Dx, Dy, Dz, alpha, beta, gamma} = {1e7, 2e7, 3e7, 1, 2, 0.5} ellipsoid tensor."""
273
274
275 Dx = 1e7
276 Dy = 2e7
277 Dz = 3e7
278 Diso = 2e7
279 Da = 1.5e7
280 Dr = 1.0/3.0
281 alpha = 1.0
282 beta = 2.0
283 gamma = 0.5
284
285
286 D = array([[ 22758858.4088357, -7267400.1700938, 6272205.75829415],
287 [ -7267400.1700938, 17923072.3436445, 1284270.53726401],
288 [ 6272205.75829415, 1284270.53726401, 19318069.2475198 ]], float64)
289
290
291 D_prime = zeros((3, 3), float64)
292 D_prime[0, 0] = Dx
293 D_prime[1, 1] = Dy
294 D_prime[2, 2] = Dz
295
296
297 R = zeros((3, 3), float64)
298 euler_to_R_zyz(gamma, beta, alpha, R)
299 R = transpose(R)
300
301
302 return Dx, Dy, Dz, Diso, Da, Dr, alpha, beta, gamma, D, D_prime, R
303
304
305 - def get_spheroid(self, Dpar=None, Dper=None, theta=None, phi=None):
306 """Return all the diffusion tensor info about the given spheroid tensor."""
307
308
309 Diso = (Dpar + 2*Dper) / 3.0
310 tm = 1.0/(6.0 * Diso)
311 Da = Dpar - Dper
312 Dratio = Dpar / Dper
313
314
315 if Dpar > Dper:
316 Dx, Dy, Dz = Dper, Dper, Dpar
317 axis = array([0, 0, 1], float64)
318 else:
319 Dx, Dy, Dz = Dpar, Dper, Dper
320 axis = array([1, 0, 0], float64)
321
322
323 R = zeros((3, 3), float64)
324 spher_vect = array([1, theta, phi], float64)
325 diff_axis = zeros(3, float64)
326 spherical_to_cartesian(spher_vect, diff_axis)
327 two_vect_to_R(diff_axis, axis, R)
328
329
330 D_prime = zeros((3, 3), float64)
331 D_prime[0, 0] = Dx
332 D_prime[1, 1] = Dy
333 D_prime[2, 2] = Dz
334
335
336 twist = zeros((3, 3), float64)
337 axis_angle_to_R(axis, 0.3, twist)
338 D = dot(twist, dot(D_prime, transpose(twist)))
339
340
341 D = dot(R, dot(D, transpose(R)))
342
343
344 return tm, Dx, Dy, Dz, Diso, Da, Dratio, D, D_prime, R
345
346
348 """Check the back-calculation of relaxation data for the spherical diffusion tensor."""
349
350
351 reset()
352
353
354 ds.diff_type = 'ellipsoid'
355
356
357 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'diff_tensor'+sep+'ri_back_calc.py')
358
359
360 for i in range(len(cdp.mol[0].res)):
361
362 spin = cdp.mol[0].res[i].spin[0]
363
364
365 for ri_id in cdp.ri_ids:
366 self.assertAlmostEqual(spin.ri_data_bc[ri_id], spin.ri_data[ri_id])
367
368
370 """Check the back-calculation of relaxation data for the spherical diffusion tensor."""
371
372
373 reset()
374
375
376 ds.diff_type = 'sphere'
377
378
379 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'diff_tensor'+sep+'ri_back_calc.py')
380
381
382 for i in range(len(cdp.mol[0].res)):
383
384 spin = cdp.mol[0].res[i].spin[0]
385
386
387 for ri_id in cdp.ri_ids:
388 self.assertAlmostEqual(spin.ri_data_bc[ri_id], spin.ri_data[ri_id])
389
390
392 """Check the back-calculation of relaxation data for the spherical diffusion tensor."""
393
394
395 reset()
396
397
398 ds.diff_type = 'spheroid'
399
400
401 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'diff_tensor'+sep+'ri_back_calc.py')
402
403
404 for i in range(len(cdp.mol[0].res)):
405
406 spin = cdp.mol[0].res[i].spin[0]
407
408
409 for ri_id in cdp.ri_ids:
410 self.assertAlmostEqual(spin.ri_data_bc[ri_id], spin.ri_data[ri_id])
411
412
414 """The user function diffusion_tensor.copy()."""
415
416
417 self.interpreter.pipe.create('sphere2', 'mf')
418 self.interpreter.pipe.create('spheroid2', 'mf')
419 self.interpreter.pipe.create('ellipsoid2', 'mf')
420
421
422 self.interpreter.diffusion_tensor.copy('sphere', 'sphere2')
423 self.interpreter.diffusion_tensor.copy('spheroid', 'spheroid2')
424 self.interpreter.diffusion_tensor.copy('ellipsoid', 'ellipsoid2')
425
426
427 sphere_pipe = get_pipe('sphere')
428 sphere2_pipe = get_pipe('sphere2')
429
430
431 self.assertEqual(sphere2_pipe.diff_tensor.tm_sim[4], 9.02e-8)
432 self.assertEqual(sphere2_pipe.diff_tensor.Diso_sim[4], 1/(6*9.02e-8))
433 sphere_pipe.diff_tensor.set(param='tm', value=8.88e-8, category='sim', sim_index=4)
434 self.assertEqual(sphere_pipe.diff_tensor.tm_sim[4], 8.88e-8)
435 self.assertEqual(sphere_pipe.diff_tensor.Diso_sim[4], 1/(6*8.88e-8))
436 self.assertEqual(sphere2_pipe.diff_tensor.tm_sim[4], 9.02e-8)
437 self.assertEqual(sphere2_pipe.diff_tensor.Diso_sim[4], 1/(6*9.02e-8))
438
439
450
451
462
463
494
495
526
527
558
559
561 """Test the initialisation of the ellipsoid diffusion tensor using parameter set 0."""
562
563
564 Dx, Dy, Dz, Diso, Da, Dr, alpha, beta, gamma, D, D_prime, R = self.get_ellipsoid()
565
566
567 self.interpreter.pipe.create('ellipsoid2', 'mf')
568
569
570 self.interpreter.diffusion_tensor.init((1/(6.0*Diso), Da, Dr, alpha, beta, gamma), param_types=0, angle_units='rad')
571
572
573 self.check_ellipsoid(Dx, Dy, Dz, Diso, Da, Dr, alpha, beta, gamma, D, D_prime, R)
574
575
577 """Test the initialisation of the ellipsoid diffusion tensor using parameter set 0."""
578
579
580 Dx, Dy, Dz, Diso, Da, Dr, alpha, beta, gamma, D, D_prime, R = self.get_ellipsoid()
581
582
583 self.interpreter.pipe.create('ellipsoid2', 'mf')
584
585
586 self.interpreter.diffusion_tensor.init((Diso, Da, Dr, alpha, beta, gamma), param_types=1, angle_units='rad')
587
588
589 self.check_ellipsoid(Dx, Dy, Dz, Diso, Da, Dr, alpha, beta, gamma, D, D_prime, R)
590
591
593 """Test the initialisation of the ellipsoid diffusion tensor using parameter set 0."""
594
595
596 Dx, Dy, Dz, Diso, Da, Dr, alpha, beta, gamma, D, D_prime, R = self.get_ellipsoid()
597
598
599 self.interpreter.pipe.create('ellipsoid2', 'mf')
600
601
602 self.interpreter.diffusion_tensor.init((Dx, Dy, Dz, alpha, beta, gamma), param_types=2, angle_units='rad')
603
604
605 self.check_ellipsoid(Dx, Dy, Dz, Diso, Da, Dr, alpha, beta, gamma, D, D_prime, R)
606
607
609 """Test the initialisation of the ellipsoid diffusion tensor using parameter set 0."""
610
611
612 Dx, Dy, Dz, Diso, Da, Dr, alpha, beta, gamma, D, D_prime, R = self.get_ellipsoid()
613
614
615 self.interpreter.pipe.create('ellipsoid2', 'mf')
616
617
618 self.interpreter.diffusion_tensor.init((D[0, 0], D[1, 1], D[2, 2], D[0, 1], D[0, 2], D[1, 2]), param_types=3)
619
620
621 self.check_ellipsoid(Dx, Dy, Dz, Diso, Da, Dr, alpha, beta, gamma, D, D_prime, R)
622
623
625 """Test the initialisation of the spheroid diffusion tensor using parameter set 4."""
626
627
628 Dpar, Dper, theta, phi = 1e7, 4e7, pi/4.0, 0.0
629 tm, Dx, Dy, Dz, Diso, Da, Dratio, D, D_prime, R = self.get_spheroid(Dpar=Dpar, Dper=Dper, theta=theta, phi=phi)
630
631
632 self.interpreter.pipe.create('spheroid2', 'mf')
633
634
635 self.interpreter.diffusion_tensor.init((D[0, 0], D[1, 1], D[2, 2], D[0, 1], D[0, 2], D[1, 2]), param_types=3)
636
637
638 self.check_spheroid_as_ellipsoid(tm, Dx, Dy, Dz, Diso, Da, D, D_prime, R)
639
640
642 """Test the initialisation of the oblate spheroid diffusion tensor using parameter set 0."""
643
644
645 Dpar, Dper, theta, phi = 1e7, 4e7, 0.5, 1.0
646 tm, Dx, Dy, Dz, Diso, Da, Dratio, D, D_prime, R = self.get_spheroid(Dpar=Dpar, Dper=Dper, theta=theta, phi=phi)
647
648
649 self.interpreter.pipe.create('spheroid2', 'mf')
650
651
652 self.interpreter.diffusion_tensor.init((tm, Da, theta, phi), param_types=0, angle_units='rad')
653
654
655 self.check_spheroid(tm, Dpar, Dper, Diso, Da, Dratio, theta, phi, D, D_prime, R, spheroid_type='oblate')
656
657
659 """Test the initialisation of the oblate spheroid diffusion tensor using parameter set 1."""
660
661
662 Dpar, Dper, theta, phi = 1e7, 4e7, 0.5, 1.0
663 tm, Dx, Dy, Dz, Diso, Da, Dratio, D, D_prime, R = self.get_spheroid(Dpar=Dpar, Dper=Dper, theta=theta, phi=phi)
664
665
666 self.interpreter.pipe.create('spheroid2', 'mf')
667
668
669 self.interpreter.diffusion_tensor.init((Diso, Da, theta, phi), param_types=1, angle_units='rad')
670
671
672 self.check_spheroid(tm, Dpar, Dper, Diso, Da, Dratio, theta, phi, D, D_prime, R, spheroid_type='oblate')
673
674
676 """Test the initialisation of the oblate spheroid diffusion tensor using parameter set 1, and angles in deg."""
677
678
679 Dpar, Dper, theta, phi = 1e7, 4e7, 0.5, 1.0
680 tm, Dx, Dy, Dz, Diso, Da, Dratio, D, D_prime, R = self.get_spheroid(Dpar=Dpar, Dper=Dper, theta=theta, phi=phi)
681
682
683 self.interpreter.pipe.create('spheroid2', 'mf')
684
685
686 self.interpreter.diffusion_tensor.init((Diso, Da, theta/2.0/pi*360.0, phi/2.0/pi*360.0), param_types=1, angle_units='deg')
687
688
689 self.check_spheroid(tm, Dpar, Dper, Diso, Da, Dratio, theta, phi, D, D_prime, R, spheroid_type='oblate')
690
691
693 """Test the initialisation of the oblate spheroid diffusion tensor using parameter set 2."""
694
695
696 Dpar, Dper, theta, phi = 1e7, 4e7, 0.5, 1.0
697 tm, Dx, Dy, Dz, Diso, Da, Dratio, D, D_prime, R = self.get_spheroid(Dpar=Dpar, Dper=Dper, theta=theta, phi=phi)
698
699
700 self.interpreter.pipe.create('spheroid2', 'mf')
701
702
703 self.interpreter.diffusion_tensor.init((tm, Dratio, theta, phi), param_types=2, angle_units='rad')
704
705
706 self.check_spheroid(tm, Dpar, Dper, Diso, Da, Dratio, theta, phi, D, D_prime, R, spheroid_type='oblate')
707
708
710 """Test the initialisation of the oblate spheroid diffusion tensor using parameter set 3."""
711
712
713 Dpar, Dper, theta, phi = 1e7, 4e7, 0.5, 1.0
714 tm, Dx, Dy, Dz, Diso, Da, Dratio, D, D_prime, R = self.get_spheroid(Dpar=Dpar, Dper=Dper, theta=theta, phi=phi)
715
716
717 self.interpreter.pipe.create('spheroid2', 'mf')
718
719
720 self.interpreter.diffusion_tensor.init((Dpar, Dper, theta, phi), param_types=3, angle_units='rad')
721
722
723 self.check_spheroid(tm, Dpar, Dper, Diso, Da, Dratio, theta, phi, D, D_prime, R, spheroid_type='oblate')
724
725
727 """Test the initialisation of the oblate spheroid diffusion tensor using parameter set 4."""
728
729
730 Dpar, Dper, theta, phi = 1e7, 4e7, 0.5, 1.0
731 tm, Dx, Dy, Dz, Diso, Da, Dratio, D, D_prime, R = self.get_spheroid(Dpar=Dpar, Dper=Dper, theta=theta, phi=phi)
732
733
734 self.interpreter.pipe.create('spheroid2', 'mf')
735
736
737 self.interpreter.diffusion_tensor.init((Diso, Dratio, theta, phi), param_types=4, angle_units='rad')
738
739
740 self.check_spheroid(tm, Dpar, Dper, Diso, Da, Dratio, theta, phi, D, D_prime, R, spheroid_type='oblate')
741
742
744 """Test the initialisation of the spheroid diffusion tensor using parameter set 4."""
745
746
747 Dpar, Dper, theta, phi = 4e7, 2e7, 0.5, 1.0
748 tm, Dx, Dy, Dz, Diso, Da, Dratio, D, D_prime, R = self.get_spheroid(Dpar=Dpar, Dper=Dper, theta=theta, phi=phi)
749
750
751 self.interpreter.pipe.create('spheroid2', 'mf')
752
753
754 self.interpreter.diffusion_tensor.init((D[0, 0], D[1, 1], D[2, 2], D[0, 1], D[0, 2], D[1, 2]), param_types=3)
755
756
757 self.check_spheroid_as_ellipsoid(tm, Dx, Dy, Dz, Diso, Da, D, D_prime, R)
758
759
761 """Test the initialisation of the prolate spheroid diffusion tensor using parameter set 0."""
762
763
764 Dpar, Dper, theta, phi = 8e7, 4e7, 0.5, 1.0
765 tm, Dx, Dy, Dz, Diso, Da, Dratio, D, D_prime, R = self.get_spheroid(Dpar=Dpar, Dper=Dper, theta=theta, phi=phi)
766
767
768 self.interpreter.pipe.create('spheroid2', 'mf')
769
770
771 self.interpreter.diffusion_tensor.init((tm, Da, theta, phi), spheroid_type='prolate', param_types=0, angle_units='rad')
772
773
774 self.check_spheroid(tm, Dpar, Dper, Diso, Da, Dratio, theta, phi, D, D_prime, R, spheroid_type='prolate')
775
776
778 """Test the initialisation of the prolate spheroid diffusion tensor using parameter set 0."""
779
780
781 Dpar, Dper, theta, phi = 8e7, 8e7, 0.5, 1.0
782 tm, Dx, Dy, Dz, Diso, Da, Dratio, D, D_prime, R = self.get_spheroid(Dpar=Dpar, Dper=Dper, theta=theta, phi=phi)
783
784
785 self.interpreter.pipe.create('spheroid2', 'mf')
786
787
788 self.interpreter.diffusion_tensor.init((tm, Da, theta, phi), spheroid_type='prolate', param_types=0, angle_units='rad')
789
790
791 self.check_spheroid(tm, Dpar, Dper, Diso, Da, Dratio, theta, phi, D, D_prime, R, spheroid_type='prolate')
792
793
795 """Test the initialisation of the prolate spheroid diffusion tensor using parameter set 1."""
796
797
798 Dpar, Dper, theta, phi = 8e7, 4e7, 0.5, 1.0
799 tm, Dx, Dy, Dz, Diso, Da, Dratio, D, D_prime, R = self.get_spheroid(Dpar=Dpar, Dper=Dper, theta=theta, phi=phi)
800
801
802 self.interpreter.pipe.create('spheroid2', 'mf')
803
804
805 self.interpreter.diffusion_tensor.init((Diso, Da, theta, phi), param_types=1, angle_units='rad')
806
807
808 self.check_spheroid(tm, Dpar, Dper, Diso, Da, Dratio, theta, phi, D, D_prime, R, spheroid_type='prolate')
809
810
812 """Test the initialisation of the prolate spheroid diffusion tensor using parameter set 1, and angles in deg."""
813
814
815 Dpar, Dper, theta, phi = 8e7, 4e7, 0.5, 1.0
816 tm, Dx, Dy, Dz, Diso, Da, Dratio, D, D_prime, R = self.get_spheroid(Dpar=Dpar, Dper=Dper, theta=theta, phi=phi)
817
818
819 self.interpreter.pipe.create('spheroid2', 'mf')
820
821
822 self.interpreter.diffusion_tensor.init((Diso, Da, theta/2.0/pi*360.0, phi/2.0/pi*360.0), param_types=1, angle_units='deg')
823
824
825 self.check_spheroid(tm, Dpar, Dper, Diso, Da, Dratio, theta, phi, D, D_prime, R, spheroid_type='prolate')
826
827
829 """Test the initialisation of the prolate spheroid diffusion tensor using parameter set 2."""
830
831
832 Dpar, Dper, theta, phi = 8e7, 4e7, 0.5, 1.0
833 tm, Dx, Dy, Dz, Diso, Da, Dratio, D, D_prime, R = self.get_spheroid(Dpar=Dpar, Dper=Dper, theta=theta, phi=phi)
834
835
836 self.interpreter.pipe.create('spheroid2', 'mf')
837
838
839 self.interpreter.diffusion_tensor.init((tm, Dratio, theta, phi), param_types=2, angle_units='rad')
840
841
842 self.check_spheroid(tm, Dpar, Dper, Diso, Da, Dratio, theta, phi, D, D_prime, R, spheroid_type='prolate')
843
844
846 """Test the initialisation of the prolate spheroid diffusion tensor using parameter set 3."""
847
848
849 Dpar, Dper, theta, phi = 8e7, 4e7, 0.5, 1.0
850 tm, Dx, Dy, Dz, Diso, Da, Dratio, D, D_prime, R = self.get_spheroid(Dpar=Dpar, Dper=Dper, theta=theta, phi=phi)
851
852
853 self.interpreter.pipe.create('spheroid2', 'mf')
854
855
856 self.interpreter.diffusion_tensor.init((Dpar, Dper, theta, phi), param_types=3, angle_units='rad')
857
858
859 self.check_spheroid(tm, Dpar, Dper, Diso, Da, Dratio, theta, phi, D, D_prime, R, spheroid_type='prolate')
860
861
863 """Test the initialisation of the prolate spheroid diffusion tensor using parameter set 4."""
864
865
866 Dpar, Dper, theta, phi = 8e7, 4e7, 0.5, 1.0
867 tm, Dx, Dy, Dz, Diso, Da, Dratio, D, D_prime, R = self.get_spheroid(Dpar=Dpar, Dper=Dper, theta=theta, phi=phi)
868
869
870 self.interpreter.pipe.create('spheroid2', 'mf')
871
872
873 self.interpreter.diffusion_tensor.init((Diso, Dratio, theta, phi), param_types=4, angle_units='rad')
874
875
876 self.check_spheroid(tm, Dpar, Dper, Diso, Da, Dratio, theta, phi, D, D_prime, R, spheroid_type='prolate')
877
878
880 """Check that the ellipsoid diffusion tensor optimisation functions correctly."""
881
882
883 reset()
884
885
886 ds.diff_type = 'ellipsoid'
887
888
889 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'diff_tensor'+sep+'tensor_opt.py')
890
891
892 print(cdp.diff_tensor)
893
894
895 Dx, Dy, Dz, Diso, Da, Dr, alpha, beta, gamma, D, D_prime, R = self.get_ellipsoid()
896
897
898 self.assertAlmostEqual(cdp.chi2, 0.0)
899 self.assertEqual(cdp.diff_tensor.fixed, False)
900 self.assertEqual(cdp.diff_tensor.type, 'ellipsoid')
901
902
903 self.check_ellipsoid(Dx, Dy, Dz, Diso, Da, Dr, alpha, beta, gamma, D, D_prime, R)
904
905
907 """Check that the sphere diffusion tensor optimisation functions correctly."""
908
909
910 reset()
911
912
913 ds.diff_type = 'sphere'
914
915
916 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'diff_tensor'+sep+'tensor_opt.py')
917
918
919 self.assertAlmostEqual(cdp.chi2, 0.0)
920 self.assertEqual(cdp.diff_tensor.fixed, False)
921 self.assertEqual(cdp.diff_tensor.type, 'sphere')
922 self.assertAlmostEqual(cdp.diff_tensor.tm * 1e9, 1.0/(6.0*2e7) * 1e9)
923 self.assertEqual(cdp.diff_tensor.rotation[0, 0], 1.0)
924 self.assertEqual(cdp.diff_tensor.rotation[1, 1], 1.0)
925 self.assertEqual(cdp.diff_tensor.rotation[2, 2], 1.0)
926 self.assertEqual(cdp.diff_tensor.rotation[0, 1], 0.0)
927 self.assertEqual(cdp.diff_tensor.rotation[0, 2], 0.0)
928 self.assertEqual(cdp.diff_tensor.rotation[1, 2], 0.0)
929 self.assertEqual(cdp.diff_tensor.rotation[1, 0], 0.0)
930 self.assertEqual(cdp.diff_tensor.rotation[2, 0], 0.0)
931 self.assertEqual(cdp.diff_tensor.rotation[2, 1], 0.0)
932
933
935 """Check that the spheroid diffusion tensor optimisation functions correctly."""
936
937
938 reset()
939
940
941 ds.diff_type = 'spheroid'
942
943
944 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'diff_tensor'+sep+'tensor_opt.py')
945
946
947 self.assertAlmostEqual(cdp.chi2, 0.0)
948 self.assertEqual(cdp.diff_tensor.fixed, False)
949 self.assertEqual(cdp.diff_tensor.type, 'spheroid')
950 self.assertAlmostEqual(cdp.diff_tensor.tm * 1e9, 1.0/(6.0*7e7/3.0) * 1e9)
951 self.assertAlmostEqual(cdp.diff_tensor.Da * 1e-7, 1.0)
952 self.assertAlmostEqual(cdp.diff_tensor.theta, 2.0)
953 self.assertAlmostEqual(cdp.diff_tensor.phi, pi-0.5)
954