dkist-processing-cryonirsp 1.1.0__tar.gz → 1.1.1__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.
Potentially problematic release.
This version of dkist-processing-cryonirsp might be problematic. Click here for more details.
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/CHANGELOG.rst +11 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/PKG-INFO +1 -1
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tasks/linearity_correction.py +52 -34
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tests/test_linearity_correction.py +68 -1
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp.egg-info/PKG-INFO +1 -1
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/.gitignore +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/.pre-commit-config.yaml +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/.readthedocs.yml +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/README.rst +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/SCIENCE_CHANGELOG.rst +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/bitbucket-pipelines.yml +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/changelog/.gitempty +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/check_changelog_updated.sh +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/__init__.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/config.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/models/__init__.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/models/constants.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/models/exposure_conditions.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/models/parameters.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/models/tags.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/models/task_name.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/parsers/__init__.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/parsers/cryonirsp_l0_fits_access.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/parsers/cryonirsp_l1_fits_access.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/parsers/exposure_conditions.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/parsers/map_repeats.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/parsers/measurements.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/parsers/modstates.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/parsers/optical_density_filters.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/parsers/polarimetric_check.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/parsers/scan_step.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/parsers/time.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/parsers/wavelength.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tasks/__init__.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tasks/assemble_movie.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tasks/bad_pixel_map.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tasks/beam_boundaries_base.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tasks/ci_beam_boundaries.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tasks/ci_science.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tasks/cryonirsp_base.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tasks/dark.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tasks/gain.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tasks/instrument_polarization.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tasks/l1_output_data.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tasks/make_movie_frames.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tasks/mixin/__init__.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tasks/mixin/beam_access.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tasks/mixin/corrections.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tasks/mixin/intermediate_frame.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tasks/mixin/linearized_frame.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tasks/mixin/shift_measurements.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tasks/parse.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tasks/quality_metrics.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tasks/science_base.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tasks/sp_beam_boundaries.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tasks/sp_dispersion_axis_correction.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tasks/sp_geometric.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tasks/sp_science.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tasks/sp_solar_gain.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tasks/trial_output_data.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tasks/write_l1.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tests/__init__.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tests/conftest.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tests/header_models.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tests/local_trial_workflows/__init__.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tests/local_trial_workflows/l0_cals_only.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tests/local_trial_workflows/l0_to_l1.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tests/local_trial_workflows/linearize_only.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tests/local_trial_workflows/local_trial_helpers.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tests/test_assemble_movie.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tests/test_assemble_qualilty.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tests/test_bad_pixel_maps.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tests/test_ci_beam_boundaries.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tests/test_ci_science.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tests/test_corrections.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tests/test_cryo_base.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tests/test_cryo_constants.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tests/test_dark.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tests/test_gain.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tests/test_instrument_polarization.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tests/test_make_movie_frames.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tests/test_parameters.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tests/test_parse.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tests/test_quality.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tests/test_sp_beam_boundaries.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tests/test_sp_dispersion_axis_correction.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tests/test_sp_geometric.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tests/test_sp_make_movie_frames.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tests/test_sp_science.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tests/test_sp_solar.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tests/test_trial_create_quality_report.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tests/test_trial_output_data.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tests/test_workflows.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/tests/test_write_l1.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/workflows/__init__.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/workflows/ci_l0_processing.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/workflows/sp_l0_processing.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp/workflows/trial_workflows.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp.egg-info/SOURCES.txt +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp.egg-info/dependency_links.txt +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp.egg-info/requires.txt +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/dkist_processing_cryonirsp.egg-info/top_level.txt +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/docs/Makefile +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/docs/bad_pixel_calibration.rst +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/docs/beam_angle_calculation.rst +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/docs/beam_boundary_computation.rst +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/docs/changelog.rst +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/docs/ci_science_calibration.rst +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/docs/conf.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/docs/index.rst +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/docs/l0_to_l1_cryonirsp_ci-full-trial.rst +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/docs/l0_to_l1_cryonirsp_ci.rst +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/docs/l0_to_l1_cryonirsp_sp-full-trial.rst +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/docs/l0_to_l1_cryonirsp_sp.rst +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/docs/linearization.rst +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/docs/make.bat +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/docs/requirements.txt +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/docs/requirements_table.rst +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/docs/scientific_changelog.rst +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/docs/sp_science_calibration.rst +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/licenses/LICENSE.rst +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/pyproject.toml +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/science_towncrier.sh +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/setup.cfg +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/setup.py +0 -0
- {dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/towncrier_science.toml +0 -0
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
v1.1.1 (2024-09-18)
|
|
2
|
+
===================
|
|
3
|
+
|
|
4
|
+
Bugfixes
|
|
5
|
+
--------
|
|
6
|
+
|
|
7
|
+
- Add validation in linearity_correction task to ensure that the value of NUM_FRAMES_IN_RAMP is the same
|
|
8
|
+
across all frames in a ramp, and that the value of NUM_FRAMES_IN_RAMP actually matches the number of frames found. (`#147 <https://bitbucket.org/dkistdc/dkist-processing-cryonirsp/pull-requests/147>`__)
|
|
9
|
+
- When writing linearized frames, use a fixed tag list as opposed to one derived from L0 data to alleviate load on redis. (`#148 <https://bitbucket.org/dkistdc/dkist-processing-cryonirsp/pull-requests/148>`__)
|
|
10
|
+
|
|
11
|
+
|
|
1
12
|
v1.1.0 (2024-09-10)
|
|
2
13
|
===================
|
|
3
14
|
|
|
@@ -25,7 +25,6 @@ class _RampSet:
|
|
|
25
25
|
current_ramp_set_num: int
|
|
26
26
|
time_obs: str
|
|
27
27
|
num_frames_in_ramp: int
|
|
28
|
-
expected_num_frames_in_ramp: int
|
|
29
28
|
exposure_times_ms: np.ndarray
|
|
30
29
|
frame_shape: tuple[int]
|
|
31
30
|
last_frame_name: str
|
|
@@ -33,10 +32,6 @@ class _RampSet:
|
|
|
33
32
|
frames_to_process: np.ndarray
|
|
34
33
|
index_offset_to_first_frame: int
|
|
35
34
|
|
|
36
|
-
@property
|
|
37
|
-
def is_valid(self):
|
|
38
|
-
return self.num_frames_in_ramp == self.expected_num_frames_in_ramp
|
|
39
|
-
|
|
40
35
|
|
|
41
36
|
class LinearityCorrection(CryonirspTaskBase):
|
|
42
37
|
"""Task class for performing linearity correction on all input frames, regardless of task type."""
|
|
@@ -76,10 +71,12 @@ class LinearityCorrection(CryonirspTaskBase):
|
|
|
76
71
|
exposure_corrected_output_array = self.apply_exposure_corrections(
|
|
77
72
|
output_array, ramp_set
|
|
78
73
|
)
|
|
79
|
-
#
|
|
80
|
-
tags =
|
|
81
|
-
|
|
82
|
-
|
|
74
|
+
# Set the tags for the linearized output frame
|
|
75
|
+
tags = [
|
|
76
|
+
CryonirspTag.linearized(),
|
|
77
|
+
CryonirspTag.frame(),
|
|
78
|
+
CryonirspTag.time_obs(time_obs),
|
|
79
|
+
]
|
|
83
80
|
# The last frame in the ramp is used for the header
|
|
84
81
|
self.write(
|
|
85
82
|
data=exposure_corrected_output_array,
|
|
@@ -109,11 +106,53 @@ class LinearityCorrection(CryonirspTaskBase):
|
|
|
109
106
|
Generator which yields _RampSet instances
|
|
110
107
|
"""
|
|
111
108
|
for ramp_set_num, time_obs in enumerate(self.constants.time_obs_list):
|
|
109
|
+
input_objects = list(
|
|
110
|
+
self.read(
|
|
111
|
+
tags=[
|
|
112
|
+
CryonirspTag.input(),
|
|
113
|
+
CryonirspTag.frame(),
|
|
114
|
+
CryonirspTag.time_obs(time_obs),
|
|
115
|
+
],
|
|
116
|
+
decoder=fits_access_decoder,
|
|
117
|
+
fits_access_class=CryonirspRampFitsAccess,
|
|
118
|
+
)
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
if not self.is_ramp_valid(input_objects):
|
|
122
|
+
continue
|
|
123
|
+
|
|
112
124
|
ramp_set = self.populate_ramp_set(time_obs, ramp_set_num)
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
125
|
+
yield ramp_set
|
|
126
|
+
|
|
127
|
+
def is_ramp_valid(self, ramp_object_list: list[CryonirspRampFitsAccess]) -> bool:
|
|
128
|
+
"""
|
|
129
|
+
Check if a given ramp is valid.
|
|
130
|
+
|
|
131
|
+
Current validity checks are:
|
|
132
|
+
|
|
133
|
+
1. All frames in the ramp have the same value for NUM_FRAMES_IN_RAMP
|
|
134
|
+
2. The value of NUM_FRAMES_IN_RAMP equals the length of actual frames found
|
|
135
|
+
|
|
136
|
+
If a ramp is not valid then warnings are logged and `False` is returned.
|
|
137
|
+
"""
|
|
138
|
+
frames_in_ramp_set = {o.num_frames_in_ramp for o in ramp_object_list}
|
|
139
|
+
task_type = ramp_object_list[0].ip_task_type
|
|
140
|
+
|
|
141
|
+
if len(frames_in_ramp_set) > 1:
|
|
142
|
+
logger.info(
|
|
143
|
+
f"Not all frames have the same FRAMES_IN_RAMP value. Set is {frames_in_ramp_set}. Ramp is task {task_type}. Skipping ramp."
|
|
144
|
+
)
|
|
145
|
+
return False
|
|
146
|
+
|
|
147
|
+
num_frames_in_ramp = frames_in_ramp_set.pop()
|
|
148
|
+
num_ramp_objects = len(ramp_object_list)
|
|
149
|
+
if num_ramp_objects != num_frames_in_ramp:
|
|
150
|
+
logger.info(
|
|
151
|
+
f"Missing some ramp frames. Expected {num_frames_in_ramp} from header value, but only have {num_ramp_objects}. Ramp is task {task_type}. Skipping ramp."
|
|
152
|
+
)
|
|
153
|
+
return False
|
|
154
|
+
|
|
155
|
+
return True
|
|
117
156
|
|
|
118
157
|
@staticmethod
|
|
119
158
|
def tag_list_for_single_ramp_frame(time_obs: str, frame_num: int) -> list[CryonirspTag]:
|
|
@@ -201,7 +240,6 @@ class LinearityCorrection(CryonirspTaskBase):
|
|
|
201
240
|
actual_num_frames_in_ramp = self.count(CryonirspTag.time_obs(time_obs))
|
|
202
241
|
exp_times = self.get_ordered_exposure_time_list(time_obs, actual_num_frames_in_ramp)
|
|
203
242
|
last_frame = self.read_single_ramp_frame(time_obs, actual_num_frames_in_ramp)
|
|
204
|
-
expected_num_frames_in_ramp = last_frame.num_frames_in_ramp
|
|
205
243
|
ramp_set_num = idx + 1
|
|
206
244
|
# The default list of curr_frame_in_ramp tag numbers to use, which may be altered later on
|
|
207
245
|
frames_to_process = np.array(range(1, actual_num_frames_in_ramp + 1), dtype=int)
|
|
@@ -209,7 +247,6 @@ class LinearityCorrection(CryonirspTaskBase):
|
|
|
209
247
|
current_ramp_set_num=ramp_set_num,
|
|
210
248
|
time_obs=time_obs,
|
|
211
249
|
num_frames_in_ramp=actual_num_frames_in_ramp,
|
|
212
|
-
expected_num_frames_in_ramp=expected_num_frames_in_ramp,
|
|
213
250
|
exposure_times_ms=exp_times,
|
|
214
251
|
frame_shape=last_frame.data.shape,
|
|
215
252
|
last_frame_name=last_frame.name,
|
|
@@ -220,25 +257,6 @@ class LinearityCorrection(CryonirspTaskBase):
|
|
|
220
257
|
)
|
|
221
258
|
return ramp_set
|
|
222
259
|
|
|
223
|
-
def generate_output_tag_set(self, frame_name: str, curr_frame_in_ramp: int) -> list[str]:
|
|
224
|
-
"""
|
|
225
|
-
Use one of the input frames to derive the proper list of output tags.
|
|
226
|
-
|
|
227
|
-
Parameters
|
|
228
|
-
----------
|
|
229
|
-
frame_name
|
|
230
|
-
file path to use to get starting tag set
|
|
231
|
-
|
|
232
|
-
Returns
|
|
233
|
-
-------
|
|
234
|
-
A list of tags to use for writing the output frame
|
|
235
|
-
"""
|
|
236
|
-
result_tags = list(self.tags(frame_name))
|
|
237
|
-
result_tags.remove(CryonirspTag.input())
|
|
238
|
-
result_tags.remove(CryonirspTag.curr_frame_in_ramp(curr_frame_in_ramp))
|
|
239
|
-
result_tags.append(CryonirspTag.linearized())
|
|
240
|
-
return result_tags
|
|
241
|
-
|
|
242
260
|
def apply_exposure_corrections(self, input_array: np.ndarray, ramp_set: _RampSet) -> np.ndarray:
|
|
243
261
|
"""
|
|
244
262
|
Normalize the array by converting to counts per second and correcting for Optical Density filter attenuation.
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
"""Test the linearity correction task."""
|
|
2
|
+
import re
|
|
3
|
+
from dataclasses import dataclass
|
|
2
4
|
from datetime import datetime
|
|
3
5
|
|
|
4
6
|
import numpy as np
|
|
@@ -9,6 +11,7 @@ from dkist_processing_common._util.scratch import WorkflowFileSystem
|
|
|
9
11
|
from dkist_processing_common.codecs.fits import fits_hdulist_encoder
|
|
10
12
|
from dkist_processing_common.models.tags import Tag
|
|
11
13
|
from dkist_processing_common.tests.conftest import FakeGQLClient
|
|
14
|
+
from dkist_service_configuration.logging import logger
|
|
12
15
|
|
|
13
16
|
from dkist_processing_cryonirsp.models.constants import CryonirspBudName
|
|
14
17
|
from dkist_processing_cryonirsp.models.exposure_conditions import AllowableOpticalDensityFilterNames
|
|
@@ -138,7 +141,12 @@ def linearity_correction(
|
|
|
138
141
|
[pytest.param(1, id="1 chunk"), pytest.param(2, id="2 chunks")],
|
|
139
142
|
)
|
|
140
143
|
def test_linearity_correction(
|
|
141
|
-
linearity_correction,
|
|
144
|
+
linearity_correction,
|
|
145
|
+
mocker,
|
|
146
|
+
arm_id,
|
|
147
|
+
frames_in_ramp,
|
|
148
|
+
num_chunks,
|
|
149
|
+
filter_name,
|
|
142
150
|
):
|
|
143
151
|
"""
|
|
144
152
|
Given: A LinearityCorrection task
|
|
@@ -176,3 +184,62 @@ def test_linearity_correction(
|
|
|
176
184
|
assert np.allclose(data, expected_data)
|
|
177
185
|
else:
|
|
178
186
|
assert len(files_found) == 0
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
@pytest.fixture
|
|
190
|
+
def simple_linearity_correction_task(recipe_run_id, arm_id, init_cryonirsp_constants_db, tmp_path):
|
|
191
|
+
constants_db = CryonirspConstantsDb(
|
|
192
|
+
ARM_ID=arm_id,
|
|
193
|
+
)
|
|
194
|
+
init_cryonirsp_constants_db(recipe_run_id, constants_db)
|
|
195
|
+
with LinearityCorrection(
|
|
196
|
+
recipe_run_id=recipe_run_id,
|
|
197
|
+
workflow_name="workflow_name",
|
|
198
|
+
workflow_version="workflow_version",
|
|
199
|
+
) as task:
|
|
200
|
+
task.scratch = WorkflowFileSystem(recipe_run_id=recipe_run_id, scratch_base_path=tmp_path)
|
|
201
|
+
|
|
202
|
+
yield task
|
|
203
|
+
|
|
204
|
+
task._purge()
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
@dataclass
|
|
208
|
+
class DummyRampFitsAccess:
|
|
209
|
+
"""Just a class that has the one property that is checked during ramp validation."""
|
|
210
|
+
|
|
211
|
+
num_frames_in_ramp: int
|
|
212
|
+
ip_task_type: str = "TASK"
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
@pytest.mark.parametrize(
|
|
216
|
+
"arm_id",
|
|
217
|
+
[pytest.param("CI", id="CI"), pytest.param("SP", id="SP")],
|
|
218
|
+
)
|
|
219
|
+
@pytest.mark.parametrize(
|
|
220
|
+
"ramp_list, valid, message",
|
|
221
|
+
[
|
|
222
|
+
pytest.param(
|
|
223
|
+
[
|
|
224
|
+
DummyRampFitsAccess(num_frames_in_ramp=2),
|
|
225
|
+
DummyRampFitsAccess(num_frames_in_ramp=3),
|
|
226
|
+
],
|
|
227
|
+
False,
|
|
228
|
+
"Not all frames have the same FRAMES_IN_RAMP value. Set is {2, 3}. Ramp is task TASK. Skipping ramp.",
|
|
229
|
+
id="num_frames_mismatch_actual_frames",
|
|
230
|
+
),
|
|
231
|
+
pytest.param(
|
|
232
|
+
[
|
|
233
|
+
DummyRampFitsAccess(num_frames_in_ramp=8),
|
|
234
|
+
],
|
|
235
|
+
False,
|
|
236
|
+
"Missing some ramp frames. Expected 8 from header value, but only have 1. Ramp is task TASK. Skipping ramp.",
|
|
237
|
+
id="num_frames_in_set_mismatch",
|
|
238
|
+
),
|
|
239
|
+
],
|
|
240
|
+
)
|
|
241
|
+
def test_is_ramp_valid(simple_linearity_correction_task, ramp_list, valid, message, caplog):
|
|
242
|
+
logger.add(caplog.handler)
|
|
243
|
+
assert simple_linearity_correction_task.is_ramp_valid(ramp_list) is valid
|
|
244
|
+
if not valid:
|
|
245
|
+
assert re.search(message, caplog.text)
|
|
File without changes
|
{dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/.pre-commit-config.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/bitbucket-pipelines.yml
RENAMED
|
File without changes
|
|
File without changes
|
{dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/check_changelog_updated.sh
RENAMED
|
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
|
|
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
|
{dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/docs/bad_pixel_calibration.rst
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/docs/l0_to_l1_cryonirsp_ci.rst
RENAMED
|
File without changes
|
|
File without changes
|
{dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/docs/l0_to_l1_cryonirsp_sp.rst
RENAMED
|
File without changes
|
{dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/docs/linearization.rst
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/docs/requirements_table.rst
RENAMED
|
File without changes
|
{dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/docs/scientific_changelog.rst
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dkist_processing_cryonirsp-1.1.0 → dkist_processing_cryonirsp-1.1.1}/towncrier_science.toml
RENAMED
|
File without changes
|