wums 0.1.4__tar.gz → 0.1.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {wums-0.1.4 → wums-0.1.6}/PKG-INFO +1 -1
- {wums-0.1.4 → wums-0.1.6}/pyproject.toml +2 -2
- {wums-0.1.4 → wums-0.1.6}/wums/ioutils.py +4 -0
- {wums-0.1.4 → wums-0.1.6}/wums/plot_tools.py +108 -7
- {wums-0.1.4 → wums-0.1.6}/wums.egg-info/PKG-INFO +1 -1
- {wums-0.1.4 → wums-0.1.6}/README.md +0 -0
- {wums-0.1.4 → wums-0.1.6}/setup.cfg +0 -0
- {wums-0.1.4 → wums-0.1.6}/wums/Templates/index.php +0 -0
- {wums-0.1.4 → wums-0.1.6}/wums/__init__.py +0 -0
- {wums-0.1.4 → wums-0.1.6}/wums/boostHistHelpers.py +0 -0
- {wums-0.1.4 → wums-0.1.6}/wums/logging.py +0 -0
- {wums-0.1.4 → wums-0.1.6}/wums/output_tools.py +0 -0
- {wums-0.1.4 → wums-0.1.6}/wums.egg-info/SOURCES.txt +0 -0
- {wums-0.1.4 → wums-0.1.6}/wums.egg-info/dependency_links.txt +0 -0
- {wums-0.1.4 → wums-0.1.6}/wums.egg-info/requires.txt +0 -0
- {wums-0.1.4 → wums-0.1.6}/wums.egg-info/top_level.txt +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "wums"
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.6"
|
|
8
8
|
description = "."
|
|
9
9
|
readme = { file = "README.md", content-type = "text/markdown" }
|
|
10
10
|
license = { text = "MIT" }
|
|
@@ -38,4 +38,4 @@ dependencies = [
|
|
|
38
38
|
where = ["."]
|
|
39
39
|
|
|
40
40
|
[tool.setuptools.package-data]
|
|
41
|
-
"wums" = ["Templates/index.php"]
|
|
41
|
+
"wums" = ["Templates/index.php"]
|
|
@@ -6,6 +6,7 @@ import shutil
|
|
|
6
6
|
import socket
|
|
7
7
|
import sys
|
|
8
8
|
import textwrap
|
|
9
|
+
import importlib
|
|
9
10
|
|
|
10
11
|
import hist
|
|
11
12
|
import matplotlib as mpl
|
|
@@ -600,14 +601,48 @@ def wrap_text(
|
|
|
600
601
|
)
|
|
601
602
|
|
|
602
603
|
|
|
603
|
-
def add_cms_decor(
|
|
604
|
-
ax,
|
|
604
|
+
def add_cms_decor(ax, *args, **kwargs):
|
|
605
|
+
add_decor(ax, "CMS", *args, **kwargs)
|
|
606
|
+
|
|
607
|
+
|
|
608
|
+
def add_decor(
|
|
609
|
+
ax, title, label=None, lumi=None, loc=2, data=True, text_size=None, no_energy=False
|
|
605
610
|
):
|
|
606
611
|
text_size = get_textsize(ax, text_size)
|
|
612
|
+
|
|
613
|
+
if title in ["CMS", "ATLAS", "LHCb", "ALICE"]:
|
|
614
|
+
module = getattr(hep, title.lower())
|
|
615
|
+
make_text = module.text
|
|
616
|
+
make_label = module.label
|
|
617
|
+
else:
|
|
618
|
+
def make_text(text=None, **kwargs):
|
|
619
|
+
for key, value in dict(hep.rcParams.text._get_kwargs()).items():
|
|
620
|
+
if (
|
|
621
|
+
value is not None
|
|
622
|
+
and key not in kwargs
|
|
623
|
+
and key in inspect.getfullargspec(label_base.exp_text).kwonlyargs
|
|
624
|
+
):
|
|
625
|
+
kwargs.setdefault(key, value)
|
|
626
|
+
kwargs.setdefault("italic", (False, True, False))
|
|
627
|
+
kwargs.setdefault("exp", title)
|
|
628
|
+
return hep.label.exp_text(text=text, **kwargs)
|
|
629
|
+
|
|
630
|
+
def make_label(**kwargs):
|
|
631
|
+
for key, value in dict(hep.rcParams.text._get_kwargs()).items():
|
|
632
|
+
if (
|
|
633
|
+
value is not None
|
|
634
|
+
and key not in kwargs
|
|
635
|
+
and key in inspect.getfullargspec(label_base.exp_text).kwonlyargs
|
|
636
|
+
):
|
|
637
|
+
kwargs.setdefault(key, value)
|
|
638
|
+
kwargs.setdefault("italic", (False, True, False))
|
|
639
|
+
kwargs.setdefault("exp", title)
|
|
640
|
+
return hep.label.exp_label(**kwargs)
|
|
641
|
+
|
|
607
642
|
if no_energy:
|
|
608
|
-
|
|
643
|
+
make_text(ax=ax, text=label, loc=loc, fontsize=text_size)
|
|
609
644
|
else:
|
|
610
|
-
|
|
645
|
+
make_label(
|
|
611
646
|
ax=ax,
|
|
612
647
|
lumi=lumi,
|
|
613
648
|
lumi_format="{0:.3g}",
|
|
@@ -616,7 +651,32 @@ def add_cms_decor(
|
|
|
616
651
|
data=data,
|
|
617
652
|
loc=loc,
|
|
618
653
|
)
|
|
619
|
-
|
|
654
|
+
|
|
655
|
+
# else:
|
|
656
|
+
# if loc==0:
|
|
657
|
+
# # above frame
|
|
658
|
+
# x = 0.0
|
|
659
|
+
# y = 1.0
|
|
660
|
+
# elif loc==1:
|
|
661
|
+
# # in frame
|
|
662
|
+
# x = 0.05
|
|
663
|
+
# y = 0.88
|
|
664
|
+
# elif loc==2:
|
|
665
|
+
# # upper left, label below title
|
|
666
|
+
# x = 0.05
|
|
667
|
+
# y = 0.88
|
|
668
|
+
# elif loc==2:
|
|
669
|
+
# #
|
|
670
|
+
# ax.text(
|
|
671
|
+
# x,
|
|
672
|
+
# y,
|
|
673
|
+
# args.title,
|
|
674
|
+
# transform=ax1.transAxes,
|
|
675
|
+
# fontweight="bold",
|
|
676
|
+
# fontsize=1.2 * text_size,
|
|
677
|
+
# )
|
|
678
|
+
# if label is not None:
|
|
679
|
+
# ax.text(0.05, 0.80, label, transform=ax.transAxes, fontstyle="italic")
|
|
620
680
|
|
|
621
681
|
def makeStackPlotWithRatio(
|
|
622
682
|
histInfo,
|
|
@@ -825,11 +885,11 @@ def makeStackPlotWithRatio(
|
|
|
825
885
|
for x in (data_hist.sum(), hh.sumHists(stack).sum())
|
|
826
886
|
]
|
|
827
887
|
varis = [
|
|
828
|
-
x.variance if hasattr(x, "variance") else x
|
|
888
|
+
x.variance if hasattr(x, "variance") else x**0.5
|
|
829
889
|
for x in (data_hist.sum(), hh.sumHists(stack).sum())
|
|
830
890
|
]
|
|
831
891
|
scale = vals[0] / vals[1]
|
|
832
|
-
unc = scale * (varis[0] / vals[0] ** 2 + varis[1] / vals[1] ** 2)
|
|
892
|
+
unc = scale * (varis[0] / vals[0] ** 2 + varis[1] / vals[1] ** 2)**0.5
|
|
833
893
|
ndigits = -math.floor(math.log10(abs(unc))) + 1
|
|
834
894
|
logger.info(
|
|
835
895
|
f"Rescaling all processes by {round(scale,ndigits)} +/- {round(unc,ndigits)} to match data norm"
|
|
@@ -1780,3 +1840,44 @@ def make_summary_plot(
|
|
|
1780
1840
|
ax1.xaxis.set_major_locator(ticker.LinearLocator(numticks=5))
|
|
1781
1841
|
|
|
1782
1842
|
return fig
|
|
1843
|
+
|
|
1844
|
+
|
|
1845
|
+
def load_config(config_path):
|
|
1846
|
+
if config_path is None:
|
|
1847
|
+
return {}
|
|
1848
|
+
# load a python module
|
|
1849
|
+
spec = importlib.util.spec_from_file_location("config", config_path)
|
|
1850
|
+
config = importlib.util.module_from_spec(spec)
|
|
1851
|
+
spec.loader.exec_module(config)
|
|
1852
|
+
return config
|
|
1853
|
+
|
|
1854
|
+
|
|
1855
|
+
def read_axis_label(x, labels, with_unit=True):
|
|
1856
|
+
if x in labels:
|
|
1857
|
+
label = labels[x]
|
|
1858
|
+
if isinstance(label, str):
|
|
1859
|
+
return label
|
|
1860
|
+
elif with_unit:
|
|
1861
|
+
return f'{label["label"]} ({label["unit"]})'
|
|
1862
|
+
else:
|
|
1863
|
+
return label["label"]
|
|
1864
|
+
else:
|
|
1865
|
+
return x
|
|
1866
|
+
|
|
1867
|
+
|
|
1868
|
+
def get_axis_label(config, default_keys=None, label=None, is_bin=False):
|
|
1869
|
+
if label is not None:
|
|
1870
|
+
return label
|
|
1871
|
+
|
|
1872
|
+
if default_keys is None:
|
|
1873
|
+
return "Bin index"
|
|
1874
|
+
|
|
1875
|
+
labels = getattr(config, "axis_labels", {})
|
|
1876
|
+
|
|
1877
|
+
if len(default_keys) == 1:
|
|
1878
|
+
if is_bin:
|
|
1879
|
+
return f"{read_axis_label(default_keys[0], labels, False)} bin"
|
|
1880
|
+
else:
|
|
1881
|
+
return read_axis_label(default_keys[0], labels)
|
|
1882
|
+
else:
|
|
1883
|
+
return f"({', '.join([read_axis_label(a, labels, False) for a in default_keys])}) bin"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|