Author: bugman
Date: Thu Sep 25 11:14:31 2014
New Revision: 26032
URL: http://svn.gna.org/viewcvs/relax?rev=26032&view=rev
Log:
Incorporated the contents of count_sobol_points.py into the frame order
auto-analysis module.
The analysis script has been converted into the count_sobol_points() function
which will generate a
summary table of the number of quasi-random Sobol' points used for the PCS
numerical integration.
Modified:
branches/frame_order_cleanup/auto_analyses/frame_order.py
Modified: branches/frame_order_cleanup/auto_analyses/frame_order.py
URL:
http://svn.gna.org/viewcvs/relax/branches/frame_order_cleanup/auto_analyses/frame_order.py?rev=26032&r1=26031&r2=26032&view=diff
==============================================================================
--- branches/frame_order_cleanup/auto_analyses/frame_order.py (original)
+++ branches/frame_order_cleanup/auto_analyses/frame_order.py Thu Sep 25
11:14:31 2014
@@ -64,8 +64,110 @@
from pipe_control.structure.mass import pipe_centre_of_mass
from prompt.interpreter import Interpreter
from specific_analyses.frame_order.data import generate_pivot
+from specific_analyses.frame_order import optimisation
from status import Status; status = Status()
+
+
+def count_sobol_points(file_name='sobol_point_count', dir=None, force=True):
+ """Count the number of Sobol' points used for the PCS numerical
integration.
+
+ This function can be used while a frame order analysis is running to
summarise the results. It will create a table of the number of Sobol' points
used, which can then be used to judge the quality of the integration.
+
+
+ @keyword file_name: The file to save the table into.
+ @type file_name: str
+ @keyword dir: The optional directory to place the file into. If
specified, the results files will also be searched for in this directory.
+ @type dir: None or str
+ @keyword force: A flag which if True will cause any preexisting
file to be overwritten.
+ @type force: bool
+ """
+
+ # The model names, titles and directories, including axis permutations.
+ models = []
+ model_titles = []
+ dirs = []
+ for model in MODEL_LIST:
+ # Add the base model.
+ models.append(model)
+ title = model[0].upper() + model[1:]
+ model_titles.append(title)
+ dirs.append(model_directory(model, base_dir=dir))
+
+ # Axis permutations.
+ if model in MODEL_LIST_ISO_CONE + MODEL_LIST_PSEUDO_ELLIPSE:
+ # The A permutation.
+ models.append("%s permutation A" % model)
+ model_titles.append(title + ' (perm A)')
+ dirs.append(model_directory(models[-1], base_dir=dir))
+
+ # The B permutation.
+ if model in MODEL_LIST_PSEUDO_ELLIPSE:
+ models.append("%s permutation B" % model)
+ model_titles.append(title + ' (perm B)')
+ dirs.append(model_directory(models[-1], base_dir=dir))
+
+ # Loop over the models.
+ count = {}
+ count_total = {}
+ percentage = {}
+ for i in range(len(models)):
+ # Skip the rigid model.
+ if models[i] == MODEL_RIGID:
+ continue
+
+ # No file.
+ if not access(dirs[i]+sep+'results.bz2', F_OK):
+ continue
+
+ # Switch to the data pipe if it already exists.
+ if pipes.has_pipe(models[i]):
+ pipes.switch(models[i])
+
+ # Otherwise load the data.
+ else:
+ # Create a data pipe.
+ pipes.create(models[i], 'frame order')
+
+ # Load the data.
+ results.read(file='results', dir=dirs[i])
+
+ # SciPy quadratic integration has been used.
+ if hasattr(cdp, 'quad_int') and cdp.quad_int:
+ count[models[i]] = 'Quad int'
+ count_total[models[i]] = ''
+ percentage[models[i]] = ''
+ continue
+
+ # Count the Sobol' points used.
+ if not hasattr(cdp, 'sobol_points_used'):
+ optimisation.count_sobol_points()
+ count[models[i]] = cdp.sobol_points_used
+ count_total[models[i]] = cdp.sobol_max_points
+ percentage[models[i]] = "%10.3f" % (float(cdp.sobol_points_used) /
float(cdp.sobol_max_points) * 100.0) + '%'
+
+ # Initialise the output string.
+ string = "Quasi-random Sobol' numerical PCS integration point
counting:\n\n"
+
+ # Assemble the table contents.
+ headings = [["Model", "Total points", "Used points", "Percentage"]]
+ contents = []
+ for model in models:
+ if model not in count:
+ continue
+ contents.append([model, count_total[model], count[model],
percentage[model]])
+
+ # Add the table to the output string.
+ string += format_table(headings=headings, contents=contents)
+
+ # Stdout output.
+ sys.stdout.write("\n\n\n")
+ sys.stdout.write(string)
+
+ # Save to file.
+ file = open_write_file(file_name=file_name, dir=dir, force=force)
+ file.write(string)
+ file.close()
def model_directory(model, base_dir=None):
_______________________________________________
relax (http://www.nmr-relax.com)
This is the relax-commits mailing list
[email protected]
To unsubscribe from this list, get a password
reminder, or change your subscription options,
visit the list information page at
https://mail.gna.org/listinfo/relax-commits