def test_compile_2nd_matrix_pseudo_ellipse_half_cone_90_y(self): """Check if compile_2nd_matrix_pseudo_ellipse() can return the matrix for a half cone rotated 90 degrees about y.""" # The Kronecker product of the eigenframe rotation. Rx2_eigen = self.calc_Rx2_eigen_full(0.0, pi/2.0, 0.0) # Calculate the frame order matrix. f2 = compile_2nd_matrix_pseudo_ellipse(self.f2_temp, Rx2_eigen, pi/2.0, pi/2.0, pi) # Print outs. print_frame_order_2nd_degree(self.f2_half_cone_90_y, "The half cone frame order matrix") print_frame_order_2nd_degree(f2, "Compiled frame order") # Check the values. for i in range(9): for j in range(9): print("Element %s, %s." % (i, j)) self.assertAlmostEqual(f2[i, j], self.f2_half_cone_90_y[i, j])
def test_compile_2nd_matrix_pseudo_ellipse_disorder(self): """Check if compile_2nd_matrix_pseudo_ellipse() can return the identity matrix for disorder.""" # The Kronecker product of the eigenframe rotation. Rx2_eigen = self.calc_Rx2_eigen_full(0.0, 0.0, 0.0) # Calculate the frame order matrix. f2 = compile_2nd_matrix_pseudo_ellipse(self.f2_temp, Rx2_eigen, pi, pi, pi) # Print outs. print_frame_order_2nd_degree(self.I_disorder, "Identity for disorder") print_frame_order_2nd_degree(f2, "Compiled frame order") # Check the values. for i in range(9): for j in range(9): print("Element %s, %s." % (i, j)) self.assertAlmostEqual(f2[i, j], self.I_disorder[i, j])
def test_compile_2nd_matrix_pseudo_ellipse_disorder(self): """Check if compile_2nd_matrix_pseudo_ellipse() can return the identity matrix for disorder.""" # The Kronecker product of the eigenframe rotation. Rx2_eigen = self.calc_Rx2_eigen_full(0.0, 0.0, 0.0) # Calculate the frame order matrix. f2 = compile_2nd_matrix_pseudo_ellipse(self.f2_temp, Rx2_eigen, pi, pi, pi) # Print outs. print_frame_order_2nd_degree(self.I_disorder, "Identity for disorder") print_frame_order_2nd_degree(f2, "Compiled frame order") # Check the values. for i in range(9): for j in range(9): print("Element %s, %s." % (i, j)) self.assertAlmostEqual(f2[i, j], self.I_disorder[i, j])
def test_compile_2nd_matrix_pseudo_ellipse_half_cone_90_y(self): """Check if compile_2nd_matrix_pseudo_ellipse() can return the matrix for a half cone rotated 90 degrees about y.""" # The Kronecker product of the eigenframe rotation. Rx2_eigen = self.calc_Rx2_eigen_full(0.0, pi/2.0, 0.0) # Calculate the frame order matrix. f2 = compile_2nd_matrix_pseudo_ellipse(self.f2_temp, Rx2_eigen, pi/2.0, pi/2.0, pi) # Print outs. print_frame_order_2nd_degree(self.f2_half_cone_90_y, "The half cone frame order matrix") print_frame_order_2nd_degree(f2, "Compiled frame order") # Check the values. for i in range(9): for j in range(9): print("Element %s, %s." % (i, j)) self.assertAlmostEqual(f2[i, j], self.f2_half_cone_90_y[i, j])
def test_compile_2nd_matrix_pseudo_ellipse_restriction_test6(self): """Check if compile_2nd_matrix_pseudo_ellipse() can approximate compile_2nd_matrix_iso_cone_torsionless().""" # The Kronecker product of the eigenframe rotation. Rx2_eigen_a = self.calc_Rx2_eigen_full(0.0, 0.0, 0.0) Rx2_eigen_b = self.calc_Rx2_eigen_axis(0.0, 0.0) # Calculate the frame order matrix. f2a = compile_2nd_matrix_pseudo_ellipse(self.f2_temp, Rx2_eigen_a, pi/8.6, pi/8.6, 0) f2b = compile_2nd_matrix_iso_cone_torsionless(self.f2_temp, Rx2_eigen_b, pi/8.6) # Print outs. print_frame_order_2nd_degree(f2a, "Pseudo-ellipse frame order") print_frame_order_2nd_degree(f2b, "Torsionless isotropic cone frame order") print_frame_order_2nd_degree(f2b-f2a, "difference") # Check the values. for i in range(9): for j in range(9): print("Element %s, %s." % (i, j)) self.assertAlmostEqual(f2a[i, j], f2b[i, j])
def test_compile_2nd_matrix_pseudo_ellipse_restriction_test2(self): """Check if compile_2nd_matrix_pseudo_ellipse() can approximate a pi/2 rotated compile_2nd_matrix_pseudo_ellipse_free_rotor().""" # The Kronecker product of the eigenframe rotation. Rx2_eigen_a = self.calc_Rx2_eigen_full(0.0, 0.0, 0.0) Rx2_eigen_b = self.calc_Rx2_eigen_full(pi/2, 0.0, 0.0) # Calculate the frame order matrix. f2a = compile_2nd_matrix_pseudo_ellipse(self.f2_temp, Rx2_eigen_a, pi/1.6, pi/5.8, pi) f2b = compile_2nd_matrix_pseudo_ellipse_free_rotor(self.f2_temp, Rx2_eigen_b, pi/5.8, pi/1.6) # Print outs. print_frame_order_2nd_degree(f2a, "Pseudo-ellipse frame order") print_frame_order_2nd_degree(f2b, "pi/2 rotated free rotor pseudo-ellipse frame order") print_frame_order_2nd_degree(f2b-f2a, "difference") # Check the values. for i in range(9): for j in range(9): print("Element %s, %s." % (i, j)) self.assertAlmostEqual(f2a[i, j], f2b[i, j])
def test_compile_2nd_matrix_pseudo_ellipse_restriction_test6(self): """Check if compile_2nd_matrix_pseudo_ellipse() can approximate compile_2nd_matrix_iso_cone_torsionless().""" # The Kronecker product of the eigenframe rotation. Rx2_eigen_a = self.calc_Rx2_eigen_full(0.0, 0.0, 0.0) Rx2_eigen_b = self.calc_Rx2_eigen_axis(0.0, 0.0) # Calculate the frame order matrix. f2a = compile_2nd_matrix_pseudo_ellipse(self.f2_temp, Rx2_eigen_a, pi/8.6, pi/8.6, 0) f2b = compile_2nd_matrix_iso_cone_torsionless(self.f2_temp, Rx2_eigen_b, pi/8.6) # Print outs. print_frame_order_2nd_degree(f2a, "Pseudo-ellipse frame order") print_frame_order_2nd_degree(f2b, "Torsionless isotropic cone frame order") print_frame_order_2nd_degree(f2b-f2a, "difference") # Check the values. for i in range(9): for j in range(9): print("Element %s, %s." % (i, j)) self.assertAlmostEqual(f2a[i, j], f2b[i, j])
def test_compile_2nd_matrix_pseudo_ellipse_restriction_test2(self): """Check if compile_2nd_matrix_pseudo_ellipse() can approximate a pi/2 rotated compile_2nd_matrix_pseudo_ellipse_free_rotor().""" # The Kronecker product of the eigenframe rotation. Rx2_eigen_a = self.calc_Rx2_eigen_full(0.0, 0.0, 0.0) Rx2_eigen_b = self.calc_Rx2_eigen_full(pi/2, 0.0, 0.0) # Calculate the frame order matrix. f2a = compile_2nd_matrix_pseudo_ellipse(self.f2_temp, Rx2_eigen_a, pi/1.6, pi/5.8, pi) f2b = compile_2nd_matrix_pseudo_ellipse_free_rotor(self.f2_temp, Rx2_eigen_b, pi/5.8, pi/1.6) # Print outs. print_frame_order_2nd_degree(f2a, "Pseudo-ellipse frame order") print_frame_order_2nd_degree(f2b, "pi/2 rotated free rotor pseudo-ellipse frame order") print_frame_order_2nd_degree(f2b-f2a, "difference") # Check the values. for i in range(9): for j in range(9): print("Element %s, %s." % (i, j)) self.assertAlmostEqual(f2a[i, j], f2b[i, j])
def test_compile_2nd_matrix_pseudo_ellipse_point1(self): """Check the operation of the compile_2nd_matrix_pseudo_ellipse() function.""" # The simulated in frame pseudo-ellipse 2nd degree frame order matrix. real = array( [[ 0.7901, 0, 0, 0, 0.7118, 0, 0, 0, 0.6851], [ 0, 0.0816, 0, -0.0606, 0, 0, 0, 0, 0], [ 0, 0, 0.1282, 0, 0, 0, -0.1224, 0, 0], [ 0, -0.0606, 0, 0.0708, 0, 0, 0, 0, 0], [ 0.7118, 0, 0, 0, 0.6756, 0, 0, 0, 0.6429], [ 0, 0, 0, 0, 0, 0.2536, 0, -0.2421, 0], [ 0, 0, -0.1224, 0, 0, 0, 0.1391, 0, 0], [ 0, 0, 0, 0, 0, -0.2421, 0, 0.2427, 0], [ 0.6851, 0, 0, 0, 0.6429, 0, 0, 0, 0.6182]], float64) transpose_23(real) # Init. x = pi/4.0 y = 3.0*pi/8.0 z = pi/6.0 # The Kronecker product of the eigenframe rotation. Rx2_eigen = self.calc_Rx2_eigen_full(0.0, 0.0, 0.0) # Calculate the matrix. f2 = compile_2nd_matrix_pseudo_ellipse(self.f2_temp, Rx2_eigen, x, y, z) # Print out. print_frame_order_2nd_degree(real, "real") print_frame_order_2nd_degree(f2, "calculated") print_frame_order_2nd_degree(real-f2, "difference") # Check the values. for i in range(9): for j in range(9): print("Element %s, %s; diff %s." % (i, j, f2[i, j] - real[i, j])) self.assert_(abs(f2[i, j] - real[i, j]) < 1e-4)
def test_compile_2nd_matrix_pseudo_ellipse_point1(self): """Check the operation of the compile_2nd_matrix_pseudo_ellipse() function.""" # The simulated in frame pseudo-ellipse 2nd degree frame order matrix. real = array( [[ 0.7901, 0, 0, 0, 0.7118, 0, 0, 0, 0.6851], [ 0, 0.0816, 0, -0.0606, 0, 0, 0, 0, 0], [ 0, 0, 0.1282, 0, 0, 0, -0.1224, 0, 0], [ 0, -0.0606, 0, 0.0708, 0, 0, 0, 0, 0], [ 0.7118, 0, 0, 0, 0.6756, 0, 0, 0, 0.6429], [ 0, 0, 0, 0, 0, 0.2536, 0, -0.2421, 0], [ 0, 0, -0.1224, 0, 0, 0, 0.1391, 0, 0], [ 0, 0, 0, 0, 0, -0.2421, 0, 0.2427, 0], [ 0.6851, 0, 0, 0, 0.6429, 0, 0, 0, 0.6182]], float64) transpose_23(real) # Init. x = pi/4.0 y = 3.0*pi/8.0 z = pi/6.0 # The Kronecker product of the eigenframe rotation. Rx2_eigen = self.calc_Rx2_eigen_full(0.0, 0.0, 0.0) # Calculate the matrix. f2 = compile_2nd_matrix_pseudo_ellipse(self.f2_temp, Rx2_eigen, x, y, z) # Print out. print_frame_order_2nd_degree(real, "real") print_frame_order_2nd_degree(f2, "calculated") print_frame_order_2nd_degree(real-f2, "difference") # Check the values. for i in range(9): for j in range(9): print("Element %s, %s; diff %s." % (i, j, f2[i, j] - real[i, j])) self.assert_(abs(f2[i, j] - real[i, j]) < 1e-4)
def test_compile_2nd_matrix_pseudo_ellipse_point3(self): """Check the operation of the compile_2nd_matrix_pseudo_ellipse() function.""" # The simulated out of frame pseudo-ellipse 2nd degree frame order matrix (1e6 ensembles). real = array( [[ 0.6314, 0.0232, -0.0344, 0.0232, 0.1558, -0.0222, -0.0344, -0.0222, 0.2128], [ 0.0220, 0.6366, 0.0069, -0.1352, 0.0243, -0.0722, 0.0206, -0.0277, -0.0464], [ -0.0332, 0.0097, 0.6137, 0.0222, 0.0668, 0.0173, -0.1967, 0.0489, -0.0336], [ 0.0220, -0.1352, 0.0206, 0.6366, 0.0243, -0.0277, 0.0069, -0.0722, -0.0464], [ 0.1554, 0.0233, 0.0669, 0.0233, 0.6775, 0.0113, 0.0669, 0.0113, 0.1671], [ -0.0222, -0.0738, 0.0188, -0.0286, 0.0113, 0.6310, 0.0507, -0.1502, 0.0109], [ -0.0332, 0.0222, -0.1967, 0.0097, 0.0668, 0.0489, 0.6137, 0.0173, -0.0336], [ -0.0222, -0.0286, 0.0507, -0.0738, 0.0113, -0.1502, 0.0188, 0.6310, 0.0109], [ 0.2132, -0.0465, -0.0324, -0.0465, 0.1667, 0.0110, -0.0324, 0.0110, 0.6201]], float64) # Init. x = 60.0 / 360.0 * 2.0 * pi y = 3.0 * pi / 8.0 z = pi / 6.0 # The Kronecker product of the eigenframe rotation. Rx2_eigen = self.calc_Rx2_eigen_full(self.out_of_frame_alpha, self.out_of_frame_beta, self.out_of_frame_gamma) # Calculate the matrix. f2 = compile_2nd_matrix_pseudo_ellipse(self.f2_temp, Rx2_eigen, x, y, z) # Print out. print_frame_order_2nd_degree(real, "real") print_frame_order_2nd_degree(f2, "calculated") print_frame_order_2nd_degree(real-f2, "difference") # Check the values. for i in range(9): for j in range(9): print("Element %s, %s; diff %s." % (i, j, f2[i, j] - real[i, j])) self.assert_(abs(f2[i, j] - real[i, j]) < 1e-3)
def test_compile_2nd_matrix_pseudo_ellipse_point2(self): """Check the operation of the compile_2nd_matrix_pseudo_ellipse() function.""" # The simulated in frame pseudo-ellipse 2nd degree frame order matrix (1e6 ensembles). real = array( [[ 0.7379, 0, 0, 0, 0.1338, 0, 0, 0, 0.1284], [ 0, 0.6637, 0, -0.1085, 0, 0, 0, 0, 0], [ 0, 0, 0.6603, 0, 0, 0, -0.1181, 0, 0], [ 0, -0.1085, 0, 0.6637, 0, 0, 0, 0, 0], [ 0.1154, 0, 0, 0, 0.6309, 0, 0, 0, 0.2536], [ 0, 0, 0, 0, 0, 0.6196, 0, -0.2336, 0], [ 0, 0, -0.1181, 0, 0, 0, 0.6603, 0, 0], [ 0, 0, 0, 0, 0, -0.2336, 0, 0.6196, 0], [ 0.1467, 0, 0, 0, 0.2353, 0, 0, 0, 0.6180]], float64) # Init. x = pi/4.0 y = 3.0*pi/8.0 z = 40.0 / 360.0 * 2.0 * pi # The Kronecker product of the eigenframe rotation. Rx2_eigen = self.calc_Rx2_eigen_full(0.0, 0.0, 0.0) # Calculate the matrix. f2 = compile_2nd_matrix_pseudo_ellipse(self.f2_temp, Rx2_eigen, x, y, z) # Print out. print_frame_order_2nd_degree(real, "real") print_frame_order_2nd_degree(f2, "calculated") print_frame_order_2nd_degree(real-f2, "difference") # Check the values. for i in range(9): for j in range(9): print("Element %s, %s; diff %s." % (i, j, f2[i, j] - real[i, j])) self.assert_(abs(f2[i, j] - real[i, j]) < 1e-3)
def test_compile_2nd_matrix_pseudo_ellipse_point3(self): """Check the operation of the compile_2nd_matrix_pseudo_ellipse() function.""" # The simulated out of frame pseudo-ellipse 2nd degree frame order matrix (1e6 ensembles). real = array( [[ 0.6314, 0.0232, -0.0344, 0.0232, 0.1558, -0.0222, -0.0344, -0.0222, 0.2128], [ 0.0220, 0.6366, 0.0069, -0.1352, 0.0243, -0.0722, 0.0206, -0.0277, -0.0464], [ -0.0332, 0.0097, 0.6137, 0.0222, 0.0668, 0.0173, -0.1967, 0.0489, -0.0336], [ 0.0220, -0.1352, 0.0206, 0.6366, 0.0243, -0.0277, 0.0069, -0.0722, -0.0464], [ 0.1554, 0.0233, 0.0669, 0.0233, 0.6775, 0.0113, 0.0669, 0.0113, 0.1671], [ -0.0222, -0.0738, 0.0188, -0.0286, 0.0113, 0.6310, 0.0507, -0.1502, 0.0109], [ -0.0332, 0.0222, -0.1967, 0.0097, 0.0668, 0.0489, 0.6137, 0.0173, -0.0336], [ -0.0222, -0.0286, 0.0507, -0.0738, 0.0113, -0.1502, 0.0188, 0.6310, 0.0109], [ 0.2132, -0.0465, -0.0324, -0.0465, 0.1667, 0.0110, -0.0324, 0.0110, 0.6201]], float64) # Init. x = 60.0 / 360.0 * 2.0 * pi y = 3.0 * pi / 8.0 z = pi / 6.0 # The Kronecker product of the eigenframe rotation. Rx2_eigen = self.calc_Rx2_eigen_full(self.out_of_frame_alpha, self.out_of_frame_beta, self.out_of_frame_gamma) # Calculate the matrix. f2 = compile_2nd_matrix_pseudo_ellipse(self.f2_temp, Rx2_eigen, x, y, z) # Print out. print_frame_order_2nd_degree(real, "real") print_frame_order_2nd_degree(f2, "calculated") print_frame_order_2nd_degree(real-f2, "difference") # Check the values. for i in range(9): for j in range(9): print("Element %s, %s; diff %s." % (i, j, f2[i, j] - real[i, j])) self.assert_(abs(f2[i, j] - real[i, j]) < 1e-3)
def test_compile_2nd_matrix_pseudo_ellipse_point2(self): """Check the operation of the compile_2nd_matrix_pseudo_ellipse() function.""" # The simulated in frame pseudo-ellipse 2nd degree frame order matrix (1e6 ensembles). real = array( [[ 0.7379, 0, 0, 0, 0.1338, 0, 0, 0, 0.1284], [ 0, 0.6637, 0, -0.1085, 0, 0, 0, 0, 0], [ 0, 0, 0.6603, 0, 0, 0, -0.1181, 0, 0], [ 0, -0.1085, 0, 0.6637, 0, 0, 0, 0, 0], [ 0.1154, 0, 0, 0, 0.6309, 0, 0, 0, 0.2536], [ 0, 0, 0, 0, 0, 0.6196, 0, -0.2336, 0], [ 0, 0, -0.1181, 0, 0, 0, 0.6603, 0, 0], [ 0, 0, 0, 0, 0, -0.2336, 0, 0.6196, 0], [ 0.1467, 0, 0, 0, 0.2353, 0, 0, 0, 0.6180]], float64) # Init. x = pi/4.0 y = 3.0*pi/8.0 z = 40.0 / 360.0 * 2.0 * pi # The Kronecker product of the eigenframe rotation. Rx2_eigen = self.calc_Rx2_eigen_full(0.0, 0.0, 0.0) # Calculate the matrix. f2 = compile_2nd_matrix_pseudo_ellipse(self.f2_temp, Rx2_eigen, x, y, z) # Print out. print_frame_order_2nd_degree(real, "real") print_frame_order_2nd_degree(f2, "calculated") print_frame_order_2nd_degree(real-f2, "difference") # Check the values. for i in range(9): for j in range(9): print("Element %s, %s; diff %s." % (i, j, f2[i, j] - real[i, j])) self.assert_(abs(f2[i, j] - real[i, j]) < 1e-3)
def __init__(self): """Calculate the frame order at infinity. This is when the starting positions are random. """ # Loop over the models. for model_index in range(len(MODELS)): # Aliases. model = MODELS[model_index] model_text = MODEL_TEXT[model_index] # Loop over the tags. for tag in TAGS: # Set up the variables to loop over. if model in ['rotor', 'free_rotor']: vars = ['Z'] elif model in ['iso_cone_free_rotor', 'iso_cone_torsionless']: vars = ['X'] elif model in ['iso_cone']: vars = ['X', 'Z'] elif model in ['double_rotor', 'pseudo-ellipse_free_rotor', 'pseudo-ellipse_torsionless']: vars = ['X', 'Y'] elif model in ['pseudo-ellipse']: vars = ['X', 'Y', 'Z'] else: raise RelaxError("Unknown model '%s'." % model) # Loop over the variables. for var in vars: # The file name. file_name = '_%s_%s_theta_%s_calc.agr' % (model, tag, lower(var)) print("Creating the '*%s' files." % file_name) # Set up the eigenframe. self.setup_eigenframe(tag=tag) # The Kronecker product of the eigenframe rotation. Rx2_eigen = kron_prod(self.eigenframe, self.eigenframe) # Set the initial storage structures. self.init_storage() # Loop over the angle incs. for i in range(INC+1): # Get the angle for the increment. theta = self.get_angle(i-1, model=model, var=var) # Vary X. if var == 'X': theta_x = theta theta_y = THETA_Y theta_z = THETA_Z # Vary Y. elif var == 'Y': theta_x = THETA_X theta_y = theta theta_z = THETA_Z # Vary Z. elif var == 'Z': theta_x = THETA_X theta_y = THETA_Y theta_z = theta # Calculate the frame order matrices. if model == 'rotor': self.first_frame_order[i] = rotor.compile_1st_matrix_rotor(self.first_frame_order[i], self.eigenframe, theta_z) self.second_frame_order[i] = rotor.compile_2nd_matrix_rotor(self.second_frame_order[i], Rx2_eigen, theta_z) elif model == 'free_rotor': self.first_frame_order[i] = free_rotor.compile_1st_matrix_free_rotor(self.first_frame_order[i], self.eigenframe) self.second_frame_order[i] = free_rotor.compile_2nd_matrix_free_rotor(self.second_frame_order[i], Rx2_eigen) elif model == 'iso_cone': self.first_frame_order[i] = iso_cone.compile_1st_matrix_iso_cone(self.first_frame_order[i], self.eigenframe, theta_x, theta_z) self.second_frame_order[i] = iso_cone.compile_2nd_matrix_iso_cone(self.second_frame_order[i], Rx2_eigen, theta_x, theta_z) elif model == 'iso_cone_free_rotor': self.first_frame_order[i] = iso_cone_free_rotor.compile_1st_matrix_iso_cone_free_rotor(self.first_frame_order[i], self.eigenframe, theta_x) self.second_frame_order[i] = iso_cone_free_rotor.compile_2nd_matrix_iso_cone_free_rotor(self.second_frame_order[i], Rx2_eigen, theta_x) elif model == 'iso_cone_torsionless': self.first_frame_order[i] = iso_cone_torsionless.compile_1st_matrix_iso_cone_torsionless(self.first_frame_order[i], self.eigenframe, theta_x) self.second_frame_order[i] = iso_cone_torsionless.compile_2nd_matrix_iso_cone_torsionless(self.second_frame_order[i], Rx2_eigen, theta_x) elif model == 'pseudo-ellipse': self.first_frame_order[i] = pseudo_ellipse.compile_1st_matrix_pseudo_ellipse(self.first_frame_order[i], self.eigenframe, theta_x, theta_y, theta_z) self.second_frame_order[i] = pseudo_ellipse.compile_2nd_matrix_pseudo_ellipse(self.second_frame_order[i], Rx2_eigen, theta_x, theta_y, theta_z) elif model == 'pseudo-ellipse_free_rotor': self.first_frame_order[i] = pseudo_ellipse_free_rotor.compile_1st_matrix_pseudo_ellipse_free_rotor(self.first_frame_order[i], self.eigenframe, theta_x, theta_y) self.second_frame_order[i] = pseudo_ellipse_free_rotor.compile_2nd_matrix_pseudo_ellipse_free_rotor(self.second_frame_order[i], Rx2_eigen, theta_x, theta_y) elif model == 'pseudo-ellipse_torsionless': self.first_frame_order[i] = pseudo_ellipse_torsionless.compile_1st_matrix_pseudo_ellipse_torsionless(self.first_frame_order[i], self.eigenframe, theta_x, theta_y) self.second_frame_order[i] = pseudo_ellipse_torsionless.compile_2nd_matrix_pseudo_ellipse_torsionless(self.second_frame_order[i], Rx2_eigen, theta_x, theta_y) elif model == 'double_rotor': self.first_frame_order[i] = double_rotor.compile_1st_matrix_double_rotor(self.first_frame_order[i], self.eigenframe, theta_y, theta_x) self.second_frame_order[i] = double_rotor.compile_2nd_matrix_double_rotor(self.second_frame_order[i], Rx2_eigen, theta_y, theta_x) else: raise RelaxError("Unknown model '%s'." % model) # Write the data. self.write_data(file_name=file_name, model=model, model_text=model_text, var=var)
def __init__(self): """Calculate the frame order at infinity. This is when the starting positions are random. """ # Loop over the models. for model_index in range(len(MODELS)): # Aliases. model = MODELS[model_index] model_text = MODEL_TEXT[model_index] # Loop over the tags. for tag in TAGS: # Set up the variables to loop over. if model in ['rotor', 'free_rotor']: vars = ['Z'] elif model in ['iso_cone_free_rotor', 'iso_cone_torsionless']: vars = ['X'] elif model in ['iso_cone']: vars = ['X', 'Z'] elif model in [ 'double_rotor', 'pseudo-ellipse_free_rotor', 'pseudo-ellipse_torsionless' ]: vars = ['X', 'Y'] elif model in ['pseudo-ellipse']: vars = ['X', 'Y', 'Z'] else: raise RelaxError("Unknown model '%s'." % model) # Loop over the variables. for var in vars: # The file name. file_name = '_%s_%s_theta_%s_calc.agr' % (model, tag, lower(var)) print("Creating the '*%s' files." % file_name) # Set up the eigenframe. self.setup_eigenframe(tag=tag) # The Kronecker product of the eigenframe rotation. Rx2_eigen = kron_prod(self.eigenframe, self.eigenframe) # Set the initial storage structures. self.init_storage() # Loop over the angle incs. for i in range(INC + 1): # Get the angle for the increment. theta = self.get_angle(i - 1, model=model, var=var) # Vary X. if var == 'X': theta_x = theta theta_y = THETA_Y theta_z = THETA_Z # Vary Y. elif var == 'Y': theta_x = THETA_X theta_y = theta theta_z = THETA_Z # Vary Z. elif var == 'Z': theta_x = THETA_X theta_y = THETA_Y theta_z = theta # Calculate the frame order matrices. if model == 'rotor': self.first_frame_order[ i] = rotor.compile_1st_matrix_rotor( self.first_frame_order[i], self.eigenframe, theta_z) self.second_frame_order[ i] = rotor.compile_2nd_matrix_rotor( self.second_frame_order[i], Rx2_eigen, theta_z) elif model == 'free_rotor': self.first_frame_order[ i] = free_rotor.compile_1st_matrix_free_rotor( self.first_frame_order[i], self.eigenframe) self.second_frame_order[ i] = free_rotor.compile_2nd_matrix_free_rotor( self.second_frame_order[i], Rx2_eigen) elif model == 'iso_cone': self.first_frame_order[ i] = iso_cone.compile_1st_matrix_iso_cone( self.first_frame_order[i], self.eigenframe, theta_x, theta_z) self.second_frame_order[ i] = iso_cone.compile_2nd_matrix_iso_cone( self.second_frame_order[i], Rx2_eigen, theta_x, theta_z) elif model == 'iso_cone_free_rotor': self.first_frame_order[ i] = iso_cone_free_rotor.compile_1st_matrix_iso_cone_free_rotor( self.first_frame_order[i], self.eigenframe, theta_x) self.second_frame_order[ i] = iso_cone_free_rotor.compile_2nd_matrix_iso_cone_free_rotor( self.second_frame_order[i], Rx2_eigen, theta_x) elif model == 'iso_cone_torsionless': self.first_frame_order[ i] = iso_cone_torsionless.compile_1st_matrix_iso_cone_torsionless( self.first_frame_order[i], self.eigenframe, theta_x) self.second_frame_order[ i] = iso_cone_torsionless.compile_2nd_matrix_iso_cone_torsionless( self.second_frame_order[i], Rx2_eigen, theta_x) elif model == 'pseudo-ellipse': self.first_frame_order[ i] = pseudo_ellipse.compile_1st_matrix_pseudo_ellipse( self.first_frame_order[i], self.eigenframe, theta_x, theta_y, theta_z) self.second_frame_order[ i] = pseudo_ellipse.compile_2nd_matrix_pseudo_ellipse( self.second_frame_order[i], Rx2_eigen, theta_x, theta_y, theta_z) elif model == 'pseudo-ellipse_free_rotor': self.first_frame_order[ i] = pseudo_ellipse_free_rotor.compile_1st_matrix_pseudo_ellipse_free_rotor( self.first_frame_order[i], self.eigenframe, theta_x, theta_y) self.second_frame_order[ i] = pseudo_ellipse_free_rotor.compile_2nd_matrix_pseudo_ellipse_free_rotor( self.second_frame_order[i], Rx2_eigen, theta_x, theta_y) elif model == 'pseudo-ellipse_torsionless': self.first_frame_order[ i] = pseudo_ellipse_torsionless.compile_1st_matrix_pseudo_ellipse_torsionless( self.first_frame_order[i], self.eigenframe, theta_x, theta_y) self.second_frame_order[ i] = pseudo_ellipse_torsionless.compile_2nd_matrix_pseudo_ellipse_torsionless( self.second_frame_order[i], Rx2_eigen, theta_x, theta_y) elif model == 'double_rotor': self.first_frame_order[ i] = double_rotor.compile_1st_matrix_double_rotor( self.first_frame_order[i], self.eigenframe, theta_y, theta_x) self.second_frame_order[ i] = double_rotor.compile_2nd_matrix_double_rotor( self.second_frame_order[i], Rx2_eigen, theta_y, theta_x) else: raise RelaxError("Unknown model '%s'." % model) # Write the data. self.write_data(file_name=file_name, model=model, model_text=model_text, var=var)