Author: bugman Date: Mon Oct 8 17:57:50 2012 New Revision: 17751 URL: http://svn.gna.org/viewcvs/relax?rev=17751&view=rev Log: Fix for the diffusion tensor __deepcopy__() replacement method for the new design. Modified: branches/tensor_data/data/diff_tensor.py Modified: branches/tensor_data/data/diff_tensor.py URL: http://svn.gna.org/viewcvs/relax/branches/tensor_data/data/diff_tensor.py?rev=17751&r1=17750&r2=17751&view=diff ============================================================================== --- branches/tensor_data/data/diff_tensor.py (original) +++ branches/tensor_data/data/diff_tensor.py Mon Oct 8 17:57:50 2012 @@ -580,23 +580,31 @@ """An empty data container for the diffusion tensor elements.""" # List of modifiable attributes. - _mod_attr = ['type', - 'fixed', - 'spheroid_type', - 'tm', 'tm_sim', 'tm_err', - 'Da', 'Da_sim', 'Da_err', - 'Dr', 'Dr_sim', 'Dr_err', - 'theta', 'theta_sim', 'theta_err', - 'phi', 'phi_sim', 'phi_err', - 'alpha', 'alpha_sim', 'alpha_err', - 'beta', 'beta_sim', 'beta_err', - 'gamma', 'gamma_sim', 'gamma_err'] + _mod_attr = [ + 'type', + 'fixed', + 'spheroid_type', + 'tm', 'tm_sim', 'tm_err', + 'Da', 'Da_sim', 'Da_err', + 'Dr', 'Dr_sim', 'Dr_err', + 'theta', 'theta_sim', 'theta_err', + 'phi', 'phi_sim', 'phi_err', + 'alpha', 'alpha_sim', 'alpha_err', + 'beta', 'beta_sim', 'beta_err', + 'gamma', 'gamma_sim', 'gamma_err' + ] def __deepcopy__(self, memo): """Replacement deepcopy method.""" # Make a new object. new_obj = self.__class__.__new__(self.__class__) + + # Initialise it. + new_obj.__init__() + + # Copy over the simulation number. + new_obj.__dict__['_sim_num'] = self._sim_num # Loop over all modifiable objects in self and make deepcopies of them. for name in self._mod_attr: @@ -604,24 +612,33 @@ if not hasattr(self, name): continue + # The category. + if search('_err$', name): + category = 'err' + param = name.replace('_err', '') + elif search('_sim$', name): + category = 'sim' + param = name.replace('_sim', '') + else: + category = 'val' + param = name + # Get the object. value = getattr(self, name) - - # Replace the object with a deepcopy of it. - setattr(new_obj, name, deepcopy(value, memo)) - - # Place the new class object into the namespace of DiffTensorSimList objects. - if isinstance(value, DiffTensorSimList): - # Get the new list. - new_value = getattr(new_obj, name) - - # Place the new class object into the namespace of DiffTensorSimList objects. - new_value.diff_element = new_obj - + # Normal parameters. + if category == 'val': + new_obj.set(param=param, value=deepcopy(value, memo)) + + # Errors. + elif category == 'err': + new_obj.set(param=param, value=deepcopy(value, memo), category='err') + + # Simulation objects objects. + else: # Recreate the list elements. for i in range(len(value)): - new_value.append(value[i]) + new_obj.set(param=param, value=value[i], category='sim', sim_index=i) # Return the new object. return new_obj