Author: bugman
Date: Wed Sep 24 18:43:46 2014
New Revision: 26021
URL: http://svn.gna.org/viewcvs/relax?rev=26021&view=rev
Log:
Added the ability to specify a pre-run directory in the frame order
auto-analysis.
This will be used for refinement purposes. If the new pre_run_dir argument,
modelled on the
relaxation dispersion auto-analysis, is supplied then results files will be
loaded from this
directory and the base data pipe copying and PCS subset optimisation steps will
be skipped. The
model nesting algorithm is also deactivated.
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=26021&r1=26020&r2=26021&view=diff
==============================================================================
--- branches/frame_order_cleanup/auto_analyses/frame_order.py (original)
+++ branches/frame_order_cleanup/auto_analyses/frame_order.py Wed Sep 24
18:43:46 2014
@@ -56,7 +56,7 @@
class Frame_order_analysis:
"""The frame order auto-analysis protocol."""
- def __init__(self, data_pipe_full=None, data_pipe_subset=None,
pipe_bundle=None, results_dir=None, opt_rigid=None, opt_subset=None,
opt_full=None, opt_mc=None, mc_sim_num=500, models=MODEL_LIST_NONREDUNDANT,
brownian_step_size=2.0, brownian_snapshot=10, brownian_total=1000):
+ def __init__(self, data_pipe_full=None, data_pipe_subset=None,
pipe_bundle=None, results_dir=None, pre_run_dir=None, opt_rigid=None,
opt_subset=None, opt_full=None, opt_mc=None, mc_sim_num=500,
models=MODEL_LIST_NONREDUNDANT, brownian_step_size=2.0, brownian_snapshot=10,
brownian_total=1000):
"""Perform the full frame order analysis.
@param data_pipe_full: The name of the data pipe containing
all of the RDC and PCS data.
@@ -67,7 +67,9 @@
@type pipe_bundle: str
@keyword results_dir: The directory where files are saved in.
@type results_dir: str
+ @keyword pre_run_dir: The optional directory containing the
frame order auto-analysis results from a previous run. If supplied, then the
'data_pipe_full', 'data_pipe_subset', and 'opt_subset' arguments will be
ignored. The results will be loaded from the results files in this directory,
and then optimisation starts from there. The model nesting algorithm will also
be deactivated.
@keyword opt_rigid: The grid search, zooming grid search
and minimisation settings object for the rigid frame order model.
+ @type pre_run_dir: None or str
@type opt_rigid: Optimisation_settings instance
@keyword opt_subset: The grid search, zooming grid search
and minimisation settings object for optimisation of all models, excluding the
rigid model, for the PCS data subset.
@type opt_subset: Optimisation_settings instance
@@ -121,6 +123,13 @@
else:
self.results_dir = getcwd() + sep
+ # The pre-run directory.
+ self.pre_run_dir = pre_run_dir
+ self.pre_run_flag = False
+ if self.pre_run_dir:
+ self.pre_run_dir += sep
+ self.pre_run_flag = True
+
# Data checks.
self.check_vars()
@@ -338,11 +347,13 @@
return incs
- def model_directory(self, model):
+ def model_directory(self, model, pre_run=False):
"""Return the directory to be used for the model.
- @param model: The frame order model.
- @type model: str
+ @param model: The frame order model.
+ @type model: str
+ @keyword pre_run: A flag which if True will prepend the pre-run
results directory instead of the current results directory.
+ @type pre_run: bool
"""
# Convert the model name.
@@ -350,7 +361,10 @@
dir = dir.replace(',', '')
# Return the full path.
- return self.results_dir + dir
+ if pre_run:
+ return self.pre_run_dir + dir
+ else:
+ return self.results_dir + dir
def nested_params_ave_dom_pos(self, model):
@@ -583,22 +597,140 @@
# Skip to the next model.
continue
+ # Load a pre-run results file.
+ if self.pre_run_dir != None:
+ self.read_results(model=model,
pipe_name=self.pipe_name_dict[model], pre_run=True)
+
+ # Otherwise use the base data pipes.
+ else:
+ # Create the data pipe using the full data set, and switch to
it.
+ self.interpreter.pipe.copy(self.data_pipe_subset,
self.pipe_name_dict[model], bundle_to=self.pipe_bundle)
+ self.interpreter.pipe.switch(self.pipe_name_dict[model])
+
+ # Select the Frame Order model.
+ self.interpreter.frame_order.select_model(model=model)
+
+ # Copy nested parameters.
+ subsection(file=sys.stdout, text="Parameter nesting.")
+ self.nested_params_ave_dom_pos(model)
+ self.nested_params_eigenframe(model)
+ self.nested_params_pivot(model)
+ 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:
+ # Zooming grid search.
+ for i in opt.loop_grid():
+ # Set the zooming grid search level.
+ zoom = opt.get_grid_zoom_level(i)
+ if zoom != None:
+ self.interpreter.minimise.grid_zoom(level=zoom)
+
+ # The numerical optimisation settings.
+ self.sobol_setup(opt.get_grid_sobol_info(i))
+
+ # Set up the custom grid increments.
+ incs = self.custom_grid_incs(model,
inc=opt.get_grid_inc(i))
+
+ # Perform the grid search.
+ self.interpreter.minimise.grid_search(inc=incs)
+
+ # Minimise (for the PCS data subset and full RDC set).
+ for i in opt.loop_min():
+ # The numerical optimisation settings.
+ self.sobol_setup(opt.get_min_sobol_info(i))
+
+ # Perform the optimisation.
+
self.interpreter.minimise.execute(min_algor=opt.get_min_algor(i),
func_tol=opt.get_min_func_tol(i), max_iter=opt.get_min_max_iter(i))
+
+ # Copy the PCS data.
+ self.interpreter.pcs.copy(pipe_from=self.data_pipe_full,
pipe_to=self.pipe_name_dict[model])
+
+ # Reset the selection status.
+ for spin, spin_id in spin_loop(return_id=True,
skip_desel=False):
+ # Get the spin from the original pipe.
+ spin_orig = return_spin(spin_id=spin_id,
pipe=self.data_pipe_full)
+
+ # Reset the spin selection.
+ 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 numerical optimisation settings.
+ self.sobol_setup(opt.get_min_sobol_info(i))
+
+ # Perform the optimisation.
+
self.interpreter.minimise.execute(min_algor=opt.get_min_algor(i),
func_tol=opt.get_min_func_tol(i), max_iter=opt.get_min_max_iter(i))
+
+ # Results printout.
+ self.print_results()
+
+ # Model elimination.
+ self.interpreter.eliminate()
+
+ # Save the results.
+ self.interpreter.results.write(dir=self.model_directory(model),
force=True)
+
+ # The PDB representation of the model and visualisation script.
+ self.visualisation(model=model)
+
+ # Perform the axis permutation analysis.
+ self.axis_permutation_analysis(model=model)
+
+
+ def optimise_rigid(self):
+ """Optimise the rigid frame order model.
+
+ The Sobol' integration is not used here, so the algorithm is different
to the other frame order models.
+ """
+
+ # The model.
+ model = MODEL_RIGID
+ title = model[0].upper() + model[1:]
+
+ # Print out.
+ section(file=sys.stdout, text="%s frame order model"%title, prespace=5)
+
+ # Output the model staring time.
+ self.interpreter.time()
+
+ # The data pipe name.
+ self.pipe_name_dict[model] = '%s - %s' % (title, self.pipe_bundle)
+ self.pipe_name_list.append(self.pipe_name_dict[model])
+
+ # The results file already exists, so read its contents instead.
+ if self.read_results(model=model,
pipe_name=self.pipe_name_dict[model]):
+ # The PDB representation of the model and the pseudo-Brownian
dynamics simulation (in case this was not completed correctly).
+
self.interpreter.frame_order.pdb_model(dir=self.model_directory(model),
force=True)
+
self.interpreter.frame_order.simulate(dir=self.model_directory(model),
step_size=self.brownian_step_size, snapshot=self.brownian_snapshot,
total=self.brownian_total, force=True)
+
+ # Nothing more to do.
+ return
+
+ # Load a pre-run results file.
+ if self.pre_run_flag:
+ self.read_results(model=model,
pipe_name=self.pipe_name_dict[model], pre_run=True)
+
+ # Otherwise use the base data pipes.
+ else:
# Create the data pipe using the full data set, and switch to it.
- self.interpreter.pipe.copy(self.data_pipe_subset,
self.pipe_name_dict[model], bundle_to=self.pipe_bundle)
+ self.interpreter.pipe.copy(self.data_pipe_full,
self.pipe_name_dict[model], bundle_to=self.pipe_bundle)
self.interpreter.pipe.switch(self.pipe_name_dict[model])
# Select the Frame Order model.
self.interpreter.frame_order.select_model(model=model)
- # Copy nested parameters.
- subsection(file=sys.stdout, text="Parameter nesting.")
- self.nested_params_ave_dom_pos(model)
- self.nested_params_eigenframe(model)
- self.nested_params_pivot(model)
- self.nested_params_order(model)
-
- # Zooming grid search.
- opt = self.opt_subset
+ # Optimisation.
+ opt = self.opt_rigid
+ if opt != None:
+ # Split zooming grid search for the translation.
+ print("\n\nTranslation active - splitting the grid search and
iterating.")
+ self.interpreter.value.set(param='ave_pos_x', val=0.0)
+ self.interpreter.value.set(param='ave_pos_y', val=0.0)
+ self.interpreter.value.set(param='ave_pos_z', val=0.0)
for i in opt.loop_grid():
# Set the zooming grid search level.
zoom = opt.get_grid_zoom_level(i)
@@ -608,123 +740,22 @@
# The numerical optimisation settings.
self.sobol_setup(opt.get_grid_sobol_info(i))
- # Set up the custom grid increments.
- incs = self.custom_grid_incs(model, inc=opt.get_grid_inc(i))
-
- # Perform the grid search.
- self.interpreter.minimise.grid_search(inc=incs)
-
- # Minimise (for the PCS data subset and full RDC set).
+ # The number of increments.
+ inc = opt.get_grid_inc(i)
+
+ # First optimise the rotation.
+ self.interpreter.minimise.grid_search(inc=[None, None, None,
inc, inc, inc], skip_preset=False)
+
+ # Then the translation.
+ self.interpreter.minimise.grid_search(inc=[inc, inc, inc,
None, None, None], skip_preset=False)
+
+ # Minimise.
for i in opt.loop_min():
# The numerical optimisation settings.
self.sobol_setup(opt.get_min_sobol_info(i))
# Perform the optimisation.
self.interpreter.minimise.execute(min_algor=opt.get_min_algor(i),
func_tol=opt.get_min_func_tol(i), max_iter=opt.get_min_max_iter(i))
-
- # Copy the PCS data.
- self.interpreter.pcs.copy(pipe_from=self.data_pipe_full,
pipe_to=self.pipe_name_dict[model])
-
- # Reset the selection status.
- for spin, spin_id in spin_loop(return_id=True, skip_desel=False):
- # Get the spin from the original pipe.
- spin_orig = return_spin(spin_id=spin_id,
pipe=self.data_pipe_full)
-
- # Reset the spin selection.
- spin.select = spin_orig.select
-
- # Minimise (for the full data set).
- opt = self.opt_full
- for i in opt.loop_min():
- # The numerical optimisation settings.
- self.sobol_setup(opt.get_min_sobol_info(i))
-
- # Perform the optimisation.
-
self.interpreter.minimise.execute(min_algor=opt.get_min_algor(i),
func_tol=opt.get_min_func_tol(i), max_iter=opt.get_min_max_iter(i))
-
- # Results printout.
- self.print_results()
-
- # Model elimination.
- self.interpreter.eliminate()
-
- # Save the results.
- self.interpreter.results.write(dir=self.model_directory(model),
force=True)
-
- # The PDB representation of the model and visualisation script.
- self.visualisation(model=model)
-
- # Perform the axis permutation analysis.
- self.axis_permutation_analysis(model=model)
-
-
- def optimise_rigid(self):
- """Optimise the rigid frame order model.
-
- The Sobol' integration is not used here, so the algorithm is different
to the other frame order models.
- """
-
- # The model.
- model = MODEL_RIGID
- title = model[0].upper() + model[1:]
-
- # Print out.
- section(file=sys.stdout, text="%s frame order model"%title, prespace=5)
-
- # Output the model staring time.
- self.interpreter.time()
-
- # The data pipe name.
- self.pipe_name_dict[model] = '%s - %s' % (title, self.pipe_bundle)
- self.pipe_name_list.append(self.pipe_name_dict[model])
-
- # The results file already exists, so read its contents instead.
- if self.read_results(model=model,
pipe_name=self.pipe_name_dict[model]):
- # The PDB representation of the model and the pseudo-Brownian
dynamics simulation (in case this was not completed correctly).
-
self.interpreter.frame_order.pdb_model(dir=self.model_directory(model),
force=True)
-
self.interpreter.frame_order.simulate(dir=self.model_directory(model),
step_size=self.brownian_step_size, snapshot=self.brownian_snapshot,
total=self.brownian_total, force=True)
-
- # Nothing more to do.
- return
-
- # Create the data pipe using the full data set, and switch to it.
- self.interpreter.pipe.copy(self.data_pipe_full,
self.pipe_name_dict[model], bundle_to=self.pipe_bundle)
- self.interpreter.pipe.switch(self.pipe_name_dict[model])
-
- # Select the Frame Order model.
- self.interpreter.frame_order.select_model(model=model)
-
- # Split zooming grid search for the translation.
- print("\n\nTranslation active - splitting the grid search and
iterating.")
- self.interpreter.value.set(param='ave_pos_x', val=0.0)
- self.interpreter.value.set(param='ave_pos_y', val=0.0)
- self.interpreter.value.set(param='ave_pos_z', val=0.0)
- opt = self.opt_rigid
- for i in opt.loop_grid():
- # Set the zooming grid search level.
- zoom = opt.get_grid_zoom_level(i)
- if zoom != None:
- self.interpreter.minimise.grid_zoom(level=zoom)
-
- # The numerical optimisation settings.
- self.sobol_setup(opt.get_grid_sobol_info(i))
-
- # The number of increments.
- inc = opt.get_grid_inc(i)
-
- # First optimise the rotation.
- self.interpreter.minimise.grid_search(inc=[None, None, None, inc,
inc, inc], skip_preset=False)
-
- # Then the translation.
- self.interpreter.minimise.grid_search(inc=[inc, inc, inc, None,
None, None], skip_preset=False)
-
- # Minimise.
- for i in opt.loop_min():
- # The numerical optimisation settings.
- self.sobol_setup(opt.get_min_sobol_info(i))
-
- # Perform the optimisation.
- self.interpreter.minimise.execute(min_algor=opt.get_min_algor(i),
func_tol=opt.get_min_func_tol(i), max_iter=opt.get_min_max_iter(i))
# Results printout.
self.print_results()
@@ -817,19 +848,21 @@
sys.stdout.write("\n")
- def read_results(self, model=None, pipe_name=None):
+ def read_results(self, model=None, pipe_name=None, pre_run=False):
"""Attempt to read old results files.
@keyword model: The frame order model.
@type model: str
@keyword pipe_name: The name of the data pipe to use for this model.
@type pipe_name: str
+ @keyword pre_run: A flag which if True will read the results file
from the pre-run directory.
+ @type pre_run: bool
@return: True if the file exists and has been read, False
otherwise.
@rtype: bool
"""
# The file name.
- path = self.model_directory(model) + sep + 'results.bz2'
+ path = self.model_directory(model, pre_run=pre_run) + sep +
'results.bz2'
# The file does not exist.
if not access(path, F_OK):
_______________________________________________
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