Hi Troels,

For such changes, do you need to test for r20a being a float?  It is
defined as being a numpy array of floats in the docstring, and so it
should always be.  Not checking for a value which should never be
supplied will simplify the code.

Regards,

Edward

On 11 June 2014 14:54,  <[email protected]> wrote:
> Author: tlinnet
> Date: Wed Jun 11 14:54:37 2014
> New Revision: 23834
>
> URL: http://svn.gna.org/viewcvs/relax?rev=23834&view=rev
> Log:
> Implemented masked replacement if fact is less that 1.0.
>
> Task #7807 (https://gna.org/task/index.php?7807): Speed-up of dispersion 
> models for Clustered analysis.
>
> Modified:
>     branches/disp_spin_speed/lib/dispersion/cr72.py
>
> Modified: branches/disp_spin_speed/lib/dispersion/cr72.py
> URL: 
> http://svn.gna.org/viewcvs/relax/branches/disp_spin_speed/lib/dispersion/cr72.py?rev=23834&r1=23833&r2=23834&view=diff
> ==============================================================================
> --- branches/disp_spin_speed/lib/dispersion/cr72.py     (original)
> +++ branches/disp_spin_speed/lib/dispersion/cr72.py     Wed Jun 11 14:54:37 
> 2014
> @@ -93,7 +93,7 @@
>
>  # Python module imports.
>  from numpy import allclose, arccosh, array, cos, cosh, isfinite, isnan, 
> fabs, min, max, ndarray, ones, sqrt, sum, zeros
> -from numpy.ma import masked_greater_equal, masked_where
> +from numpy.ma import masked_greater_equal, masked_less, masked_where
>
>  # Repetitive calculations (to speed up calculations).
>  eta_scale = 2.0**(-3.0/2.0)
> @@ -125,6 +125,7 @@
>      # Flag to tell if values should be replaced if max_etapos in cosh 
> function is violated.
>      t_dw_zero = False
>      t_max_etapos = False
> +    t_min_fact = False
>
>      # Catch parameter values that will result in no exchange, returning flat 
> R2eff = R20 lines (when kex = 0.0, k_AB = 0.0).
>      # Test if pA or kex is zero.
> @@ -182,13 +183,16 @@
>      # The arccosh argument - catch invalid values.
>      fact = Dpos * cosh(etapos) - Dneg * cos(etaneg)
>      if min(fact) < 1.0:
> -        back_calc[:] = r20_kex
> -        return
> +        t_min_fact = True
> +        mask_min_fact = masked_less(fact, 1.0)
> +        # To prevent math errors, set fact to 1.
> +        fact[mask_min_etapos.mask] = 1.0
>
>      # Calculate R2eff.
>      R2eff = r20_kex - cpmg_frqs * arccosh( fact )
>
>      # Replace data in array.
> +    # If dw is zero.
>      if t_dw_zero:
>          if isinstance(r20a, float):
>              back_calc[:] = array([r20a]*num_points)
> @@ -196,12 +200,21 @@
>          else:
>              R2eff[mask_dw_zero.mask] = r20a[mask_dw_zero.mask]
>
> +    # If eta_pos above 700.
>      if t_max_etapos:
>          if isinstance(r20a, float):
>              back_calc[:] = array([r20a]*num_points)
>              return
>          else:
>              R2eff[mask_max_etapos.mask] = r20a[mask_max_etapos.mask]
> +
> +    # If fact < 1.0
> +    if t_min_fact:
> +        if isinstance(r20a, float):
> +            back_calc[:] = array([r20a]*num_points)
> +            return
> +        else:
> +            R2eff[mask_min_fact.mask] = r20a[mask_min_fact.mask]
>
>      # Catch errors, taking a sum over array is the fastest way to check for
>      # +/- inf (infinity) and nan (not a number).
>
>
> _______________________________________________
> 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