1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 """Module for the handling of Frame Order."""
24
25
26 from math import cos
27
28
29 from lib.order import order_parameters
30 from lib.frame_order.matrix_ops import rotate_daeg
31
32
34 """Generate the rotated 2nd degree Frame Order matrix for the free rotor isotropic cone.
35
36 The cone axis is assumed to be parallel to the z-axis in the eigenframe. In this model, the three order parameters are defined as::
37
38 S1 = S2,
39 S3 = 0
40
41
42 @param matrix: The Frame Order matrix, 2nd degree to be populated.
43 @type matrix: numpy 9D, rank-2 array
44 @param Rx2_eigen: The Kronecker product of the eigenframe rotation matrix with itself.
45 @type Rx2_eigen: numpy 9D, rank-2 array
46 @param s1: The cone order parameter.
47 @type s1: float
48 """
49
50
51 populate_2nd_eigenframe_iso_cone_free_rotor(matrix, s1)
52
53
54 return rotate_daeg(matrix, Rx2_eigen)
55
56
58 """Populate the 2nd degree Frame Order matrix in the eigenframe for the free rotor isotropic cone.
59
60 The cone axis is assumed to be parallel to the z-axis in the eigenframe. In this model, the three order parameters are defined as::
61
62 S1 = S2,
63 S3 = 0
64
65 This is in the Kronecker product form.
66
67
68 @param matrix: The Frame Order matrix, 2nd degree.
69 @type matrix: numpy 9D, rank-2 array
70 @param s1: The cone order parameter.
71 @type s1: float
72 """
73
74
75 for i in range(9):
76 for j in range(9):
77 matrix[i, j] = 0.0
78
79
80 matrix[0, 0] = matrix[4, 4] = (s1 + 2.0) / 6.0
81 matrix[0, 4] = matrix[4, 0] = matrix[0, 0]
82
83
84 matrix[8, 8] = (2.0*s1 + 1.0) / 3.0
85
86
87 matrix[0, 8] = matrix[8, 0] = (1.0 - s1) / 3.0
88 matrix[4, 8] = matrix[8, 4] = matrix[0, 8]
89
90
91 theta = order_parameters.iso_cone_S_to_theta(s1)
92
93
94 matrix[1, 1] = matrix[3, 3] = (cos(theta) + 1.0) / 4.0
95 matrix[1, 3] = matrix[3, 1] = -matrix[1, 1]
96