def exp1_posterior(): cfg_filename = os.path.join(streamspath, "config", "exp1_8.yml") config = read_config(cfg_filename) model = StreamModel.from_config(config) hdf5_filename = os.path.join(streamspath, "plots", "yeti", "exper1_8", "cache", "combined_inference.hdf5") print(hdf5_filename) if not os.path.exists(hdf5_filename): raise IOError("Path doesn't exist!") with h5py.File(hdf5_filename, "r") as f: chain = f["chain"].value _flatchain = np.vstack(chain) flatchain = np.zeros_like(_flatchain) params = OrderedDict(model.parameters['potential'].items() + \ model.parameters['satellite'].items()) truths = [] bounds = [] for ii,p in enumerate(params.values()): if p.name == 'alpha': truths.append(np.nan) bounds.append((1., 2.0)) flatchain[:,ii] = _unit_transform[p.name](_flatchain[:,ii]) continue truth = _unit_transform[p.name](p.truth) print(p.name, truth) truths.append(truth) bounds.append((0.95*truth, 1.05*truth)) flatchain[:,ii] = _unit_transform[p.name](_flatchain[:,ii]) # bounds = [(0.7,2.),(0.7,2.),(52,142),(100,200),(5,30),(1.1,2.5)] #bounds = None fig = triangle.corner(flatchain, plot_datapoints=False, truths=truths, extents=potential_bounds, labels=potential_labels) fig.subplots_adjust(wspace=0.13, hspace=0.13) fig.savefig(os.path.join(plot_path, "exp1_posterior.{}".format(ext)))
def exp_posteriors(exp_num): matplotlib.rc('xtick', labelsize=16) matplotlib.rc('ytick', labelsize=16) cfg_filename = os.path.join(streamspath, "config", "exp{}.yml".format(exp_num)) config = read_config(cfg_filename) model = StreamModel.from_config(config) cache_path = os.path.join(streamspath, "plots", "yeti", "exper{}_marg_tub".format(exp_num), "cache") filename = os.path.join(cache_path, "combined_inference.hdf5") with h5py.File(filename, "r") as f: chain = f["chain"].value _flatchain = np.vstack(chain) d = model.label_flatchain(_flatchain) # Potential this_flatchain = np.zeros((_flatchain.shape[0], len(d["potential"]))) truths = [] labels = [] for ii,pname in enumerate(d["potential"].keys()): this_flatchain[:,ii] = _unit_transform[pname](np.squeeze(d["potential"][pname])) p = model.parameters["potential"][pname] truth = _unit_transform[pname](p.truth) truths.append(truth) labels.append(_label_map[pname]) q16,q50,q84 = np.array(np.percentile(this_flatchain, [16, 50, 84], axis=0)) q_m, q_p = q50-q16, q84-q50 for ii,pname in enumerate(d["potential"].keys()): print("{} \n\t truth={:.2f}\n\t measured={:.2f}+{:.2f}-{:.2f}"\ .format(pname,truths[ii],q50[ii],q_p[ii],q_m[ii])) fig = triangle.corner(this_flatchain, plot_datapoints=False, truths=truths, extents=potential_bounds, labels=potential_labels) fig.subplots_adjust(wspace=0.13, hspace=0.13) fig.savefig(os.path.join(plot_path, "exp{}_potential.{}".format(exp_num, ext))) # Particle p_idx = 2 this_flatchain = np.zeros((_flatchain.shape[0], len(d["particles"]))) truths = [] bounds = [] labels = [] for ii,pname in enumerate(d["particles"].keys()): this_flatchain[:,ii] = _unit_transform[pname](d["particles"][pname][:,p_idx]) p = model.parameters["particles"][pname] truth = _unit_transform[pname](p.truth[p_idx]) truths.append(truth) if pname == "tub": bounds.append((model.lnpargs[1], model.lnpargs[0])) else: sig = model.particles.errors[pname].value[p_idx] mu = model.particles[pname].value[p_idx] bounds.append((mu-3*sig, mu+3*sig)) labels.append(_label_map[pname]) q16,q50,q84 = np.array(np.percentile(this_flatchain, [16, 50, 84], axis=0)) q_m, q_p = q50-q16, q84-q50 for ii,pname in enumerate(d["particles"].keys()): print("{} \n\t truth={:.2f}\n\t measured={:.2f}+{:.2f}-{:.2f}"\ .format(pname,truths[ii],q50[ii],q_p[ii],q_m[ii])) # HACK bounds = [(20.,29.), (-9.5, -7.), (0.,2.), (-55,-5)] # OLD: bounds = [(22.,26.), (-8.6, -8.), (1.0,1.5), (-50,-10)] # bounds = None fig = triangle.corner(this_flatchain, plot_datapoints=False, truths=truths, labels=labels, extents=bounds) fig.subplots_adjust(wspace=0.13, hspace=0.13) fig.savefig(os.path.join(plot_path, "exp{}_particle.{}".format(exp_num, ext))) # Satellite this_flatchain = np.zeros((_flatchain.shape[0], len(d["satellite"]))) truths = [] bounds = [] labels = [] #for ii,pname in enumerate(keys): for ii,pname in enumerate(d["satellite"].keys()): this_flatchain[:,ii] = _unit_transform[pname](d["satellite"][pname][:,0]) p = model.parameters["satellite"][pname] truth = _unit_transform[pname](p.truth) if pname == "alpha": bounds.append((1., 2.5)) truths.append(np.nan) else: truths.append(truth) sig = model.satellite.errors[pname].value[0] mu = model.satellite[pname].value[0] bounds.append((mu-3*sig, mu+3*sig)) labels.append(_label_map[pname]) # HACK bounds = [(28.5,33.), (-2.6,-1.5), (1.3,2.0), (120,175), bounds[-1]] # bounds = None if len(d["satellite"]) > len(bounds): bounds = [(0,10), (-20,5)] + bounds #bounds = None fig = triangle.corner(this_flatchain, plot_datapoints=False, truths=truths, labels=labels, extents=bounds) fig.subplots_adjust(wspace=0.13, hspace=0.13) fig.savefig(os.path.join(plot_path, "exp{}_satellite.{}".format(exp_num, ext)))
def trace_plots(): cfg_filename = os.path.join(streamspath, "config", "exp1_8.yml") config = read_config(cfg_filename) model = StreamModel.from_config(config) hdf5_filename = os.path.join(streamspath, "plots", "yeti", "exper1_8", "cache", "combined_inference_all.hdf5") if not os.path.exists(hdf5_filename): raise IOError("Path doesn't exist!") print(hdf5_filename) with h5py.File(hdf5_filename, "r") as f: chain = f["chain"].value acor = f["acor"].value labels = ["$q_1$", "$q_z$", r"$\phi$", "$v_h$", "$r_h$", r"$\alpha$"] bounds = [(1.2,1.5),(1.2,1.5),(80,110),(111,131),(5,20),(0.5,2.5)] ticks = [(1.25,1.35,1.45),(1.25,1.35,1.45),(85,95,105),(115,120,125),(7,12,17),(1.,1.5,2.)] # plot individual walkers fig,axes = plt.subplots(6,1,figsize=(8.5,11),sharex=True) k = 0 for gname,group in model.parameters.items(): for pname,p in group.items(): thischain = _unit_transform[pname](chain[...,k]) for ii in range(config['walkers']): axes.flat[k].plot(thischain[ii,:], alpha=0.1, marker=None, drawstyle='steps', color='k', zorder=0) #axes.flat[k].set_ylabel(labels[k], rotation='horizontal') axes[k].text(-0.02, 0.5, labels[k], horizontalalignment='right', fontsize=22, transform=axes[k].transAxes) if pname == "phi": axes[k].text(1.07, 0.475, "deg", horizontalalignment='left', fontsize=18, transform=axes[k].transAxes) elif pname == "v_halo": axes[k].text(1.07, 0.475, "km/s", horizontalalignment='left', fontsize=18, transform=axes[k].transAxes) elif pname == "log_R_halo": axes[k].text(1.07, 0.475, "kpc", horizontalalignment='left', fontsize=18, transform=axes[k].transAxes) axes[k].text(0.25, 0.1, r"$t_{\rm acor}$=" + "{}".format(int(acor[k])), horizontalalignment='right', fontsize=18, transform=axes[k].transAxes) axes.flat[k].set_yticks(ticks[k]) axes.flat[k].set_xlim(0,10000) axes.flat[k].set_ylim(bounds[k]) axes.flat[k].yaxis.tick_right() #axes.flat[k].yaxis.set_label_position("right") axes.flat[k].set_rasterization_zorder(1) k += 1 axes.flat[-1].set_xlabel("Step number") fig.tight_layout() fig.subplots_adjust(hspace=0.04, left=0.14, right=0.86) fig.savefig(os.path.join(plot_path, "mcmc_trace.{}".format(ext)))