Author: bugman Date: Sat Nov 1 14:44:03 2014 New Revision: 26399 URL: http://svn.gna.org/viewcvs/relax?rev=26399&view=rev Log: Updated the frame_order_solution.py script for directly calculating the frame order matrix elements. The MODEL variable has been added in preparation for supporting all model types, and this is now added to the file name. The Grace header is now also being automatically generated and this matches that for the frame_order_simulation.py script. Modified: branches/frame_order_cleanup/test_suite/shared_data/frame_order/sim_vs_pred_matrix/frame_order_solution.py Modified: branches/frame_order_cleanup/test_suite/shared_data/frame_order/sim_vs_pred_matrix/frame_order_solution.py URL: http://svn.gna.org/viewcvs/relax/branches/frame_order_cleanup/test_suite/shared_data/frame_order/sim_vs_pred_matrix/frame_order_solution.py?rev=26399&r1=26398&r2=26399&view=diff ============================================================================== --- branches/frame_order_cleanup/test_suite/shared_data/frame_order/sim_vs_pred_matrix/frame_order_solution.py (original) +++ branches/frame_order_cleanup/test_suite/shared_data/frame_order/sim_vs_pred_matrix/frame_order_solution.py Sat Nov 1 14:44:03 2014 @@ -8,11 +8,13 @@ import sys # relax module imports. -from generic_fns.angles import wrap_angles -from maths_fns.frame_order_matrix_ops import compile_1st_matrix_pseudo_ellipse, compile_2nd_matrix_pseudo_ellipse - +from lib.frame_order.pseudo_ellipse import compile_1st_matrix_pseudo_ellipse, compile_2nd_matrix_pseudo_ellipse +from lib.geometry.angles import wrap_angles +from lib.linear_algebra.kronecker_product import kron_prod # Variables. +MODEL = 'pseudo-ellipse' +MODEL_TEXT = 'Pseudo-ellipse frame order model' TAG = 'in_frame' # Angular restrictions. @@ -60,7 +62,10 @@ """ # The tag. - self.tag = '_%s_theta_%s_back_calc.agr' % (TAG, lower(VAR)) + self.tag = '_%s_%s_theta_%s_calc.agr' % (MODEL, TAG, lower(VAR)) + + # The Kronecker product of the eigenframe rotation. + Rx2_eigen = kron_prod(EIG_FRAME, EIG_FRAME) # Set the initial storage structures. self.init_storage() @@ -89,11 +94,12 @@ theta_z = theta # Calculate the frame order matrices. - compile_1st_matrix_pseudo_ellipse(self.first_frame_order[i], theta_x, theta_y, theta_z) - compile_2nd_matrix_pseudo_ellipse(self.second_frame_order[i], theta_x, theta_y, theta_z) + if MODEL == 'pseudo-ellipse': + compile_1st_matrix_pseudo_ellipse(self.first_frame_order[i], theta_x, theta_y, theta_z) + compile_2nd_matrix_pseudo_ellipse(self.second_frame_order[i], Rx2_eigen, theta_x, theta_y, theta_z) # Write the data. - self.write_data(legends=True) + self.write_data() def get_angle(self, index, deg=False): @@ -129,36 +135,79 @@ self.count = zeros(INC) - def write_data(self, legends=False): + def write_data(self): """Dump the data to files.""" # Open the files. - file_1st = open('Sij' + self.tag, 'w') - file_2nd = open('S2ijkl' + self.tag, 'w') - - # Legends. - if legends: - # Header for first order matrix. - graph_num = 0 - for i in range(3): - for j in range(3): - # Legend. - file_1st.write('@ s%i legend \"<\qc\s%s%s\N>\"\n' % (graph_num, i+1, j+1)) - - # Inc. - graph_num = graph_num + 1 - - # Header for second order matrix. - graph_num = 0 - for i in range(3): - for j in range(3): - for k in range(3): - for l in range(3): - # Legend. - file_2nd.write('@ s%i legend \"<c%s%s.c%s%s>\"\n' % (graph_num, i+1, j+1, k+1, l+1)) - - # Inc. - graph_num = graph_num + 1 + file_1st = open("Sij" + self.tag, 'w') + file_2nd = open("Sijkl" + self.tag, 'w') + files = [file_1st, file_2nd] + + # The headers. + for i in range(2): + # Alias the file. + file = files[i] + + # The titles. + file.write("@with g0\n") + if i == 0: + file.write("@ world 0, 0, 180, 1\n") + else: + file.write("@ world 0, -0.5, 180, 1\n") + file.write("@ title \"Calculated frame order matrix elements\"\n") + if i == 0: + file.write("@ subtitle \"%s, 1\\Sst\\N degree matrix\"\n" % MODEL_TEXT) + else: + file.write("@ subtitle \"%s, 2\\Snd\\N degree matrix\"\n" % MODEL_TEXT) + + # Legend. + if i == 0: + file.write("@ legend 0.23, 0.55\n") + else: + file.write("@ legend off\n") + + # Plot data. + file.write("@ xaxis bar linewidth 0.5\n") + file.write("@ xaxis label \"Cone half-angle \\xq\\f{}\\s%s\\N (deg.)\"\n" % VAR) + file.write("@ xaxis label char size 1.000000\n") + file.write("@ xaxis tick major 45\n") + file.write("@ xaxis tick major linewidth 0.5\n") + file.write("@ xaxis tick minor ticks 3\n") + file.write("@ xaxis tick minor linewidth 0.5\n") + file.write("@ yaxis bar linewidth 0.5\n") + if i == 0: + file.write("@ yaxis label \"Order parameter \qS\sij\"\n") + else: + file.write("@ yaxis label \"Order parameter \qS\sijkl\"\n") + file.write("@ yaxis label char size 1.000000\n") + file.write("@ yaxis tick major 0.2\n") + file.write("@ yaxis tick major linewidth 0.5\n") + file.write("@ yaxis tick minor ticks 1\n") + file.write("@ yaxis tick minor linewidth 0.5\n") + + # Header for first order matrix. + graph_num = 0 + for i in range(3): + for j in range(3): + # Legend. + file_1st.write("@ s%i legend \"\\q<c\\s%s%s\\N>\"\n" % (graph_num, i+1, j+1)) + file_1st.write("@ s%i linewidth 0.5\n" % graph_num) + + # Inc. + graph_num = graph_num + 1 + + # Header for second order matrix. + graph_num = 0 + for i in range(3): + for j in range(3): + for k in range(3): + for l in range(3): + # Legend. + file_2nd.write("@ s%i legend \"<\\qc\\s%s%s\\N.c\\s%s%s\\N>\"\n" % (graph_num, i+1, j+1, k+1, l+1)) + file_2nd.write("@ s%i linewidth 0.5\n" % graph_num) + + # Inc. + graph_num = graph_num + 1 # Loop over the first rotation matrix index. graph_num = 0 @@ -166,8 +215,8 @@ # Loop over the second rotation matrix index. for j in range(3): # Header. - file_1st.write('@target G0.S%i\n' % graph_num) - file_1st.write('@type xy\n') + file_1st.write("@target G0.S%i\n" % graph_num) + file_1st.write("@type xy\n") # Loop over each time point. for k in range(INC): @@ -175,10 +224,10 @@ angle = self.get_angle(k, deg=True) # Write. - file_1st.write('%s %s\n' % (angle, self.first_frame_order[k, i, j])) + file_1st.write("%s %s\n" % (angle, self.first_frame_order[k, i, j])) # Footer. - file_1st.write('&\n') + file_1st.write("&\n") # Inc. graph_num = graph_num + 1 @@ -206,6 +255,11 @@ # Inc. graph_num = graph_num + 1 + # No autoscaling. + file_1st.write("@autoscale onread none\n") + file_2nd.write("@autoscale onread none\n") + + # Calculate the frame order. Frame_order()