def create_quantile_floor_0d_e(floor_dict): mc = get_mc(floor_dict) e_pdf = EnergyPDF.create(floor_dict["e_pdf_dict"]) default, bounds, name = e_pdf.return_energy_parameters() if len(name) != 1: raise Exception( "Trying to scan just one energy parameter, " "but selected energy pdf gave the following parameters:" " {} {} {}".format(name, default, bounds)) x_range = np.linspace(bounds[0][0], bounds[0][1], n_step) y_range = [] for x in x_range: weights = e_pdf.weight_mc(mc, x) quantile_floor = weighted_quantile(mc["raw_sigma"], floor_dict["floor_quantile"], weights) y_range.append(quantile_floor) y_range = np.array(y_range) save_path = floor_pickle(floor_dict) res = [x_range, np.log(y_range)] with open(save_path, "wb") as f: Pickle.dump(res, f) print("Saved to", save_path) plot_path = floor_pickle(floor_dict)[:-3] + "pdf" plt.figure() plt.plot(x_range, np.degrees(y_range)) plt.savefig(plot_path) plt.close()
def create_quantile_floor_1d(floor_dict): mc = get_mc(floor_dict) e_pdf = EnergyPDF.create(floor_dict["e_pdf_dict"]) weights = e_pdf.weight_mc(mc) bins = np.linspace(2., 6., 30) x_range = 0.5 * (bins[1:] + bins[:-1]) y_range = [] for j, lower in enumerate(bins[:-1]): upper = bins[j + 1] mask = np.logical_and( mc["logE"] >= lower, mc["logE"] < upper ) quantile_floor = weighted_quantile( mc["raw_sigma"][mask], floor_dict["floor_quantile"], weights[mask]) y_range.append(quantile_floor) x_range = np.array([0.] + list(x_range) + [10.]) y_range = np.array([y_range[0]] + list(y_range) + [y_range[-1]]) save_path = floor_pickle(floor_dict) res = [x_range, np.log(y_range)] with open(save_path, "wb") as f: Pickle.dump(res, f) print("Saved to", save_path) plot_path = floor_pickle(floor_dict)[:-3] + "pdf" plt.figure() plt.plot(x_range, np.degrees(y_range)) plt.savefig(plot_path) plt.close()
def create_quantile_floor_0d(floor_dict): mc = get_mc(floor_dict) e_pdf = EnergyPDF.create(floor_dict["e_pdf_dict"]) weights = e_pdf.weight_mc(mc) quantile_floor = weighted_quantile(mc["raw_sigma"], floor_dict["floor_quantile"], weights) save_path = floor_pickle(floor_dict) with open(save_path, "wb") as f: Pickle.dump(quantile_floor, f) print("Saved to", save_path)
def __init__(self, floor_dict): self.floor_dict = floor_dict self.season = floor_dict["season"] self.pickle_name = floor_pickle(floor_dict)
def create_quantile_floor_1d_e(floor_dict): mc = get_mc(floor_dict) e_pdf = EnergyPDF.create(floor_dict["e_pdf_dict"]) default, bounds, name = e_pdf.return_energy_parameters() if name != ["gamma"]: raise Exception( "Trying to scan gamma parameter, " "but selected energy pdf gave the following parameters:" " {} {} {}".format(name, default, bounds)) e_range = np.linspace(bounds[0][0], bounds[0][1], n_step) bins = np.linspace(2.0, 6.0, 20) z_range = [] for j, lower in enumerate(bins[:-1]): upper = bins[j + 1] mask = np.logical_and(mc["logE"] >= lower, mc["logE"] < upper) cut_mc = mc[mask] vals = [] for e in e_range: weights = e_pdf.weight_mc(cut_mc, e) quantile_floor = weighted_quantile(cut_mc["raw_sigma"], floor_dict["floor_quantile"], weights) vals.append(quantile_floor) z_range.append(vals) x_range = 0.5 * (bins[1:] + bins[:-1]) x_range = np.array([0.0] + list(x_range) + [10.0]) z_range = np.array([z_range[0]] + z_range + [z_range[-1]]) save_path = floor_pickle(floor_dict) res = [x_range, e_range, np.log(z_range)] with open(save_path, "wb") as f: Pickle.dump(res, f) print("Saved to", save_path) from scipy.interpolate import RectBivariateSpline spline = RectBivariateSpline(x_range, e_range, np.log(np.degrees(z_range)), kx=1, ky=1, s=0) Z = [] for x in x_range: Z.append(spline(x, e_range)[0]) Z = np.array(Z) plot_path = floor_pickle(floor_dict)[:-3] + "pdf" ax = plt.subplot(111) X, Y = np.meshgrid(x_range, e_range) # cbar = ax.pcolor(X, Y, np.log(np.degrees(z_range.T)), cmap="viridis", ) cbar = ax.pcolor( X, Y, Z.T, cmap="viridis", ) plt.colorbar(cbar, label="Log(Angular Error Floor/deg)") plt.ylabel(name[0]) plt.xlabel("Log(Energy proxy)") plt.savefig(plot_path) plt.close()