Hi Troels,
This one will be much harder to properly catch all numpy errors.
However you could try something like:
"""
from numpy import abs, max
if max(abs(etapos)) > 200:
back_calc[:] = array([1e100]*num_points)
return
"""
This might be sufficient to replace your isfinite() block.
Regards,
Edward
On 19 May 2014 03:20, <[email protected]> wrote:
> Author: tlinnet
> Date: Mon May 19 03:20:47 2014
> New Revision: 23224
>
> URL: http://svn.gna.org/viewcvs/relax?rev=23224&view=rev
> Log:
> Speed-up of model MMQ CR72.
>
> task #7793: (https://gna.org/task/?7793) Speed-up of dispersion models.
>
> Change in systemtest:
> test_sprangers_data_to_mmq_cr72
> 9.892s -> 4.121s
>
> Modified:
> branches/disp_speed/lib/dispersion/mmq_cr72.py
>
> Modified: branches/disp_speed/lib/dispersion/mmq_cr72.py
> URL:
> http://svn.gna.org/viewcvs/relax/branches/disp_speed/lib/dispersion/mmq_cr72.py?rev=23224&r1=23223&r2=23224&view=diff
> ==============================================================================
> --- branches/disp_speed/lib/dispersion/mmq_cr72.py (original)
> +++ branches/disp_speed/lib/dispersion/mmq_cr72.py Mon May 19 03:20:47
> 2014
> @@ -47,7 +47,7 @@
> """
>
> # Python module imports.
> -from numpy import arccosh, cos, cosh, log, sin, sqrt
> +from numpy import arccosh, cos, cosh, isfinite, log, sin, sqrt, sum
>
>
> def r2eff_mmq_cr72(r20=None, pA=None, pB=None, dw=None, dwH=None, kex=None,
> k_AB=None, k_BA=None, cpmg_frqs=None, inv_tcpmg=None, tcp=None,
> back_calc=None, num_points=None, power=None):
> @@ -122,27 +122,31 @@
> etapos_part = eta_scale * sqrt(Psi + sqrt_psi2_zeta2)
> etaneg_part = eta_scale * sqrt(-Psi + sqrt_psi2_zeta2)
>
> - # Loop over the time points, back calculating the R2eff values.
> + # The full eta+/- values.
> + etapos = etapos_part / cpmg_frqs
> + etaneg = etaneg_part / cpmg_frqs
> +
> + # The mD value.
> + mD = isqrt_pApBkex2 / (dpos * zpos) * (zpos +
> 2.0*dw*sin(zpos*tcp)/sin((dpos + zpos)*tcp))
> +
> + # The mZ value.
> + mZ = -isqrt_pApBkex2 / (dneg * zneg) * (dneg -
> 2.0*dw*sin(dneg*tcp)/sin((dneg + zneg)*tcp))
> +
> + # The Q value.
> + Q = 1 - mD**2 + mD*mZ - mZ**2 + 0.5*(mD + mZ)*sqrt_pBpA
> + Q = Q.real
> +
> + # The first eigenvalue.
> + lambda1 = r20_kex - cpmg_frqs * arccosh(Dpos * cosh(etapos) - Dneg *
> cos(etaneg))
> +
> + # The full formula.
> + R2eff = lambda1.real - inv_tcpmg * log(Q)
> +
> + # 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):
> - # Alias delta.
> - delta = tcp[i]
> -
> - # The full eta+/- values.
> - etapos = etapos_part / cpmg_frqs[i]
> - etaneg = etaneg_part / cpmg_frqs[i]
> -
> - # The mD value.
> - mD = isqrt_pApBkex2 / (dpos * zpos) * (zpos +
> 2.0*dw*sin(zpos*delta)/sin((dpos + zpos)*delta))
> -
> - # The mZ value.
> - mZ = -isqrt_pApBkex2 / (dneg * zneg) * (dneg -
> 2.0*dw*sin(dneg*delta)/sin((dneg + zneg)*delta))
> -
> - # The Q value.
> - Q = 1 - mD**2 + mD*mZ - mZ**2 + 0.5*(mD + mZ)*sqrt_pBpA
> - Q = Q.real
> -
> - # The first eigenvalue.
> - lambda1 = r20_kex - cpmg_frqs[i] * arccosh(Dpos * cosh(etapos) -
> Dneg * cos(etaneg))
> -
> - # The full formula.
> - back_calc[i] = lambda1.real - inv_tcpmg * log(Q)
> + back_calc[i] = R2eff[i]
>
>
> _______________________________________________
> 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