Author: tlinnet Date: Tue Sep 23 14:41:49 2014 New Revision: 25968 URL: http://svn.gna.org/viewcvs/relax?rev=25968&view=rev Log: Implemented writing out of particular correlation plots to file. Task #7826 (https://gna.org/task/index.php?7826): Write an python class for the repeated analysis of dispersion data. Modified: trunk/auto_analyses/relax_disp_repeat_cpmg.py trunk/test_suite/system_tests/relax_disp.py Modified: trunk/auto_analyses/relax_disp_repeat_cpmg.py URL: http://svn.gna.org/viewcvs/relax/trunk/auto_analyses/relax_disp_repeat_cpmg.py?rev=25968&r1=25967&r2=25968&view=diff ============================================================================== --- trunk/auto_analyses/relax_disp_repeat_cpmg.py (original) +++ trunk/auto_analyses/relax_disp_repeat_cpmg.py Tue Sep 23 14:41:49 2014 @@ -1231,7 +1231,7 @@ return res_dic - def plot_r2eff_corr(self, corr_data, show=False): + def plot_r2eff_corr(self, corr_data, show=False, write_stats=False): # Define figure. # Nr of columns is number of datasets. @@ -1245,6 +1245,9 @@ # axises is a tuple with number of elements corresponding to number of rows. # Each sub-tuple contains axis for each column. + + # For writing out stats. + data_dic = OrderedDict() # Loop over the rows. for i, row_axises in enumerate(axises): @@ -1258,16 +1261,20 @@ x = data_x[str(glob_ini_x)]['r2eff_arr'] x_err = data_x[str(glob_ini_x)]['r2eff_err_arr'] + np = len(x) y = data_y[str(glob_ini_y)]['r2eff_arr'] y_err = data_y[str(glob_ini_y)]['r2eff_err_arr'] # If row 1. if i == 0: + # Add to data dic. + method_xy_NI = "r2eff_%s%s_%s%s" % (method_x, glob_ini_x, method_y, glob_ini_y) + data_dic[method_xy_NI] = [] + ax.plot(x, x, 'o', label='%s vs. %s' % (method_x, method_x)) ax.plot(x, y, '.', label='%s vs. %s' % (method_y, method_x) ) - np = len(y) ax.set_title(r'$R_{2,\mathrm{eff}}$' + ' for %s %i vs. %s %i. np=%i' % (method_y, glob_ini_y, method_x, glob_ini_x, np), fontsize=10) ax.legend(loc='upper left', shadow=True, prop = fontP) ax.ticklabel_format(style='sci', axis='x', scilimits=(0, 0)) @@ -1275,8 +1282,16 @@ ax.set_xlabel(r'$R_{2,\mathrm{eff}}$') ax.set_ylabel(r'$R_{2,\mathrm{eff}}$') + # Add to data. + for k, x_k in enumerate(x): + y_k = y[k] + data_dic[method_xy_NI].append(["%3.5f"%x_k, "%3.5f"%y_k]) + # R2eff to error. if i == 1: + # Add to data dic. + method_xy_NI = "r2eff_to_err_%s%s_%s%s" % (method_x, glob_ini_x, method_y, glob_ini_y) + data_dic[method_xy_NI] = [] x_to_x_err = x / x_err y_to_y_err = y / y_err @@ -1284,7 +1299,10 @@ # Calculate straight line. # Linear a, with no intercept. a = sum(x_to_x_err * y_to_y_err) / sum(x_to_x_err**2) - x_to_x_err_arange = arange(min(x_to_x_err), max(x_to_x_err), (max(x_to_x_err) - min(x_to_x_err)) / 10) + min_x = min(x_to_x_err) + max_x = max(x_to_x_err) + step_x = (max_x - min_x) / np + x_to_x_err_arange = arange(min_x, max_x, step_x) y_to_x_err_arange = a * x_to_x_err_arange ax.plot(x_to_x_err, x_to_x_err, 'o', label='%s vs. %s' % (method_x, method_x)) @@ -1292,13 +1310,108 @@ ax.plot(x_to_x_err, y_to_y_err, '.', label='%s vs. %s' % (method_y, method_x) ) ax.plot(x_to_x_err_arange, y_to_x_err_arange, 'g--') - np = len(y_to_y_err) ax.set_title(r'$R_{2,\mathrm{eff}}/\sigma(R_{2,\mathrm{eff}})$' + ' for %s %i vs. %s %i. np=%i' % (method_y, glob_ini_y, method_x, glob_ini_x, np), fontsize=10) ax.legend(loc='upper left', shadow=True, prop = fontP) ax.set_xlabel(r'$R_{2,\mathrm{eff}}/\sigma(R_{2,\mathrm{eff}})$') ax.set_ylabel(r'$R_{2,\mathrm{eff}}/\sigma(R_{2,\mathrm{eff}})$') - plt.tight_layout() + # Add to data. + for k, x_to_x_err_k in enumerate(x_to_x_err): + y_to_y_err_k = y_to_y_err[k] + x_to_x_err_arange_k = x_to_x_err_arange[k] + y_to_x_err_arange_k = y_to_x_err_arange[k] + data_dic[method_xy_NI].append(["%3.5f"%x_to_x_err_k, "%3.5f"%y_to_y_err_k, "%3.5f"%x_to_x_err_arange_k, "%3.5f"%y_to_x_err_arange_k]) + + + plt.tight_layout() + + # Loop over columns for writing data. + # Write to file. + if write_stats: + # Re-order the data. + headings_all = [] + method_xy_NI_all = [] + # Loop over the columns. + for j in range(nr_cols): + headings_j = [] + method_xy_NI_j = [] + # Loop over rows + for i in range(nr_rows): + # Extract from lists. + data, methods, glob_inis = corr_data[j] + method_x, method_y = methods + glob_ini_x, glob_ini_y = glob_inis + + # If row 1. + if i == 0: + # Add to headings. + method_x_NI = "r2eff_%s%s" % (method_x, glob_ini_x) + method_y_NI = "r2eff_%s%s" % (method_y, glob_ini_y) + headings_j = headings_j + [method_x_NI, method_y_NI] + + method_xy_NI = "r2eff_%s%s_%s%s" % (method_x, glob_ini_x, method_y, glob_ini_y) + method_xy_NI_j.append(method_xy_NI) + + # R2eff to error. + if i == 1: + # Add to headings + method_x_NI = "r2eff_to_err_%s%s" % (method_x, glob_ini_x) + method_y_NI = "r2eff_to_err_%s%s" % (method_y, glob_ini_y) + method_x_NI_lin = "r2eff_to_err_lin_%s%s" % (method_x, glob_ini_x) + method_y_NI_lin = "r2eff_to_err_lin_%s%s" % (method_y, glob_ini_y) + headings_j = headings_j + [method_x_NI, method_y_NI, method_x_NI_lin, method_y_NI_lin] + + method_xy_NI = "r2eff_to_err_%s%s_%s%s" % (method_x, glob_ini_x, method_y, glob_ini_y) + method_xy_NI_j.append(method_xy_NI) + + headings_all.append(headings_j) + method_xy_NI_all.append(method_xy_NI_j) + + # Loop over the columns. + for j, headings_j in enumerate(headings_all): + method_xy_NI_j = method_xy_NI_all[j] + + data_w = [] + data_r2eff = data_dic[method_xy_NI_j[0]] + data_r2eff_to_err = data_dic[method_xy_NI_j[1]] + + for k, data_r2eff_k in enumerate(data_r2eff): + data_r2eff_to_err_k = data_r2eff_to_err[k] + data_w.append(data_r2eff_k + data_r2eff_to_err_k) + + # Define file name. + data, methods, glob_inis = corr_data[j] + data_x, data_y = data + method_x, method_y = methods + glob_ini_x, glob_ini_y = glob_inis + np = len(data_r2eff) + + # Get the spin selection for correlation. + selection = data_x['selection'] + + file_name_ini = 'r2eff_corr_%s_%s_%s_%s_NP_%i' % (method_x, glob_ini_x, method_y, glob_ini_y, np) + if selection == None: + file_name_ini = file_name_ini + '_all' + else: + file_name_ini = file_name_ini + '_sel' + + file_name = file_name_ini + '.txt' + path = self.results_dir + + # save figure + # Write png. + png_file_name = file_name_ini + '.png' + png_file_path = get_file_path(file_name=png_file_name, dir=path) + plt.savefig(png_file_path, bbox_inches='tight') + + # Write file + file_obj, file_path = open_write_file(file_name=file_name, dir=path, force=True, compress_type=0, verbosity=1, return_path=True) + + # Write data. + write_data(out=file_obj, headings=headings_j, data=data_w) + + # Close file. + file_obj.close() if show: plt.show() Modified: trunk/test_suite/system_tests/relax_disp.py URL: http://svn.gna.org/viewcvs/relax/trunk/test_suite/system_tests/relax_disp.py?rev=25968&r1=25967&r2=25968&view=diff ============================================================================== --- trunk/test_suite/system_tests/relax_disp.py (original) +++ trunk/test_suite/system_tests/relax_disp.py Tue Sep 23 14:41:49 2014 @@ -6047,6 +6047,47 @@ RDR.plot_r2eff_corr(corr_data=corr_data, show=True) + # Try write some R2eff correlations. + if True: + selection = None + # Collect r2eff values. + r2eff_ft_all = RDR.col_r2eff(method='FT', list_glob_ini=[128], selection=selection) + + # For all spins, mdd + r2eff_mdd_all = RDR.col_r2eff(method='MDD', list_glob_ini=[128, 126], selection=selection) + + # Plot correlation of intensity + fig1 = [[r2eff_ft_all, r2eff_mdd_all], ['FT', 'MDD'], [128, 128]] + fig2 = [[r2eff_ft_all, r2eff_mdd_all], ['FT', 'MDD'], [128, 126]] + corr_data = [fig1, fig2] + + write_stats = True + RDR.plot_r2eff_corr(corr_data=corr_data, show=True, write_stats=write_stats) + + # Open stat file. + if write_stats: + for i, corr_data_i in enumerate(corr_data): + data, methods, glob_inis = corr_data[i] + data_x, data_y = data + method_x, method_y = methods + glob_ini_x, glob_ini_y = glob_inis + x = data_x[str(glob_ini_x)]['r2eff_arr'] + np = len(x) + + file_name_ini = 'r2eff_corr_%s_%s_%s_%s_NP_%i' % (method_x, glob_ini_x, method_y, glob_ini_y, np) + + if selection == None: + file_name = file_name_ini + '_all.txt' + else: + file_name = file_name_ini + '_sel.txt' + path = RDR.results_dir + data = extract_data(file=file_name, dir=path) + + # Loop over the lines. + for i, data_i in enumerate(data): + print(i, data_i) + + # Try plot some R2eff statistics. if False: # Collect r2eff values.