Author: bugman Date: Tue Aug 3 22:48:06 2010 New Revision: 11395 URL: http://svn.gna.org/viewcvs/relax?rev=11395&view=rev Log: Abstracted the common code in compile_2nd_matrix_*() into rotate_daeg(). This will significantly simplify the addition of all of the 12 models. Modified: 1.3/maths_fns/frame_order_matrix_ops.py Modified: 1.3/maths_fns/frame_order_matrix_ops.py URL: http://svn.gna.org/viewcvs/relax/1.3/maths_fns/frame_order_matrix_ops.py?rev=11395&r1=11394&r2=11395&view=diff ============================================================================== --- 1.3/maths_fns/frame_order_matrix_ops.py (original) +++ 1.3/maths_fns/frame_order_matrix_ops.py Tue Aug 3 22:48:06 2010 @@ -154,23 +154,8 @@ matrix[2, 6] = matrix[6, 2] = fact * quad(part_int_daeg2_pseudo_ellipse_26, -pi, pi, args=(theta_x, theta_y, sigma_max), full_output=1)[0] matrix[5, 7] = matrix[7, 5] = fact * quad(part_int_daeg2_pseudo_ellipse_57, -pi, pi, args=(theta_x, theta_y, sigma_max), full_output=1)[0] - # Average position rotation. - euler_to_R_zyz(eigen_alpha, eigen_beta, eigen_gamma, R) - - # The outer product of R. - R_kron = kron_prod(R, R) - - # Perform the T23 transpose to obtain the Kronecker product matrix! - transpose_23(matrix) - - # Rotate. - matrix = dot(R_kron, dot(matrix, transpose(R_kron))) - - # Perform T23 again to return back. - transpose_23(matrix) - - # Return the matrix. - return matrix + # Rotate and return the frame order matrix. + return rotate_daeg(matrix, R, eigen_alpha, eigen_beta, eigen_gamma) def compile_2nd_matrix_pseudo_ellipse_free_rotor(matrix, R, eigen_alpha, eigen_beta, eigen_gamma, theta_x, theta_y): @@ -209,23 +194,8 @@ # Off diagonal set 2. matrix[1, 3] = matrix[3, 1] = -matrix[1, 1] - # Average position rotation. - euler_to_R_zyz(eigen_alpha, eigen_beta, eigen_gamma, R) - - # The outer product of R. - R_kron = kron_prod(R, R) - - # Perform the T23 transpose to obtain the Kronecker product matrix! - transpose_23(matrix) - - # Rotate. - matrix = dot(R_kron, dot(matrix, transpose(R_kron))) - - # Perform T23 again to return back. - transpose_23(matrix) - - # Return the matrix. - return matrix + # Rotate and return the frame order matrix. + return rotate_daeg(matrix, R, eigen_alpha, eigen_beta, eigen_gamma) def compile_2nd_matrix_pseudo_ellipse_torsionless(matrix, R, eigen_alpha, eigen_beta, eigen_gamma, theta_x, theta_y): @@ -271,23 +241,8 @@ matrix[2, 6] = matrix[6, 2] = fact * quad(part_int_daeg2_pseudo_ellipse_torsionless_26, -pi, pi, args=(theta_x, theta_y), full_output=1)[0] matrix[5, 7] = matrix[7, 5] = fact * quad(part_int_daeg2_pseudo_ellipse_torsionless_57, -pi, pi, args=(theta_x, theta_y), full_output=1)[0] - # Average position rotation. - euler_to_R_zyz(eigen_alpha, eigen_beta, eigen_gamma, R) - - # The outer product of R. - R_kron = kron_prod(R, R) - - # Perform the T23 transpose to obtain the Kronecker product matrix! - transpose_23(matrix) - - # Rotate. - matrix = dot(R_kron, dot(matrix, transpose(R_kron))) - - # Perform T23 again to return back. - transpose_23(matrix) - - # Return the matrix. - return matrix + # Rotate and return the frame order matrix. + return rotate_daeg(matrix, R, eigen_alpha, eigen_beta, eigen_gamma) def daeg_to_rotational_superoperator(daeg, Rsuper): @@ -1359,6 +1314,40 @@ red_tensor[4] = red_tensor[4] + (D[4, 8] + D[5, 7])*A[4] +def rotate_daeg(matrix, R, eigen_alpha, eigen_beta, eigen_gamma): + """Rotate the given frame order matrix. + + @param matrix: The Frame Order matrix, 2nd degree to be populated. + @type matrix: numpy 9D, rank-2 array + @param R: The rotation matrix to be populated. + @type R: numpy 3D, rank-2 array + @param eigen_alpha: The eigenframe rotation alpha Euler angle. + @type eigen_alpha: float + @param eigen_beta: The eigenframe rotation beta Euler angle. + @type eigen_beta: float + @param eigen_gamma: The eigenframe rotation gamma Euler angle. + @type eigen_gamma: float + """ + + # Average position rotation. + euler_to_R_zyz(eigen_alpha, eigen_beta, eigen_gamma, R) + + # The outer product of R. + R_kron = kron_prod(R, R) + + # Perform the T23 transpose to obtain the Kronecker product matrix! + transpose_23(matrix) + + # Rotate. + matrix_rot = dot(R_kron, dot(matrix, transpose(R_kron))) + + # Perform T23 again to return back. + transpose_23(matrix_rot) + + # Return the matrix. + return matrix_rot + + def tmax_pseudo_ellipse(phi, theta_x, theta_y): """The pseudo-ellipse tilt-torsion polar angle.