Author: tlinnet Date: Wed Jun 18 18:52:37 2014 New Revision: 24119 URL: http://svn.gna.org/viewcvs/relax?rev=24119&view=rev Log: Moved the parameter conversion for ns mmq 3site into 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=24119&r1=24118&r2=24119&view=diff ============================================================================== --- branches/disp_spin_speed/lib/dispersion/ns_mmq_3site.py (original) +++ branches/disp_spin_speed/lib/dispersion/ns_mmq_3site.py Wed Jun 18 18:52:37 2014 @@ -110,7 +110,7 @@ matrix[2, 2] = -k_CB - k_CA + 1.j*dw_AC - R20C -def r2eff_ns_mmq_3site_mq(M0=None, F_vector=array([1, 0, 0], float64), m1=None, m2=None, R20A=None, R20B=None, R20C=None, pA=None, pB=None, pC=None, dw_AB=None, dw_AC=None, dwH_AB=None, dwH_AC=None, k_AB=None, k_BA=None, k_BC=None, k_CB=None, k_AC=None, k_CA=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), m1=None, m2=None, 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): """The 3-site numerical solution to the Bloch-McConnell equation for MQ data. The notation used here comes from: @@ -142,8 +142,6 @@ @type pA: float @keyword pB: The population of state B. @type pB: float - @keyword pC: The population of state C. - @type pC: 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. @@ -152,18 +150,12 @@ @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 k_AB: The rate of exchange from site A to B (rad/s). - @type k_AB: float - @keyword k_BA: The rate of exchange from site B to A (rad/s). - @type k_BA: float - @keyword k_BC: The rate of exchange from site B to C (rad/s). - @type k_BC: float - @keyword k_CB: The rate of exchange from site C to B (rad/s). - @type k_CB: float - @keyword k_AC: The rate of exchange from site A to C (rad/s). - @type k_AC: float - @keyword k_CA: The rate of exchange from site C to A (rad/s). - @type k_CA: float + @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) + @type kex_BC: float + @keyword kex_AC: The exchange rate between sites B and C for 3-site exchange with kex_BC = k_BC + k_CB (rad.s^-1) + @type kex_AC: float @keyword inv_tcpmg: The inverse of the total duration of the CPMG element (in inverse seconds). @type inv_tcpmg: float @keyword tcp: The tau_CPMG times (1 / 4.nu1). @@ -176,6 +168,23 @@ @type power: numpy int array of rank [NS][NM][NO][ND] """ + # Once off parameter conversions. + pC = 1.0 - pA - pB + pA_pB = pA + pB + pA_pC = pA + pC + pB_pC = pB + pC + k_BA = pA * kex_AB / pA_pB + k_AB = pB * kex_AB / pA_pB + k_CB = pB * kex_BC / pB_pC + k_BC = pC * kex_BC / pB_pC + k_CA = pA * kex_AC / pA_pC + k_AC = pC * kex_AC / pA_pC + + # This is a vector that contains the initial magnetizations corresponding to the A and B state transverse magnetizations. + M0[0] = pA + M0[1] = pB + M0[2] = pC + # Extract shape of experiment. NS, NM, NO = num_points.shape @@ -283,7 +292,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), m1=None, m2=None, R20A=None, R20B=None, R20C=None, pA=None, pB=None, pC=None, dw_AB=None, dw_AC=None, dwH_AB=None, dwH_AC=None, k_AB=None, k_BA=None, k_BC=None, k_CB=None, k_AC=None, k_CA=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), m1=None, m2=None, 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): """The 3-site numerical solution to the Bloch-McConnell equation for SQ, ZQ, and DQ data. The notation used here comes from: @@ -311,8 +320,6 @@ @type pA: float @keyword pB: The population of state B. @type pB: float - @keyword pC: The population of state C. - @type pC: 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. @@ -321,10 +328,12 @@ @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 k_AB: The rate of exchange from site A to B (rad/s). - @type k_AB: float - @keyword k_BA: The rate of exchange from site B to A (rad/s). - @type k_BA: float + @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) + @type kex_BC: float + @keyword kex_AC: The exchange rate between sites B and C for 3-site exchange with kex_BC = k_BC + k_CB (rad.s^-1) + @type kex_AC: float @keyword inv_tcpmg: The inverse of the total duration of the CPMG element (in inverse seconds). @type inv_tcpmg: numpy float array of rank [NS][NM][NO][ND] @keyword tcp: The tau_CPMG times (1 / 4.nu1). @@ -337,6 +346,23 @@ @type power: numpy int array of rank [NS][NM][NO][ND] """ + # Once off parameter conversions. + pC = 1.0 - pA - pB + pA_pB = pA + pB + pA_pC = pA + pC + pB_pC = pB + pC + k_BA = pA * kex_AB / pA_pB + k_AB = pB * kex_AB / pA_pB + k_CB = pB * kex_BC / pB_pC + k_BC = pC * kex_BC / pB_pC + k_CA = pA * kex_AC / pA_pC + k_AC = pC * kex_AC / pA_pC + + # This is a vector that contains the initial magnetizations corresponding to the A and B state transverse magnetizations. + M0[0] = pA + M0[1] = pB + M0[2] = pC + # Extract shape of experiment. NS, NM, NO = num_points.shape 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=24119&r1=24118&r2=24119&view=diff ============================================================================== --- branches/disp_spin_speed/target_functions/relax_disp.py (original) +++ branches/disp_spin_speed/target_functions/relax_disp.py Wed Jun 18 18:52:37 2014 @@ -677,23 +677,8 @@ """ # Once off parameter conversions. - pC = 1.0 - pA - pB - pA_pB = pA + pB - pA_pC = pA + pC - pB_pC = pB + pC - k_BA = pA * kex_AB / pA_pB - k_AB = pB * kex_AB / pA_pB - k_CB = pB * kex_BC / pB_pC - k_BC = pC * kex_BC / pB_pC - k_CA = pA * kex_AC / pA_pC - k_AC = pC * kex_AC / pA_pC dw_AC = dw_AB + dw_BC dwH_AC = dwH_AB + dwH_BC - - # This is a vector that contains the initial magnetizations corresponding to the A and B state transverse magnetizations. - self.M0[0] = pA - self.M0[1] = pB - self.M0[2] = pC # 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 ) @@ -744,7 +729,7 @@ aliased_dwH_AC = dw_AC_frq # Back calculate the R2eff values for each experiment type. - self.r2eff_ns_mmq[ei](M0=self.M0, m1=self.m1, m2=self.m2, R20A=r20a, R20B=r20b, R20C=r20c, pA=pA, pB=pB, pC=pC, dw_AB=aliased_dw_AB, dw_AC=aliased_dw_AC, dwH_AB=aliased_dwH_AB, dwH_AC=aliased_dwH_AC, k_AB=k_AB, k_BA=k_BA, k_BC=k_BC, k_CB=k_CB, k_AC=k_AC, k_CA=k_CA, 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, m1=self.m1, m2=self.m2, 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]) # Clean the data for all values, which is left over at the end of arrays. self.back_calc = self.back_calc*self.disp_struct