data-manipulation-utilities 0.2.8.dev956__tar.gz → 0.2.8.dev985__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.
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/PKG-INFO +34 -14
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/README.md +33 -13
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/pyproject.toml +1 -1
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/plotting/plotter_1d.py +78 -4
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/stats/fitter.py +1 -1
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/stats/utilities.py +10 -8
- data_manipulation_utilities-0.2.8.dev985/src/dmu_data/plotting/tests/pulls.yaml +18 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/__init__.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/arrays/utilities.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/generic/hashing.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/generic/naming.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/generic/typing_utilities.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/generic/utilities.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/generic/version_management.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/logging/log_store.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/logging/messages.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/ml/cv_classifier.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/ml/cv_diagnostics.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/ml/cv_performance.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/ml/cv_predict.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/ml/train_mva.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/ml/utilities.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/pdataframe/utilities.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/plotting/fwhm.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/plotting/matrix.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/plotting/plotter.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/plotting/plotter_2d.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/plotting/utilities.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/rdataframe/atr_mgr.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/rdataframe/utilities.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/rfile/ddfgetter.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/rfile/rfprinter.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/rfile/utilities.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/stats/fit_stats.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/stats/function.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/stats/gof_calculator.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/stats/minimizers.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/stats/model_factory.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/stats/parameters.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/stats/wdata.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/stats/zfit.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/stats/zfit_models.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/stats/zfit_plotter.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/testing/utilities.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/text/transformer.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/workflow/__init__.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/workflow/cache.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/__init__.py +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/ml/tests/diagnostics_from_file.yaml +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/ml/tests/diagnostics_from_model.yaml +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/ml/tests/diagnostics_multiple_methods.yaml +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/ml/tests/diagnostics_overlay.yaml +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/ml/tests/train_mva.yaml +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/ml/tests/train_mva_def.yaml +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/ml/tests/train_mva_with_diagnostics.yaml +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/ml/tests/train_mva_with_preffix.yaml +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/plotting/tests/2d.yaml +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/plotting/tests/fig_size.yaml +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/plotting/tests/high_stat.yaml +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/plotting/tests/legend.yaml +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/plotting/tests/line.yaml +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/plotting/tests/name.yaml +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/plotting/tests/no_bounds.yaml +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/plotting/tests/normalized.yaml +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/plotting/tests/plug_fwhm.yaml +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/plotting/tests/plug_stats.yaml +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/plotting/tests/simple.yaml +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/plotting/tests/styling.yaml +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/plotting/tests/title.yaml +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/plotting/tests/weights.yaml +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/rfile/friends.yaml +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/stats/fitter/test_simple.yaml +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/stats/kde_optimizer/control.json +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/stats/kde_optimizer/signal.json +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/stats/parameters/data.yaml +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/tests/generic/config.json +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/tests/generic/config.yaml +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/tests/generic/config_1.yaml +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/tests/generic/config_2.yaml +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/tests/generic/fail_validate.yaml +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/tests/generic/validate.yaml +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/tests/generic/with_references.yaml +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/tests/pdf_to_tex.txt +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/tests/stats/parameters/parameters_library.yaml +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/text/transform.toml +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/text/transform.txt +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/text/transform_set.toml +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/text/transform_set.txt +0 -0
- {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/text/transform_trf.txt +0 -0
{data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: data-manipulation-utilities
|
|
3
|
-
Version: 0.2.8.
|
|
3
|
+
Version: 0.2.8.dev985
|
|
4
4
|
Summary: Project storing utilities needed to reduce boilerplate code when analyzing data
|
|
5
5
|
Requires-Python: >=3.10,<3.13
|
|
6
6
|
Classifier: Programming Language :: Python :: 3
|
|
@@ -1051,7 +1051,7 @@ utilities.placeholder_fit(kind='s+b', fit_dir='/some/directory')
|
|
|
1051
1051
|
### Likelihooods
|
|
1052
1052
|
|
|
1053
1053
|
```python
|
|
1054
|
-
from dmu.stats import utilities
|
|
1054
|
+
from dmu.stats import utilities as sut
|
|
1055
1055
|
|
|
1056
1056
|
nll = sut.get_nll(kind='s+b')
|
|
1057
1057
|
```
|
|
@@ -1713,18 +1713,18 @@ plots:
|
|
|
1713
1713
|
# Can add styling to specific plots, this should be the argument of
|
|
1714
1714
|
# hist.plot(...)
|
|
1715
1715
|
styling :
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
|
|
1719
|
-
|
|
1720
|
-
|
|
1721
|
-
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
1727
|
-
|
|
1716
|
+
# This section will update the styling of each category
|
|
1717
|
+
# The categories (class A, etc) are the keys of the dictionary of dataframes
|
|
1718
|
+
class A:
|
|
1719
|
+
# These are the arguments of plt.hist(...)
|
|
1720
|
+
histtype : fill
|
|
1721
|
+
color : gray
|
|
1722
|
+
alpha : 0.3
|
|
1723
|
+
class B:
|
|
1724
|
+
color : red
|
|
1725
|
+
histtype : step
|
|
1726
|
+
linestyle: '-' # Linestyle is by default 'none',
|
|
1727
|
+
# needs to be overriden to see _steps_
|
|
1728
1728
|
# This will add vertical lines to plots, the arguments are the same
|
|
1729
1729
|
# as the ones passed to axvline
|
|
1730
1730
|
vline :
|
|
@@ -1797,6 +1797,26 @@ plugin:
|
|
|
1797
1797
|
Can be used to print statistics, mean, rms and weighted sum of entries for each distribution.
|
|
1798
1798
|
The statistics, reffer to the data **only inside** the plotting range.
|
|
1799
1799
|
|
|
1800
|
+
#### Pulls
|
|
1801
|
+
|
|
1802
|
+
If a given variable is a pull, one can add:
|
|
1803
|
+
|
|
1804
|
+
- Fitted Gaussian
|
|
1805
|
+
- Fitter parameters
|
|
1806
|
+
- Lines representing the mean and width
|
|
1807
|
+
|
|
1808
|
+
on the plot with:
|
|
1809
|
+
|
|
1810
|
+
```yaml
|
|
1811
|
+
plugin:
|
|
1812
|
+
pulls:
|
|
1813
|
+
x_pul : {}
|
|
1814
|
+
```
|
|
1815
|
+
|
|
1816
|
+
assuming that the variable holding the pulls is `x_pul`.
|
|
1817
|
+
The pulls will be drawn from -4 to +4. No configuration
|
|
1818
|
+
is available at the moment.
|
|
1819
|
+
|
|
1800
1820
|
## 2D plots
|
|
1801
1821
|
|
|
1802
1822
|
For the 2D case it would look like:
|
{data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/README.md
RENAMED
|
@@ -1016,7 +1016,7 @@ utilities.placeholder_fit(kind='s+b', fit_dir='/some/directory')
|
|
|
1016
1016
|
### Likelihooods
|
|
1017
1017
|
|
|
1018
1018
|
```python
|
|
1019
|
-
from dmu.stats import utilities
|
|
1019
|
+
from dmu.stats import utilities as sut
|
|
1020
1020
|
|
|
1021
1021
|
nll = sut.get_nll(kind='s+b')
|
|
1022
1022
|
```
|
|
@@ -1678,18 +1678,18 @@ plots:
|
|
|
1678
1678
|
# Can add styling to specific plots, this should be the argument of
|
|
1679
1679
|
# hist.plot(...)
|
|
1680
1680
|
styling :
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1681
|
+
# This section will update the styling of each category
|
|
1682
|
+
# The categories (class A, etc) are the keys of the dictionary of dataframes
|
|
1683
|
+
class A:
|
|
1684
|
+
# These are the arguments of plt.hist(...)
|
|
1685
|
+
histtype : fill
|
|
1686
|
+
color : gray
|
|
1687
|
+
alpha : 0.3
|
|
1688
|
+
class B:
|
|
1689
|
+
color : red
|
|
1690
|
+
histtype : step
|
|
1691
|
+
linestyle: '-' # Linestyle is by default 'none',
|
|
1692
|
+
# needs to be overriden to see _steps_
|
|
1693
1693
|
# This will add vertical lines to plots, the arguments are the same
|
|
1694
1694
|
# as the ones passed to axvline
|
|
1695
1695
|
vline :
|
|
@@ -1762,6 +1762,26 @@ plugin:
|
|
|
1762
1762
|
Can be used to print statistics, mean, rms and weighted sum of entries for each distribution.
|
|
1763
1763
|
The statistics, reffer to the data **only inside** the plotting range.
|
|
1764
1764
|
|
|
1765
|
+
#### Pulls
|
|
1766
|
+
|
|
1767
|
+
If a given variable is a pull, one can add:
|
|
1768
|
+
|
|
1769
|
+
- Fitted Gaussian
|
|
1770
|
+
- Fitter parameters
|
|
1771
|
+
- Lines representing the mean and width
|
|
1772
|
+
|
|
1773
|
+
on the plot with:
|
|
1774
|
+
|
|
1775
|
+
```yaml
|
|
1776
|
+
plugin:
|
|
1777
|
+
pulls:
|
|
1778
|
+
x_pul : {}
|
|
1779
|
+
```
|
|
1780
|
+
|
|
1781
|
+
assuming that the variable holding the pulls is `x_pul`.
|
|
1782
|
+
The pulls will be drawn from -4 to +4. No configuration
|
|
1783
|
+
is available at the moment.
|
|
1784
|
+
|
|
1765
1785
|
## 2D plots
|
|
1766
1786
|
|
|
1767
1787
|
For the 2D case it would look like:
|
|
@@ -9,6 +9,7 @@ from hist import Hist
|
|
|
9
9
|
import numpy
|
|
10
10
|
import matplotlib.pyplot as plt
|
|
11
11
|
|
|
12
|
+
from scipy.stats import norm
|
|
12
13
|
from dmu.logging.log_store import LogStore
|
|
13
14
|
from dmu.plotting.plotter import Plotter
|
|
14
15
|
from dmu.plotting.fwhm import FWHM
|
|
@@ -59,6 +60,8 @@ class Plotter1D(Plotter):
|
|
|
59
60
|
|
|
60
61
|
return minx, maxx, bins
|
|
61
62
|
#-------------------------------------
|
|
63
|
+
# TODO: Might need to move all plugins code elsewhere
|
|
64
|
+
# and somehow register these plugins through config
|
|
62
65
|
def _run_plugins(
|
|
63
66
|
self,
|
|
64
67
|
arr_val : numpy.ndarray,
|
|
@@ -66,7 +69,12 @@ class Plotter1D(Plotter):
|
|
|
66
69
|
hst : Hist,
|
|
67
70
|
name : str,
|
|
68
71
|
varname : str) -> None:
|
|
69
|
-
|
|
72
|
+
'''
|
|
73
|
+
arr_val: Array of values of variable to plot
|
|
74
|
+
arr_wgt: Array of weights
|
|
75
|
+
hst : Histogram, needed to plot extra information
|
|
76
|
+
name : Name of variable
|
|
77
|
+
'''
|
|
70
78
|
if 'plugin' not in self._d_cfg:
|
|
71
79
|
log.debug('No plugins found')
|
|
72
80
|
return
|
|
@@ -99,6 +107,56 @@ class Plotter1D(Plotter):
|
|
|
99
107
|
name = name,
|
|
100
108
|
varname = varname,
|
|
101
109
|
cfg = cfg)
|
|
110
|
+
|
|
111
|
+
if 'pulls' in self._d_cfg['plugin']:
|
|
112
|
+
if varname not in self._d_cfg['plugin']['pulls']:
|
|
113
|
+
log.debug(f'No pulls plugin found for variable {varname}')
|
|
114
|
+
return
|
|
115
|
+
|
|
116
|
+
log.debug(f'pulls plugin found for variable {varname}')
|
|
117
|
+
cfg = self._d_cfg['plugin']['pulls'][varname]
|
|
118
|
+
[minx, maxx, _] = self._d_cfg['plots' ][varname]['binning']
|
|
119
|
+
|
|
120
|
+
self._run_pulls(
|
|
121
|
+
arr_val = arr_val,
|
|
122
|
+
minx = minx,
|
|
123
|
+
maxx = maxx,
|
|
124
|
+
cfg = cfg)
|
|
125
|
+
# ----------------------
|
|
126
|
+
def _run_pulls(
|
|
127
|
+
self,
|
|
128
|
+
arr_val : numpy.ndarray,
|
|
129
|
+
minx : float,
|
|
130
|
+
maxx : float,
|
|
131
|
+
cfg : dict[str,str]) -> None:
|
|
132
|
+
'''
|
|
133
|
+
Parameters
|
|
134
|
+
-------------------
|
|
135
|
+
arr_val : Array of X axis values to plot
|
|
136
|
+
cfg : Configuration for the statistics plugin
|
|
137
|
+
'''
|
|
138
|
+
mu, sg = norm.fit(arr_val)
|
|
139
|
+
nbins = 200
|
|
140
|
+
arr_x = numpy.linspace(minx, maxx, nbins)
|
|
141
|
+
arr_y = norm.pdf(arr_x, mu, sg)
|
|
142
|
+
bw = (maxx - minx) / nbins
|
|
143
|
+
area = bw * arr_y.sum()
|
|
144
|
+
arr_y = arr_y / area
|
|
145
|
+
|
|
146
|
+
plt.plot(arr_x, arr_y, label='Fit', color='black')
|
|
147
|
+
|
|
148
|
+
stats = rf'''
|
|
149
|
+
$\mu={mu:.3f}$
|
|
150
|
+
$\sigma={sg:.3f}$
|
|
151
|
+
'''
|
|
152
|
+
ax = plt.gca()
|
|
153
|
+
|
|
154
|
+
maxy = max(arr_y)
|
|
155
|
+
ax.text(x=-4.5, y=0.93 * maxy, s=stats, fontsize=30)
|
|
156
|
+
|
|
157
|
+
ax.axvline(x=mu , ls=':', lw=1, c='r')
|
|
158
|
+
ax.axvline(x=mu - sg, ls='-', lw=1, c='r')
|
|
159
|
+
ax.axvline(x=mu + sg, ls='-', lw=1, c='r')
|
|
102
160
|
# ----------------------
|
|
103
161
|
def _trim_to_range(
|
|
104
162
|
self,
|
|
@@ -278,7 +336,20 @@ class Plotter1D(Plotter):
|
|
|
278
336
|
|
|
279
337
|
return f'{name:<15}{nentries:<10}'
|
|
280
338
|
# --------------------------------------------
|
|
281
|
-
def _normalize_weights(
|
|
339
|
+
def _normalize_weights(
|
|
340
|
+
self,
|
|
341
|
+
arr_wgt : numpy.ndarray,
|
|
342
|
+
var : str) -> numpy.ndarray:
|
|
343
|
+
'''
|
|
344
|
+
Parameters
|
|
345
|
+
--------------
|
|
346
|
+
arr_wgt : Array of weights
|
|
347
|
+
var : Plotting variable, needed to access normalization flag
|
|
348
|
+
|
|
349
|
+
Returns
|
|
350
|
+
--------------
|
|
351
|
+
Array of weights, normalized to 1 or not
|
|
352
|
+
'''
|
|
282
353
|
cfg_var = self._d_cfg['plots'][var]
|
|
283
354
|
if 'normalized' not in cfg_var:
|
|
284
355
|
log.debug(f'Not normalizing for variable: {var}')
|
|
@@ -288,9 +359,12 @@ class Plotter1D(Plotter):
|
|
|
288
359
|
log.debug(f'Not normalizing for variable: {var}')
|
|
289
360
|
return arr_wgt
|
|
290
361
|
|
|
362
|
+
[minx, maxx, nbins] = self._d_cfg['plots'][var]['binning']
|
|
363
|
+
|
|
291
364
|
log.debug(f'Normalizing for variable: {var}')
|
|
292
|
-
|
|
293
|
-
|
|
365
|
+
bw = (maxx - minx) / nbins
|
|
366
|
+
area = bw * numpy.sum(arr_wgt)
|
|
367
|
+
arr_wgt = arr_wgt / area
|
|
294
368
|
|
|
295
369
|
return arr_wgt
|
|
296
370
|
# --------------------------------------------
|
|
@@ -374,7 +374,7 @@ class Fitter:
|
|
|
374
374
|
|
|
375
375
|
stat = res.status
|
|
376
376
|
|
|
377
|
-
log.
|
|
377
|
+
log.debug(f'{chi2:<10.3f}{pval:<10.3e}{stat:<10}')
|
|
378
378
|
pdf = nll.model[0] # This class is not meant for simultaneous fits
|
|
379
379
|
# There should only be one PDF
|
|
380
380
|
d_par = Fitter.get_float_pars(pdf=pdf)
|
|
@@ -30,7 +30,8 @@ from zfit.interface import ZfitSpace as zobs
|
|
|
30
30
|
from zfit.interface import ZfitPDF as zpdf
|
|
31
31
|
from zfit.interface import ZfitModel as zmod
|
|
32
32
|
from zfit.interface import ZfitParameter as zpar
|
|
33
|
-
|
|
33
|
+
|
|
34
|
+
from zfit.minimizers.interface import ZfitResult as zres
|
|
34
35
|
|
|
35
36
|
log = LogStore.add_logger('dmu:stats:utilities')
|
|
36
37
|
#-------------------------------------------------------
|
|
@@ -535,6 +536,7 @@ def pdf_to_tex(path : str, d_par : dict[str,str], skip_fixed : bool = True) -> N
|
|
|
535
536
|
#---------------------------------------------
|
|
536
537
|
def get_model(
|
|
537
538
|
kind : str,
|
|
539
|
+
nsample: int = 1000,
|
|
538
540
|
obs : zobs|None = None,
|
|
539
541
|
suffix : str|None = None,
|
|
540
542
|
lam : float = -0.0001) -> zpdf:
|
|
@@ -543,10 +545,11 @@ def get_model(
|
|
|
543
545
|
|
|
544
546
|
Parameters:
|
|
545
547
|
|
|
546
|
-
kind
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
548
|
+
kind : 'signal' for Gaussian, 's+b' for Gaussian plus exponential
|
|
549
|
+
nsample: Number of entries for normalization of each component, default 1000
|
|
550
|
+
obs : If provided, will use it, by default None and will be built in function
|
|
551
|
+
suffix : Optional, can be used in case multiple models are needed
|
|
552
|
+
lam : Decay constant of exponential component, set to -0.0001 by default
|
|
550
553
|
'''
|
|
551
554
|
if suffix is not None:
|
|
552
555
|
suffix = f'_{suffix}'
|
|
@@ -567,8 +570,8 @@ def get_model(
|
|
|
567
570
|
expo= zfit.pdf.Exponential(obs=obs, lam=c)
|
|
568
571
|
|
|
569
572
|
if kind == 's+b':
|
|
570
|
-
nexpo = zfit.param.Parameter(f'nbkg{suffix}',
|
|
571
|
-
ngaus = zfit.param.Parameter(f'nsig{suffix}',
|
|
573
|
+
nexpo = zfit.param.Parameter(f'nbkg{suffix}', nsample, 0, 1000_000)
|
|
574
|
+
ngaus = zfit.param.Parameter(f'nsig{suffix}', nsample, 0, 1000_000)
|
|
572
575
|
|
|
573
576
|
bkg = expo.create_extended(nexpo)
|
|
574
577
|
sig = gaus.create_extended(ngaus)
|
|
@@ -590,7 +593,6 @@ def get_nll(kind : str) -> ZfitLoss:
|
|
|
590
593
|
'''
|
|
591
594
|
pdf = get_model(kind=kind)
|
|
592
595
|
|
|
593
|
-
|
|
594
596
|
if kind == 's+b':
|
|
595
597
|
dat = pdf.create_sampler()
|
|
596
598
|
return zfit.loss.ExtendedUnbinnedNLL(model=pdf, data=dat)
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
saving:
|
|
2
|
+
plt_dir: plotting/pluggins/pulls
|
|
3
|
+
plots:
|
|
4
|
+
x_pul:
|
|
5
|
+
binning : [-4.0, 4.0, 60]
|
|
6
|
+
labels : ['x Pull', 'Entries']
|
|
7
|
+
normalized: true
|
|
8
|
+
styling:
|
|
9
|
+
pull:
|
|
10
|
+
histtype : fill
|
|
11
|
+
color : blue
|
|
12
|
+
alpha : 0.3
|
|
13
|
+
y_pul:
|
|
14
|
+
binning: [-4.0, 4.0, 60]
|
|
15
|
+
labels : ['y Pull', 'Normalized']
|
|
16
|
+
plugin:
|
|
17
|
+
pulls:
|
|
18
|
+
x_pul : {}
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|