Author: bugman
Date: Thu Oct 23 15:57:02 2014
New Revision: 26390
URL: http://svn.gna.org/viewcvs/relax?rev=26390&view=rev
Log:
Redesigned the optimisation steps for the frame order auto-analysis.
The code has been significantly simplified as the optimisation for the PCS
subset and full data set
was the same. The code duplication has been eliminated by combining it into
the new optimisation()
method. The check for the PCS subset has also been expanded so that it is
skipped if the subset
data pipe is not supplied, even if an optimisation object for the subset has
been (this should
prevent strange errors when the auto-analysis is incorrectly used).
A side effect of this code merger is that the zooming grid search has now been
activated for the
full PCS data set. This is of great benefit when a PCS subset is not being
used.
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=26390&r1=26389&r2=26390&view=diff
==============================================================================
--- branches/frame_order_cleanup/auto_analyses/frame_order.py (original)
+++ branches/frame_order_cleanup/auto_analyses/frame_order.py Thu Oct 23
15:57:02 2014
@@ -952,82 +952,11 @@
self.nested_params_order(model)
# Optimisation using the PCS subset (skipped if a pre-run
directory is supplied).
- opt = self.opt_subset
- if opt != None and not self.pre_run_flag:
- # Printout.
- subsubtitle(file=sys.stdout, text="Optimisation using the PCS
subset")
-
- # Results directory stub for intermediate results.
- intermediate_stub = self.results_dir + sep +
'intermediate_results' + sep + 'pcs_subset'
-
- # Zooming grid search.
- for i in opt.loop_grid():
- # The intermediate results directory.
- intermediate_dir = intermediate_stub + '_grid%i' % i
-
- # Set the zooming grid search level.
- zoom = opt.get_grid_zoom_level(i)
- if zoom != None:
- self.interpreter.minimise.grid_zoom(level=zoom)
- intermediate_dir += '_zoom%i' % zoom
-
- # Set up the custom grid increments.
- incs = self.custom_grid_incs(model,
inc=opt.get_grid_inc(i))
- intermediate_dir += '_inc%i' % opt.get_grid_inc(i)
-
- # The numerical optimisation settings.
- quad_int = opt.get_grid_quad_int(i)
- if quad_int:
- self.interpreter.frame_order.quad_int()
- intermediate_dir += '_quad_int'
- else:
- sobol_num = opt.get_grid_sobol_info(i)
- self.sobol_setup(sobol_num)
- intermediate_dir += '_sobol%i' % sobol_num[0]
-
- # Perform the grid search.
- self.interpreter.minimise.grid_search(inc=incs)
-
- # Store the intermediate results and statistics.
- if self.store_intermediate:
- self.results_output(model=model,
dir=model_directory(model, base_dir=intermediate_dir), results_file=True,
simulation=False)
- count_sobol_points(dir=intermediate_dir, force=True)
- summarise(dir=intermediate_dir, force=True)
-
- # Minimise (for the PCS data subset and full RDC set).
- for i in opt.loop_min():
- # The intermediate results directory.
- func_tol = opt.get_min_func_tol(i)
- max_iter = opt.get_min_max_iter(i)
- intermediate_dir = intermediate_stub +
'_min%i_ftol%g_max_iter%i' % (i, func_tol, max_iter)
-
- # The numerical optimisation settings.
- quad_int = opt.get_min_quad_int(i)
- if quad_int:
- self.interpreter.frame_order.quad_int()
- intermediate_dir += '_quad_int'
- else:
- sobol_num = opt.get_min_sobol_info(i)
- self.sobol_setup(sobol_num)
- intermediate_dir += '_sobol%i' % sobol_num[0]
-
- # Perform the optimisation.
-
self.interpreter.minimise.execute(min_algor=opt.get_min_algor(i),
func_tol=func_tol, max_iter=max_iter)
-
- # Store the intermediate results.
- if self.store_intermediate:
- self.results_output(model=model,
dir=model_directory(model, base_dir=intermediate_dir), results_file=True,
simulation=False)
- count_sobol_points(dir=intermediate_dir, force=True)
- summarise(dir=intermediate_dir, force=True)
-
- # Printout.
- subsubtitle(file=sys.stdout, text="Optimisation using the full
data set")
-
- # Results directory stub for intermediate results.
- intermediate_stub = self.results_dir + sep +
'intermediate_results' + sep + 'all_data'
+ if self.data_pipe_subset != None and self.opt_subset != None and
not self.pre_run_flag:
+ self.optimisation(model=model, opt=self.opt_subset,
pcs_text="PCS subset", intermediate_dir='pcs_subset')
# Operations if a subset was used, otherwise these are not needed.
- if self.data_pipe_subset != None:
+ if self.data_pipe_subset != None and self.data_pipe_full != None:
# Copy the PCS data.
self.interpreter.pcs.copy(pipe_from=self.data_pipe_full,
pipe_to=self.pipe_name_dict[model])
@@ -1040,32 +969,8 @@
spin.select = spin_orig.select
# Optimisation using the full data set.
- opt = self.opt_full
- if opt != None:
- for i in opt.loop_min():
- # The intermediate results directory.
- func_tol = opt.get_min_func_tol(i)
- max_iter = opt.get_min_max_iter(i)
- intermediate_dir = intermediate_stub +
'_min%i_ftol%g_max_iter%i' % (i, func_tol, max_iter)
-
- # The numerical optimisation settings.
- quad_int = opt.get_min_quad_int(i)
- if quad_int:
- self.interpreter.frame_order.quad_int()
- intermediate_dir += '_quad_int'
- else:
- sobol_num = opt.get_min_sobol_info(i)
- self.sobol_setup(sobol_num)
- intermediate_dir += '_sobol%i' % sobol_num[0]
-
- # Perform the optimisation.
-
self.interpreter.minimise.execute(min_algor=opt.get_min_algor(i),
func_tol=func_tol, max_iter=max_iter)
-
- # Store the intermediate results.
- if self.store_intermediate:
- self.results_output(model=model,
dir=model_directory(model, base_dir=intermediate_dir), results_file=True,
simulation=False)
- count_sobol_points(dir=intermediate_dir, force=True)
- summarise(dir=intermediate_dir, force=True)
+ if self.opt_full != None:
+ self.optimisation(model=model, opt=self.opt_full,
pcs_text="full data set", intermediate_dir='all_data')
# Results printout.
self.print_results()
@@ -1078,6 +983,86 @@
# Perform the axis permutation analysis.
self.axis_permutation_analysis(model=model)
+
+
+ def optimisation(self, model=None, opt=None, pcs_text=None,
intermediate_dir=None):
+ """Perform the grid search and minimisation.
+
+ @keyword model: The frame order model to optimise.
+ @type model: str
+ @keyword opt: The grid search, zooming grid search and
minimisation settings object for optimisation of all models.
+ @type opt: Optimisation_settings instance
+ @keyword pcs_text: The text to use in the title. This is
either about the PCS subset or full data set.
+ @type pcs_text: str
+ @keyword intermediate_dir: The directory for this PCS data set for
storing the intermediate results.
+ @type intermediate_dir: str
+ """
+
+ # Printout.
+ subsubtitle(file=sys.stdout, text="Optimisation using the %s" %
pcs_text)
+
+ # Results directory stub for intermediate results.
+ intermediate_stub = self.results_dir + sep + 'intermediate_results' +
sep + intermediate_dir
+
+ # Zooming grid search.
+ for i in opt.loop_grid():
+ # The intermediate results directory.
+ intermediate_dir = intermediate_stub + '_grid%i' % i
+
+ # Set the zooming grid search level.
+ zoom = opt.get_grid_zoom_level(i)
+ if zoom != None:
+ self.interpreter.minimise.grid_zoom(level=zoom)
+ intermediate_dir += '_zoom%i' % zoom
+
+ # Set up the custom grid increments.
+ incs = self.custom_grid_incs(model, inc=opt.get_grid_inc(i))
+ intermediate_dir += '_inc%i' % opt.get_grid_inc(i)
+
+ # The numerical optimisation settings.
+ quad_int = opt.get_grid_quad_int(i)
+ if quad_int:
+ self.interpreter.frame_order.quad_int()
+ intermediate_dir += '_quad_int'
+ else:
+ sobol_num = opt.get_grid_sobol_info(i)
+ self.sobol_setup(sobol_num)
+ intermediate_dir += '_sobol%i' % sobol_num[0]
+
+ # Perform the grid search.
+ self.interpreter.minimise.grid_search(inc=incs)
+
+ # Store the intermediate results and statistics.
+ if self.store_intermediate:
+ self.results_output(model=model, dir=model_directory(model,
base_dir=intermediate_dir), results_file=True, simulation=False)
+ count_sobol_points(dir=intermediate_dir, force=True)
+ summarise(dir=intermediate_dir, force=True)
+
+ # Minimisation.
+ for i in opt.loop_min():
+ # The intermediate results directory.
+ func_tol = opt.get_min_func_tol(i)
+ max_iter = opt.get_min_max_iter(i)
+ intermediate_dir = intermediate_stub + '_min%i_ftol%g_max_iter%i'
% (i, func_tol, max_iter)
+
+ # The numerical optimisation settings.
+ quad_int = opt.get_min_quad_int(i)
+ if quad_int:
+ self.interpreter.frame_order.quad_int()
+ intermediate_dir += '_quad_int'
+ else:
+ sobol_num = opt.get_min_sobol_info(i)
+ self.sobol_setup(sobol_num)
+ intermediate_dir += '_sobol%i' % sobol_num[0]
+
+ # Perform the optimisation.
+ self.interpreter.minimise.execute(min_algor=opt.get_min_algor(i),
func_tol=func_tol, max_iter=max_iter)
+
+ # Store the intermediate results.
+ if self.store_intermediate:
+ self.results_output(model=model, dir=model_directory(model,
base_dir=intermediate_dir), results_file=True, simulation=False)
+ count_sobol_points(dir=intermediate_dir, force=True)
+ summarise(dir=intermediate_dir, force=True)
def optimise_rigid(self):
_______________________________________________
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