def plot_rfcorr(self, rf='prf'): from BayHunter import SynthObs p2models, p2noise, p2misfits, p2vpvs = self._get_posterior_data( ['models', 'noise', 'misfits', 'vpvs'], final=True) fig, axes = plt.subplots(2, sharex=True, sharey=True) ind = self.refs.index(rf) best = np.argmin(p2misfits.T[ind]) model = p2models[best] vpvs = p2vpvs[best] target = self.targets[ind] x, y = target.obsdata.x, target.obsdata.y vp, vs, h = Model.get_vp_vs_h(model, vpvs, self.mantle) rho = vp * 0.32 + 0.77 _, ymod = target.moddata.plugin.run_model( h=h, vp=vp, vs=vs, rho=rho) yobs = target.obsdata.y yresiduals = yobs - ymod # axes[0].set_title('Residuals [dobs-g(m)] obtained with best fitting model m') axes[0].plot(x, yresiduals, color='k', lw=0.7, label='residuals') corr, sigma = p2noise[best][2*ind:2*(ind+1)] yerr = SynthObs.compute_gaussnoise(y, corr=corr, sigma=sigma) # axes[1].set_title('One Realization of random noise from inferred CeRF') axes[1].plot(x, yerr, color='k', lw=0.7, label='noise realization') axes[1].set_xlabel('Time in s') axes[0].legend(loc=4) axes[1].legend(loc=4) axes[0].grid(color='gray', ls=':', lw=0.5) axes[1].grid(color='gray', ls=':', lw=0.5) axes[0].set_xlim([x[0], x[-1]]) return fig
# # Load priors and initparams from config.ini or simply create dictionaries. initfile = 'config.ini' priors, initparams = utils.load_params(initfile) # Load observed data (synthetic test data) xsw, _ysw = np.loadtxt('observed/st3_rdispph.dat', usecols=[0, 1]).T xrf, _yrf = np.loadtxt('observed/st3_prf.dat', usecols=[0, 1]).T # add noise to create observed data # order of noise values (correlation, amplitude): # noise = [corr1, sigma1, corr2, sigma2] for 2 targets noise = [0.0, 0.012, 0.90, 0.005] ysw_err = SynthObs.compute_expnoise(_ysw, corr=noise[0], sigma=noise[1]) ysw = _ysw + ysw_err yrf_err = SynthObs.compute_gaussnoise(_yrf, corr=noise[2], sigma=noise[3]) yrf = _yrf + yrf_err # # ------------------------------------------- get refernece model for BayWatch # # Create truemodel only if you wish to have reference values in plots # and BayWatch. You ONLY need to assign the values in truemodel that you # wish to have visible. dep, vs = np.loadtxt('observed/st3_mod.dat', usecols=[0, 2], skiprows=1).T pdep = np.concatenate((np.repeat(dep, 2)[1:], [150])) pvs = np.repeat(vs, 2) truenoise = np.concatenate(( [noise[0]], [np.std(ysw_err)], # target 1