Author: tlinnet Date: Mon Jul 28 12:56:51 2014 New Revision: 24780 URL: http://svn.gna.org/viewcvs/relax?rev=24780&view=rev Log: Added function to calculate rotating frame paramters for lib/nmr.py. This function is called several times in specific_analyses/relax_disp/data.py by plotting functions. sr #3124(https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2_eff as function of Omega_eff. sr #3138(https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1]. Modified: branches/r1rho_plotting/lib/nmr.py Modified: branches/r1rho_plotting/lib/nmr.py URL: http://svn.gna.org/viewcvs/relax/branches/r1rho_plotting/lib/nmr.py?rev=24780&r1=24779&r2=24780&view=diff ============================================================================== --- branches/r1rho_plotting/lib/nmr.py (original) +++ branches/r1rho_plotting/lib/nmr.py Mon Jul 28 12:56:51 2014 @@ -23,7 +23,7 @@ """Module containing functions related to basic NMR concepts.""" # Python module imports. -from math import pi +from math import atan2, pi, sqrt # relax module imports. from lib.physical_constants import g1H, return_gyromagnetic_ratio @@ -95,3 +95,35 @@ # Convert and return. return frq * 2.0 * pi * B0 / g1H * return_gyromagnetic_ratio(isotope) * 1e-6 + + +def rotating_frame_params(chemical_shift=None, spin_lock_offset=None, omega1=None): + """Calculate the rotating frame paramaters. + + @keyword chemical_shift: The chemical shift in rad/s. + @type chemical_shift: float + @keyword spin_lock_offset: spin-lock offset in rad/s. + @type spin_lock_offset: float + @keyword omega1: Spin-lock field strength in rad/s. + @type omega1: float + @return: The average resonance offset in the rotating frame, angle describing the tilted rotating frame relative to the laboratory, effective field in rotating frame. + @rtype: float, float, float + """ + + # The average resonance offset in the rotating frame. + Delta_omega = chemical_shift - spin_lock_offset + + # Calculate the theta angle describing the tilted rotating frame relative to the laboratory. + # theta = atan(omega1 / Delta_omega). + # If Delta_omega is negative, there follow the symmetry of atan, that atan(-x) = - atan(x). + # Then it should be: theta = pi + atan(-x) = pi - atan(x) = pi - abs(atan( +/- x)). + # This is taken care of with the atan2(y, x) function, which return atan(y / x), in radians, and the result is between -pi and pi. + if Delta_omega == 0.0: + theta = pi / 2.0 + else: + theta = atan2(omega1, Delta_omega) + + # Calculate effective field in rotating frame. + w_eff = sqrt( Delta_omega*Delta_omega + omega1*omega1 ) + + return Delta_omega, theta, w_eff