Author: tlinnet Date: Tue Jul 22 17:53:43 2014 New Revision: 24644 URL: http://svn.gna.org/viewcvs/relax?rev=24644&view=rev Log: For model ns mmq 3site, moved the parameter conversion of dw_AB from target function to lib function. Task #7807 (https://gna.org/task/index.php?7807): Speed-up of dispersion models for Clustered analysis. Modified: branches/disp_spin_speed/lib/dispersion/ns_mmq_3site.py branches/disp_spin_speed/target_functions/relax_disp.py Modified: branches/disp_spin_speed/lib/dispersion/ns_mmq_3site.py URL: http://svn.gna.org/viewcvs/relax/branches/disp_spin_speed/lib/dispersion/ns_mmq_3site.py?rev=24644&r1=24643&r2=24644&view=diff ============================================================================== --- branches/disp_spin_speed/lib/dispersion/ns_mmq_3site.py (original) +++ branches/disp_spin_speed/lib/dispersion/ns_mmq_3site.py Tue Jul 22 17:53:43 2014 @@ -210,7 +210,7 @@ return matrix -def r2eff_ns_mmq_3site_mq(M0=None, F_vector=array([1, 0, 0], float64), R20A=None, R20B=None, R20C=None, pA=None, pB=None, dw_AB=None, dw_AC=None, dwH_AB=None, dwH_AC=None, kex_AB=None, kex_BC=None, kex_AC=None, inv_tcpmg=None, tcp=None, back_calc=None, num_points=None, power=None): +def r2eff_ns_mmq_3site_mq(M0=None, F_vector=array([1, 0, 0], float64), R20A=None, R20B=None, R20C=None, pA=None, pB=None, dw_AB=None, dw_BC=None, dwH_AB=None, dwH_BC=None, kex_AB=None, kex_BC=None, kex_AC=None, inv_tcpmg=None, tcp=None, back_calc=None, num_points=None, power=None): """The 3-site numerical solution to the Bloch-McConnell equation for MQ data. The notation used here comes from: @@ -240,12 +240,12 @@ @type pB: float @keyword dw_AB: The chemical exchange difference between states A and B in rad/s. @type dw_AB: numpy float array of rank [NS][NM][NO][ND] - @keyword dw_AC: The chemical exchange difference between states A and C in rad/s. - @type dw_AC: numpy float array of rank [NS][NM][NO][ND] + @keyword dw_BC: The chemical exchange difference between states B and C in rad/s. + @type dw_BC: numpy float array of rank [NS][NM][NO][ND] @keyword dwH_AB: The proton chemical exchange difference between states A and B in rad/s. @type dwH_AB: numpy float array of rank [NS][NM][NO][ND] - @keyword dwH_AC: The proton chemical exchange difference between states A and C in rad/s. - @type dwH_AC: numpy float array of rank [NS][NM][NO][ND] + @keyword dwH_BC: The proton chemical exchange difference between states B and C in rad/s. + @type dwH_BC: numpy float array of rank [NS][NM][NO][ND] @keyword kex_AB: The exchange rate between sites A and B for 3-site exchange with kex_AB = k_AB + k_BA (rad.s^-1) @type kex_AB: float @keyword kex_BC: The exchange rate between sites A and C for 3-site exchange with kex_AC = k_AC + k_CA (rad.s^-1) @@ -265,6 +265,8 @@ """ # Once off parameter conversions. + dw_AC = dw_AB + dw_BC + dwH_AC = dwH_AB + dwH_BC pC = 1.0 - pA - pB pA_pB = pA + pB pA_pC = pA + pC @@ -397,7 +399,7 @@ back_calc[si, mi, oi, i]= -inv_tcpmg[si, mi, oi, i] * log(Mx / pA) -def r2eff_ns_mmq_3site_sq_dq_zq(M0=None, F_vector=array([1, 0, 0], float64), R20A=None, R20B=None, R20C=None, pA=None, pB=None, dw_AB=None, dw_AC=None, dwH_AB=None, dwH_AC=None, kex_AB=None, kex_BC=None, kex_AC=None, inv_tcpmg=None, tcp=None, back_calc=None, num_points=None, power=None): +def r2eff_ns_mmq_3site_sq_dq_zq(M0=None, F_vector=array([1, 0, 0], float64), R20A=None, R20B=None, R20C=None, pA=None, pB=None, dw_AB=None, dw_BC=None, dwH_AB=None, dwH_BC=None, kex_AB=None, kex_BC=None, kex_AC=None, inv_tcpmg=None, tcp=None, back_calc=None, num_points=None, power=None): """The 3-site numerical solution to the Bloch-McConnell equation for SQ, ZQ, and DQ data. The notation used here comes from: @@ -423,12 +425,12 @@ @type pB: float @keyword dw_AB: The combined chemical exchange difference between states A and B in rad/s. It should be set to dwH for 1H SQ data, dw for heteronuclear SQ data, dwH-dw for ZQ data, and dwH+dw for DQ data. @type dw_AB: numpy float array of rank [NS][NM][NO][ND] - @keyword dw_AC: The combined chemical exchange difference between states A and C in rad/s. It should be set to dwH for 1H SQ data, dw for heteronuclear SQ data, dwH-dw for ZQ data, and dwH+dw for DQ data. - @type dw_AC: numpy float array of rank [NS][NM][NO][ND] + @keyword dw_BC: The combined chemical exchange difference between states B and C in rad/s. It should be set to dwH for 1H SQ data, dw for heteronuclear SQ data, dwH-dw for ZQ data, and dwH+dw for DQ data. + @type dw_BC: numpy float array of rank [NS][NM][NO][ND] @keyword dwH_AB: Unused - this is simply to match the r2eff_mmq_3site_mq() function arguments. @type dwH_AB: numpy float array of rank [NS][NM][NO][ND] - @keyword dwH_AC: Unused - this is simply to match the r2eff_mmq_3site_mq() function arguments. - @type dwH_AC: numpy float array of rank [NS][NM][NO][ND] + @keyword dwH_BC: Unused - this is simply to match the r2eff_mmq_3site_mq() function arguments. + @type dwH_BC: numpy float array of rank [NS][NM][NO][ND] @keyword kex_AB: The exchange rate between sites A and B for 3-site exchange with kex_AB = k_AB + k_BA (rad.s^-1) @type kex_AB: float @keyword kex_BC: The exchange rate between sites A and C for 3-site exchange with kex_AC = k_AC + k_CA (rad.s^-1) @@ -448,6 +450,7 @@ """ # Once off parameter conversions. + dw_AC = dw_AB + dw_BC pC = 1.0 - pA - pB pA_pB = pA + pB pA_pC = pA + pC Modified: branches/disp_spin_speed/target_functions/relax_disp.py URL: http://svn.gna.org/viewcvs/relax/branches/disp_spin_speed/target_functions/relax_disp.py?rev=24644&r1=24643&r2=24644&view=diff ============================================================================== --- branches/disp_spin_speed/target_functions/relax_disp.py (original) +++ branches/disp_spin_speed/target_functions/relax_disp.py Tue Jul 22 17:53:43 2014 @@ -244,10 +244,9 @@ self.dw_struct = deepcopy(numpy_array_zeros) self.dwH_struct = deepcopy(numpy_array_zeros) self.dw_AB_struct = deepcopy(numpy_array_zeros) - self.dw_AC_struct = deepcopy(numpy_array_zeros) self.dw_BC_struct = deepcopy(numpy_array_zeros) self.dwH_AB_struct = deepcopy(numpy_array_zeros) - self.dwH_AC_struct = deepcopy(numpy_array_zeros) + self.dwH_BC_struct = deepcopy(numpy_array_zeros) self.phi_ex_struct = deepcopy(numpy_array_zeros) self.phi_ex_B_struct = deepcopy(numpy_array_zeros) self.phi_ex_C_struct = deepcopy(numpy_array_zeros) @@ -693,15 +692,11 @@ @rtype: float """ - # Once off parameter conversions. - dw_AC = dw_AB + dw_BC - dwH_AC = dwH_AB + dwH_BC - # Convert dw from ppm to rad/s. Use the out argument, to pass directly to structure. multiply( multiply.outer( dw_AB.reshape(1, self.NS), self.nm_no_nd_ones ), self.frqs, out=self.dw_AB_struct ) - multiply( multiply.outer( dw_AC.reshape(1, self.NS), self.nm_no_nd_ones ), self.frqs, out=self.dw_AC_struct ) + multiply( multiply.outer( dw_BC.reshape(1, self.NS), self.nm_no_nd_ones ), self.frqs, out=self.dw_BC_struct ) multiply( multiply.outer( dwH_AB.reshape(1, self.NS), self.nm_no_nd_ones ), self.frqs_H, out=self.dwH_AB_struct ) - multiply( multiply.outer( dwH_AC.reshape(1, self.NS), self.nm_no_nd_ones ), self.frqs_H, out=self.dwH_AC_struct ) + multiply( multiply.outer( dwH_BC.reshape(1, self.NS), self.nm_no_nd_ones ), self.frqs_H, out=self.dwH_BC_struct ) # Reshape R20A and R20B to per experiment, spin and frequency. self.r20a_struct[:] = multiply.outer( R20A.reshape(self.NE, self.NS, self.NM), self.no_nd_ones ) @@ -714,38 +709,38 @@ r20b = self.r20b_struct[ei] r20c = self.r20b_struct[ei] dw_AB_frq = self.dw_AB_struct[ei] - dw_AC_frq = self.dw_AC_struct[ei] + dw_BC_frq = self.dw_BC_struct[ei] dwH_AB_frq = self.dwH_AB_struct[ei] - dwH_AC_frq = self.dwH_AC_struct[ei] + dwH_BC_frq = self.dwH_BC_struct[ei] # Alias the dw frequency combinations. aliased_dwH_AB = 0.0 * self.dwH_AB_struct[ei] - aliased_dwH_AC = 0.0 * self.dwH_AC_struct[ei] + aliased_dwH_BC = 0.0 * self.dwH_BC_struct[ei] if self.exp_types[ei] == EXP_TYPE_CPMG_SQ: aliased_dw_AB = dw_AB_frq - aliased_dw_AC = dw_AC_frq + aliased_dw_BC = dw_BC_frq elif self.exp_types[ei] == EXP_TYPE_CPMG_PROTON_SQ: aliased_dw_AB = dwH_AB_frq - aliased_dw_AC = dwH_AC_frq + aliased_dw_BC = dwH_BC_frq elif self.exp_types[ei] == EXP_TYPE_CPMG_DQ: aliased_dw_AB = dw_AB_frq + dwH_AB_frq - aliased_dw_AC = dw_AC_frq + dwH_AC_frq + aliased_dw_BC = dw_BC_frq + dwH_BC_frq elif self.exp_types[ei] == EXP_TYPE_CPMG_ZQ: aliased_dw_AB = dw_AB_frq - dwH_AB_frq - aliased_dw_AC = dw_AC_frq - dwH_AC_frq + aliased_dw_BC = dw_BC_frq - dwH_BC_frq elif self.exp_types[ei] == EXP_TYPE_CPMG_MQ: aliased_dw_AB = dw_AB_frq - aliased_dw_AC = dw_AC_frq + aliased_dw_BC = dw_BC_frq aliased_dwH_AB = dwH_AB_frq - aliased_dwH_AC = dwH_AC_frq + aliased_dwH_BC = dwH_BC_frq elif self.exp_types[ei] == EXP_TYPE_CPMG_PROTON_MQ: aliased_dw_AB = dwH_AB_frq - aliased_dw_AC = dwH_AC_frq + aliased_dw_BC = dwH_BC_frq aliased_dwH_AB = dw_AB_frq - aliased_dwH_AC = dw_AC_frq + aliased_dwH_BC = dw_BC_frq # Back calculate the R2eff values for each experiment type. - self.r2eff_ns_mmq[ei](M0=self.M0, R20A=r20a, R20B=r20b, R20C=r20c, pA=pA, pB=pB, dw_AB=aliased_dw_AB, dw_AC=aliased_dw_AC, dwH_AB=aliased_dwH_AB, dwH_AC=aliased_dwH_AC, kex_AB=kex_AB, kex_BC=kex_BC, kex_AC=kex_AC, inv_tcpmg=self.inv_relax_times[ei], tcp=self.tau_cpmg[ei], back_calc=self.back_calc[ei], num_points=self.num_disp_points[ei], power=self.power[ei]) + self.r2eff_ns_mmq[ei](M0=self.M0, R20A=r20a, R20B=r20b, R20C=r20c, pA=pA, pB=pB, dw_AB=aliased_dw_AB, dw_BC=aliased_dw_BC, dwH_AB=aliased_dwH_AB, dwH_BC=aliased_dwH_BC, kex_AB=kex_AB, kex_BC=kex_BC, kex_AC=kex_AC, inv_tcpmg=self.inv_relax_times[ei], tcp=self.tau_cpmg[ei], back_calc=self.back_calc[ei], num_points=self.num_disp_points[ei], power=self.power[ei]) # Clean the data for all values, which is left over at the end of arrays. self.back_calc = self.back_calc*self.disp_struct