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
# # ------------------------------------------------------------ obs SYNTH DATA # # 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((
# h = [34, 0] # vs = [3.5, 4.4] # idx = 2 # h = [5, 29, 0] # vs = [3.4, 3.8, 4.5] idx = 3 h = [5, 23, 8, 0] vs = [2.7, 3.6, 3.8, 4.4] vpvs = 1.73 path = 'observed' datafile = op.join(path, 'st%d_%s.dat' % (idx, '%s')) # surface waves sw_x = np.linspace(1, 41, 21) swdata = SynthObs.return_swddata(h, vs, vpvs=vpvs, x=sw_x) SynthObs.save_data(swdata, outfile=datafile) # receiver functions pars = {'p': 6.4} datafile = op.join(path, 'st%d_%s.dat' % (idx, '%s')) rfdata = SynthObs.return_rfdata(h, vs, vpvs=vpvs, x=None) SynthObs.save_data(rfdata, outfile=datafile) # velocity-depth model modfile = op.join(path, 'st%d_mod.dat' % idx) SynthObs.save_model(h, vs, vpvs=vpvs, outfile=modfile)