Spaces:
Sleeping
Sleeping
| import os | |
| from tqdm import tqdm | |
| import argparse | |
| import pickle | |
| from src.plotting.eval_matrix import matrix_plot, scatter_plot | |
| from src.utils.paths import get_path | |
| import matplotlib.pyplot as plt | |
| import numpy as np | |
| parser = argparse.ArgumentParser() | |
| parser.add_argument("--input", type=str, required=False, default="scouting_PFNano_signals2/SVJ_hadronic_std/all_models_eval_FT_R") | |
| args = parser.parse_args() | |
| path = get_path(args.input, "results") | |
| models = sorted([x for x in os.listdir(path) if not os.path.isfile(os.path.join(path, x))]) | |
| radius = { | |
| "LGATr_R10": 1.0, | |
| "LGATr_R09": 0.9, | |
| "LGATr_rinv_03_m_900": 0.8, | |
| "LGATr_R08": 0.8, | |
| "LGATr_R06": 0.6, | |
| "LGATr_R07": 0.7, | |
| "LGATr_R11": 1.1, | |
| "LGATr_R12": 1.2, | |
| "LGATr_R13": 1.3, | |
| "LGATr_R14": 1.4, | |
| "LGATr_R20": 2.0, | |
| "LGATr_R25": 2.5 | |
| } | |
| out_file = {} | |
| sz = 5 | |
| fig, ax = plt.subplots(len(models), 2, figsize=(sz * 2, sz/2 * len(models))) | |
| bins = np.linspace(0, 2, 100) | |
| for i, model in tqdm(enumerate(models)): | |
| output_path = os.path.join(path, model, "count_matched_quarks") | |
| f = os.path.join(output_path, "result_m.pkl") | |
| if not os.path.isfile(f): | |
| continue | |
| result = pickle.load(open(f, "rb")) | |
| f1 = os.path.join(output_path, "result_PR.pkl") | |
| r = result[900][20][0.3] | |
| ax[i, 0].hist(r["m_pred"] / r["m_true"], bins=bins, histtype="step", label="all") | |
| ax[i, 1].hist(r["mt_pred"] / r["mt_true"], bins=bins, histtype="step", label="all") | |
| if "n_jets" in r: | |
| m_pred_over_true = r["m_pred"] / r["m_true"] | |
| mt_pred_over_true = r["mt_pred"] / r["mt_true"] | |
| ax[i, 0].hist(m_pred_over_true[r["n_jets"] == 0], bins=bins, histtype="step", label="0 jets") | |
| ax[i, 1].hist(mt_pred_over_true[r["n_jets"] == 0], bins=bins, histtype="step", label="0 jets") | |
| ax[i, 0].hist(m_pred_over_true[r["n_jets"] == 1], bins=bins, histtype="step", label="1 jet") | |
| ax[i, 1].hist(mt_pred_over_true[r["n_jets"] == 1], bins=bins, histtype="step", label="1 jet") | |
| # 2+ jets | |
| ax[i, 0].hist(m_pred_over_true[r["n_jets"] > 1], bins=bins, histtype="step", label="2+ jets") | |
| ax[i, 1].hist(mt_pred_over_true[r["n_jets"] > 1], bins=bins, histtype="step", label="2+ jets") | |
| ax[i, 0].legend() | |
| ax[i, 1].legend() | |
| ax[i, 0].set_title(model) | |
| ax[i, 1].set_title(model) | |
| ax[i, 0].set_xlabel("m_pred / m_true") | |
| ax[i, 1].set_xlabel("mt_pred / mt_true") | |
| ax[i, 0].set_yscale("log") | |
| ax[i, 1].set_yscale("log") | |
| fig.tight_layout() | |
| fig.savefig(os.path.join(path, "mass_histograms.pdf")) | |
| ####### | |
| sz = 5 | |
| r_invs = {"03": 0.3, "07": 0.7, "05": 0.5} | |
| c = {} | |
| for r_inv in r_invs: | |
| fig, ax = plt.subplots(len(result), 2, figsize=(sz * 2, sz/2 * len(models))) | |
| bins = np.linspace(0, 2, 100) | |
| for i, mmed in tqdm(enumerate(sorted(result.keys()))): | |
| for j, model in enumerate(models): | |
| output_path = os.path.join(path, model, "count_matched_quarks") | |
| f = os.path.join(output_path, "result_m.pkl") | |
| if not os.path.isfile(f): | |
| continue | |
| if f not in c: | |
| c[f] = pickle.load(open(f, "rb")) | |
| result = c[f] | |
| r = result[mmed][20][r_invs[r_inv]] | |
| ax[i, 0].hist(r["m_pred"] / r["m_true"], bins=bins, histtype="step", label=model) | |
| ax[i, 1].hist(r["mt_pred"] / r["mt_true"], bins=bins, histtype="step", label=model) | |
| ax[i, 0].set_title("m_med = " + str(mmed)) | |
| ax[i, 1].set_title("m_med = " + str(mmed)) | |
| ax[i, 0].set_xlabel("m_pred / m_true") | |
| ax[i, 1].set_xlabel("mt_pred / mt_true") | |
| ax[i, 0].set_yscale("log") | |
| ax[i, 1].set_yscale("log") | |
| ax[i, 0].legend() | |
| ax[i, 1].legend() | |
| fig.tight_layout() | |
| fig.savefig(os.path.join(path, "mass_histograms_model_comparison_{}.pdf".format(r_inv))) | |
| ########## | |
| blues = plt.get_cmap("Blues") | |
| def get_color(model): | |
| if model == "AK8": | |
| return "gray" | |
| if model == "AK8_GenJets": | |
| return "black" | |
| # else, get the radius | |
| R = radius[model] | |
| # normalize R between 0 and 1 (originally between 0.3 and 1.4) | |
| r = (R - 0.3) / (2.5 - 0.3) | |
| return blues(r) | |
| sz = 5 | |
| r_invs = {"03": 0.3, "07": 0.7, "05": 0.5} | |
| c = {} | |
| for r_inv in r_invs: | |
| fig, ax = plt.subplots(len(result), 2, figsize=(sz * 2, sz/2 * len(models))) | |
| bins = np.linspace(0, 2, 100) | |
| bins2 = np.linspace(0, 2, 50) | |
| for i, mmed in tqdm(enumerate(sorted(result.keys()))): | |
| for j, model in enumerate(models): | |
| output_path = os.path.join(path, model, "count_matched_quarks") | |
| f = os.path.join(output_path, "result_m.pkl") | |
| if not os.path.isfile(f): | |
| continue | |
| if f not in c: | |
| c[f] = pickle.load(open(f, "rb")) | |
| result = c[f] | |
| r = result[mmed][20][r_invs[r_inv]] | |
| if "n_jets" in r and (model in radius or model in ["AK8", "AK8_GenJets"]): | |
| ax[i, 0].hist((r["m_pred"] / r["m_true"])[r["n_jets"] == 2], bins=bins2, histtype="step", label=model, color=get_color(model)) | |
| ax[i, 1].hist((r["mt_pred"] / r["mt_true"])[r["n_jets"] == 2], bins=bins2, histtype="step", label=model, color=get_color(model)) | |
| ax[i, 0].set_title("m_med = " + str(mmed)) | |
| ax[i, 1].set_title("m_med = " + str(mmed)) | |
| ax[i, 0].set_xlabel("m_pred / m_true") | |
| ax[i, 1].set_xlabel("mt_pred / mt_true") | |
| ax[i, 0].set_yscale("log") | |
| ax[i, 1].set_yscale("log") | |
| ax[i, 0].legend() | |
| ax[i, 1].legend() | |
| fig.tight_layout() | |
| fig.savefig(os.path.join(path, "mass_histograms_model_comparison_2jets_{}.pdf".format(r_inv))) | |