Author: bugman Date: Mon Nov 30 10:30:47 2009 New Revision: 10021 URL: http://svn.gna.org/viewcvs/relax?rev=10021&view=rev Log: Created the set_param_values() API method for model-free analysis. Modified: 1.3/specific_fns/model_free/main.py Modified: 1.3/specific_fns/model_free/main.py URL: http://svn.gna.org/viewcvs/relax/1.3/specific_fns/model_free/main.py?rev=10021&r1=10020&r2=10021&view=diff ============================================================================== --- 1.3/specific_fns/model_free/main.py (original) +++ 1.3/specific_fns/model_free/main.py Mon Nov 30 10:30:47 2009 @@ -22,7 +22,6 @@ # Python module imports. from copy import deepcopy -from data.diff_tensor import DiffTensorSimList from math import pi from numpy import float64, array, identity, transpose, zeros from re import match, search @@ -30,6 +29,8 @@ import sys # relax module imports. +import arg_check +from data.diff_tensor import DiffTensorSimList from float import isNaN, isInf from generic_fns import diffusion_tensor, pipes, relax_data, sequence from generic_fns.mol_res_spin import convert_from_global_index, count_spins, exists_mol_res_spin_data, find_index, return_spin, return_spin_from_index, spin_index_loop, spin_loop @@ -1365,6 +1366,11 @@ @return: The default value. @rtype: float """ + + # Diffusion tensor parameter. + diff_val = diffusion_tensor.default_value(param) + if diff_val != None: + return diff_val # Local tm. if param == 'local_tm': @@ -2203,6 +2209,11 @@ @rtype: str """ + # Diffusion tensor parameters. + diff_obj = diffusion_tensor.return_data_name(param) + if diff_obj: + return diff_obj + # Local tm. if search('[Ll]ocal[ -_]tm', param): return 'local_tm' @@ -2488,17 +2499,55 @@ inc = inc + 1 - def set_non_spin_params(self, value=None, param=None): - """Set the non-spin specific model-free params (this is solely the diffusion params). - - @param value: The parameter values. - @type value: None, number, or list of numbers - @param param: The parameter names. - @type param: None, str, or list of str - """ - - # Call the diffusion tensor parameter setting function. - diffusion_tensor.set(value=value, param=param) + def set_param_values(self, param=None, value=None, spin_id=None, force=True): + """Set the model-free parameter values. + + @keyword param: The parameter name list. + @type param: list of str + @keyword value: The parameter value list. + @type value: list + @keyword spin_id: The spin identification string, only used for spin specific parameters. + @type spin_id: None or str + @keyword force: A flag which if True will cause current values to be overwritten. If False, a RelaxError will raised if the parameter value is already set. + @type force: bool + """ + + # Checks. + arg_check.is_str_list(param, 'parameter name') + + # Separate out the diffusion tensor parameters from the model-free parameters. + diff_params = [] + diff_vals = [] + mf_params = [] + mf_vals = [] + for i in range(len(param)): + # Diffusion tensor parameter. + diff_obj = diffusion_tensor.return_data_name(param[i]) + if diff_obj: + diff_params.append(param[i]) + diff_vals.append(value[i]) + + # Model-free parameter. + else: + mf_params.append(param[i]) + mf_vals.append(value[i]) + + # Set the diffusion tensor parameters. + if diff_params: + diffusion_tensor.set(value=diff_vals, param=diff_params) + + # Set the model-free parameters. + for i in range(len(mf_params)): + # The object name. + obj_name = self.return_data_name(mf_params[i]) + + # Check if it is a model-free parameter. + if obj_name not in self.data_names(set='params') and obj_name not in self.data_names(set='generic'): + raise RelaxError("The parameter '%s' is unknown." % mf_params[i]) + + # Set the parameter. + for spin in spin_loop(spin_id): + setattr(spin, obj_name, mf_vals[i]) def set_selected_sim(self, model_info, select_sim):