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
479 """Test the user function structure.create_diff_tensor_pdb() for the ellipsoid."""
480
481
482 self.interpreter.pipe.copy('ellipsoid', 'ellipsoid2')
483 self.interpreter.pipe.switch('ellipsoid2')
484 self.interpreter.diffusion_tensor.delete()
485 self.interpreter.diffusion_tensor.copy('ellipsoid', 'ellipsoid2')
486
487
488 self.interpreter.structure.create_diff_tensor_pdb(file=self.tmpfile_ellipsoid, scale=1e-05)
489
490
491 file = open(self.tmpfile_ellipsoid)
492 new_data = file.readlines()
493 file.close()
494
495
496 file = open(status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'+sep+'diff_tensors'+sep+'ellipsoid.pdb')
497 real_data = file.readlines()
498 file.close()
499
500
501 new_data_stripped = []
502 for line in new_data:
503 if line[:6] != 'REMARK':
504 new_data_stripped.append(line)
505 real_data_stripped = []
506 for line in real_data:
507 if line[:6] != 'REMARK':
508 real_data_stripped.append(line)
509
510
511 self.assertEqual(len(real_data_stripped), len(new_data_stripped))
512 for i in range(len(real_data_stripped)):
513
514 print(real_data_stripped[i][0:-1])
515
516
517 self.assertEqual(real_data_stripped[i], new_data_stripped[i])
518
519
521 """Test the user function structure.create_diff_tensor_pdb() for the sphere."""
522
523
524 self.interpreter.pipe.copy('sphere', 'sphere2')
525 self.interpreter.pipe.switch('sphere2')
526 self.interpreter.diffusion_tensor.delete()
527 self.interpreter.diffusion_tensor.copy('sphere', 'sphere2')
528
529
530 self.interpreter.structure.create_diff_tensor_pdb(file=self.tmpfile_sphere)
531
532
533 file = open(self.tmpfile_sphere)
534 new_data = file.readlines()
535 file.close()
536
537
538 file = open(status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'+sep+'diff_tensors'+sep+'sphere.pdb')
539 real_data = file.readlines()
540 file.close()
541
542
543 new_data_stripped = []
544 for line in new_data:
545 if line[:6] != 'REMARK':
546 new_data_stripped.append(line)
547 real_data_stripped = []
548 for line in real_data:
549 if line[:6] != 'REMARK':
550 real_data_stripped.append(line)
551
552
553 self.assertEqual(len(real_data_stripped), len(new_data_stripped))
554 for i in range(len(real_data_stripped)):
555
556 print(real_data_stripped[i][0:-1])
557
558
559 self.assertEqual(real_data_stripped[i], new_data_stripped[i])
560
561
563 """Test the user function structure.create_diff_tensor_pdb() for the spheroid."""
564
565
566 self.interpreter.pipe.copy('spheroid', 'spheroid2')
567 self.interpreter.pipe.switch('spheroid2')
568 self.interpreter.diffusion_tensor.delete()
569 self.interpreter.diffusion_tensor.copy('spheroid', 'spheroid2')
570
571
572 self.interpreter.structure.create_diff_tensor_pdb(file=self.tmpfile_spheroid)
573
574
575 file = open(self.tmpfile_spheroid)
576 new_data = file.readlines()
577 file.close()
578
579
580 file = open(status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'+sep+'diff_tensors'+sep+'spheroid.pdb')
581 real_data = file.readlines()
582 file.close()
583
584
585 new_data_stripped = []
586 for line in new_data:
587 if line[:6] != 'REMARK':
588 new_data_stripped.append(line)
589 real_data_stripped = []
590 for line in real_data:
591 if line[:6] != 'REMARK':
592 real_data_stripped.append(line)
593
594
595 self.assertEqual(len(real_data_stripped), len(new_data_stripped))
596 for i in range(len(real_data_stripped)):
597
598 print(real_data_stripped[i][0:-1])
599
600
601 self.assertEqual(real_data_stripped[i], new_data_stripped[i])
602
603
605 """Test the initialisation of the ellipsoid diffusion tensor using parameter set 0."""
606
607
608 Dx, Dy, Dz, Diso, Da, Dr, alpha, beta, gamma, D, D_prime, R = self.get_ellipsoid()
609
610
611 self.interpreter.pipe.create('ellipsoid2', 'mf')
612
613
614 self.interpreter.diffusion_tensor.init((1/(6.0*Diso), Da, Dr, alpha, beta, gamma), param_types=0, angle_units='rad')
615
616
617 self.check_ellipsoid(Dx, Dy, Dz, Diso, Da, Dr, alpha, beta, gamma, D, D_prime, R)
618
619
621 """Test the initialisation of the ellipsoid diffusion tensor using parameter set 0."""
622
623
624 Dx, Dy, Dz, Diso, Da, Dr, alpha, beta, gamma, D, D_prime, R = self.get_ellipsoid()
625
626
627 self.interpreter.pipe.create('ellipsoid2', 'mf')
628
629
630 self.interpreter.diffusion_tensor.init((Diso, Da, Dr, alpha, beta, gamma), param_types=1, angle_units='rad')
631
632
633 self.check_ellipsoid(Dx, Dy, Dz, Diso, Da, Dr, alpha, beta, gamma, D, D_prime, R)
634
635
637 """Test the initialisation of the ellipsoid diffusion tensor using parameter set 0."""
638
639
640 Dx, Dy, Dz, Diso, Da, Dr, alpha, beta, gamma, D, D_prime, R = self.get_ellipsoid()
641
642
643 self.interpreter.pipe.create('ellipsoid2', 'mf')
644
645
646 self.interpreter.diffusion_tensor.init((Dx, Dy, Dz, alpha, beta, gamma), param_types=2, angle_units='rad')
647
648
649 self.check_ellipsoid(Dx, Dy, Dz, Diso, Da, Dr, alpha, beta, gamma, D, D_prime, R)
650
651
653 """Test the initialisation of the ellipsoid diffusion tensor using parameter set 0."""
654
655
656 Dx, Dy, Dz, Diso, Da, Dr, alpha, beta, gamma, D, D_prime, R = self.get_ellipsoid()
657
658
659 self.interpreter.pipe.create('ellipsoid2', 'mf')
660
661
662 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)
663
664
665 self.check_ellipsoid(Dx, Dy, Dz, Diso, Da, Dr, alpha, beta, gamma, D, D_prime, R)
666
667
669 """Test the initialisation of the spheroid diffusion tensor using parameter set 4."""
670
671
672 Dpar, Dper, theta, phi = 1e7, 4e7, pi/4.0, 0.0
673 tm, Dx, Dy, Dz, Diso, Da, Dratio, D, D_prime, R = self.get_spheroid(Dpar=Dpar, Dper=Dper, theta=theta, phi=phi)
674
675
676 self.interpreter.pipe.create('spheroid2', 'mf')
677
678
679 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)
680
681
682 self.check_spheroid_as_ellipsoid(tm, Dx, Dy, Dz, Diso, Da, D, D_prime, R)
683
684
686 """Test the initialisation of the oblate spheroid diffusion tensor using parameter set 0."""
687
688
689 Dpar, Dper, theta, phi = 1e7, 4e7, 0.5, 1.0
690 tm, Dx, Dy, Dz, Diso, Da, Dratio, D, D_prime, R = self.get_spheroid(Dpar=Dpar, Dper=Dper, theta=theta, phi=phi)
691
692
693 self.interpreter.pipe.create('spheroid2', 'mf')
694
695
696 self.interpreter.diffusion_tensor.init((tm, Da, theta, phi), param_types=0, angle_units='rad')
697
698
699 self.check_spheroid(tm, Dpar, Dper, Diso, Da, Dratio, theta, phi, D, D_prime, R, spheroid_type='oblate')
700
701
703 """Test the initialisation of the oblate spheroid diffusion tensor using parameter set 1."""
704
705
706 Dpar, Dper, theta, phi = 1e7, 4e7, 0.5, 1.0
707 tm, Dx, Dy, Dz, Diso, Da, Dratio, D, D_prime, R = self.get_spheroid(Dpar=Dpar, Dper=Dper, theta=theta, phi=phi)
708
709
710 self.interpreter.pipe.create('spheroid2', 'mf')
711
712
713 self.interpreter.diffusion_tensor.init((Diso, Da, theta, phi), param_types=1, angle_units='rad')
714
715
716 self.check_spheroid(tm, Dpar, Dper, Diso, Da, Dratio, theta, phi, D, D_prime, R, spheroid_type='oblate')
717
718
720 """Test the initialisation of the oblate spheroid diffusion tensor using parameter set 1, and angles in deg."""
721
722
723 Dpar, Dper, theta, phi = 1e7, 4e7, 0.5, 1.0
724 tm, Dx, Dy, Dz, Diso, Da, Dratio, D, D_prime, R = self.get_spheroid(Dpar=Dpar, Dper=Dper, theta=theta, phi=phi)
725
726
727 self.interpreter.pipe.create('spheroid2', 'mf')
728
729
730 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')
731
732
733 self.check_spheroid(tm, Dpar, Dper, Diso, Da, Dratio, theta, phi, D, D_prime, R, spheroid_type='oblate')
734
735
737 """Test the initialisation of the oblate spheroid diffusion tensor using parameter set 2."""
738
739
740 Dpar, Dper, theta, phi = 1e7, 4e7, 0.5, 1.0
741 tm, Dx, Dy, Dz, Diso, Da, Dratio, D, D_prime, R = self.get_spheroid(Dpar=Dpar, Dper=Dper, theta=theta, phi=phi)
742
743
744 self.interpreter.pipe.create('spheroid2', 'mf')
745
746
747 self.interpreter.diffusion_tensor.init((tm, Dratio, theta, phi), param_types=2, angle_units='rad')
748
749
750 self.check_spheroid(tm, Dpar, Dper, Diso, Da, Dratio, theta, phi, D, D_prime, R, spheroid_type='oblate')
751
752
754 """Test the initialisation of the oblate spheroid diffusion tensor using parameter set 3."""
755
756
757 Dpar, Dper, theta, phi = 1e7, 4e7, 0.5, 1.0
758 tm, Dx, Dy, Dz, Diso, Da, Dratio, D, D_prime, R = self.get_spheroid(Dpar=Dpar, Dper=Dper, theta=theta, phi=phi)
759
760
761 self.interpreter.pipe.create('spheroid2', 'mf')
762
763
764 self.interpreter.diffusion_tensor.init((Dpar, Dper, theta, phi), param_types=3, angle_units='rad')
765
766
767 self.check_spheroid(tm, Dpar, Dper, Diso, Da, Dratio, theta, phi, D, D_prime, R, spheroid_type='oblate')
768
769
771 """Test the initialisation of the oblate spheroid diffusion tensor using parameter set 4."""
772
773
774 Dpar, Dper, theta, phi = 1e7, 4e7, 0.5, 1.0
775 tm, Dx, Dy, Dz, Diso, Da, Dratio, D, D_prime, R = self.get_spheroid(Dpar=Dpar, Dper=Dper, theta=theta, phi=phi)
776
777
778 self.interpreter.pipe.create('spheroid2', 'mf')
779
780
781 self.interpreter.diffusion_tensor.init((Diso, Dratio, theta, phi), param_types=4, angle_units='rad')
782
783
784 self.check_spheroid(tm, Dpar, Dper, Diso, Da, Dratio, theta, phi, D, D_prime, R, spheroid_type='oblate')
785
786
788 """Test the initialisation of the spheroid diffusion tensor using parameter set 4."""
789
790
791 Dpar, Dper, theta, phi = 4e7, 2e7, 0.5, 1.0
792 tm, Dx, Dy, Dz, Diso, Da, Dratio, D, D_prime, R = self.get_spheroid(Dpar=Dpar, Dper=Dper, theta=theta, phi=phi)
793
794
795 self.interpreter.pipe.create('spheroid2', 'mf')
796
797
798 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)
799
800
801 self.check_spheroid_as_ellipsoid(tm, Dx, Dy, Dz, Diso, Da, D, D_prime, R)
802
803
805 """Test the initialisation of the prolate spheroid diffusion tensor using parameter set 0."""
806
807
808 Dpar, Dper, theta, phi = 8e7, 4e7, 0.5, 1.0
809 tm, Dx, Dy, Dz, Diso, Da, Dratio, D, D_prime, R = self.get_spheroid(Dpar=Dpar, Dper=Dper, theta=theta, phi=phi)
810
811
812 self.interpreter.pipe.create('spheroid2', 'mf')
813
814
815 self.interpreter.diffusion_tensor.init((tm, Da, theta, phi), spheroid_type='prolate', param_types=0, angle_units='rad')
816
817
818 self.check_spheroid(tm, Dpar, Dper, Diso, Da, Dratio, theta, phi, D, D_prime, R, spheroid_type='prolate')
819
820
822 """Test the initialisation of the prolate spheroid diffusion tensor using parameter set 0."""
823
824
825 Dpar, Dper, theta, phi = 8e7, 8e7, 0.5, 1.0
826 tm, Dx, Dy, Dz, Diso, Da, Dratio, D, D_prime, R = self.get_spheroid(Dpar=Dpar, Dper=Dper, theta=theta, phi=phi)
827
828
829 self.interpreter.pipe.create('spheroid2', 'mf')
830
831
832 self.interpreter.diffusion_tensor.init((tm, Da, theta, phi), spheroid_type='prolate', param_types=0, angle_units='rad')
833
834
835 self.check_spheroid(tm, Dpar, Dper, Diso, Da, Dratio, theta, phi, D, D_prime, R, spheroid_type='prolate')
836
837
839 """Test the initialisation of the prolate spheroid diffusion tensor using parameter set 1."""
840
841
842 Dpar, Dper, theta, phi = 8e7, 4e7, 0.5, 1.0
843 tm, Dx, Dy, Dz, Diso, Da, Dratio, D, D_prime, R = self.get_spheroid(Dpar=Dpar, Dper=Dper, theta=theta, phi=phi)
844
845
846 self.interpreter.pipe.create('spheroid2', 'mf')
847
848
849 self.interpreter.diffusion_tensor.init((Diso, Da, theta, phi), param_types=1, angle_units='rad')
850
851
852 self.check_spheroid(tm, Dpar, Dper, Diso, Da, Dratio, theta, phi, D, D_prime, R, spheroid_type='prolate')
853
854
856 """Test the initialisation of the prolate spheroid diffusion tensor using parameter set 1, and angles in deg."""
857
858
859 Dpar, Dper, theta, phi = 8e7, 4e7, 0.5, 1.0
860 tm, Dx, Dy, Dz, Diso, Da, Dratio, D, D_prime, R = self.get_spheroid(Dpar=Dpar, Dper=Dper, theta=theta, phi=phi)
861
862
863 self.interpreter.pipe.create('spheroid2', 'mf')
864
865
866 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')
867
868
869 self.check_spheroid(tm, Dpar, Dper, Diso, Da, Dratio, theta, phi, D, D_prime, R, spheroid_type='prolate')
870
871
873 """Test the initialisation of the prolate spheroid diffusion tensor using parameter set 2."""
874
875
876 Dpar, Dper, theta, phi = 8e7, 4e7, 0.5, 1.0
877 tm, Dx, Dy, Dz, Diso, Da, Dratio, D, D_prime, R = self.get_spheroid(Dpar=Dpar, Dper=Dper, theta=theta, phi=phi)
878
879
880 self.interpreter.pipe.create('spheroid2', 'mf')
881
882
883 self.interpreter.diffusion_tensor.init((tm, Dratio, theta, phi), param_types=2, angle_units='rad')
884
885
886 self.check_spheroid(tm, Dpar, Dper, Diso, Da, Dratio, theta, phi, D, D_prime, R, spheroid_type='prolate')
887
888
890 """Test the initialisation of the prolate spheroid diffusion tensor using parameter set 3."""
891
892
893 Dpar, Dper, theta, phi = 8e7, 4e7, 0.5, 1.0
894 tm, Dx, Dy, Dz, Diso, Da, Dratio, D, D_prime, R = self.get_spheroid(Dpar=Dpar, Dper=Dper, theta=theta, phi=phi)
895
896
897 self.interpreter.pipe.create('spheroid2', 'mf')
898
899
900 self.interpreter.diffusion_tensor.init((Dpar, Dper, theta, phi), param_types=3, angle_units='rad')
901
902
903 self.check_spheroid(tm, Dpar, Dper, Diso, Da, Dratio, theta, phi, D, D_prime, R, spheroid_type='prolate')
904
905
907 """Test the initialisation of the prolate spheroid diffusion tensor using parameter set 4."""
908
909
910 Dpar, Dper, theta, phi = 8e7, 4e7, 0.5, 1.0
911 tm, Dx, Dy, Dz, Diso, Da, Dratio, D, D_prime, R = self.get_spheroid(Dpar=Dpar, Dper=Dper, theta=theta, phi=phi)
912
913
914 self.interpreter.pipe.create('spheroid2', 'mf')
915
916
917 self.interpreter.diffusion_tensor.init((Diso, Dratio, theta, phi), param_types=4, angle_units='rad')
918
919
920 self.check_spheroid(tm, Dpar, Dper, Diso, Da, Dratio, theta, phi, D, D_prime, R, spheroid_type='prolate')
921
922
924 """Check that the ellipsoid diffusion tensor optimisation functions correctly."""
925
926
927 reset()
928
929
930 ds.diff_type = 'ellipsoid'
931
932
933 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'diff_tensor'+sep+'tensor_opt.py')
934
935
936 print(cdp.diff_tensor)
937
938
939 Dx, Dy, Dz, Diso, Da, Dr, alpha, beta, gamma, D, D_prime, R = self.get_ellipsoid()
940
941
942 self.assertAlmostEqual(cdp.chi2, 0.0)
943 self.assertEqual(cdp.diff_tensor.fixed, False)
944 self.assertEqual(cdp.diff_tensor.type, 'ellipsoid')
945
946
947 self.check_ellipsoid(Dx, Dy, Dz, Diso, Da, Dr, alpha, beta, gamma, D, D_prime, R)
948
949
951 """Check that the sphere diffusion tensor optimisation functions correctly."""
952
953
954 reset()
955
956
957 ds.diff_type = 'sphere'
958
959
960 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'diff_tensor'+sep+'tensor_opt.py')
961
962
963 self.assertAlmostEqual(cdp.chi2, 0.0)
964 self.assertEqual(cdp.diff_tensor.fixed, False)
965 self.assertEqual(cdp.diff_tensor.type, 'sphere')
966 self.assertAlmostEqual(cdp.diff_tensor.tm * 1e9, 1.0/(6.0*2e7) * 1e9)
967 self.assertEqual(cdp.diff_tensor.rotation[0, 0], 1.0)
968 self.assertEqual(cdp.diff_tensor.rotation[1, 1], 1.0)
969 self.assertEqual(cdp.diff_tensor.rotation[2, 2], 1.0)
970 self.assertEqual(cdp.diff_tensor.rotation[0, 1], 0.0)
971 self.assertEqual(cdp.diff_tensor.rotation[0, 2], 0.0)
972 self.assertEqual(cdp.diff_tensor.rotation[1, 2], 0.0)
973 self.assertEqual(cdp.diff_tensor.rotation[1, 0], 0.0)
974 self.assertEqual(cdp.diff_tensor.rotation[2, 0], 0.0)
975 self.assertEqual(cdp.diff_tensor.rotation[2, 1], 0.0)
976
977
979 """Check that the spheroid diffusion tensor optimisation functions correctly."""
980
981
982 reset()
983
984
985 ds.diff_type = 'spheroid'
986
987
988 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'diff_tensor'+sep+'tensor_opt.py')
989
990
991 self.assertAlmostEqual(cdp.chi2, 0.0)
992 self.assertEqual(cdp.diff_tensor.fixed, False)
993 self.assertEqual(cdp.diff_tensor.type, 'spheroid')
994 self.assertAlmostEqual(cdp.diff_tensor.tm * 1e9, 1.0/(6.0*7e7/3.0) * 1e9)
995 self.assertAlmostEqual(cdp.diff_tensor.Da * 1e-7, 1.0)
996 self.assertAlmostEqual(cdp.diff_tensor.theta, 2.0)
997 self.assertAlmostEqual(cdp.diff_tensor.phi, pi-0.5)
998