Author: bugman Date: Mon Feb 22 13:39:46 2010 New Revision: 10815 URL: http://svn.gna.org/viewcvs/relax?rev=10815&view=rev Log: Stereochem_analysis.grace_plots() now uses the new write_xy_header() & write_xy_data() fns. Modified: 1.3/auto_analyses/stereochem_analysis.py Modified: 1.3/auto_analyses/stereochem_analysis.py URL: http://svn.gna.org/viewcvs/relax/1.3/auto_analyses/stereochem_analysis.py?rev=10815&r1=10814&r2=10815&view=diff ============================================================================== --- 1.3/auto_analyses/stereochem_analysis.py (original) +++ 1.3/auto_analyses/stereochem_analysis.py Mon Feb 22 13:39:46 2010 @@ -55,6 +55,7 @@ # relax module imports. from generic_fns import pipes +from generic_fns.grace import write_xy_data, write_xy_header from generic_fns.selection import spin_loop from physical_constants import dipolar_constant, g1H, g13C from prompt.interpreter import Interpreter @@ -184,6 +185,24 @@ def grace_plots(self): """Generate grace plots of the results.""" + # The number of configs. + n = len(self.configs) + + # The colours for the different configs. + defaults = [4, 2] # Blue and red. + colours = [] + for i in range(n): + # Default colours. + if i < len(defaults): + colours.append(defaults[i]) + + # Otherwise black! + else: + colours.append(0) + + # Subtitle for all graphs. + subtitle = '%s ensembles of %s' % (self.num_ens, self.num_models) + # NOE violations. if access(self.results_dir+sep+"NOE_viol_" + self.configs[0] + "_sorted", F_OK): # Print out. @@ -193,74 +212,38 @@ grace_curve = open(self.results_dir+sep+"NOE_viol_curve.agr", 'w') grace_dist = open(self.results_dir+sep+"NOE_viol_dist.agr", 'w') - # S-curve header. - colours = [4, 2] # Blue and red. - grace_curve.write("@version 50121\n") - grace_curve.write("@page size 842, 595\n") # A4. - grace_curve.write("@with g0\n") - grace_curve.write("@ world 0, 0, %s, 200\n" % self.num_ens) - grace_curve.write("@ view 0.150000, 0.150000, 1.28, 0.85\n") - grace_curve.write("@ title \"NOE violation comparison\"\n") - grace_curve.write("@ subtitle \"%s ensembles of %s\"\n" % (self.num_ens, self.num_models)) - grace_curve.write("@ xaxis label \"Ensemble (sorted)\"\n") - grace_curve.write("@ yaxis label \"NOE violation (Angstrom\S2\N)\"\n") - grace_curve.write("@ legend 0.3, 0.8\n") - for i in range(len(self.configs)): - grace_curve.write("@ s%s line color %s\n" % (i, colours[i])) - grace_curve.write("@ s%s legend \"%s\"\n" % (i, self.configs[i])) - - # Distribution header. - colours = [4, 2] # Blue and red. - grace_dist.write("@version 50121\n") - grace_dist.write("@page size 842, 595\n") # A4. - grace_dist.write("@with g0\n") - grace_dist.write("@ world 0, 0, 200, 0.2\n") - grace_dist.write("@ view 0.150000, 0.150000, 1.28, 0.85\n") - grace_dist.write("@ title \"NOE violation comparison\"\n") - grace_dist.write("@ subtitle \"%s ensembles of %s\"\n" % (self.num_ens, self.num_models)) - grace_dist.write("@ xaxis label \"NOE violation (Angstrom\S2\N)\"\n") - grace_dist.write("@ yaxis label \"Frequency\"\n") - grace_dist.write("@ legend 1.1, 0.8\n") - for i in range(len(self.configs)): - grace_dist.write("@ s%s symbol 1\n" % i) - grace_dist.write("@ s%s symbol size 0.5\n" % i) - grace_dist.write("@ s%s symbol color %s\n" % (i, colours[i])) - grace_dist.write("@ s%s line linestyle 3\n" % i) - grace_dist.write("@ s%s line color %s\n" % (i, colours[i])) - grace_dist.write("@ s%s legend \"%s\"\n" % (i, self.configs[i])) - # Loop over the configurations. - for i in range(len(self.configs)): - # Header. - grace_curve.write("@target G0.S"+repr(i)+"\n@type xy\n") - grace_dist.write("@target G0.S"+repr(i)+"\n@type xy\n") - + data = [] + dist = [] + for i in range(n): # Open the results file and read the data. file = open(self.results_dir+sep+"NOE_viol_" + self.configs[i] + "_sorted") lines = file.readlines() file.close() + # Add a new graph set. + data.append([]) + # Loop over the ensembles and extract the NOE violation. noe_viols = [] - for i in range(1, len(lines)): + for j in range(1, len(lines)): # Extract the violation. - viol = float(split(lines[i])[1]) + viol = float(split(lines[j])[1]) noe_viols.append(viol) - # Write the data. - grace_curve.write("%-8s%-30s\n" % (i, viol)) + # Add to the data structure. + data[i].append([j, viol]) # Calculate the R distribution. - dist = self.generate_distribution(noe_viols, inc=self.bucket_num, upper=self.upper_lim_noe, lower=self.lower_lim_noe) - - # Loop over the distribution bins. - for i in range(len(dist)): - # Write the data. - grace_dist.write("%s %s\n" % (dist[i][0], dist[i][1])) - - # End of data. - grace_curve.write("&\n") - grace_dist.write("&\n") + dist.append(self.generate_distribution(noe_viols, inc=self.bucket_num, upper=self.upper_lim_noe, lower=self.lower_lim_noe)) + + # Headers. + write_xy_header(file=grace_curve, title='NOE violation comparison', subtitle=subtitle, sets=n, set_names=self.configs, set_colours=colours, symbols=[0]*n, axis_labels=['Ensemble (sorted)', 'NOE violation (Angstrom\S2\N)'], axis_min=[0, 0], axis_max=[self.num_ens, 200], legend_pos=[0.3, 0.8]) + write_xy_header(file=grace_dist, title='NOE violation comparison', subtitle=subtitle, sets=n, set_names=self.configs, set_colours=colours, symbols=[1]*n, symbol_sizes=[0.5]*n, linestyle=[3]*n, axis_labels=['NOE violation (Angstrom\S2\N)', 'Frequency'], axis_min=[0, 0], axis_max=[200, 0.2], legend_pos=[1.1, 0.8]) + + # Write the data. + write_xy_data([data], file=grace_curve, graph_type='xy') + write_xy_data([dist], file=grace_dist, graph_type='xy') # Close the files. grace_curve.close() @@ -275,79 +258,42 @@ grace_curve = open(self.results_dir+sep+"RDC_%s_curve.agr" % self.rdc_name, 'w') grace_dist = open(self.results_dir+sep+"RDC_%s_dist.agr" % self.rdc_name, 'w') - # S-curve header. - colours = [4, 2] # Blue and red. - grace_curve.write("@version 50121\n") - grace_curve.write("@page size 842, 595\n") # A4. - grace_curve.write("@with g0\n") - grace_curve.write("@ world 0, 0, %s, 2\n" % self.num_ens) - grace_curve.write("@ view 0.150000, 0.150000, 1.28, 0.85\n") - grace_curve.write("@ title \"%s RDC Q-factor comparison\"\n" % self.rdc_name) - grace_curve.write("@ subtitle \"%s ensembles of %s\"\n" % (self.num_ens, self.num_models)) - grace_curve.write("@ xaxis label \"Ensemble (sorted)\"\n") - grace_curve.write("@ yaxis label \"%s RDC Q-factor (pales format)\"\n" % self.rdc_name) - grace_curve.write("@ legend 0.3, 0.8\n") - for i in range(len(self.configs)): - grace_curve.write("@ s%s line color %s\n" % (i, colours[i])) - grace_curve.write("@ s%s legend \"%s\"\n" % (i, self.configs[i])) - - # Distribution header. - colours = [4, 2] # Blue and red. - grace_dist.write("@version 50121\n") - grace_dist.write("@page size 842, 595\n") # A4. - grace_dist.write("@with g0\n") - grace_dist.write("@ world 0, 0, 2, 0.2\n") - grace_dist.write("@ view 0.150000, 0.150000, 1.28, 0.85\n") - grace_dist.write("@ title \"%s RDC Q-factor comparison\"\n" % self.rdc_name) - grace_dist.write("@ subtitle \"%s ensembles of %s\"\n" % (self.num_ens, self.num_models)) - grace_dist.write("@ xaxis label \"%s RDC Q-factor (pales format)\"\n" % self.rdc_name) - grace_dist.write("@ yaxis label \"Frequency\"\n") - grace_dist.write("@ legend 1.1, 0.8\n") - for i in range(len(self.configs)): - grace_dist.write("@ s%s symbol 1\n" % i) - grace_dist.write("@ s%s symbol size 0.5\n" % i) - grace_dist.write("@ s%s symbol color %s\n" % (i, colours[i])) - grace_dist.write("@ s%s line linestyle 3\n" % i) - grace_dist.write("@ s%s line color %s\n" % (i, colours[i])) - grace_dist.write("@ s%s legend \"%s\"\n" % (i, self.configs[i])) - # Loop over the configurations. - for i in range(len(self.configs)): - # Grace headers. - grace_curve.write("@target G0.S%s\n@type xy\n" % i) - grace_dist.write("@target G0.S%s\n@type xy\n" % i) - + data = [] + dist = [] + for i in range(n): # Open the results file and read the data. file = open(self.results_dir+sep+"Q_factors_" + self.configs[i] + "_sorted") lines = file.readlines() file.close() + # Add a new graph set. + data.append([]) + # Loop over the Q-factors. values = [] - for i in range(1, len(lines)): + for j in range(1, len(lines)): # Extract the violation. - value = float(split(lines[i])[1]) + value = float(split(lines[j])[1]) values.append(value) - # Write the data. - grace_curve.write("%-8s%-30s\n" % (i, value)) + # Add to the data structure. + data[i].append([j, value]) # Calculate the R distribution. - dist = self.generate_distribution(values, inc=self.bucket_num, upper=self.upper_lim_rdc, lower=self.lower_lim_rdc) - - # Loop over the distribution bins. - for i in range(len(dist)): - # Write the data. - grace_dist.write("%s %s\n" % (dist[i][0], dist[i][1])) - - # End of data. - grace_curve.write("&\n") - grace_dist.write("&\n") + dist.append(self.generate_distribution(values, inc=self.bucket_num, upper=self.upper_lim_rdc, lower=self.lower_lim_rdc)) + + # Headers. + write_xy_header(file=grace_curve, title='%s RDC Q-factor comparison' % self.rdc_name, subtitle=subtitle, sets=n, set_names=self.configs, set_colours=colours, symbols=[0]*n, axis_labels=['Ensemble (sorted)', '%s RDC Q-factor (pales format)' % self.rdc_name], axis_min=[0, 0], axis_max=[self.num_ens, 2], legend_pos=[0.3, 0.8]) + write_xy_header(file=grace_dist, title='%s RDC Q-factor comparison' % self.rdc_name, subtitle=subtitle, sets=n, set_names=self.configs, set_colours=colours, symbols=[1]*n, symbol_sizes=[0.5]*n, linestyle=[3]*n, axis_labels=['%s RDC Q-factor (pales format)' % self.rdc_name, 'Frequency'], axis_min=[0, 0], axis_max=[2, 0.2], legend_pos=[1.1, 0.8]) + + # Write the data. + write_xy_data([data], file=grace_curve, graph_type='xy') + write_xy_data([dist], file=grace_dist, graph_type='xy') # Close the files. grace_curve.close() grace_dist.close() - # NOE-RDC correlation plot. if access(self.results_dir+sep+"NOE_viol_" + self.configs[0] + "_sorted", F_OK) and access(self.results_dir+sep+"Q_factors_" + self.configs[0] + "_sorted", F_OK): @@ -357,35 +303,16 @@ # Open the Grace output files. grace_file = open(self.results_dir+sep+"correlation_plot.agr", 'w') - # Grace header. - colours = [4, 2] # Blue and red. - grace_file.write("@version 50121\n") - grace_file.write("@page size 842, 595\n") # A4. - grace_file.write("@with g0\n") - grace_file.write("@ world 0, 0, %s, %s\n" % (noe_viols[-1]+10, values[-1]+0.1)) - grace_file.write("@ view 0.150000, 0.150000, 1.28, 0.85\n") - grace_file.write("@ title \"Correlation plot - RDC vs. NOE\"\n") - grace_file.write("@ subtitle \"%s ensembles of %s\"\n" % (self.num_ens, self.num_models)) - grace_file.write("@ xaxis label \"NOE violation (Angstrom\S2\N)\"\n") - grace_file.write("@ yaxis label \"%s RDC Q-factors (pales format)\"\n" % self.rdc_name) - grace_file.write("@ legend 1.1, 0.8\n") + # Grace data. + data = [] for i in range(len(self.configs)): - grace_file.write("@ s%s symbol 9\n" % i) - grace_file.write("@ s%s symbol size 0.24\n" % i) - grace_file.write("@ s%s symbol color %s\n" % (i, colours[i])) - grace_file.write("@ s%s symbol linewidth 0.5\n" % i) - grace_file.write("@ s%s line type 0\n" % i) - grace_file.write("@ s%s legend \"%s\"\n" % (i, self.configs[i])) - - # Grace data. - for i in range(len(self.configs)): - # Grace header. - grace_file.write("@target G0.S%s\n@type xy\n" % i) - # Open the NOE results file and read the data. file = open(self.results_dir+sep+"NOE_viol_" + self.configs[i]) noe_lines = file.readlines() file.close() + + # Add a new graph set. + data.append([]) # Open the RDC results file and read the data. file = open(self.results_dir+sep+"Q_factors_" + self.configs[i]) @@ -398,11 +325,12 @@ noe_viol = float(split(noe_lines[j])[1]) q_factor = float(split(rdc_lines[j])[1]) - # Write the xy pair. - grace_file.write("%s %s\n" % (noe_viol, q_factor)) - - # End of data. - grace_file.write('&\n') + # Add the xy pair. + data[i].append([noe_viol, q_factor]) + + # Write the data. + write_xy_header(file=grace_file, title='Correlation plot - %s RDC vs. NOE' % self.rdc_name, subtitle=subtitle, sets=n, set_names=self.configs, set_colours=colours, symbols=[9]*n, symbol_sizes=[0.24]*n, linetype=[0]*n, axis_labels=['NOE violation (Angstrom\S2\N)', '%s RDC Q-factor (pales format)' % self.rdc_name], axis_min=[0, 0], axis_max=[noe_viols[-1]+10, values[-1]+0.1], legend_pos=[1.1, 0.8]) + write_xy_data([data], file=grace_file, graph_type='xy') def noe_viol(self):