From 0f9ddc567388cd80f515650cb7a0b831baee4263 Mon Sep 17 00:00:00 2001 From: Giordon Stark Date: Wed, 12 May 2021 19:13:26 -0400 Subject: [PATCH 1/2] first iteration --- scripts/plot_compare_fitted_nuisance.py | 52 +++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 scripts/plot_compare_fitted_nuisance.py diff --git a/scripts/plot_compare_fitted_nuisance.py b/scripts/plot_compare_fitted_nuisance.py new file mode 100644 index 0000000..b638a30 --- /dev/null +++ b/scripts/plot_compare_fitted_nuisance.py @@ -0,0 +1,52 @@ +""" + History: + - Requested by Jeff Shahinian as part of EWK Compressed Wave 1 validation + + Details: Script to visualize the outputs of the scripts/compare_fitted_nuisance.py + + Usage: + >> python plot_compare_fitted_nuisance.py ... + """ + +import json +import glob +import numpy as np +import matplotlib.pyplot as plt +import scipy.interpolate +import parse +import click +import pyhf + +plt.rc("xtick", labelsize=14) +plt.rc("ytick", labelsize=14) + +@click.command() +@click.argument('files', type=click.Path(exists=True), nargs=-1) +@click.option( + "--output", + help="Path to file to output nuisance parameter comparison to.", + default="compare_fitted_nuisance.png", +) +def plot_compare_fitted_nuisance(files, output): + data = {} + + for filename in files: + for p_param, p_pyhf, p_root, p_abs, p_rel in np.loadtxt(files[0], dtype={'names': ['param', 'pyhf', 'root', 'abs', 'rel'], 'formats': ['|S42', float, float, float, float]}, skiprows=2): + data.setdefault(p_param, {'abs': [], 'rel': []}) + data[p_param]['abs'].append(p_abs) + data[p_param]['rel'].append(p_rel) + + print(f'Loaded {len(data)} nuisance parameters from {len(files)} files') + + data_abs, data_rel = list(zip(*[i for k,v in data.items() for i in zip(v['abs'], v['rel'])])) + fig, ax = plt.subplots(2, 1, figsize=(10,20)) + ax[0].hist(np.abs(data_rel), bins=np.logspace(0, 5, 50)) + ax[0].set_xscale('log') + ax[0].set_xlabel(r'$\left|\ \frac{\mathrm{pyhf} - \mathrm{ROOT}}{\mathrm{pyhf}}\ \right|$') + + ax[1].hist(np.clip(data_abs, -1, 1), bins=np.linspace(-1, 1, 200)) + + fig.savefig(output) + +if __name__ == "__main__": + plot_compare_fitted_nuisance() From 654f5dc34af0dadeba803b3772068c7f685906ce Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 12 May 2021 23:14:57 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- scripts/plot_compare_fitted_nuisance.py | 33 +++++++++++++++++-------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/scripts/plot_compare_fitted_nuisance.py b/scripts/plot_compare_fitted_nuisance.py index b638a30..cf67d19 100644 --- a/scripts/plot_compare_fitted_nuisance.py +++ b/scripts/plot_compare_fitted_nuisance.py @@ -20,8 +20,9 @@ plt.rc("xtick", labelsize=14) plt.rc("ytick", labelsize=14) + @click.command() -@click.argument('files', type=click.Path(exists=True), nargs=-1) +@click.argument("files", type=click.Path(exists=True), nargs=-1) @click.option( "--output", help="Path to file to output nuisance parameter comparison to.", @@ -31,22 +32,34 @@ def plot_compare_fitted_nuisance(files, output): data = {} for filename in files: - for p_param, p_pyhf, p_root, p_abs, p_rel in np.loadtxt(files[0], dtype={'names': ['param', 'pyhf', 'root', 'abs', 'rel'], 'formats': ['|S42', float, float, float, float]}, skiprows=2): - data.setdefault(p_param, {'abs': [], 'rel': []}) - data[p_param]['abs'].append(p_abs) - data[p_param]['rel'].append(p_rel) + for p_param, p_pyhf, p_root, p_abs, p_rel in np.loadtxt( + files[0], + dtype={ + "names": ["param", "pyhf", "root", "abs", "rel"], + "formats": ["|S42", float, float, float, float], + }, + skiprows=2, + ): + data.setdefault(p_param, {"abs": [], "rel": []}) + data[p_param]["abs"].append(p_abs) + data[p_param]["rel"].append(p_rel) - print(f'Loaded {len(data)} nuisance parameters from {len(files)} files') + print(f"Loaded {len(data)} nuisance parameters from {len(files)} files") - data_abs, data_rel = list(zip(*[i for k,v in data.items() for i in zip(v['abs'], v['rel'])])) - fig, ax = plt.subplots(2, 1, figsize=(10,20)) + data_abs, data_rel = list( + zip(*[i for k, v in data.items() for i in zip(v["abs"], v["rel"])]) + ) + fig, ax = plt.subplots(2, 1, figsize=(10, 20)) ax[0].hist(np.abs(data_rel), bins=np.logspace(0, 5, 50)) - ax[0].set_xscale('log') - ax[0].set_xlabel(r'$\left|\ \frac{\mathrm{pyhf} - \mathrm{ROOT}}{\mathrm{pyhf}}\ \right|$') + ax[0].set_xscale("log") + ax[0].set_xlabel( + r"$\left|\ \frac{\mathrm{pyhf} - \mathrm{ROOT}}{\mathrm{pyhf}}\ \right|$" + ) ax[1].hist(np.clip(data_abs, -1, 1), bins=np.linspace(-1, 1, 200)) fig.savefig(output) + if __name__ == "__main__": plot_compare_fitted_nuisance()