Author: tlinnet Date: Sun Aug 31 16:55:09 2014 New Revision: 25484 URL: http://svn.gna.org/viewcvs/relax?rev=25484&view=rev Log: Inserted possibility for boot-strapping in systemtest Relax_disp.test_estimate_r2eff_err_methods. This shows, that the boot strapping method get the SAME estimation for R2eff errors, as the estimate_r2eff_err() function! This must either mean, that the OLD Monte-Carlo simulation was corrupted, or the creation of data in Monte-Carlo simulations is corrupted. For the r2eff columns. 0.0348/0.0692/0.0348/0.0691 Old MC 2000/Estimated from Co-var/Manual re-calc of old MC/ Boot strapping 2000 simulations. ------------- R1rho at 799.8 MHz, for offset=118.078 ppm and dispersion point 431.0. r2eff=8.646/8.646 r2eff_err=0.0348/0.0692/0.0348/0.0691 i0=202664.191/202664.191 i0_err=699.6443/712.4201/699.6443/693.1613 R1rho at 799.8 MHz, for offset=118.078 ppm and dispersion point 651.2. r2eff=10.377/10.377 r2eff_err=0.0403/0.0810/0.0403/0.0823 i0=206049.558/206049.558 i0_err=776.4215/782.1833/776.4215/763.6342 R1rho at 799.8 MHz, for offset=118.078 ppm and dispersion point 800.5. r2eff=10.506/10.506 r2eff_err=0.0440/0.0853/0.0440/0.0887 i0=202586.332/202586.332 i0_err=763.9678/758.7052/763.9678/776.2788 R1rho at 799.8 MHz, for offset=118.078 ppm and dispersion point 984.0. r2eff=10.903/10.903 r2eff_err=0.0476/0.0922/0.0476/0.0968 i0=203455.021/203455.021 i0_err=837.8779/828.7280/837.8779/834.3398 R1rho at 799.8 MHz, for offset=118.078 ppm and dispersion point 1341.1. r2eff=10.684/10.684 r2eff_err=0.0446/0.0853/0.0446/0.0889 i0=218670.412/218670.412 i0_err=850.0210/830.9558/850.0210/825.7990 R1rho at 799.8 MHz, for offset=118.078 ppm and dispersion point 1648.5. r2eff=10.501/10.501 r2eff_err=0.0371/0.0742/0.0371/0.0754 i0=206502.512/206502.512 i0_err=794.0523/772.9843/794.0523/776.3687 R1rho at 799.8 MHz, for offset=124.247 ppm and dispersion point 1341.1. r2eff=11.118/11.118 r2eff_err=0.0413/0.0827/0.0413/0.0870 i0=216447.241/216447.241 i0_err=784.6562/788.0384/784.6562/810.1911 R1rho at 799.8 MHz, for offset=130.416 ppm and dispersion point 800.5. r2eff=7.866/7.866 r2eff_err=0.0347/0.0695/0.0347/0.0712 i0=211869.715/211869.715 i0_err=749.2776/763.6930/749.2776/747.9741 R1rho at 799.8 MHz, for offset=130.416 ppm and dispersion point 1341.1. r2eff=9.259/9.259 r2eff_err=0.0331/0.0661/0.0331/0.0680 i0=217703.151/217703.151 i0_err=682.2137/685.5838/682.2137/700.1831 R1rho at 799.8 MHz, for offset=130.416 ppm and dispersion point 1648.5. r2eff=9.565/9.565 r2eff_err=0.0373/0.0745/0.0373/0.0743 i0=211988.939/211988.939 i0_err=839.0313/827.0373/839.0313/815.4495 R1rho at 799.8 MHz, for offset=142.754 ppm and dispersion point 800.5. r2eff=3.240/3.240 r2eff_err=0.0127/0.0253/0.0127/0.0254 i0=214417.382/214417.382 i0_err=595.8865/613.4378/595.8865/606.4650 R1rho at 799.8 MHz, for offset=142.754 ppm and dispersion point 1341.1. r2eff=5.084/5.084 r2eff_err=0.0177/0.0352/0.0177/0.0353 i0=226358.691/226358.691 i0_err=660.5314/655.7670/660.5314/666.9979 R1rho at 799.8 MHz, for offset=179.768 ppm and dispersion point 1341.1. r2eff=2.208/2.208 r2eff_err=0.0091/0.0178/0.0091/0.0176 i0=228620.553/228620.553 i0_err=564.8353/560.0873/564.8353/558.6988 R1rho at 799.8 MHz, for offset=241.459 ppm and dispersion point 1341.1. r2eff=1.711/1.711 r2eff_err=0.0077/0.0155/0.0077/0.0158 i0=224087.486/224087.486 i0_err=539.4300/546.4217/539.4300/556.5093 task #7822(https://gna.org/task/index.php?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting. Modified: trunk/test_suite/system_tests/relax_disp.py Modified: trunk/test_suite/system_tests/relax_disp.py URL: http://svn.gna.org/viewcvs/relax/trunk/test_suite/system_tests/relax_disp.py?rev=25484&r1=25483&r2=25484&view=diff ============================================================================== --- trunk/test_suite/system_tests/relax_disp.py (original) +++ trunk/test_suite/system_tests/relax_disp.py Sun Aug 31 16:55:09 2014 @@ -3122,6 +3122,16 @@ my_dic = {} param_key_list = [] + # Do boot strapping ? + do_boot = True + if do_boot: + from minfx.generic import generic_minimise + from random import gauss + min_algor = 'BFGS' + min_options = () + sim_boot = 2000 + scaling_list = [1.0, 1.0] + # First check sim values. for cur_spin, mol_name, resi, resn, spin_id in spin_loop(full_info=True, return_id=True, skip_desel=True): # Add key to dic. @@ -3190,6 +3200,50 @@ self.assertAlmostEqual(r2eff_sim_err, r2eff_err) self.assertAlmostEqual(i0_sim_err, i0_err) + if do_boot: + values = [] + errors = [] + times = [] + for time in loop_time(exp_type=exp_type, frq=frq, offset=offset, point=point): + values.append(average_intensity(spin=cur_spin, exp_type=exp_type, frq=frq, offset=offset, point=point, time=time)) + errors.append(average_intensity(spin=cur_spin, exp_type=exp_type, frq=frq, offset=offset, point=point, time=time, error=True)) + times.append(time) + + # Convert to numpy array. + values = asarray(values) + errors = asarray(errors) + times = asarray(times) + + R_m_sim_l = [] + I0_m_sim_l = [] + for j in range(sim_boot): + if j in range(0, 100000, 100): + print("Simulation %i"%j) + # Start minimisation. + + # Produce errors + I_err = [] + for j, error in enumerate(errors): + I_error = gauss(values[j], error) + I_err.append(I_error) + # Convert to numpy array. + I_err = asarray(I_err) + + x0 = [r2eff, i0] + setup(num_params=len(x0), num_times=len(times), values=I_err, sd=errors, relax_times=times, scaling_matrix=scaling_list) + + params_minfx_sim_j, chi2_minfx_sim_j, iter_count, f_count, g_count, h_count, warning = generic_minimise(func=func, dfunc=dfunc, args=(), x0=x0, min_algor=min_algor, min_options=min_options, full_output=True, print_flag=0) + R_m_sim_j, I0_m_sim_j = params_minfx_sim_j + R_m_sim_l.append(R_m_sim_j) + I0_m_sim_l.append(I0_m_sim_j) + + # Get stats on distribution. + sigma_R_sim = std(asarray(R_m_sim_l), ddof=1) + sigma_I0_sim = std(asarray(I0_m_sim_l), ddof=1) + my_dic[spin_id][param_key]['r2eff_err_boot'] = sigma_R_sim + my_dic[spin_id][param_key]['i0_err_boot'] = sigma_I0_sim + + # A new data pipe. self.interpreter.pipe.copy(pipe_from='MC_2000', pipe_to='r2eff_est') self.interpreter.pipe.switch(pipe_name='r2eff_est') @@ -3227,9 +3281,16 @@ r2eff_sim_err = my_dic[spin_id][param_key]['r2eff_err_sim'] i0_sim_err = my_dic[spin_id][param_key]['i0_err_sim'] + if do_boot: + r2eff_boot_err = my_dic[spin_id][param_key]['r2eff_err_boot'] + i0_boot_err = my_dic[spin_id][param_key]['i0_err_boot'] + else: + r2eff_boot_err = 0.0 + i0_boot_err = 0.0 + print("%s at %3.1f MHz, for offset=%3.3f ppm and dispersion point %-5.1f." % (exp_type, frq/1E6, offset, point) ) - print("r2eff=%3.3f/%3.3f r2eff_err=%3.4f/%3.4f/%3.4f" % (r2eff, r2eff_est, r2eff_err, r2eff_err_est, r2eff_sim_err) ), - print("i0=%3.3f/%3.3f i0_err=%3.4f/%3.4f/%3.4f\n" % (i0, i0_est, i0_err, i0_err_est, i0_sim_err) ) + print("r2eff=%3.3f/%3.3f r2eff_err=%3.4f/%3.4f/%3.4f/%3.4f" % (r2eff, r2eff_est, r2eff_err, r2eff_err_est, r2eff_sim_err, r2eff_boot_err) ), + print("i0=%3.3f/%3.3f i0_err=%3.4f/%3.4f/%3.4f/%3.4f\n" % (i0, i0_est, i0_err, i0_err_est, i0_sim_err, i0_boot_err) ) # Now do it manually.