Author: tlinnet Date: Wed May 21 20:36:36 2014 New Revision: 23316 URL: http://svn.gna.org/viewcvs/relax?rev=23316&view=rev Log: Extremely important fix to the model B14. This was discovered by author Andrew Baldwin of the inspection of his code in relax. bug #22021: (https://gna.org/bugs/?22021) Model B14 shows bad fitting to data. The implementation was performed wrong for calculation of g3 and g4. The implementations should be performed by trigonometric functions. The model B14 was previously in a state of non-functioning. The B14 model now shows excellent performance. For the challenging case of data created with numerical model NS CPMG 2-site 3D: sfrq_1 = 599.8908617*1E6 time_T2_1 = 0.06 ncycs_1 = [2, 4, 8, 10, 20, 30, 40, 60] sfrq_2 = 499.8908617*1E6 time_T2_2 = 0.05 ncycs_2 = [2, 4, 8, 10, 30, 35, 40, 50] r2 = 10. rad/s. kex: 1000 rad/s pA: 0.99 dw: 2. ppm CR72 would fit: ---------- CR72 Ala :1@N r2 599.9 GRID=10.116 MIN=10.000 SET=10.000 RELC=0.000 CR72 Ala :1@N r2 499.9 GRID=10.080 MIN=9.999 SET=10.000 RELC=0.000 CR72 Ala :1@N pA GRID=0.929 MIN=0.990 SET=0.990 RELC=0.000 CR72 Ala :1@N dw GRID=1.429 MIN=1.925 SET=2.000 RELC=0.039 CR72 Ala :1@N kex GRID=5714.714 MIN=1034.721 SET=1000.000 RELC=0.034 B14 fits: ----------- B14 Ala :1@N r2 599.9 GRID=10.116 MIN=10.000 SET=10.000 RELC=0.000 B14 Ala :1@N r2 499.9 GRID=10.080 MIN=10.000 SET=10.000 RELC=0.000 B14 Ala :1@N pA GRID=0.929 MIN=0.990 SET=0.990 RELC=0.000 B14 Ala :1@N dw GRID=1.429 MIN=2.000 SET=2.000 RELC=0.000 B14 Ala :1@N kex GRID=10000.000 MIN=1000.001 SET=1000.000 RELC=0.000 Modified: trunk/lib/dispersion/b14.py Modified: trunk/lib/dispersion/b14.py URL: http://svn.gna.org/viewcvs/relax/trunk/lib/dispersion/b14.py?rev=23316&r1=23315&r2=23316&view=diff ============================================================================== --- trunk/lib/dispersion/b14.py (original) +++ trunk/lib/dispersion/b14.py Wed May 21 20:36:36 2014 @@ -111,7 +111,7 @@ # Python module imports. import numpy -from numpy import arccosh, array, cos, cosh, in1d, log, nonzero, sin, sinh, sqrt, power +from numpy import arccosh, arctan2, array, cos, cosh, in1d, log, nonzero, sin, sinh, sqrt, power # Repetitive calculations (to speed up calculations). g_fact = 1/sqrt(2) @@ -161,11 +161,12 @@ # Repetitive calculations (to speed up calculations). dw2 = dw**2 two_tcp = 2.0 * tcp - sqrt_zeta2_Psi2 = sqrt(zeta**2 + Psi**2) # Get the real and imaginary components of the exchange induced shift. - g3 = g_fact * sqrt( Psi + sqrt_zeta2_Psi2) - g4 = g_fact * sqrt(-Psi + sqrt_zeta2_Psi2) + # Trigonometric functions faster than square roots. + quad_zeta2_Psi2 = (zeta**2 + Psi**2)**0.25 + g3 = cos(0.5 * arctan2(-zeta, Psi)) * quad_zeta2_Psi2 + g4 = sin(0.5 * arctan2(-zeta, Psi)) * quad_zeta2_Psi2 # Repetitive calculations (to speed up calculations). g32 = g3**2