Hi Troels,
In this case, do we even need the isfinite() check? Can this equation
ever calculate R2eff to be Inf? The only case I can think of is when
kex is 0.0, as rex = phi_ex/kex. Therefore you could replace this
check with:
if kex == 0.0:
back_calc[:] = array([1e100]*num_points)
return
This can go at the very start of the function too. This was the
reason for the original kex check deleted in this commit.
Regards,
Edward
On 19 May 2014 03:20, <tlinnet@xxxxxxxxxxxxx> wrote:
Author: tlinnet
Date: Mon May 19 03:20:51 2014
New Revision: 23226
URL: http://svn.gna.org/viewcvs/relax?rev=23226&view=rev
Log:
Speed-up of model LM63.
task #7793: (https://gna.org/task/?7793) Speed-up of dispersion models.
Change in systemtest was:
test_hansen_cpmg_data_auto_analysis
13.731s -> 9.971s
test_hansen_cpmg_data_auto_analysis_r2eff
13.370s -> 9.510s
test_hansen_cpmg_data_to_lm63
3.254s -> 2.080s
Modified:
branches/disp_speed/lib/dispersion/lm63.py
Modified: branches/disp_speed/lib/dispersion/lm63.py
URL:
http://svn.gna.org/viewcvs/relax/branches/disp_speed/lib/dispersion/lm63.py?rev=23226&r1=23225&r2=23226&view=diff
==============================================================================
--- branches/disp_speed/lib/dispersion/lm63.py (original)
+++ branches/disp_speed/lib/dispersion/lm63.py Mon May 19 03:20:51 2014
@@ -64,7 +64,7 @@
"""
# Python module imports.
-from math import tanh
+from numpy import isfinite, sum, tanh
def r2eff_LM63(r20=None, phi_ex=None, kex=None, cpmg_frqs=None,
back_calc=None, num_points=None):
@@ -91,16 +91,14 @@
rex = phi_ex / kex
kex_4 = 4.0 / kex
- # Loop over the time points, back calculating the R2eff values.
+ # Calculate R2eff.
+ R2eff = r20 + rex * (1.0 - kex_4 * cpmg_frqs * tanh(kex / (4.0 *
cpmg_frqs)))
+
+ # Catch errors, taking a sum over array is the fastest way to check for
+ # +/- inf (infinity) and nan (not a number).
+ if not isfinite(sum(R2eff)):
+ R2eff = array([1e100]*num_points)
+
+ # Parse back the value to update the back_calc class object.
for i in range(num_points):
- # Catch zeros.
- if phi_ex == 0.0:
- back_calc[i] = r20
-
- # Avoid divide by zero.
- elif kex == 0.0:
- back_calc[i] = 1e100
-
- # The full formula.
- else:
- back_calc[i] = r20 + rex * (1.0 - kex_4 * cpmg_frqs[i] *
tanh(kex / (4.0 * cpmg_frqs[i])))
+ back_calc[i] = R2eff[i]
_______________________________________________
relax (http://www.nmr-relax.com)
This is the relax-commits mailing list
relax-commits@xxxxxxx
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