If you are interested, there are a tonne of other code optimisations
which can be performed. For example k_AB and k_BA are calculated in
lib.dispersion.cr72. But this can happen at the start of the target
function outside of all the looping. Other dispersion models do this.
You can even pre-add them. The pB parameter as well - these only
need to be calculated once, not multiple times for each spin system,
each experiment type, and each magnetic field strength. r20_kex can
also be calculated in the calc_CR72_chi2() method as a numpy array,
and then sent in to r2eff_CR72() using the r20_index index. The speed
up of the cosh+cos vs. sqrt(sqrt()) suggestion of Andy
http://thread.gmane.org/gmane.science.nmr.relax.devel/5410/focus=5448
is rather small compared to these optimisations!
Regards,
Edward
On 3 May 2014 13:52, Edward d'Auvergne <edward@xxxxxxxxxxxxx> wrote:
Oh, the text 2^(-3/2) is the most compact for the documentation, and
it separates it from the 1/nu_cpmg part. So I'd prefer to present it
that way for compactness and cleanliness. That can also allow us to
pre-calculate it when the target function is initialised and and send
the value of 0.35355339059327373 into the function instead. That
would remove one exponential operation, again squeezing out a little
speed. As nu_CPMG is fixed, even faster would be to pre-calculate an
array of 2**(-3/2) / nu_CPMG and sent that in instead. That would
really be the maximal optimisation for this part!
Cheers,
Edward
On 3 May 2014 13:45, Edward d'Auvergne <edward@xxxxxxxxxxxxx> wrote:
Hi,
The origin of this was exactly what Andy Baldwin said at
http://thread.gmane.org/gmane.science.nmr.relax.devel/5410/focus=5448
- that there are many different tau_CPMG definitions and there is an
error in one of the equations in the original paper. The code in
relax is however correct. The eta_scale value should be
0.35355339059327373. Feel free to fix the equations in the
documentation of the wiki, manual and lib.dispersion.cr72 docstring.
I wrote these before the code was fully tested and hence there is now
a mismatch. As for using 2.0**(-3.0/2.0) in the code, this is for the
fastest operation, avoiding the square root. But now that I look at
it, one mathematical operation can be dropped for speed and the factor
changed to 2.0**(-1.5).
Cheers,
Edward
On 3 May 2014 12:28, Troels Emtekær Linnet <tlinnet@xxxxxxxxxxxxx> wrote:
Dear Edward.
I was inspecting the code of model CR72.
http://svn.gna.org/viewcvs/*checkout*/relax/trunk/lib/dispersion/cr72.py?revision=HEAD
This is calculated as:
eta_scale = 2.0**(-3.0/2.0) = 0.35
which is: 1 / sqrt(2**3).
This differs from the definition in:
http://wiki.nmr-relax.com/CR72_full#Equation
http://www.nmr-relax.com/manual/full_CR72_2_site_CPMG_model.html
http://www.nmr-relax.com/api/3.1/lib.dispersion.cr72-module.html
where:
eta_scale = 2.0**(2/3) = 1.58
which is {3}sqrt(2**2).
If I compare to:
http://wiki.nmr-relax.com/B14#Equation_compared_to_Carver_Richards_72
(DOI: 10.1016/j.jmr.2014.02.023 , eq 70,)
And to, (DOI: 10.1016/S0076-6879(01)39315-1 , eq 25, with the twist
that "tcp_Pa is the delay between 180 pulses in the CPMG pulse train",
"delay/180/delay/delay/180/delay " so that tcp_Pa = 2xdelay
Then really the manual should use:
eta_scale = 2.0**(-3/2)
or
1 / 2 sqrt(2)
_______________________________________________
relax (http://www.nmr-relax.com)
This is the relax-devel mailing list
relax-devel@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-devel