def create_plots(info_path,
        observed_prefixes_to_include = None,
        observed_suffixes_to_include = None,
        prior_suffixes_to_include = None):
    dmc_sim = DMCSimulationResults(info_path)
    prior_configs = {}
    for k, v in dmc_sim.prior_index_to_config.iteritems():
        prior_configs[k] = MsBayesConfig(v)
    # output_dir = os.path.join(os.path.dirname(info_path), 'plots')
    output_dir = project_util.IMAGE_DIR
    if not os.path.exists(output_dir):
        os.mkdir(output_dir)
    prior_prob_omega_less_than = {
            1: 0.0025575,
            2: 0.049283,
            3: 0.002171,
            4: 0.049191}
    psi_res, omega_res, prior_index_to_name = parse_results(dmc_sim,
            observed_prefixes_to_include = observed_prefixes_to_include,
            observed_suffixes_to_include = observed_suffixes_to_include,
            prior_suffixes_to_include = prior_suffixes_to_include)
    for observed_name in psi_res.iterkeys():
        for prior_index in psi_res[observed_name].iterkeys():
            prior_name = prior_index_to_name[prior_index]
            div_model_prior = prior_name
            if prior_name in ['old', 'u-shaped']:
                div_model_prior = 'psi'
            dpp_concentration_mean = None
            if div_model_prior == 'dpp':
                dpp_concentration_mean = prior_configs[
                        prior_index].dpp_concentration.mean
            prior_prob_omega = prior_prob_omega_less_than[prior_index]
            psi_results = psi_res[observed_name][prior_index]
            omega_results = omega_res[observed_name][prior_index]
            prefix = '_'.join([observed_name, prior_name])
            cfg_to_psi = {}
            cfg_to_psi_prob = {}
            cfg_to_psi_glm = {}
            cfg_to_psi_prob_glm = {}
            for cfg, psi in psi_results.iteritems():
                cfg_to_psi[cfg] = psi.mode
                cfg_to_psi_prob[cfg] = psi.prob
                cfg_to_psi_glm[cfg] = psi.mode_glm
                cfg_to_psi_prob_glm[cfg] = psi.prob_glm
            cfg_to_omega = {}
            cfg_to_omega_prob = {}
            cfg_to_omega_glm = {}
            cfg_to_omega_prob_glm = {}
            cfg_to_omega_true_ests = {}
            cfg_to_omega_true_ests_glm = {}
            for cfg, omega in omega_results.iteritems():
                cfg_to_omega[cfg] = omega.median
                cfg_to_omega_prob[cfg] = omega.prob
                cfg_to_omega_glm[cfg] = omega.mode_glm
                cfg_to_omega_prob_glm[cfg] = omega.prob_glm
                cfg_to_omega_true_ests[cfg] = {'x': omega.true, 'y': omega.median}
                cfg_to_omega_true_ests_glm[cfg] = {'x': omega.true, 'y': omega.mode_glm}

            num_columns = len(observed_suffixes_to_include)
            width = 15
            height = 3.5
            column_label_offset = 0.14
            margin_top = 0.83
            margin_bottom = 0.1
            margin_left = 0.025
            margin_right = 0.95
            column_label_size = 26.0
            title_size = 22.0
            y_title_size = 20.0
            right_text_size = 14.0
            row_labels = []
            if prior_name == 'old':
                row_labels.append(r'$M_{msBayes}$')
            elif prior_name == 'u-shaped':
                row_labels.append(r'$M_{Ushaped}$')
            elif prior_name == 'uniform':
                row_labels.append(r'$M_{Uniform}$')
            elif prior_name == 'dpp':
                row_labels.append(r'$M_{DPP}$')
            else:
                row_labels.append('')
            row_label_size = 32.0
            row_label_offset = 0.08


            psi_plot = PowerPlotGrid(
                    observed_config_to_estimates = cfg_to_psi,
                    variable = 'psi',
                    variable_symbol = r'|\mathbf{\tau}|',
                    num_columns = num_columns,
                    width = width,
                    height = height,
                    x_title = r'Estimated number of divergence events (mode)',
                    y_title_size = y_title_size,
                    include_right_text = False,
                    text_size = right_text_size,
                    xtick_label_size = 14.0)
            pg = psi_plot.create_grid()
            pg.label_schema = None
            column_labels = []
            for cfg, sp in psi_plot.cfg_to_subplot.iteritems():
                column_labels.append((cfg.tau.maximum, tau_prior_in_generations(cfg)))
                sp.set_left_text('')
            pg.column_labels = [t for (c, t) in sorted(column_labels, key = lambda x : x[0])]
            pg.margin_bottom = margin_bottom
            pg.margin_top = margin_top
            pg.margin_left = margin_left
            pg.margin_right = margin_right
            pg.padding_between_horizontal = 2.0
            pg.column_label_offset = column_label_offset
            pg.column_label_size = column_label_size
            pg.title_size = title_size
            pg.row_labels = row_labels
            pg.row_label_size = row_label_size
            pg.row_label_offset = row_label_offset
            pg.reset_figure()
            pg.set_shared_x_limits()
            pg.set_shared_y_limits()
            pg.reset_figure()
            pg.savefig(os.path.join(output_dir,
                    prefix + '_power_psi_mode.pdf'))
            pg.column_labels = ['' for x in column_labels]
            pg.reset_figure()
            pg.savefig(os.path.join(output_dir,
                    prefix + '_power_psi_mode_headless.pdf'))

            psi_plot.width = 5.0
            psi_plot.height = 4.0
            pg = psi_plot.create_column_grid(
                subplot_indices_to_exclude = [0,1,2],
                x_title_size = 16.0,
                y_title_size = 15.0,
                add_column_labels = True,
                column_label_size = 18.0,
                column_label_offset = 0.14,
                plot_label_size = 12.0,
                right_text_size = 10.0,
                x_tick_label_size = 14.0,
                share_x = False,
                share_y = False)
            pg.label_schema = None
            pg.column_labels = [[t for (c, t) in sorted(column_labels, key = lambda x : x[0])][-1]]
            pg.margin_bottom = 0.07
            pg.margin_top = 0.88
            pg.margin_left = 0.07
            pg.margin_right = 0.99
            pg.column_label_offset = 0.04
            pg.column_label_size = column_label_size
            # pg.title_size = title_size
            pg.row_labels = None
            pg.reset_figure()
            pg.savefig(os.path.join(output_dir,
                    prefix + '_power_psi_mode_last.pdf'))

            psi_prob_plot = ProbabilityPowerPlotGrid(
                    observed_config_to_estimates = cfg_to_psi_prob,
                    variable = 'psi',
                    variable_symbol = r'|\mathbf{\tau}|',
                    div_model_prior = div_model_prior,
                    dpp_concentration_mean = dpp_concentration_mean,
                    bayes_factor = 10,
                    draw_bayes_factor_line = False,
                    x_title = r'Posterior probability of one divergence',
                    y_title_size = y_title_size,
                    width = width,
                    height = height,
                    num_columns = num_columns,
                    text_size = right_text_size,
                    xtick_label_size = 14.0,
                    pretty_xtick_labels = True)
            pg = psi_prob_plot.create_grid()
            pg.label_schema = None
            column_labels = []
            for cfg, sp in psi_prob_plot.cfg_to_subplot.iteritems():
                column_labels.append((cfg.tau.maximum, tau_prior_in_generations(cfg)))
                sp.set_left_text('')
                sp.set_right_text('')
            pg.column_labels = [t for (c, t) in sorted(column_labels, key = lambda x : x[0])]
            pg.margin_bottom = margin_bottom
            pg.margin_top = margin_top
            pg.margin_left = margin_left
            pg.margin_right = margin_right
            pg.column_label_offset = column_label_offset
            pg.column_label_size = column_label_size
            pg.padding_between_horizontal = 1.0
            pg.title_size = title_size
            pg.row_labels = row_labels
            pg.row_label_size = row_label_size
            pg.row_label_offset = row_label_offset
            pg.reset_figure()
            pg.set_shared_x_limits()
            pg.set_shared_y_limits()
            pg.reset_figure()
            pg.savefig(os.path.join(output_dir,
                    prefix + '_power_psi_prob.pdf'))
            pg.column_labels = ['' for x in column_labels]
            pg.reset_figure()
            pg.savefig(os.path.join(output_dir,
                    prefix + '_power_psi_prob_headless.pdf'))

            # psi_prob_plot_glm = ProbabilityPowerPlotGrid(
            #         observed_config_to_estimates = cfg_to_psi_prob_glm,
            #         variable = 'psi',
            #         variable_symbol = r'|\mathbf{\tau}|',
            #         div_model_prior = div_model_prior,
            #         dpp_concentration_mean = dpp_concentration_mean,
            #         bayes_factor = 10,
            #         num_columns = 2)
            # fig = psi_prob_plot_glm.create_grid()
            # fig.savefig(os.path.join(output_dir,
            #         prefix + '_power_psi_prob_glm.pdf'))

            omega_plot = PowerPlotGrid(
                    observed_config_to_estimates = cfg_to_omega,
                    variable = 'omega',
                    variable_symbol = r'D_T',
                    num_columns = num_columns,
                    width = width,
                    height = height,
                    x_title = r'Estimated variance in divergence times (median)',
                    y_title_size = y_title_size,
                    text_size = right_text_size)
            pg = omega_plot.create_grid()
            pg.label_schema = None
            column_labels = []
            for cfg, sp in omega_plot.cfg_to_subplot.iteritems():
                column_labels.append((cfg.tau.maximum, tau_prior_in_generations(cfg)))
                sp.set_left_text('')
            pg.column_labels = [t for (c, t) in sorted(column_labels, key = lambda x : x[0])]
            pg.margin_bottom = margin_bottom
            pg.margin_top = margin_top
            pg.margin_left = margin_left
            pg.margin_right = margin_right
            pg.column_label_offset = column_label_offset
            pg.column_label_size = column_label_size
            pg.title_size = title_size
            pg.row_labels = row_labels
            pg.row_label_size = row_label_size
            pg.row_label_offset = row_label_offset
            pg.reset_figure()
            pg.savefig(os.path.join(output_dir,
                    prefix + '_power_omega_median.pdf'))
            pg.column_labels = ['' for x in column_labels]
            pg.reset_figure()
            pg.savefig(os.path.join(output_dir,
                    prefix + '_power_omega_median_headless.pdf'))
