Example #1
0
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)))
Example #2
0
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)))
Example #3
0
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)))