Author: tlinnet Date: Tue Sep 9 18:18:11 2014 New Revision: 25718 URL: http://svn.gna.org/viewcvs/relax?rev=25718&view=rev Log: For the class of repeated analysis, implemented method to collect peak intensity, and function to plot the correlation. 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=25718&r1=25717&r2=25718&view=diff ============================================================================== --- trunk/auto_analyses/relax_disp_repeat_cpmg.py (original) +++ trunk/auto_analyses/relax_disp_repeat_cpmg.py Tue Sep 9 18:18:11 2014 @@ -43,7 +43,7 @@ from pipe_control.mol_res_spin import display_spin, generate_spin_string, return_spin, spin_loop from pipe_control import pipes from prompt.interpreter import Interpreter -from specific_analyses.relax_disp.data import generate_r20_key, has_exponential_exp_type, is_r1_optimised, loop_exp_frq_offset, loop_exp_frq_offset_point, return_param_key_from_data, spin_loop +from specific_analyses.relax_disp.data import generate_r20_key, has_exponential_exp_type, is_r1_optimised, loop_exp_frq_offset, loop_exp_frq_offset_point, return_param_key_from_data from specific_analyses.relax_disp.variables import MODEL_NOREX, MODEL_PARAMS, MODEL_R2EFF, PARAMS_R20 from status import Status; status = Status() @@ -864,6 +864,116 @@ return list_dub_mapping + def col_int(self, method=None, list_glob_ini=None, selection=None): + + # Loop over the glob ini: + res_dic = {} + res_dic['method'] = method + for glob_ini in list_glob_ini: + # Store under glob_ini + res_dic[str(glob_ini)] = {} + + # Get the pipe name for peak_intensity values. + pipe_name = self.name_pipe(method=method, model='setup', analysis='int', glob_ini=glob_ini) + + # Check if pipe exists, or else calculate. + if not pipes.has_pipe(pipe_name): + self.set_int(methods=[method], list_glob_ini=[glob_ini]) + + if pipes.get_pipe() != pipe_name: + self.interpreter.pipe.switch(pipe_name) + + # Results dictionary. + res_dic[str(glob_ini)] = {} + res_dic[str(glob_ini)]['peak_intensity'] = {} + res_dic[str(glob_ini)]['peak_intensity_err'] = {} + spin_point_peak_intensity_list = [] + spin_point_peak_intensity_err_list = [] + + # Loop over the spins. + for cur_spin, mol_name, resi, resn, spin_id in spin_loop(selection=selection, full_info=True, return_id=True, skip_desel=True): + # Make spin dic. + res_dic[str(glob_ini)]['peak_intensity'][spin_id] = {} + res_dic[str(glob_ini)]['peak_intensity_err'][spin_id] = {} + + # Loop over spectrum_ids. + for s_id in cdp.spectrum_ids: + # Check for bad data has skipped peak_intensity points + if s_id in cur_spin.peak_intensity: + peak_intensity_point = cur_spin.peak_intensity[s_id] + peak_intensity_err_point = cur_spin.peak_intensity_err[s_id] + + res_dic[str(glob_ini)]['peak_intensity'][spin_id][s_id] = peak_intensity_point + res_dic[str(glob_ini)]['peak_intensity_err'][spin_id][s_id] = peak_intensity_err_point + spin_point_peak_intensity_list.append(peak_intensity_point) + spin_point_peak_intensity_err_list.append(peak_intensity_err_point) + + res_dic[str(glob_ini)]['peak_intensity_arr'] = asarray(spin_point_peak_intensity_list) + res_dic[str(glob_ini)]['peak_intensity_err_arr'] = asarray(spin_point_peak_intensity_err_list) + + return res_dic + + + def plot_int_corr(self, corr_data, show=False): + + # Define figure. + # Nr of columns is number of datasets. + nr_cols = len(corr_data) + # Nr of rows, is 2. With and without scaling. + nr_rows = 2 + + # Define figure + fig, axises = plt.subplots(nrows=nr_rows, ncols=nr_cols) + fig.suptitle('Correlation plot') + + # axises is a tuple with number of elements corresponding to number of rows. + # Each sub-tuple contains axis for each column. + + # Loop over the rows. + for i, row_axises in enumerate(axises): + # Loop over the columns. + for j, ax in enumerate(row_axises) : + # Extract from lists. + 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 + + x = data_x[str(glob_ini_x)]['peak_intensity_arr'] + y = data_y[str(glob_ini_y)]['peak_intensity_arr'] + + # If row 1. + if i == 0: + ax.plot(x, x, '-', 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('Intensity 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)) + ax.ticklabel_format(style='sci', axis='y', scilimits=(0,0)) + ax.set_xlabel('Intensity') + ax.set_ylabel('Intensity') + + # Scale intensity + if 1 == 1: + + x_norm = x / x.max() + y_norm = y / y.max() + + ax.plot(x_norm, x_norm, '-', label='%s vs. %s' % (method_x, method_x)) + ax.plot(x_norm, y_norm, '.', label='%s vs. %s' % (method_y, method_x) ) + + np = len(y_norm) + ax.set_title('Norm. int. 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('Normalized Intensity') + ax.set_ylabel('Normalized Intensity') + + if show: + plt.show() + + def col_r2eff(self, method=None, list_glob_ini=None): # Loop over the glob ini: @@ -995,10 +1105,6 @@ for method in methods: if method not in r2eff_stat_dic: continue - - if not dep_check.matplotlib_module: - continue - x = r2eff_stat_dic[method]['glob_ini'] y = r2eff_stat_dic[method]['r2eff_norm_std'] 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=25718&r1=25717&r2=25718&view=diff ============================================================================== --- trunk/test_suite/system_tests/relax_disp.py (original) +++ trunk/test_suite/system_tests/relax_disp.py Tue Sep 9 18:18:11 2014 @@ -5959,9 +5959,33 @@ #methods = ['FT'] # Set the intensity. - #RDR.set_int(methods=methods, list_glob_ini=[128, 126]) - + RDR.set_int(methods=methods, list_glob_ini=[128, 126]) + + # Try plot some intensity correlations. if True: + # Collect intensity values. + # For all spins, ft + int_ft_all = RDR.col_int(method='FT', list_glob_ini=[128, 126], selection=None) + + # Now make a spin selection. + selection = ':2,3' + int_ft_sel = RDR.col_int(method='FT', list_glob_ini=[128, 126], selection=selection) + # Print the length of datasets, depending on selection. + print( "All spins", len(int_ft_all['128']['peak_intensity_arr']), "Selection spins", len(int_ft_sel['128']['peak_intensity_arr']) ) + + # For all spins, mdd + int_mdd_all = RDR.col_int(method='MDD', list_glob_ini=[128, 126], selection=None) + int_mdd_sel = RDR.col_int(method='MDD', list_glob_ini=[128, 126], selection=selection) + + # Plot correlation of intensity + fig1 = [[int_ft_all, int_mdd_all], ['FT', 'MDD'], [128, 128]] + fig2 = [[int_ft_sel, int_mdd_sel], ['FT sel', 'MDD sel'], [128, 128]] + corr_data = [fig1, fig2] + + RDR.plot_int_corr(corr_data=corr_data, show=False) + + + if False: # Now calculate R2eff. RDR.calc_r2eff(methods=methods, list_glob_ini=[128, 126])