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
425
426
428 """The user function diffusion_tensor.copy()."""
429
430
431 self.interpreter.pipe.create('sphere2', 'mf')
432 self.interpreter.pipe.create('spheroid2', 'mf')
433 self.interpreter.pipe.create('ellipsoid2', 'mf')
434
435
436 self.interpreter.diffusion_tensor.copy('sphere', 'sphere2')
437 self.interpreter.diffusion_tensor.copy('spheroid', 'spheroid2')
438 self.interpreter.diffusion_tensor.copy('ellipsoid', 'ellipsoid2')
439
440
441 sphere_pipe = get_pipe('sphere')
442 sphere2_pipe = get_pipe('sphere2')
443
444
445 self.assertEqual(sphere2_pipe.diff_tensor.tm_sim[4], 9.02e-8)
446 self.assertEqual(sphere2_pipe.diff_tensor.Diso_sim[4], 1/(6*9.02e-8))
447 sphere_pipe.diff_tensor.set(param='tm', value=8.88e-8, category='sim', sim_index=4)
448 self.assertEqual(sphere_pipe.diff_tensor.tm_sim[4], 8.88e-8)
449 self.assertEqual(sphere_pipe.diff_tensor.Diso_sim[4], 1/(6*8.88e-8))
450 self.assertEqual(sphere2_pipe.diff_tensor.tm_sim[4], 9.02e-8)
451 self.assertEqual(sphere2_pipe.diff_tensor.Diso_sim[4], 1/(6*9.02e-8))
452
453
464
465
476
477
508
509
540
541
572
573
575 """Test the initialisation of the ellipsoid diffusion tensor using parameter set 0."""
576
577
578 Dx, Dy, Dz, Diso, Da, Dr, alpha, beta, gamma, D, D_prime, R = self.get_ellipsoid()
579
580
581 self.interpreter.pipe.create('ellipsoid2', 'mf')
582
583
584 self.interpreter.diffusion_tensor.init((1/(6.0*Diso), Da, Dr, alpha, beta, gamma), param_types=0, angle_units='rad')
585
586
587 self.check_ellipsoid(Dx, Dy, Dz, Diso, Da, Dr, alpha, beta, gamma, D, D_prime, R)
588
589
591 """Test the initialisation of the ellipsoid diffusion tensor using parameter set 0."""
592
593
594 Dx, Dy, Dz, Diso, Da, Dr, alpha, beta, gamma, D, D_prime, R = self.get_ellipsoid()
595
596
597 self.interpreter.pipe.create('ellipsoid2', 'mf')
598
599
600 self.interpreter.diffusion_tensor.init((Diso, Da, Dr, alpha, beta, gamma), param_types=1, angle_units='rad')
601
602
603 self.check_ellipsoid(Dx, Dy, Dz, Diso, Da, Dr, alpha, beta, gamma, D, D_prime, R)
604
605
607 """Test the initialisation of the ellipsoid diffusion tensor using parameter set 0."""
608
609
610 Dx, Dy, Dz, Diso, Da, Dr, alpha, beta, gamma, D, D_prime, R = self.get_ellipsoid()
611
612
613 self.interpreter.pipe.create('ellipsoid2', 'mf')
614
615
616 self.interpreter.diffusion_tensor.init((Dx, Dy, Dz, alpha, beta, gamma), param_types=2, angle_units='rad')
617
618
619 self.check_ellipsoid(Dx, Dy, Dz, Diso, Da, Dr, alpha, beta, gamma, D, D_prime, R)
620
621
623 """Test the initialisation of the ellipsoid diffusion tensor using parameter set 0."""
624
625
626 Dx, Dy, Dz, Diso, Da, Dr, alpha, beta, gamma, D, D_prime, R = self.get_ellipsoid()
627
628
629 self.interpreter.pipe.create('ellipsoid2', '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_ellipsoid(Dx, Dy, Dz, Diso, Da, Dr, alpha, beta, gamma, D, D_prime, R)
636
637
639 """Test the initialisation of the spheroid diffusion tensor using parameter set 4."""
640
641
642 Dpar, Dper, theta, phi = 1e7, 4e7, pi/4.0, 0.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((D[0, 0], D[1, 1], D[2, 2], D[0, 1], D[0, 2], D[1, 2]), param_types=3)
650
651
652 self.check_spheroid_as_ellipsoid(tm, Dx, Dy, Dz, Diso, Da, D, D_prime, R)
653
654
656 """Test the initialisation of the oblate spheroid diffusion tensor using parameter set 0."""
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((tm, Da, theta, phi), param_types=0, 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."""
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, phi), param_types=1, angle_units='rad')
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 1, and angles in deg."""
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((Diso, Da, theta/2.0/pi*360.0, phi/2.0/pi*360.0), param_types=1, angle_units='deg')
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 2."""
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((tm, Dratio, theta, phi), param_types=2, 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 3."""
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((Dpar, Dper, theta, phi), param_types=3, 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 oblate spheroid diffusion tensor using parameter set 4."""
742
743
744 Dpar, Dper, theta, phi = 1e7, 4e7, 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((Diso, Dratio, theta, phi), param_types=4, angle_units='rad')
752
753
754 self.check_spheroid(tm, Dpar, Dper, Diso, Da, Dratio, theta, phi, D, D_prime, R, spheroid_type='oblate')
755
756
758 """Test the initialisation of the spheroid diffusion tensor using parameter set 4."""
759
760
761 Dpar, Dper, theta, phi = 4e7, 2e7, 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((D[0, 0], D[1, 1], D[2, 2], D[0, 1], D[0, 2], D[1, 2]), param_types=3)
769
770
771 self.check_spheroid_as_ellipsoid(tm, Dx, Dy, Dz, Diso, Da, D, D_prime, R)
772
773
775 """Test the initialisation of the prolate spheroid diffusion tensor using parameter set 0."""
776
777
778 Dpar, Dper, theta, phi = 8e7, 4e7, 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 0."""
793
794
795 Dpar, Dper, theta, phi = 8e7, 8e7, 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((tm, Da, theta, phi), spheroid_type='prolate', param_types=0, 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."""
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, phi), param_types=1, angle_units='rad')
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 1, and angles in deg."""
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((Diso, Da, theta/2.0/pi*360.0, phi/2.0/pi*360.0), param_types=1, angle_units='deg')
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 2."""
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((tm, Dratio, theta, phi), param_types=2, 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 3."""
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((Dpar, Dper, theta, phi), param_types=3, 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 """Test the initialisation of the prolate spheroid diffusion tensor using parameter set 4."""
878
879
880 Dpar, Dper, theta, phi = 8e7, 4e7, 0.5, 1.0
881 tm, Dx, Dy, Dz, Diso, Da, Dratio, D, D_prime, R = self.get_spheroid(Dpar=Dpar, Dper=Dper, theta=theta, phi=phi)
882
883
884 self.interpreter.pipe.create('spheroid2', 'mf')
885
886
887 self.interpreter.diffusion_tensor.init((Diso, Dratio, theta, phi), param_types=4, angle_units='rad')
888
889
890 self.check_spheroid(tm, Dpar, Dper, Diso, Da, Dratio, theta, phi, D, D_prime, R, spheroid_type='prolate')
891
892
894 """Check that the ellipsoid diffusion tensor optimisation functions correctly."""
895
896
897 reset()
898
899
900 ds.diff_type = 'ellipsoid'
901
902
903 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'diff_tensor'+sep+'tensor_opt.py')
904
905
906 print(cdp.diff_tensor)
907
908
909 Dx, Dy, Dz, Diso, Da, Dr, alpha, beta, gamma, D, D_prime, R = self.get_ellipsoid()
910
911
912 self.assertAlmostEqual(cdp.chi2, 0.0)
913 self.assertEqual(cdp.diff_tensor.fixed, False)
914 self.assertEqual(cdp.diff_tensor.type, 'ellipsoid')
915
916
917 self.check_ellipsoid(Dx, Dy, Dz, Diso, Da, Dr, alpha, beta, gamma, D, D_prime, R)
918
919
921 """Check that the sphere diffusion tensor optimisation functions correctly."""
922
923
924 reset()
925
926
927 ds.diff_type = 'sphere'
928
929
930 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'diff_tensor'+sep+'tensor_opt.py')
931
932
933 self.assertAlmostEqual(cdp.chi2, 0.0)
934 self.assertEqual(cdp.diff_tensor.fixed, False)
935 self.assertEqual(cdp.diff_tensor.type, 'sphere')
936 self.assertAlmostEqual(cdp.diff_tensor.tm * 1e9, 1.0/(6.0*2e7) * 1e9)
937 self.assertEqual(cdp.diff_tensor.rotation[0, 0], 1.0)
938 self.assertEqual(cdp.diff_tensor.rotation[1, 1], 1.0)
939 self.assertEqual(cdp.diff_tensor.rotation[2, 2], 1.0)
940 self.assertEqual(cdp.diff_tensor.rotation[0, 1], 0.0)
941 self.assertEqual(cdp.diff_tensor.rotation[0, 2], 0.0)
942 self.assertEqual(cdp.diff_tensor.rotation[1, 2], 0.0)
943 self.assertEqual(cdp.diff_tensor.rotation[1, 0], 0.0)
944 self.assertEqual(cdp.diff_tensor.rotation[2, 0], 0.0)
945 self.assertEqual(cdp.diff_tensor.rotation[2, 1], 0.0)
946
947
949 """Check that the spheroid diffusion tensor optimisation functions correctly."""
950
951
952 reset()
953
954
955 ds.diff_type = 'spheroid'
956
957
958 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'diff_tensor'+sep+'tensor_opt.py')
959
960
961 self.assertAlmostEqual(cdp.chi2, 0.0)
962 self.assertEqual(cdp.diff_tensor.fixed, False)
963 self.assertEqual(cdp.diff_tensor.type, 'spheroid')
964 self.assertAlmostEqual(cdp.diff_tensor.tm * 1e9, 1.0/(6.0*7e7/3.0) * 1e9)
965 self.assertAlmostEqual(cdp.diff_tensor.Da * 1e-7, 1.0)
966 self.assertAlmostEqual(cdp.diff_tensor.theta, 2.0)
967 self.assertAlmostEqual(cdp.diff_tensor.phi, pi-0.5)
968