def create_plots(info_path):
    output_dir = os.path.join(os.path.dirname(info_path), 'plots')
    if not os.path.exists(output_dir):
        os.mkdir(output_dir)
    prior_prob_omega_less_than = 0.0887
    psi_results, omega_results, tau_results = parse_results(info_path)
    cfg_to_psi = {}
    cfg_to_psi_prob = {}
    for cfg, psi in psi_results.iteritems():
        cfg_to_psi[cfg] = psi.mode
        cfg_to_psi_prob[cfg] = psi.prob
    cfg_to_omega = {}
    cfg_to_omega_prob = {}
    cfg_to_omega_true_ests = {}
    cfg_to_omega_true_ests_glm = {}
    for cfg, omega in omega_results.iteritems():
        cfg_to_omega[cfg] = omega.median
        cfg_to_omega_prob[cfg] = omega.prob
        cfg_to_omega_true_ests[cfg] = {'x': omega.true, 'y': omega.median}
        cfg_to_omega_true_ests_glm[cfg] = {'x': omega.true, 'y': omega.mode_glm}

    cfg_to_num_excluded = {}
    cfg_to_num_excluded_glm = {}
    cfg_to_prob_of_exclusion = {}
    cfg_to_prob_of_exclusion_glm = {}
    cfg_to_prob_of_bf_ex = {}
    cfg_to_prob_of_bf_ex_glm = {}
    bf_10_exclusion_prob = None
    for cfg, tau in tau_results.iteritems():
        cfg_to_num_excluded[cfg] = tau.num_excluded
        cfg_to_num_excluded_glm[cfg] = tau.num_excluded_glm
        cfg_to_prob_of_exclusion[cfg] = tau.prob_of_exclusion
        cfg_to_prob_of_exclusion_glm[cfg] = tau.prob_of_exclusion_glm
        cfg_to_prob_of_bf_ex[cfg] = tau.prob_of_bf_exclusion
        cfg_to_prob_of_bf_ex_glm[cfg] = tau.prob_of_bf_exclusion_glm
        if not bf_10_exclusion_prob:
            bf_10_exclusion_prob = tau.bf_10_exclusion_prob

    psi_plot = PowerPlotGrid(observed_config_to_estimates = cfg_to_psi,
            variable = 'psi',
            num_columns = 2,
            x_title = r'Estimated number of divergence events, $\hat{\Psi}$',
            y_title = 'Density',
            width = 14.0,
            height = 2.8,
            auto_height = False,
            auto_adjust_margins = False,
            margin_left = 0.025,
            margin_bottom = 0.1,
            margin_right = 1,
            margin_top = 0.835,
            padding_between_horizontal = 0.5)

    fig = psi_plot.create_column_grid(
            subplot_indices_to_exclude = [],
            x_title_size = 14.0,
            y_title_size = 14.0,
            column_label_size = 16.0,
            column_label_offset = 0.14,
            x_tick_label_size = 8.0,
            share_x = True,
            share_y = True)
    fig.savefig(os.path.join(output_dir, 'power-psi-mode-6.pdf'))

    psi_plot.width = 10.0
    fig = psi_plot.create_column_grid(
            subplot_indices_to_exclude = [1,3],
            x_title_size = 14.0,
            y_title_size = 14.0,
            column_label_size = 16.0,
            column_label_offset = 0.14,
            right_text_size = 12.0,
            x_tick_label_size = 8.0,
            share_x = True,
            share_y = True)
    fig.savefig(os.path.join(output_dir, 'power-psi-mode-4.pdf'))


    omega_prob_plot = ProbabilityPowerPlotGrid(
            observed_config_to_estimates = cfg_to_omega_prob,
            variable = 'omega',
            div_model_prior = 'psi',
            bayes_factor = 10,
            bayes_factor_prob = prior_prob_omega_less_than,
            num_columns = 2,
            x_title = (r'Posterior probability of one divergence, '
                    r'$p(\Omega < 0.01 \, | \, B_{{\epsilon}}(S*))$'),
            y_title = 'Density',
            width = 14.0,
            height = 2.8,
            auto_height = False,
            auto_adjust_margins = False,
            margin_left = 0.025,
            margin_bottom = 0.1,
            margin_right = 1,
            margin_top = 0.835,
            padding_between_horizontal = 0.5)
    fig = omega_prob_plot.create_column_grid(
            subplot_indices_to_exclude = [],
            x_title_size = 14.0,
            y_title_size = 14.0,
            column_label_size = 16.0,
            column_label_offset = 0.14,
            x_tick_label_size = 10.0,
            share_x = True,
            share_y = True)
    fig.savefig(os.path.join(output_dir, 'power-omega-prob-6.pdf'))
    omega_prob_plot.width = 10.0
    fig = omega_prob_plot.create_column_grid(
            subplot_indices_to_exclude = [1,3],
            x_title_size = 14.0,
            y_title_size = 14.0,
            column_label_size = 16.0,
            column_label_offset = 0.14,
            right_text_size = 10.0,
            x_tick_label_size = 10.0,
            share_x = True,
            share_y = True)
    fig.savefig(os.path.join(output_dir, 'power-omega-prob-4.pdf'))
    omega_prob_plot.label_offset = 6
    omega_prob_plot.width = 14.0
    fig = omega_prob_plot.create_column_grid(
            subplot_indices_to_exclude = [],
            x_title_size = 14.0,
            y_title_size = 14.0,
            add_column_labels = False,
            column_label_size = 16.0,
            column_label_offset = 0.14,
            x_tick_label_size = 10.0,
            share_x = True,
            share_y = True)
    fig.savefig(os.path.join(output_dir, 'power-omega-prob-6-panel.pdf'))
    omega_prob_plot.label_offset = 4
    omega_prob_plot.width = 10.0
    fig = omega_prob_plot.create_column_grid(
            subplot_indices_to_exclude = [1,3],
            x_title_size = 14.0,
            y_title_size = 14.0,
            add_column_labels = False,
            column_label_size = 16.0,
            column_label_offset = 0.14,
            right_text_size = 10.0,
            x_tick_label_size = 10.0,
            share_x = True,
            share_y = True)
    fig.savefig(os.path.join(output_dir, 'power-omega-prob-4-panel.pdf'))
    
    omega_accuracy_plot = AccuracyPowerPlotGrid(
            observed_config_to_estimates = cfg_to_omega_true_ests,
            num_columns = 2,
            x_title = r'True variance of divergence times, $\Omega$',
            y_title = r'$\hat{\Omega}$',
            width = 14.0,
            height = 2.8,
            auto_height = False,
            auto_adjust_margins = False,
            margin_left = 0.025,
            margin_bottom = 0.1,
            margin_right = 1,
            margin_top = 0.825,
            padding_between_horizontal = 0.5)
    fig = omega_accuracy_plot.create_column_grid(
            subplot_indices_to_exclude = [],
            x_title_size = 14.0,
            y_title_size = 14.0,
            column_label_size = 16.0,
            column_label_offset = 0.14,
            x_tick_label_size = 10.0,
            share_x = False,
            share_y = False)
    fig.savefig(os.path.join(output_dir, 'power-accuracy-omega-median-6.pdf'))
    omega_accuracy_plot.width = 10.0
    fig = omega_accuracy_plot.create_column_grid(
            subplot_indices_to_exclude = [1,3],
            x_title_size = 14.0,
            y_title_size = 14.0,
            column_label_size = 16.0,
            column_label_offset = 0.14,
            right_text_size = 10.0,
            x_tick_label_size = 10.0,
            share_x = False,
            share_y = False)
    fig.savefig(os.path.join(output_dir, 'power-accuracy-omega-median-4.pdf'))

    omega_accuracy_plot_glm = AccuracyPowerPlotGrid(
            observed_config_to_estimates = cfg_to_omega_true_ests_glm,
            num_columns = 2,
            x_title = r'True variance of divergence times, $\Omega$',
            y_title = r'$\hat{\Omega}$',
            width = 14.0,
            height = 2.8,
            auto_height = False,
            auto_adjust_margins = False,
            margin_left = 0.025,
            margin_bottom = 0.1,
            margin_right = 1,
            margin_top = 0.825,
            padding_between_horizontal = 0.5)
    fig = omega_accuracy_plot_glm.create_column_grid(
            subplot_indices_to_exclude = [],
            x_title_size = 14.0,
            y_title_size = 14.0,
            column_label_size = 16.0,
            column_label_offset = 0.14,
            x_tick_label_size = 10.0,
            share_x = False,
            share_y = False)
    fig.savefig(os.path.join(output_dir, 'power-accuracy-omega-mode-glm-6.pdf'))
    omega_accuracy_plot_glm.width = 10.0
    fig = omega_accuracy_plot_glm.create_column_grid(
            subplot_indices_to_exclude = [1,3],
            x_title_size = 14.0,
            y_title_size = 14.0,
            column_label_size = 16.0,
            column_label_offset = 0.14,
            right_text_size = 10.0,
            x_tick_label_size = 10.0,
            share_x = False,
            share_y = False)
    fig.savefig(os.path.join(output_dir, 'power-accuracy-omega-mode-glm-4.pdf'))
    omega_accuracy_plot_glm.label_offset = 6
    omega_accuracy_plot_glm.width = 14.0
    fig = omega_accuracy_plot_glm.create_column_grid(
            subplot_indices_to_exclude = [],
            x_title_size = 14.0,
            y_title_size = 14.0,
            add_column_labels = False,
            column_label_size = 16.0,
            column_label_offset = 0.14,
            x_tick_label_size = 10.0,
            share_x = False,
            share_y = False)
    fig.savefig(os.path.join(output_dir, 'power-accuracy-omega-mode-glm-6-panel.pdf'))
    omega_accuracy_plot_glm.label_offset = 4
    omega_accuracy_plot_glm.width = 10.0
    fig = omega_accuracy_plot_glm.create_column_grid(
            subplot_indices_to_exclude = [1,3],
            x_title_size = 14.0,
            y_title_size = 14.0,
            add_column_labels = False,
            column_label_size = 16.0,
            column_label_offset = 0.14,
            right_text_size = 10.0,
            x_tick_label_size = 10.0,
            share_x = False,
            share_y = False)
    fig.savefig(os.path.join(output_dir, 'power-accuracy-omega-mode-glm-4-panel.pdf'))

    ex_prob_plot = ProbabilityPowerPlotGrid(
            observed_config_to_estimates = cfg_to_prob_of_exclusion,
            variable = 'tau_exclusion',
            div_model_prior = 'psi',
            bayes_factor = 10,
            bayes_factor_prob = bf_10_exclusion_prob,
            draw_bayes_factor_line = False,
            cfg_to_prob_of_bf_exclusion = cfg_to_prob_of_bf_ex,
            num_columns = 2,
            x_title = (r'Posterior probability of excluding true parameters, $p(\mathbf{\tau} \, \notin \, '
                        r'M \, | \, B_{\epsilon}(S*))$'),
            y_title = 'Density',
            width = 14.0,
            height = 2.8,
            auto_height = False,
            auto_adjust_margins = False,
            margin_left = 0.025,
            margin_bottom = 0.1,
            margin_right = 1,
            margin_top = 0.835,
            padding_between_horizontal = 0.5)
    fig = ex_prob_plot.create_column_grid(
            subplot_indices_to_exclude = [],
            x_title_size = 14.0,
            y_title_size = 14.0,
            column_label_size = 16.0,
            column_label_offset = 0.14,
            x_tick_label_size = 10.0,
            share_x = True,
            share_y = True)
    fig.savefig(os.path.join(output_dir, 'power-prob-exclusion-6.pdf'))
    ex_prob_plot.width = 10.0
    fig = ex_prob_plot.create_column_grid(
            subplot_indices_to_exclude = [1,3],
            x_title_size = 14.0,
            y_title_size = 14.0,
            column_label_size = 16.0,
            column_label_offset = 0.14,
            right_text_size = 10.0,
            x_tick_label_size = 10.0,
            share_x = True,
            share_y = True)
    fig.savefig(os.path.join(output_dir, 'power-prob-exclusion-4.pdf'))
    ex_prob_plot.label_offset = 6
    ex_prob_plot.width = 14.0
    fig = ex_prob_plot.create_column_grid(
            subplot_indices_to_exclude = [],
            x_title_size = 14.0,
            y_title_size = 14.0,
            add_column_labels = False,
            column_label_size = 16.0,
            column_label_offset = 0.14,
            x_tick_label_size = 10.0,
            share_x = True,
            share_y = True)
    fig.savefig(os.path.join(output_dir, 'power-prob-exclusion-6-panel.pdf'))
    ex_prob_plot.label_offset = 4
    ex_prob_plot.width = 10.0
    fig = ex_prob_plot.create_column_grid(
            subplot_indices_to_exclude = [1,3],
            x_title_size = 14.0,
            y_title_size = 14.0,
            add_column_labels = False,
            column_label_size = 16.0,
            column_label_offset = 0.14,
            right_text_size = 10.0,
            x_tick_label_size = 10.0,
            share_x = True,
            share_y = True)
    fig.savefig(os.path.join(output_dir, 'power-prob-exclusion-4-panel.pdf'))


    ex_plot = PowerPlotGrid(
            observed_config_to_estimates = cfg_to_num_excluded,
            variable = 'tau_exclusion',
            num_columns = 2,
            x_title = r'Number of true $\tau$ excluded',
            y_title = 'Density',
            width = 14.0,
            height = 2.8,
            auto_height = False,
            auto_adjust_margins = False,
            margin_left = 0.025,
            margin_bottom = 0.1,
            margin_right = 1,
            margin_top = 0.835,
            padding_between_horizontal = 0.5)

    fig = ex_plot.create_column_grid(
            subplot_indices_to_exclude = [],
            x_title_size = 14.0,
            y_title_size = 14.0,
            column_label_size = 16.0,
            column_label_offset = 0.14,
            x_tick_label_size = 8.0,
            share_x = True,
            share_y = True)
    fig.savefig(os.path.join(output_dir, 'power-num-excluded-6.pdf'))
    ex_plot.width = 10.0
    fig = ex_plot.create_column_grid(
            subplot_indices_to_exclude = [1,3],
            x_title_size = 14.0,
            y_title_size = 14.0,
            column_label_size = 16.0,
            column_label_offset = 0.14,
            right_text_size = 12.0,
            x_tick_label_size = 8.0,
            share_x = True,
            share_y = True)
    fig.savefig(os.path.join(output_dir, 'power-num-excluded-4.pdf'))