Author: tlinnet Date: Thu May 1 09:18:41 2014 New Revision: 22901 URL: http://svn.gna.org/viewcvs/relax?rev=22901&view=rev Log: Added model B14 to be found as target function. sr #3154: (https://gna.org/support/?3154) Implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales. Modified: trunk/target_functions/relax_disp.py Modified: trunk/target_functions/relax_disp.py URL: http://svn.gna.org/viewcvs/relax/trunk/target_functions/relax_disp.py?rev=22901&r1=22900&r2=22901&view=diff ============================================================================== --- trunk/target_functions/relax_disp.py (original) +++ trunk/target_functions/relax_disp.py Thu May 1 09:18:41 2014 @@ -2,6 +2,7 @@ # # # Copyright (C) 2013-2014 Edward d'Auvergne # # Copyright (C) 2009 Sebastien Morin # +# Copyright (C) 2014 Troels E. Linnet # # # # This file is part of the program relax (http://www.nmr-relax.com). # # # @@ -29,6 +30,7 @@ from numpy import complex64, dot, float64, int16, zeros # relax module imports. +from lib.dispersion.b14 import r2eff_B14 from lib.dispersion.cr72 import r2eff_CR72 from lib.dispersion.dpl94 import r1rho_DPL94 from lib.dispersion.it99 import r2eff_IT99 @@ -52,7 +54,7 @@ from lib.errors import RelaxError from lib.float import isNaN from target_functions.chi2 import chi2 -from specific_analyses.relax_disp.variables import EXP_TYPE_CPMG_DQ, EXP_TYPE_CPMG_MQ, EXP_TYPE_CPMG_PROTON_MQ, EXP_TYPE_CPMG_PROTON_SQ, EXP_TYPE_CPMG_SQ, EXP_TYPE_CPMG_ZQ, EXP_TYPE_R1RHO, MODEL_CR72, MODEL_CR72_FULL, MODEL_DPL94, MODEL_IT99, MODEL_LIST_CPMG, MODEL_LIST_FULL, MODEL_LIST_MMQ, MODEL_LIST_MQ_CPMG, MODEL_LIST_R1RHO, MODEL_LM63, MODEL_LM63_3SITE, MODEL_M61, MODEL_M61B, MODEL_MP05, MODEL_MMQ_CR72, MODEL_NOREX, MODEL_NS_CPMG_2SITE_3D, MODEL_NS_CPMG_2SITE_3D_FULL, MODEL_NS_CPMG_2SITE_EXPANDED, MODEL_NS_CPMG_2SITE_STAR, MODEL_NS_CPMG_2SITE_STAR_FULL, MODEL_NS_MMQ_2SITE, MODEL_NS_MMQ_3SITE, MODEL_NS_MMQ_3SITE_LINEAR, MODEL_NS_R1RHO_2SITE, MODEL_NS_R1RHO_3SITE, MODEL_NS_R1RHO_3SITE_LINEAR, MODEL_TAP03, MODEL_TP02, MODEL_TSMFK01 +from specific_analyses.relax_disp.variables import EXP_TYPE_CPMG_DQ, EXP_TYPE_CPMG_MQ, EXP_TYPE_CPMG_PROTON_MQ, EXP_TYPE_CPMG_PROTON_SQ, EXP_TYPE_CPMG_SQ, EXP_TYPE_CPMG_ZQ, EXP_TYPE_R1RHO, MODEL_B14, MODEL_CR72, MODEL_CR72_FULL, MODEL_DPL94, MODEL_IT99, MODEL_LIST_CPMG, MODEL_LIST_FULL, MODEL_LIST_MMQ, MODEL_LIST_MQ_CPMG, MODEL_LIST_R1RHO, MODEL_LM63, MODEL_LM63_3SITE, MODEL_M61, MODEL_M61B, MODEL_MP05, MODEL_MMQ_CR72, MODEL_NOREX, MODEL_NS_CPMG_2SITE_3D, MODEL_NS_CPMG_2SITE_3D_FULL, MODEL_NS_CPMG_2SITE_EXPANDED, MODEL_NS_CPMG_2SITE_STAR, MODEL_NS_CPMG_2SITE_STAR_FULL, MODEL_NS_MMQ_2SITE, MODEL_NS_MMQ_3SITE, MODEL_NS_MMQ_3SITE_LINEAR, MODEL_NS_R1RHO_2SITE, MODEL_NS_R1RHO_3SITE, MODEL_NS_R1RHO_3SITE_LINEAR, MODEL_TAP03, MODEL_TP02, MODEL_TSMFK01 class Dispersion: @@ -67,6 +69,7 @@ - 'No Rex': The model for no chemical exchange relaxation. - 'LM63': The Luz and Meiboom (1963) 2-site fast exchange model. - 'LM63 3-site': The Luz and Meiboom (1963) 3-site fast exchange model. + - 'B14': The Baldwin (2014) 2-site exact solution model for all time scales. - 'CR72': The reduced Carver and Richards (1972) 2-site model for all time scales with R20A = R20B. - 'CR72 full': The full Carver and Richards (1972) 2-site model for all time scales. - 'IT99': The Ishima and Torchia (1999) 2-site model for all time scales with skewed populations (pA >> pB). @@ -225,7 +228,7 @@ # The spin and frequency dependent R2 parameters. self.end_index.append(self.num_exp * self.num_spins * self.num_frq) - if model in [MODEL_CR72_FULL, MODEL_NS_CPMG_2SITE_3D_FULL, MODEL_NS_CPMG_2SITE_STAR_FULL]: + if model in [MODEL_B14, MODEL_CR72_FULL, MODEL_NS_CPMG_2SITE_3D_FULL, MODEL_NS_CPMG_2SITE_STAR_FULL]: self.end_index.append(2 * self.num_exp * self.num_spins * self.num_frq) # The spin and dependent parameters (phi_ex, dw, padw2). @@ -340,6 +343,8 @@ self.func = self.func_LM63 if model == MODEL_LM63_3SITE: self.func = self.func_LM63_3site + if model == MODEL_B14: + self.func = self.func_B14 if model == MODEL_CR72_FULL: self.func = self.func_CR72_full if model == MODEL_CR72: @@ -758,6 +763,33 @@ raise RelaxError("The '%s' CPMG model is not compatible with the '%s' experiment type." % (self.model, self.exp_types[0])) + def func_B14(self, params): + """Target function for the Baldwin (2014) 2-site exact solution model for all time scales. + + This assumes that pA > pB, and hence this must be implemented as a constraint. + + + @param params: The vector of parameter values. + @type params: numpy rank-1 float array + @return: The chi-squared value. + @rtype: float + """ + + # Scaling. + if self.scaling_flag: + params = dot(params, self.scaling_matrix) + + # Unpack the parameter values. + R20A = params[:self.end_index[0]] + R20B = params[self.end_index[0]:self.end_index[1]] + dw = params[self.end_index[1]:self.end_index[2]] + pA = params[self.end_index[2]] + kex = params[self.end_index[2]+1] + + # Calculate and return the chi-squared value. + return self.calc_CR72_chi2(R20A=R20A, R20B=R20B, dw=dw, pA=pA, kex=kex) + + def func_CR72(self, params): """Target function for the reduced Carver and Richards (1972) 2-site exchange model on all time scales.