def plot_currentmodels(self, nchains): """Return fig. Plots the first nchains chains, no matter of outlier status. """ fig, ax = plt.subplots(figsize=(4, 6.5)) base = cm.get_cmap(name='rainbow') color_list = base(np.linspace(0, 1, nchains)) for i, modfile in enumerate(self.modfiles[1][:nchains]): chainidx, _, _ = self._return_c_p_t(modfile) models = np.load(modfile) vpvs = np.load(modfile.replace('models', 'vpvs')).T currentvpvs = vpvs[-1] currentmodel = models[-1] color = color_list[i] vp, vs, h = Model.get_vp_vs_h(currentmodel, currentvpvs, self.mantle) cvp, cvs, cdepth = Model.get_stepmodel_from_h(h=h, vs=vs, vp=vp) label = 'c%d / %d' % (chainidx, vs.size-1) ax.plot(cvs, cdepth, color=color, ls='-', lw=0.8, alpha=0.7, label=label) ax.invert_yaxis() ax.set_xlabel('$V_S$ in km/s') ax.set_ylabel('Depth in km') # ax.set_xlim(self.priors['vs']) ax.set_ylim(self.priors['z'][::-1]) ax.set_title('Current models') ax.grid(color='gray', alpha=0.6, ls=':', lw=0.5) ax.legend(loc='center left', bbox_to_anchor=(1, 0.5)) return fig
def plot_bestmodels(self): """Return fig. Plot the best (fit) models ever discovered per each chain, ignoring outliers. """ fig, ax = plt.subplots(figsize=(4, 6.5)) thebestmodel = np.nan thebestmisfit = 1e15 thebestchain = np.nan modfiles = self.modfiles[1] for i, modfile in enumerate(modfiles): chainidx, _, _ = self._return_c_p_t(modfile) if chainidx in self.outliers: continue models = np.load(modfile) vpvs = np.load(modfile.replace('models', 'vpvs')).T misfits = np.load(modfile.replace('models', 'misfits')).T[-1] bestmodel = models[np.argmin(misfits)] bestvpvs = vpvs[np.argmin(misfits)] bestmisfit = misfits[np.argmin(misfits)] if bestmisfit < thebestmisfit: thebestmisfit = bestmisfit thebestmodel = bestmodel thebestvpvs = bestvpvs thebestchain = chainidx vp, vs, h = Model.get_vp_vs_h(bestmodel, bestvpvs, self.mantle) cvp, cvs, cdepth = Model.get_stepmodel_from_h(h=h, vs=vs, vp=vp) ax.plot(cvs, cdepth, color='k', ls='-', lw=0.8, alpha=0.5) # label = 'c%d' % thebestchain # vp, vs, h = Model.get_vp_vs_h(thebestmodel, thebestvpvs, self.mantle) # cvp, cvs, cdepth = Model.get_stepmodel_from_h(h=h, vs=vs, vp=vp) # ax.plot(cvs, cdepth, color='red', ls='-', lw=1, # alpha=0.8, label=label) ax.invert_yaxis() ax.set_xlabel('$V_S$ in km/s') ax.set_ylabel('Depth in km') # ax.set_xlim(self.priors['vs']) ax.set_ylim(self.priors['z'][::-1]) ax.set_title('Best fit models from %d chains' % (len(modfiles)-self.outliers.size)) ax.grid(color='gray', alpha=0.6, ls=':', lw=0.5) # ax.legend(loc=3) return fig