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