NeuNorm 2.2.0__tar.gz → 2.2.2__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.
- {neunorm-2.2.0 → neunorm-2.2.2}/.grype.yaml +4 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/CHANGELOG.md +44 -1
- {neunorm-2.2.0 → neunorm-2.2.2}/PKG-INFO +1 -1
- {neunorm-2.2.0 → neunorm-2.2.2}/docs/migration.md +1 -1
- {neunorm-2.2.0 → neunorm-2.2.2}/pixi.lock +5411 -4016
- {neunorm-2.2.0 → neunorm-2.2.2}/pyproject.toml +2 -2
- neunorm-2.2.2/src/neunorm/_version.py +1 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/data_models/roi.py +14 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/exporters/tiff_writer.py +31 -6
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/pipelines/mars_ccd.py +15 -7
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/pipelines/mars_tpx3.py +10 -7
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/pipelines/venus_ccd.py +15 -7
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/processing/normalizer.py +234 -93
- neunorm-2.2.2/tests/unit/test_background_roi_pooled.py +251 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/unit/test_mars_ccd.py +43 -4
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/unit/test_mars_tpx3.py +3 -3
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/unit/test_normalizer.py +131 -3
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/unit/test_roi.py +12 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/unit/test_tiff_writer.py +67 -2
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/unit/test_venus_ccd.py +4 -4
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/unit/test_venus_tpx1.py +6 -5
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/unit/test_venus_tpx3_event.py +4 -3
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/unit/test_venus_tpx3_histogram.py +6 -5
- neunorm-2.2.0/src/neunorm/_version.py +0 -1
- {neunorm-2.2.0 → neunorm-2.2.2}/.claude/agents/bug-hunter.md +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/.claude/skills/bughunt/SKILL.md +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/.claude/skills/post-merge/SKILL.md +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/.claude/skills/release/SKILL.md +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/.claude/skills/review-pipeline/SKILL.md +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/.claude/workflows/bughunt-deep.js +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/.claude/workflows/dual-family-review.js +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/.gitattributes +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/.github/CODEOWNERS +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/.github/dependabot.yml +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/.github/release.yml +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/.github/workflows/codeql.yml +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/.github/workflows/dependency-scan.yml +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/.github/workflows/test_and_deploy.yaml +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/.github/workflows/update-lockfiles.yml +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/.gitignore +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/.pre-commit-config.yaml +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/.readthedocs.yaml +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/.zenodo.json +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/AGENTS.md +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/CITATION.cff +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/CLAUDE.md +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/CONTRIBUTING.md +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/LICENSE +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/README.md +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/SECURITY.md +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/NeuNorm/__init__.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/NeuNorm/_utilities.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/NeuNorm/exporter.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/NeuNorm/loader.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/NeuNorm/normalization.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/NeuNorm/roi.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/README.md +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/conda.recipe/meta.yaml +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/data/df/DC0000.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/data/df/DC0001.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/data/df/DC0002.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/data/ob/0001.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/data/ob/0002.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/data/ob/0003.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/data/ob/0004.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/data/ob/0005.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/data/ob/0006.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/data/ob/0007.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/data/ob/0008.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/data/ob/0009.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/data/ob/0010.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/data/ob/0011.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/data/ob/0012.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/data/ob/0013.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/data/ob/0014.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/data/ob/0015.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/data/sample/0002.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/data/sample/0003.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/data/sample/0004.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/data/sample/0005.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/data/sample/0006.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/data/sample/0007.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/data/sample/0008.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/data/sample/0009.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/data/sample/0010.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/data/sample/0011.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/data/sample/0012.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/data/sample/0013.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/data/sample/0014.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/data/sample/0015.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/documentation/Makefile +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/documentation/readthedocs-environment.yml +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/documentation/source/_static/normalization_equation.png +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/documentation/source/_static/normalization_principle.png +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/documentation/source/_static/progress_bar_loading.png +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/documentation/source/_static/progress_bar_normalization.png +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/documentation/source/conf.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/documentation/source/cropping_data.rst +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/documentation/source/dark_field_correction.rst +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/documentation/source/export_data.rst +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/documentation/source/index.rst +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/documentation/source/installation.rst +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/documentation/source/loading.rst +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/documentation/source/normalization.rst +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/documentation/source/notebook.rst +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/documentation/source/retrieve_normalized_data.rst +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/documentation/source/tutorial_normalization_with_fewer_ob_than_sample.ipynb +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/documentation/source/tutorial_using_array_input.ipynb +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/documentation/source/tutorial_using_folder_input.ipynb +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/environment.yml +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/notebooks/debugging_multi_roi_bug.ipynb +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/notebooks/notebook_display_with_time_estimation.ipynb +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/notebooks/testing_new_auto_gamma_filtering.ipynb +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/notebooks/tutorial_normalization_with_fewer_ob_than_sample.ipynb +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/notebooks/tutorial_normalization_with_fewer_ob_than_sample_MAYBE_BUG.ipynb +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/notebooks/tutorial_using_array_input.ipynb +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/notebooks/tutorial_using_array_input_and_export_array.ipynb +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/notebooks/tutorial_using_array_input_and_several_roi.ipynb +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/notebooks/tutorial_using_folder_input.ipynb +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/paper/paper.bib +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/paper/paper.md +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/scripts/clean_build_artifacts.sh +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/tests/NeuNorm/normalizing_test.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/tests/NeuNorm/test_cropping.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/tests/NeuNorm/test_export.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/tests/NeuNorm/test_loading.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/tests/NeuNorm/test_roi.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/tests/NeuNorm/test_utilities.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/tests/data/different_format/df001_4_by_4.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/tests/data/different_format/image001_4_by_4.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/tests/data/different_format/image001_with_gamma.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/tests/data/different_format/not_supported_file.fake +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/tests/data/different_format/ob001_4_by_4.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/tests/data/fits/df/df001.fits +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/tests/data/fits/ob/ob001.fits +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/tests/data/fits/ob/ob002.fits +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/tests/data/fits/ob/ob003.fits +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/tests/data/fits/test_roi/ob.fits +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/tests/data/fits/test_roi/sample.fits +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/tests/data/format_not_suppored.txt +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/tests/data/hdf5/dump_file.hdf5 +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/tests/data/ob001.fits +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/tests/data/tif/df/df001.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/tests/data/tif/df/df002.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/tests/data/tif/df/df003.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/tests/data/tif/ob/ob001.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/tests/data/tif/ob/ob002.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/tests/data/tif/ob/ob003.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/tests/data/tif/sample_with_gamma/image001.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/tests/data/tif/special_ob/ob_0001_2rois.tiff +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/tests/data/tif/special_sample/image_0001_2rois.tiff +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/archive/neunorm-1.x/tests/data/tif/special_sample/image_0001_roi_no_ob.tiff +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/codecov.yaml +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/docs/api.rst +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/docs/conf.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/docs/development/DEVELOPMENT_PLAN.md +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/docs/index.md +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/docs/workflows/README.md +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/docs/workflows/mars_ccd_cmos.md +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/docs/workflows/mars_tpx3.md +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/docs/workflows/venus_ccd_cmos.md +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/docs/workflows/venus_tpx1.md +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/docs/workflows/venus_tpx3.md +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/examples/pulse_reconstruction_explained.ipynb +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/__init__.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/data_models/__init__.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/data_models/core.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/data_models/tof.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/exporters/__init__.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/exporters/hdf5_writer.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/filters/__init__.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/filters/gamma_filter.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/loaders/__init__.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/loaders/event_loader.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/loaders/fits_loader.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/loaders/metadata_loader.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/loaders/stack_loader.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/loaders/tiff_loader.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/pipelines/__init__.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/pipelines/venus_tpx1.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/pipelines/venus_tpx3_event.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/pipelines/venus_tpx3_histogram.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/processing/__init__.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/processing/air_region_corrector.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/processing/dark_corrector.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/processing/reference_preparer.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/processing/roi_clipper.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/processing/run_combiner.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/processing/spatial_rebinner.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/processing/uncertainty_calculator.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/tof/__init__.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/tof/binning.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/tof/coordinate_converter.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/tof/event_converter.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/tof/histogram_rebinner.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/tof/pixel_detector.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/tof/pulse_reconstruction.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/tof/resonance.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/tof/statistics_analyzer.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/utils/__init__.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/utils/_numba_compat.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/src/neunorm/utils/constants.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/data/fits/sample/image001.fits +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/data/fits/sample/image002.fits +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/data/fits/sample/image003.fits +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/data/tif/sample/image001.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/data/tif/sample/image002.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/data/tif/sample/image003.tif +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/integration/test_tof_pipeline.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/neunorm/test_version.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/unit/test_air_region_corrector.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/unit/test_analyze_statistics.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/unit/test_binning_config.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/unit/test_binning_conversions.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/unit/test_constants.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/unit/test_dark_corrector.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/unit/test_division_by_zero_guards.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/unit/test_event_converter.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/unit/test_event_loader.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/unit/test_eventdata_auto_validation.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/unit/test_fits_loader.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/unit/test_gamma_filter.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/unit/test_hdf5_writer.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/unit/test_metadata_loader.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/unit/test_numba_compat.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/unit/test_parallel_processing.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/unit/test_pixel_detector.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/unit/test_pulse_reconstruction.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/unit/test_rebin_spatial.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/unit/test_rebin_tof.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/unit/test_reference_preparer.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/unit/test_refine_boundaries_jit.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/unit/test_remaining_jit.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/unit/test_resonance_detection.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/unit/test_roi_clipper.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/unit/test_run_combiner.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/unit/test_tiff_loader.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/unit/test_uncertainty.py +0 -0
- {neunorm-2.2.0 → neunorm-2.2.2}/tests/unit/test_variance_propagation_fix.py +0 -0
|
@@ -5,7 +5,48 @@ All notable changes to NeuNorm are documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
-
## [
|
|
8
|
+
## [2.2.2] - 2026-07-02
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- **`background_roi` can now reproduce legacy 1.x zero-count-ROI semantics** (completes the
|
|
13
|
+
downstream-superset goal of
|
|
14
|
+
[#172](https://github.com/ornlneutronimaging/NeuNorm/issues/172) /
|
|
15
|
+
[#159](https://github.com/ornlneutronimaging/NeuNorm/issues/159)): the pooled-mean
|
|
16
|
+
strictly-positive/finite guard can be opted out with
|
|
17
|
+
`apply_background_roi(..., strict=False)` or
|
|
18
|
+
`normalize_transmission(...)` / `normalize_with_dark(..., background_roi_strict=False)`,
|
|
19
|
+
letting a zero-count background ROI propagate `inf`/`nan` through the division exactly as
|
|
20
|
+
NeuNorm 1.x did (iBeatles pins this behavior). The default stays strict — a
|
|
21
|
+
non-positive/non-finite pooled mean raises `ValueError` — and structural errors (bad ROI
|
|
22
|
+
bounds, missing dims) always raise.
|
|
23
|
+
|
|
24
|
+
## [2.2.1] - 2026-07-01
|
|
25
|
+
|
|
26
|
+
### Added
|
|
27
|
+
|
|
28
|
+
- **`background_roi` now supports pooled multiple ROIs, inclusive extents, and an open-beam-less
|
|
29
|
+
mode.** `normalize_transmission(..., background_roi=)` — and the MARS CCD/TPX3 and VENUS CCD
|
|
30
|
+
pipelines — accept a **sequence** of ROIs, pooled as `sum(counts) / sum(pixels)` per image;
|
|
31
|
+
`ROI(..., inclusive=True)` opts into legacy inclusive extents (a width-`w` ROI spans `w+1`
|
|
32
|
+
pixels); and the new `neunorm.processing.normalizer.apply_background_roi(data, background_roi)`
|
|
33
|
+
applies the flux proxy to a sample stack with no open beam. A single ROI / bare tuple is
|
|
34
|
+
unchanged. This makes `background_roi` a superset of the downstream (iBeatles) pooled-inclusive
|
|
35
|
+
re-implementation so it can be removed.
|
|
36
|
+
([#172](https://github.com/ornlneutronimaging/NeuNorm/issues/172),
|
|
37
|
+
[#159](https://github.com/ornlneutronimaging/NeuNorm/issues/159))
|
|
38
|
+
- **Python 3.14 support.** NeuNorm builds, installs, and passes its full test suite on
|
|
39
|
+
CPython 3.14; the development/CI pixi environments and `pixi.lock` move to 3.14
|
|
40
|
+
(`requires-python` stays `>=3.11`).
|
|
41
|
+
|
|
42
|
+
### Fixed
|
|
43
|
+
|
|
44
|
+
- **TIFF export is compatible with scitiff ≥ 26.6.** scitiff 26.6 tightened its metadata schema
|
|
45
|
+
to reject object-dtype (`PyObject`) scipp variables. `write_tiff_stack` now JSON-encodes
|
|
46
|
+
sequence metadata (mirroring the HDF5 writer's provenance convention — read it back with
|
|
47
|
+
`json.loads`) and drops object-dtype coords/masks (e.g. tuple-valued TIFF header tags carried
|
|
48
|
+
over from the input files) that scitiff cannot serialize. HDF5 output and the written image
|
|
49
|
+
data are unchanged.
|
|
9
50
|
|
|
10
51
|
## [2.2.0] - 2026-06-30
|
|
11
52
|
|
|
@@ -171,6 +212,8 @@ documentation are archived under
|
|
|
171
212
|
[`archive/neunorm-1.x/`](archive/neunorm-1.x/); released 1.x versions remain
|
|
172
213
|
available on PyPI and the `conda-forge` channel (`pip install "NeuNorm<2"`).
|
|
173
214
|
|
|
215
|
+
[2.2.2]: https://github.com/ornlneutronimaging/NeuNorm/releases/tag/v2.2.2
|
|
216
|
+
[2.2.1]: https://github.com/ornlneutronimaging/NeuNorm/releases/tag/v2.2.1
|
|
174
217
|
[2.2.0]: https://github.com/ornlneutronimaging/NeuNorm/releases/tag/v2.2.0
|
|
175
218
|
[2.1.0]: https://github.com/ornlneutronimaging/NeuNorm/releases/tag/v2.1.0
|
|
176
219
|
[2.0.0]: https://github.com/ornlneutronimaging/NeuNorm/releases/tag/v2.0.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: NeuNorm
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.2
|
|
4
4
|
Summary: Neutron imaging normalization and TOF data processing for ORNL facilities
|
|
5
5
|
Project-URL: homepage, https://github.com/ornlneutronimaging/NeuNorm
|
|
6
6
|
Project-URL: repository, https://github.com/ornlneutronimaging/NeuNorm
|
|
@@ -106,7 +106,7 @@ transmission = normalize_transmission(sample, ob) # T = sample / ob, variances
|
|
|
106
106
|
| `Normalization()` (stateful object) | a `run_*_pipeline(...)` call, or composable functions |
|
|
107
107
|
| `.load(..., data_type="sample"/"ob")` | pipeline `sample_paths` / `ob_paths`, or `neunorm.loaders.stack_loader.load_stack` / `tiff_loader.load_tiff_stack` / `fits_loader.load_fits_stack` |
|
|
108
108
|
| `.load(..., data_type="df")` (dark/"df") | pipeline `dark_paths`, or `neunorm.processing.dark_corrector.subtract_dark(data, dark)` |
|
|
109
|
-
| `.normalization(roi=...)` | Flux normalization by a background ROI: `normalize_transmission(..., background_roi=(x0, y0, x1, y1))`, or pass `background_roi=` to `run_mars_ccd_pipeline` / `run_mars_tpx3_pipeline` / `run_venus_ccd_pipeline` ([#159](https://github.com/ornlneutronimaging/NeuNorm/issues/159)). A proton-charge proxy for when proton charge is unavailable; mutually exclusive with it. Note: 2.x `roi=` is a spatial **crop** (`apply_roi`), not this. |
|
|
109
|
+
| `.normalization(roi=...)` | Flux normalization by a background ROI: `normalize_transmission(..., background_roi=(x0, y0, x1, y1))`, or pass `background_roi=` to `run_mars_ccd_pipeline` / `run_mars_tpx3_pipeline` / `run_venus_ccd_pipeline` ([#159](https://github.com/ornlneutronimaging/NeuNorm/issues/159)). A proton-charge proxy for when proton charge is unavailable; mutually exclusive with it. Accepts one ROI or a **pooled sequence** of ROIs; use `ROI(..., inclusive=True)` for the 1.x inclusive extents, and `apply_background_roi(data, background_roi)` for the open-beam-less form. Note: 2.x `roi=` is a spatial **crop** (`apply_roi`), not this. |
|
|
110
110
|
| `.df_correction()` | `neunorm.processing.dark_corrector.subtract_dark(data, dark)` |
|
|
111
111
|
| `.crop(roi=ROI(...))` | `neunorm.processing.roi_clipper.apply_roi(data, ROI(x0=.., y0=.., x1=.., y1=..))` (or a bare `(x0, y0, x1, y1)` tuple) |
|
|
112
112
|
| auto/manual gamma filtering on `load()` | `neunorm.filters.gamma_filter.apply_gamma_filter(...)`, or pipeline `gamma_filter=True` |
|