Author: bugman
Date: Thu Jun 25 16:00:59 2015
New Revision: 27860
URL: http://svn.gna.org/viewcvs/relax?rev=27860&view=rev
Log:
Huge speed up for the Monte Carlo simulations in the N-state model analyses.
This speed up is also for Bootstrap simulations and the frame order analysis.
The change affects
the monte_carlo.initial_values user function. The alignment tensor
_update_object() method was very
inefficient when updating the Monte Carlo simulation data structures. For each
simulation, each of
the alignment tensor data structures were being updated for all simulations.
Now only the current
simulations is being updated. This speeds up the user function by many orders
of magnitude.
Modified:
trunk/data_store/align_tensor.py
Modified: trunk/data_store/align_tensor.py
URL:
http://svn.gna.org/viewcvs/relax/trunk/data_store/align_tensor.py?rev=27860&r1=27859&r2=27860&view=diff
==============================================================================
--- trunk/data_store/align_tensor.py (original)
+++ trunk/data_store/align_tensor.py Thu Jun 25 16:00:59 2015
@@ -1242,7 +1242,7 @@
raise RelaxError("The alignment tensor is a read-only object. The
alignment tensor set() method must be used instead.")
- def _update_object(self, param_name, target, update_if_set, depends,
category):
+ def _update_object(self, param_name, target, update_if_set, depends,
category, sim_index=None):
"""Function for updating the target object, its error, and the MC
simulations.
If the base name of the object is not within the 'update_if_set' list,
this function returns
@@ -1254,14 +1254,13 @@
@type param_name: str
@param target: The name of the object to update.
@type target: str
- @param update_if_set: If the parameter being set by the
__setattr__() function is not
- within this list of parameters, don't waste time updating the
- target.
+ @param update_if_set: If the parameter being set by the
__setattr__() function is not within this list of parameters, don't waste time
updating the target.
@param depends: An array of names objects that the target is
dependent upon.
@type depends: array of str
- @param category: The category of the object to update (one of
'val', 'err', or
- 'sim').
+ @param category: The category of the object to update (one of
'val', 'err', or 'sim').
@type category: str
+ @keyword sim_index: The index for a Monte Carlo simulation for
simulated parameter.
+ @type sim_index: int or None
@return: None
"""
@@ -1327,6 +1326,12 @@
##############################
if category == 'sim':
+ # The simulation indices.
+ if sim_index != None:
+ sim_indices = [sim_index]
+ else:
+ sim_indices = range(self._sim_num)
+
# Get all the dependencies if possible.
missing_dep = 0
deps = []
@@ -1352,7 +1357,7 @@
# Repackage the deps structure.
args = []
skip = False
- for i in range(self._sim_num):
+ for i in sim_indices:
args.append(())
# Loop over the dependent structures.
@@ -1371,9 +1376,9 @@
# Loop over the sims and set the values.
if not skip:
- for i in range(self._sim_num):
+ for i in sim_indices:
# Calculate the value.
- value = fn(*args[i])
+ value = fn(*args[sim_indices.index(i)])
# Set the attribute.
self.__dict__[target+'_sim']._set(value=value,
sim_index=i)
@@ -1436,7 +1441,7 @@
# Update the data structures.
if update:
for target, update_if_set, depends in dependency_generator():
- self._update_object(param, target, update_if_set, depends,
category)
+ self._update_object(param, target, update_if_set, depends,
category, sim_index=sim_index)
def set_fixed(self, flag):
_______________________________________________
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