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.
Files changed (89) hide show
  1. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/PKG-INFO +34 -14
  2. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/README.md +33 -13
  3. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/pyproject.toml +1 -1
  4. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/plotting/plotter_1d.py +78 -4
  5. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/stats/fitter.py +1 -1
  6. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/stats/utilities.py +10 -8
  7. data_manipulation_utilities-0.2.8.dev985/src/dmu_data/plotting/tests/pulls.yaml +18 -0
  8. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/__init__.py +0 -0
  9. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/arrays/utilities.py +0 -0
  10. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/generic/hashing.py +0 -0
  11. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/generic/naming.py +0 -0
  12. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/generic/typing_utilities.py +0 -0
  13. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/generic/utilities.py +0 -0
  14. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/generic/version_management.py +0 -0
  15. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/logging/log_store.py +0 -0
  16. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/logging/messages.py +0 -0
  17. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/ml/cv_classifier.py +0 -0
  18. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/ml/cv_diagnostics.py +0 -0
  19. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/ml/cv_performance.py +0 -0
  20. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/ml/cv_predict.py +0 -0
  21. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/ml/train_mva.py +0 -0
  22. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/ml/utilities.py +0 -0
  23. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/pdataframe/utilities.py +0 -0
  24. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/plotting/fwhm.py +0 -0
  25. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/plotting/matrix.py +0 -0
  26. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/plotting/plotter.py +0 -0
  27. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/plotting/plotter_2d.py +0 -0
  28. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/plotting/utilities.py +0 -0
  29. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/rdataframe/atr_mgr.py +0 -0
  30. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/rdataframe/utilities.py +0 -0
  31. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/rfile/ddfgetter.py +0 -0
  32. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/rfile/rfprinter.py +0 -0
  33. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/rfile/utilities.py +0 -0
  34. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/stats/fit_stats.py +0 -0
  35. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/stats/function.py +0 -0
  36. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/stats/gof_calculator.py +0 -0
  37. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/stats/minimizers.py +0 -0
  38. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/stats/model_factory.py +0 -0
  39. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/stats/parameters.py +0 -0
  40. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/stats/wdata.py +0 -0
  41. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/stats/zfit.py +0 -0
  42. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/stats/zfit_models.py +0 -0
  43. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/stats/zfit_plotter.py +0 -0
  44. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/testing/utilities.py +0 -0
  45. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/text/transformer.py +0 -0
  46. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/workflow/__init__.py +0 -0
  47. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu/workflow/cache.py +0 -0
  48. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/__init__.py +0 -0
  49. {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
  50. {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
  51. {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
  52. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/ml/tests/diagnostics_overlay.yaml +0 -0
  53. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/ml/tests/train_mva.yaml +0 -0
  54. {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
  55. {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
  56. {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
  57. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/plotting/tests/2d.yaml +0 -0
  58. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/plotting/tests/fig_size.yaml +0 -0
  59. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/plotting/tests/high_stat.yaml +0 -0
  60. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/plotting/tests/legend.yaml +0 -0
  61. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/plotting/tests/line.yaml +0 -0
  62. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/plotting/tests/name.yaml +0 -0
  63. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/plotting/tests/no_bounds.yaml +0 -0
  64. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/plotting/tests/normalized.yaml +0 -0
  65. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/plotting/tests/plug_fwhm.yaml +0 -0
  66. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/plotting/tests/plug_stats.yaml +0 -0
  67. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/plotting/tests/simple.yaml +0 -0
  68. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/plotting/tests/styling.yaml +0 -0
  69. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/plotting/tests/title.yaml +0 -0
  70. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/plotting/tests/weights.yaml +0 -0
  71. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/rfile/friends.yaml +0 -0
  72. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/stats/fitter/test_simple.yaml +0 -0
  73. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/stats/kde_optimizer/control.json +0 -0
  74. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/stats/kde_optimizer/signal.json +0 -0
  75. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/stats/parameters/data.yaml +0 -0
  76. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/tests/generic/config.json +0 -0
  77. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/tests/generic/config.yaml +0 -0
  78. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/tests/generic/config_1.yaml +0 -0
  79. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/tests/generic/config_2.yaml +0 -0
  80. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/tests/generic/fail_validate.yaml +0 -0
  81. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/tests/generic/validate.yaml +0 -0
  82. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/tests/generic/with_references.yaml +0 -0
  83. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/tests/pdf_to_tex.txt +0 -0
  84. {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
  85. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/text/transform.toml +0 -0
  86. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/text/transform.txt +0 -0
  87. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/text/transform_set.toml +0 -0
  88. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/text/transform_set.txt +0 -0
  89. {data_manipulation_utilities-0.2.8.dev956 → data_manipulation_utilities-0.2.8.dev985}/src/dmu_data/text/transform_trf.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: data-manipulation-utilities
3
- Version: 0.2.8.dev956
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
- # 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_
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:
@@ -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
- # 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_
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:
@@ -1,7 +1,7 @@
1
1
  [tool.poetry]
2
2
  name = 'data-manipulation-utilities'
3
3
  description = 'Project storing utilities needed to reduce boilerplate code when analyzing data'
4
- version = "0.2.8.dev956"
4
+ version = "0.2.8.dev985"
5
5
  readme = 'README.md'
6
6
  package-mode = true
7
7
  packages = [
@@ -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(self, arr_wgt : numpy.ndarray, var : str) -> numpy.ndarray:
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
- total = numpy.sum(arr_wgt)
293
- arr_wgt = arr_wgt / total
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.info(f'{chi2:<10.3f}{pval:<10.3e}{stat:<10}')
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
- from zfit.result import FitResult as zres
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 : 'signal' for Gaussian, 's+b' for Gaussian plus exponential
547
- obs : If provided, will use it, by default None and will be built in function
548
- suffix: Optional, can be used in case multiple models are needed
549
- lam : Decay constant of exponential component, set to -0.0001 by default
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}', 1000, 0, 1000_000)
571
- ngaus = zfit.param.Parameter(f'nsig{suffix}', 1000, 0, 1000_000)
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 : {}