For reference, here are the numbers for the minimum R2eff deviations between the models and the numeric model:
Relative times of the various approaches: Baldwin 0.156321 1.0 Numerical 19.931842 127.505850142 Meiboom 0.057285 0.36645748172 Carver 0.080676 0.516091887846 Nikolai 0.452753 2.89630311986 NikolaiFun 0.285322 1.82523141485 NikolaiLong 49.659583 317.676978781 NikolaiLong 50.218869 321.254783426 Minimum error over grid (s-1): Meiboom: 1.61560178569e-07 Baldwin: 0.0 CarverRichards: 3.05888647745e-11 Nikolai fun: 0.0 Nikolai dougle (9): 0.0 Nikolai long double (18): 1.56125112838e-17 Nikolai long double (23): 1.73193356121e-17 Regards, Edward On 6 May 2014 11:43, Edward d'Auvergne <[email protected]> wrote: > Hi, > > On 6 May 2014 11:05, Andrew Baldwin <[email protected]> wrote: >>> That CarverRichards number now looks what I would personally expect >> >> from the theory! >> >> I'd agree with that. This is noteworthy - we're agreeing on something! Had >> to happen eventually :) > > :) > > >>> I don't like the Nikolai results, but I also don't >>> like the fact that I have two completely different implementations of >>> this code (from the sim_all software and the compareTroells.py >>> script). >> >> >> The different versions of code is a good point. I copied and pasted what I >> think is your function here: >> >> http://www.nmr-relax.com/api/3.1/lib.dispersion.ns_cpmg_2site_expanded-pysrc.html >> >> And have added this as the fun mode (see function nikolaiFun). My Nikolai >> version came from 'reiko_ishima_v1.tar' and 'Exact_Rex_mod_v1.m' as i'm sure >> he'll explain shortly. I ran my python version against the matlab original >> to confirm that the transcription was good. >> >> Note in the grid search in this version of testdisp, the grid is no longer >> going over R2E, as the funmode is R2g=R2e. Note also that I've jigged up the >> Pb in the attached code to cover higher pbs (we now go to 40%) to increase >> the apparent errors in the CR equation. This is well outside anywhere >> experimentally accessible, but fun to observe. > > Troels, it's worth noting this R2g=R2e. As most people will use this > in the field, it would be of great value to have a 'B14' model variant > whereby R20A == R20B ;) > > >> So your function is already faster by a factor of 2 which is good. Please >> can you check the function to make sure i've wired your definitions up to my >> function correctly? When I use a narrow grid search, the function seems to >> give the exact result so I think it's probably right. >> >> Here's the o/p: >> >> #### >> >> Relative times of the various approaches: >> Baldwin 0.194165 1.0 >> Numerical 21.562522 111.052568692 >> Meiboom 0.070515 0.363170499318 >> Carver 0.105395 0.542811526279 >> compareTroells.py:396: RuntimeWarning: invalid value encountered in log >> >> R2eff=(1/Tc)*numpy.log(intensity0/intensity); # we did not factor >> out (Ka+Kb)/2 here >> Nikolai 0.615217 3.16852676847 >> compareTroells.py:274: RuntimeWarning: invalid value encountered in log >> R2eff=-inv_relax_time * numpy.log(Mx) >> NikolaiFun 0.376738 1.94029819998 >> NikolaiLong 81.447843 419.477470193 >> NikolaiLong 82.098139 422.82666289 >> >> Maximum error over grid (s-1): >> Meiboom: 237214256.582 >> Baldwin: 6.57168541807e-10 >> CarverRichards: 29.9287668504 >> Nikolai fun: 2964.41300775 >> Nikolai dougle (9): 142.46676955 >> Nikolai long double (18): 0.063449549192819563320223 >> Nikolai long double (23): 5.7775487944482434059452e-7 >> #### > > The tcp in this function in relax is defined as 1/(4*nu_CPMG), but in > your script you have "tcp=1./(2*nu_cpmg);". Apart from that, it looks > ok. Changing to the correct tcp gives: > > Relative times of the various approaches: > Baldwin 0.159632 1.0 > Numerical 19.974315 125.127261451 > Meiboom 0.056497 0.353920266613 > Carver 0.080027 0.501321790117 > Nikolai 0.453068 2.83820286659 > NikolaiFun 0.284052 1.77941766062 > NikolaiLong 50.020116 313.34642177 > NikolaiLong 50.430594 315.917823494 > Maximum error over grid (s-1): > Meiboom: 237214256.582 > Baldwin: 6.57168541807e-10 > CarverRichards: 29.9287668504 > Nikolai fun: 104.735381561 > Nikolai dougle (9): 142.46676955 > Nikolai long double (18): 0.063449549192819563320223 > Nikolai long double (23): 5.7775487944482434059452e-7 > > That's far more reasonable for Nikolai's fun! > > >> I was hoping that the modification would make it more stable. If anything >> the reverse is true. I would have included a note to this effect in the >> paper (and still will if you can show it's better). Note the error is very >> temperamental. You can miss it even by setting up the grid search >> differently. Give it a narrow grid, and you won't see the error. Only >> relatively specific, but seemingly hard to predict sets of parameters (all >> with large deltaOs) lead it to explode. > > It is worth looking at all deviations rather than just the single > maximum R2eff difference. It could be that there is an edge case in > the grid whereby a maths domain error occurs. Or an trig function > overflow. The median deviation to avoid such outliers might also be > of worth. By switching in your code all numpy.max() calls with > numpy.median(), and making sure the "Nikolai long double (*)" results > are pre-converted to a numpy float64 array, I then see an incredibly > different picture: > > Relative times of the various approaches: > Baldwin 0.152725 1.0 > Numerical 19.596446 128.3119725 > Meiboom 0.05604 0.366934031756 > Carver 0.077236 0.505719430349 > Nikolai 0.43944 2.87732853167 > NikolaiFun 0.273977 1.7939237191 > NikolaiLong 50.243433 328.979754461 > NikolaiLong 50.784841 332.524740547 > Median error over grid (s-1): > Meiboom: 4.0064828013 > Baldwin: 3.9630521087e-12 > CarverRichards: 0.00661151728704 > Nikolai fun: 6.62225829728e-12 > Nikolai dougle (9): 6.70041799822e-12 > Nikolai long double (18): 2.62099543458e-12 > Nikolai long double (23): 2.27758174227e-12 > > ! > > So this is much clearer - outliers are the major difference you are > seeing. A study of such outliers and their cause would be quite > interesting. But in most of these cases, simple collapsed equations > for each model should be derivable at the edges which then produce the > expected R2eff over the entire parameter space rather than > computational artefacts in some corners. Anyway, this result makes it > crystal clear that the different models should not be judged by the > single maximum outlier over the entire parameter space. > > Regards, > > Edward _______________________________________________ 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

