- `isort` to the pre-commit checks. See: `9930ca1ef9dc13b603e21dea40bae832d377d6d9`.
- Scalar multiplication for histograms. See: `522cd73c5d08225edd7f1f4785ba243dc7e4a079`.
- `Histogram1D` validation and sanity checks. The class should be much more robust. See:
- Support for converting a `TProfile` to `Histogram1D`. A `TProfile` doesn't strictly conceptually convert
quite so nicely, but `Histogram1D` is very useful as a data container, so it's better to support it. See:
- We're not going to use `numba` for now, so possible code related to it was removed. See:
- Split out a `BaseFitResult` class. It's really convenient to have such a class for individual fit
components. See: `6d638b9020e2334feff0bff64357aa94b4caa40f`.
- Imports are now sorted by `isort`. This ensures consistency. See: `0a8c771f8785bc620e6ec5240fba005fdad77254`.
- Improve numpy encoding when writing to YAML files. It will write in the binary format, which won't be as
convenient to edit by hand, but I believe it will avoid a bunch of floating point issues where later digits
fluctuate each time they are calculated, thereby changing the YAML file. See:
- Prevent ROOT from intercepting args when importing type helpers. See:
- Improve typing. See: `20d7a06f7879c9d4df869ecb33c5f5e952834824`, `47199d86a1b468cfa2881b4130947872fe92d623`,
- Fit package utilizing `iminuit`. Includes base fitting functionality (function to direct fitting, fit result
class, etc), cost functions, useful functions (AddPDF, gaussian, etc). All of this functionality is based on
`numpy` and therefore can execute in a vectorized manner (including the error calculation). Some
functionality of the `reaction_plane_fit` package was ported into Pachyderm. Much of the development itself
was done privately in the `reaction_plane_fit` package. These developments include all of the features of
`probfit` that I've used, such that dependence on that package isn't necessary. See:
`ebb1dd19ab28d0db25723488e847e1bcee59be3a`, and `3e5441f514a104cd1696add779d192c8c2b3a862`.
- Effective chi squared calculation for fit results. See: `4ad189cbc6add79538dce0274f6dda76a0675e7d`.
- Typing improvements, fixed tests and import issues, etc. See: `ebac51f782d35cc1ee1b87b66d2409121dc9569e` and
`3994877c8addcc005ddcd610d3b794d7d1d9078e`, amongst others.
- `metadata` field to `Histogram1D` for storing additional information, such as additional error arrays (for
example, systematics). See: `58d35b341f3b4890c59c9cb9ec70b72836793fc2`.
- Fixed some typing and pinned `ruamel.yaml` to the pre `py.typed` version until the typing information
stabilizes. See: `933a1fb85f3ab7bf1daadeb2d260dacd37732a1a`.
- Increased default plot font size. This generally makes things much more readable (but of course can be
adjusted for each plot later if necessary). See: `56a6bef789b1329bb810139918cbabdf74336709`.
- Allow configuration of max fractional difference limits of mean and median in outliers removal. See:
- Fix for latex preamble changes in MPL 3.1. See: `168f548d32ae7fd8f7c39db09ee0864ac1b1a158`.
- Refactor `histogram.find_bin(...)` so that it can be used externally. See:
- Enabled strict `mypy` checks. See: `6ac6bf50b6787dea547516196c043a989e9cf70d`.
- Changed the return typing of `selected_iterables` in `generic_config` from `Dict[str, Any]` to `Mapping[str,
Any]` to accept more generic mappings. See: `f9bf3a173e5a448bb174357d73950e024220da48`.
- Many minor typing fixes. See: `86669f2047de24ca5ef9694a9bd29e2f2ff6f58d` and
- Obsolete code related to extracting analysis objects when fitting. See:
- Don't plot lines around patches. See: `aaa1d8374fd871246290ce76f1796f2f7582b01d`.
- Histogram integral values now write properly to YAML. See: `c88dabceedcd0e4576802ab322b96592dcaf5233`.
- Fix `mypy` typing in third party packages by adding `zip_safe = False` in the `setup.py`. See:
- Plot module to handle tasks related to plotting. Currently, it just configures `matplotlib` styles which
were extracted from the `alice-jet-hadron` package. See: `82f4be7a344c124a3a51faf34f521fa125c21bbc`.
- Integration tests to ensure that classes can be dumped by YAML. See:
- Updated pre-commit hooks with newer versions of the packages. See:
- Equality operator for `Histogram1D`. See: `d769eec644dc91de17bcb3cc92435346cd305196`.
- Integrate and count over bins in a specified range of a `Histogram1D`. See:
`06fcb96076da89677bef5afc772b462db82ab39b`, `fd00a741e4f62e44cbfed6fa1eb3fe50b5aba8bb` (initial
implementation), `5f8853d6a7db8bdebe1464bf1cf34273a95059fc`, `794054b41d76fc92bf326743d97c71e431fbf20b`
(tests improved), and `e16613bdb4ef139d6a5564e68b46fd78a57124dd` (improve docs).
- Implemented `find_bin(...)` method for `Histogram1D` to find the bin that corresponds to the given value.
- Refactor `bin_widths` into property for `Histogram1D` to ease calculating the bin widths. See:
- Improved `yaml` module typing information. See: `effd1d5193891c5bd268e033cf18eb2be71db6f1`.
- `recursive_getitem` to retrieve an item from a recursive dict. In principle, this should also work for other
objects which implement `__get_item__(...)`, but it is not tested for those other objects. See:
`5982c6bfd5a13a4b8f09464ca27ac24ba8477f6f` and `a3653859c94bc892082842ecc7997e4facda1e60`.
- Relaxed some `Dict` -> `Mapping` typing information where possible for greater compatibility with inputs.
- Don't modify the passed analysis iterables when iterating with
`iterate_with_selected_objects_in_order(...)`. See: `7daf01ea590e9ccbdc6511d6a5379757409537fa`.
- Indicate that the package is typed (it already was, but the typing wasn't being checked in downstream
packages). See: `409922e80541155d414c2c101eb913b4ab9fd9ac`.
- Improved typing information in the `histogram` module. See: `dded82643a8c7c7acc684d64c958eed63c84b3e6`.
- Improved typing information in the `generic_config` module. See: `c9a8f57fea5f72e62841f264d768e785cd6da3c5`,
- `Histogram1D` operators (add, subtract, multiply, divide) with other hists, including error propagation. These
operations were confirmed by comparing against the same operations in ROOT histograms (it turns out that the
error propagation is exactly as expected, but the ROOT code was sometimes difficult to interpret). See:
`052ea365e4e6a8a4d6bce38779ed9fe2edcfc089` and `7df8ceaa445d5c7aea4c62f6b32bc198eb59ccc3`.
- Refactor `KeyIndex` creation into a separate function so it can be accessed by other packages. In
particular, this allows for their creation (with the iterable field access, etc) from analysis packages.
- Added iterator (`__iter__`) over names and values to the `KeyIndex` object. See:
- Added `__init__.py` to the `tests` directory. Otherwise, test fixture discovery sometimes fails. See:
- Iteration over analysis objects grouped by selections. See: `0164157982147142561f33d4a790156513cbba34`.
- Recursive `getattr(...)`. Function from [Stack Overflow](https://stackoverflow.com/a/31174427). See:
- Recursive `setattr(...)`. Function from [Stack Overflow](https://stackoverflow.com/a/31174427). See:
- Raise exception if mean or median after outliers removal changes by more than 1%. Such a condition almost
certainly indicates that something went wrong with the outliers removal. See:
- Quiet down some logging information.
- Naming of `particle_level_axis` -> `outliers_removal_axis` in the `remove_outliers` module. While it is
common to the particle level axis, it isn't always. Further, sometimes we use the axis for projections,
and sometimes it is just for determining which axis to use when removing outliers. So it's better to use a
more general name. See: `12bde27f421eac59e310029c10f2ca750bcd6da6`.
- Specify the outliers removal axis when calling `run(...)` instead of at object creation. This way, we can
use the manager over for different histograms which many have different axes. See:
- Ignore the first bin of the outliers removal. Some older embedding trains had some erroneous entries in the
1st bin of the pt hard spectra, regardless of the pt hard bin. In any case, we would never expect to have
outliers in the first bin. See: `354013e1713d2c4d84d48f0a1d21a6bc06afea2e`.
- Included new modules in the docs. See: `3c2d30f363e04eca181f7c05d40306bfbb0d0470`.
- Typo: `_determine_outliers_for_moving_avreage` -> `_determine_outliers_for_moving_average`. See:
- Outliers removal module, `remove_outliers`. It removes outliers from a given histogram. It was developed
based on previous code. See: `dd472b3dff0715f015d27d083258555bd9674028`,
`12268cb696daa9d80ca680fc219e5d5ab01f67d2`, and `6b62e751c773c05be11019980c67d9ef69d1e487`.
- Centralized shared typing. See: `4e00fd66994971b67d40031627cd6b536c0439d0`.
- Improved YAML dependencies and typing. It is now only handled in the `yaml` module. See:
- Provide access to wrapper to get a `TAxis` object given a histogram and a selected axis number. See:
- Fixed 3D projectors axis determination. The axis name was being taken rather than the name of the axis type.
- Obsolete YAML read and write code. We can now directly write classes, which is much easier. See:
- Added very simple context manager for opening ROOT files. Basically a simpler version of
`rootpy.io.root_open`. See: `0d7a923f19d714125ec5f1eaed55ad9203ae718e`.
- Heavily modified the `projectors` module to simplify projecting single objects. See:
- Modify the `HistProjector` initialization names and objects for improved clarity. See:
- Clarify typing information. See: `eac9586a7d7c0bf1e2be1f0ef2235fb75bf0e676` and
- Improved typing information in the `yaml` module. See: `eac9586a7d7c0bf1e2be1f0ef2235fb75bf0e676`.
- A few more git pre-commit hooks. See: `dcdde76d223b93ec12d1f43cb5f9a94894efa6c8`.
- ROOT memory issue that sometimes occurred during testing. Fixed by ensuring that the open ROOT file is
always closed when an exception is raised. Also included ensuring that only python has ownership of the
objects. See: `c21612967376fb15aa1cffa2e2c8c7b663dae90b` (many of the preceding commits are related to
trying to solve this issue).
- `Histogram1D` now utilizes bin edges to define the axes instead of the bin centers. This allows for variable
sized bins. Further, the bin centers (ie `x`) are easy to calculate from the bin edges, but the edges are
a bit more painful. See: `b053fe8214591da6754e55d5f9dabf79a3cd5f56`.
- `Histogram1D` supports non-uniform binning. See: `32d2ed53f5743e0b8cab353130e045c733677255`.
- `get_array_from_hist2D(...)` can now return an (x, y) mesh using bin edges by enabling the
`return_bin_edges` option. By default, it will use bin centers. See:
- Improved test coverage to demonstrate why `deepcopy` is necessary when constructing objects. See:
- `histogram.get_histograms_in_file(filename)` to return all histograms stored in a ROOT file. See:
- Avoided a very expensive `deepcopy` by formatting strings into new objects instead of writing into existing
objects (which had to be copied first). See: `085f8f18`.
- Return the iterables that were actually utilized in `generic_config.create_objects_from_iterables`. It
replaces the iterables names return values with a dict, where the keys are the iterables names and the
values are lists of the utilized iterables. See: `973b85ae`.
- `KeyIndex` already could be written to YAML - it didn't need `to_yaml` and `from_yaml` methods.
- New YAML module to create YAML objects, register classes + modules for reading and writing, and additional
helper functions. It generally encapsulate much of the basic YAML functionality. See: `e8009517`.
- Pre-commit hooks configuration to the repository based on `pre-commit`. This should generally improve the
quality of commits. Currently includes `flake8`, `mypy`, `yamllint`, and some additional minor python
checks. See: `586c1549` and `0510a0ba`.
- YAML linting via `yamllint`. Little is done with this yet, but more files should filter in, so it's useful
to have . See: `a6bc250f`.
- Fixed breaking change made by `ruamel.yaml` upstream related to base python types receiving anchor support.
It is a good start, but still needs some time to mature for our purposes. Also expanded the tests to check
for such issues. See: `9aa7f4b7` (the commit message has far more information).
- Minor test improvements for `generic_config`. See: `d723bbcb`.
- Mixin approach for enum values to/from YAML causes problems with pickling (which is implicitly called while
copying). Revised the approach to be unbound functions, which doesn't have this same problem. See:
- Enumeration YAML read and write mixins. They utilize the `__name__` of the enumeration (not the value!).
- Allow for classes to be registered and constructed via YAML. See: `b877a09e`
- Allows for set of iterable values to be specified in a configuration file. Often used in conjunction
with creating objects in YAML. See: `7cab0476`.
- Convert each argument via `str()` in the generic_config instead of `obj.str()` which is less portable and
pythonic. Precipitated by changes in the definition of enumeration classes in the jet-hadron package. See:
- Include `--ignore-missing-includes` when running `mypy` automatically. See: `0ac7d0bd`.
- Full type annotations for the package. See: `a83372b1`.
- Fully updated API naming scheme to follow python conventions. See: `cd097f3b`, `c7bedc6b`, `68048970`, and
- Remove `pkgconfig` workaround introduced in `4a3c6216` since `python-lz4` merged in an alternative
[approach](https://github.com/python-lz4/python-lz4/pull/160) to workaround the issue. See: `755c276a`.
- Added `mypy` to Travis CI checks. See: `2c6f7dc0`.
- Reworked iteration over analysis dictionaries. See: `0ead6db8`.
- Updated overwatch-base python version. See: `39fede7e`.
- Existing typing issues identified by `mypy`.
- `Histogram1D` class moved from the `reaction_plane_fit` package to `pachyderm`. See: `89d2eaa3.`
- Added `uproot` dependency and add fix for `lz4` issue that is caused by ROOT. See: `89d2eaa3` and
- version info is now available in the package by simply typing `import pachyderm; pachyderm.version_info`.
- Moved histogram functionality from `utils` to a new `histogram` module. This module also contains the added
`Histogram1D` class (see above). See: `89d2eaa3`.
- Initial release, with most of the development performed in
[alice-yale-dev](https://github.com/ALICEYale/alice-yale-dev), and a bit in