Hi Troels,

Note that you should do this for all R1rho model types.  Exceptions
are the 'M61' and 'M61 skew' models which are on-resonance, hence they
should return arrays of R1rho' as theta is always 0.0.

Regards,

Edward



On 27 May 2014 09:14, Edward d'Auvergne <[email protected]> wrote:
> Hi Troels,
>
> I think this TP02 model in the 'no Rex' edge cases should return:
>
> R1rho = R1 cos^2(theta) + R1rho' sin^2(theta)        (1)
>
> rather than:
>
> R1rho = R1rho'        (2)
>
> The problem is in the unit tests in
> test_suite/unit_tests/_lib/_dispersion/test_tp02.py, specifically the
> calc_r1rho() method.  This method should calculate the equation (1)
> for R1rho and check against that in all cases, rather than the current
> check:
>
>         # Check all R1rho values.
>         if self.kex > 1.e5:
>             for i in range(self.num_points):
>                 self.assertAlmostEqual(R1rho[i], self.r1, 6)
>         else:
>             for i in range(self.num_points):
>                 self.assertAlmostEqual(R1rho[i], self.r1rho_prime)
>
> You can see this in equation 11.68 in the manual
> (http://www.nmr-relax.com/manual/TP02_2_site_exchange_R1_model.html),
> the TP02 model equation.  The values of pA = 1.0 (hence pB = 0.0), kex
> = 0.0, and dw = 0.0 will all cause the numerator in the third part of
> the equation to be zero, so all that is left is equation (1) above.
> Large values of kex will cause the other parts of the third part of
> equation 11.68 to be insignificant so you have kex / kex^2 which heads
> to zero as kex heads to infinity.  So then you have the third part
> disappearing, leaving equation (1) again.
>
> So you would need to calculate R1rho as in equation (1) and modify the checks:
>
>         # Calculate R1rho in the absence of exchange.
>         r1rho_no_rex = ...
>
>         # Check all R1rho values.
>         if self.kex > 1.e5:
>             for i in range(self.num_points):
>                 self.assertAlmostEqual(R1rho[i], r1rho_no_rex, 6)
>         else:
>             for i in range(self.num_points):
>                 self.assertAlmostEqual(R1rho[i], r1rho_no_rex)
>
> Cheers,
>
> Edward
>
>
>
> On 26 May 2014 23:09,  <[email protected]> wrote:
>> Author: tlinnet
>> Date: Mon May 26 23:09:56 2014
>> New Revision: 23445
>>
>> URL: http://svn.gna.org/viewcvs/relax?rev=23445&view=rev
>> Log:
>> Critical fix for the math domain catching of model TP02.
>>
>> This was discovered with the added 8 unit tests demonstrating edge case 'no 
>> Rex' failures.
>>
>> This follows from the ideas in the post 
>> http://article.gmane.org/gmane.science.nmr.relax.devel/5858.
>> This is related to: task #7793: (https://gna.org/task/?7793) Speed-up of 
>> dispersion models.
>>
>> This is to implement catching of math domain errors, before they occur.
>>
>> Modified:
>>     branches/disp_speed/lib/dispersion/tp02.py
>>
>> Modified: branches/disp_speed/lib/dispersion/tp02.py
>> URL: 
>> http://svn.gna.org/viewcvs/relax/branches/disp_speed/lib/dispersion/tp02.py?rev=23445&r1=23444&r2=23445&view=diff
>> ==============================================================================
>> --- branches/disp_speed/lib/dispersion/tp02.py  (original)
>> +++ branches/disp_speed/lib/dispersion/tp02.py  Mon May 26 23:09:56 2014
>> @@ -123,18 +123,13 @@
>>
>>      # Catch zeros (to avoid pointless mathematical operations).
>>      # This will result in no exchange, returning flat lines.
>> -    if min(numer) == 0.0:
>> -        return R1_cos_theta2 + R1rho_prime_sin_theta2
>> +    if numer == 0.0:
>> +        return array([r1rho_prime]*num_points)
>>
>>      # Denominator.
>>      denom = waeff2 * wbeff2 / weff2 + kex2
>>      #denom_extended = waeff2*wbeff2/weff2+kex2-2*sin_theta2*pA*pB*dw**2
>>
>> -    # Catch math domain error of dividing with 0.
>> -    # This is when denom=0.
>> -    if min(abs(denom)) == 0:
>> -        return array([1e100]*num_points)
>> -
>>      # R1rho calculation.
>>      R1rho = R1_cos_theta2 + R1rho_prime_sin_theta2 + sin_theta2 * numer / 
>> denom
>>
>>
>>
>> _______________________________________________
>> relax (http://www.nmr-relax.com)
>>
>> This is the relax-commits mailing list
>> [email protected]
>>
>> To unsubscribe from this list, get a password
>> reminder, or change your subscription options,
>> visit the list information page at
>> https://mail.gna.org/listinfo/relax-commits

_______________________________________________
relax (http://www.nmr-relax.com)

This is the relax-devel mailing list
[email protected]

To unsubscribe from this list, get a password
reminder, or change your subscription options,
visit the list information page at
https://mail.gna.org/listinfo/relax-devel

Reply via email to