dkist-processing-dlnirsp 0.32.2__tar.gz → 0.32.4__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.
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/CHANGELOG.rst +18 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/PKG-INFO +42 -41
- dkist_processing_dlnirsp-0.32.4/dkist_processing_dlnirsp/models/fits_access.py +32 -0
- dkist_processing_dlnirsp-0.32.4/dkist_processing_dlnirsp/parsers/dlnirsp_l0_fits_access.py +99 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/parsers/task.py +2 -6
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/parsers/time.py +2 -1
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/parsers/wavelength.py +5 -1
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tasks/linearity_correction.py +55 -24
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tasks/parse.py +21 -12
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tasks/science.py +7 -5
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tasks/write_l1.py +5 -4
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tests/conftest.py +13 -5
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tests/local_trial_workflows/local_trial_dev_mockers.py +18 -16
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tests/local_trial_workflows/local_trial_helpers.py +2 -1
- dkist_processing_dlnirsp-0.32.4/dkist_processing_dlnirsp/tests/test_dlnirsp_fits_access.py +129 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tests/test_linearity_correction.py +120 -21
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tests/test_parse.py +3 -2
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tests/test_science.py +7 -6
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp.egg-info/PKG-INFO +42 -41
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp.egg-info/SOURCES.txt +1 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp.egg-info/requires.txt +41 -40
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/pyproject.toml +43 -42
- dkist_processing_dlnirsp-0.32.2/dkist_processing_dlnirsp/parsers/dlnirsp_l0_fits_access.py +0 -87
- dkist_processing_dlnirsp-0.32.2/dkist_processing_dlnirsp/tests/test_dlnirsp_fits_access.py +0 -76
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/.gitignore +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/.pre-commit-config.yaml +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/.readthedocs.yml +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/.snyk +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/README.rst +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/SCIENCE_CHANGELOG.rst +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/bitbucket-pipelines.yml +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/changelog/.gitempty +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/__init__.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/config.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/dev_scripts/__init__.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/dev_scripts/test_slitbeam_group_assignment.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/models/__init__.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/models/constants.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/models/parameters.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/models/tags.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/models/task_name.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/parsers/__init__.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/parsers/dlnirsp_l1_fits_acess.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/parsers/mosaic.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/parsers/wcs_corrections.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tasks/__init__.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tasks/assemble_movie.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tasks/bad_pixel_map.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tasks/dark.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tasks/dlnirsp_base.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tasks/geometric.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tasks/ifu_drift.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tasks/instrument_polarization.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tasks/l1_output_data.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tasks/lamp.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tasks/make_movie_frames.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tasks/mixin/__init__.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tasks/mixin/corrections.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tasks/mixin/group_id.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tasks/quality_metrics.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tasks/solar.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tasks/wavelength_calibration.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tests/__init__.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tests/local_trial_workflows/__init__.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tests/local_trial_workflows/l0_linearize_only.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tests/local_trial_workflows/l0_polcals_as_science.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tests/local_trial_workflows/l0_solar_gain_as_science.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tests/local_trial_workflows/l0_to_l1.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tests/local_trial_workflows/translate_files.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tests/test_assemble_movie.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tests/test_assemble_quality.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tests/test_bad_pixel_map.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tests/test_corrections.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tests/test_dark.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tests/test_dlnirsp_base.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tests/test_dlnirsp_constants.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tests/test_geometric.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tests/test_group_id.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tests/test_ifu_drift.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tests/test_instrument_polarization_calibration.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tests/test_lamp.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tests/test_make_movie_frames.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tests/test_parameters.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tests/test_quality.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tests/test_solar.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tests/test_trial_create_quality_report.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tests/test_wavelength_calibration.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tests/test_workflows.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/tests/test_write_l1.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/workflows/__init__.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/workflows/l0_processing.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp/workflows/trial_workflow.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp.egg-info/dependency_links.txt +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp.egg-info/entry_points.txt +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/dkist_processing_dlnirsp.egg-info/top_level.txt +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/docs/Makefile +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/docs/bad_pixel_calibration.rst +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/docs/changelog.rst +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/docs/conf.py +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/docs/gain.rst +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/docs/geometric.rst +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/docs/ifu_drift.rst +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/docs/index.rst +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/docs/l0_to_l1_dlnirsp.rst +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/docs/l0_to_l1_dlnirsp_full-trial.rst +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/docs/landing_page.rst +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/docs/linearization.rst +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/docs/make.bat +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/docs/polarization_calibration.rst +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/docs/requirements_table.rst +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/docs/science_calibration.rst +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/docs/scientific_changelog.rst +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/docs/wavelength_calibration.rst +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/licenses/LICENSE.rst +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/science_towncrier.sh +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/setup.cfg +0 -0
- {dkist_processing_dlnirsp-0.32.2 → dkist_processing_dlnirsp-0.32.4}/towncrier_science.toml +0 -0
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
v0.32.4 (2025-12-01)
|
|
2
|
+
====================
|
|
3
|
+
|
|
4
|
+
Bugfixes
|
|
5
|
+
--------
|
|
6
|
+
|
|
7
|
+
- Fix bug in how the "SubFrame" camera readout mode has its ramps parsed and linearized. (`#115 <https://bitbucket.org/dkistdc/dkist-processing-dlnirsp/pull-requests/115>`__)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
v0.32.3 (2025-11-04)
|
|
11
|
+
====================
|
|
12
|
+
|
|
13
|
+
Misc
|
|
14
|
+
----
|
|
15
|
+
|
|
16
|
+
- Replace metadata key strings with members of the string enum DlnirspMetadataKey. (`#111 <https://bitbucket.org/dkistdc/dkist-processing-dlnirsp/pull-requests/111>`__)
|
|
17
|
+
|
|
18
|
+
|
|
1
19
|
v0.32.2 (2025-11-03)
|
|
2
20
|
====================
|
|
3
21
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dkist-processing-dlnirsp
|
|
3
|
-
Version: 0.32.
|
|
3
|
+
Version: 0.32.4
|
|
4
4
|
Summary: Science processing code for the DLNIRSP instrument on DKIST
|
|
5
5
|
Author-email: NSO / AURA <dkistdc@nso.edu>
|
|
6
6
|
License: BSD-3-Clause
|
|
@@ -76,6 +76,7 @@ Requires-Dist: Flask-Login==0.6.3; extra == "frozen"
|
|
|
76
76
|
Requires-Dist: Flask-SQLAlchemy==2.5.1; extra == "frozen"
|
|
77
77
|
Requires-Dist: Flask-Session==0.5.0; extra == "frozen"
|
|
78
78
|
Requires-Dist: Flask-WTF==1.2.2; extra == "frozen"
|
|
79
|
+
Requires-Dist: ImageIO==2.37.2; extra == "frozen"
|
|
79
80
|
Requires-Dist: Jinja2==3.1.6; extra == "frozen"
|
|
80
81
|
Requires-Dist: Mako==1.3.10; extra == "frozen"
|
|
81
82
|
Requires-Dist: MarkupSafe==3.0.3; extra == "frozen"
|
|
@@ -93,44 +94,44 @@ Requires-Dist: aiohappyeyeballs==2.6.1; extra == "frozen"
|
|
|
93
94
|
Requires-Dist: aiohttp==3.13.2; extra == "frozen"
|
|
94
95
|
Requires-Dist: aiosignal==1.4.0; extra == "frozen"
|
|
95
96
|
Requires-Dist: aiosmtplib==5.0.0; extra == "frozen"
|
|
96
|
-
Requires-Dist: alembic==1.17.
|
|
97
|
+
Requires-Dist: alembic==1.17.2; extra == "frozen"
|
|
97
98
|
Requires-Dist: amqp==5.3.1; extra == "frozen"
|
|
98
99
|
Requires-Dist: annotated-types==0.7.0; extra == "frozen"
|
|
99
|
-
Requires-Dist: anyio==4.
|
|
100
|
+
Requires-Dist: anyio==4.12.0; extra == "frozen"
|
|
100
101
|
Requires-Dist: apache-airflow==2.11.0; extra == "frozen"
|
|
101
|
-
Requires-Dist: apache-airflow-providers-celery==3.
|
|
102
|
-
Requires-Dist: apache-airflow-providers-common-compat==1.
|
|
103
|
-
Requires-Dist: apache-airflow-providers-common-io==1.
|
|
104
|
-
Requires-Dist: apache-airflow-providers-common-sql==1.
|
|
102
|
+
Requires-Dist: apache-airflow-providers-celery==3.13.1; extra == "frozen"
|
|
103
|
+
Requires-Dist: apache-airflow-providers-common-compat==1.10.0; extra == "frozen"
|
|
104
|
+
Requires-Dist: apache-airflow-providers-common-io==1.7.0; extra == "frozen"
|
|
105
|
+
Requires-Dist: apache-airflow-providers-common-sql==1.29.0; extra == "frozen"
|
|
105
106
|
Requires-Dist: apache-airflow-providers-fab==1.5.3; extra == "frozen"
|
|
106
|
-
Requires-Dist: apache-airflow-providers-ftp==3.
|
|
107
|
-
Requires-Dist: apache-airflow-providers-http==5.
|
|
108
|
-
Requires-Dist: apache-airflow-providers-imap==3.
|
|
109
|
-
Requires-Dist: apache-airflow-providers-postgres==6.
|
|
110
|
-
Requires-Dist: apache-airflow-providers-smtp==2.
|
|
111
|
-
Requires-Dist: apache-airflow-providers-sqlite==4.
|
|
112
|
-
Requires-Dist: apispec==6.
|
|
107
|
+
Requires-Dist: apache-airflow-providers-ftp==3.14.0; extra == "frozen"
|
|
108
|
+
Requires-Dist: apache-airflow-providers-http==5.6.0; extra == "frozen"
|
|
109
|
+
Requires-Dist: apache-airflow-providers-imap==3.10.0; extra == "frozen"
|
|
110
|
+
Requires-Dist: apache-airflow-providers-postgres==6.5.0; extra == "frozen"
|
|
111
|
+
Requires-Dist: apache-airflow-providers-smtp==2.4.0; extra == "frozen"
|
|
112
|
+
Requires-Dist: apache-airflow-providers-sqlite==4.2.0; extra == "frozen"
|
|
113
|
+
Requires-Dist: apispec==6.9.0; extra == "frozen"
|
|
113
114
|
Requires-Dist: argcomplete==3.6.3; extra == "frozen"
|
|
114
115
|
Requires-Dist: asdf==3.5.0; extra == "frozen"
|
|
115
116
|
Requires-Dist: asdf_standard==1.4.0; extra == "frozen"
|
|
116
117
|
Requires-Dist: asdf_transform_schemas==0.6.0; extra == "frozen"
|
|
117
|
-
Requires-Dist: asgiref==3.
|
|
118
|
-
Requires-Dist: asteval==1.0.
|
|
118
|
+
Requires-Dist: asgiref==3.11.0; extra == "frozen"
|
|
119
|
+
Requires-Dist: asteval==1.0.7; extra == "frozen"
|
|
119
120
|
Requires-Dist: astropy==7.0.2; extra == "frozen"
|
|
120
|
-
Requires-Dist: astropy-iers-data==0.2025.
|
|
121
|
-
Requires-Dist: asyncpg==0.
|
|
121
|
+
Requires-Dist: astropy-iers-data==0.2025.12.1.0.45.12; extra == "frozen"
|
|
122
|
+
Requires-Dist: asyncpg==0.31.0; extra == "frozen"
|
|
122
123
|
Requires-Dist: attrs==25.4.0; extra == "frozen"
|
|
123
124
|
Requires-Dist: babel==2.17.0; extra == "frozen"
|
|
124
|
-
Requires-Dist: billiard==4.2.
|
|
125
|
+
Requires-Dist: billiard==4.2.4; extra == "frozen"
|
|
125
126
|
Requires-Dist: blinker==1.9.0; extra == "frozen"
|
|
126
|
-
Requires-Dist: boto3==1.
|
|
127
|
-
Requires-Dist: botocore==1.
|
|
127
|
+
Requires-Dist: boto3==1.42.0; extra == "frozen"
|
|
128
|
+
Requires-Dist: botocore==1.41.6; extra == "frozen"
|
|
128
129
|
Requires-Dist: cachelib==0.13.0; extra == "frozen"
|
|
129
|
-
Requires-Dist: celery==5.
|
|
130
|
-
Requires-Dist: certifi==2025.
|
|
130
|
+
Requires-Dist: celery==5.6.0; extra == "frozen"
|
|
131
|
+
Requires-Dist: certifi==2025.11.12; extra == "frozen"
|
|
131
132
|
Requires-Dist: cffi==2.0.0; extra == "frozen"
|
|
132
133
|
Requires-Dist: charset-normalizer==3.4.4; extra == "frozen"
|
|
133
|
-
Requires-Dist: click==8.3.
|
|
134
|
+
Requires-Dist: click==8.3.1; extra == "frozen"
|
|
134
135
|
Requires-Dist: click-didyoumean==0.3.1; extra == "frozen"
|
|
135
136
|
Requires-Dist: click-plugins==1.1.1.2; extra == "frozen"
|
|
136
137
|
Requires-Dist: click-repl==0.3.0; extra == "frozen"
|
|
@@ -149,7 +150,7 @@ Requires-Dist: dill==0.4.0; extra == "frozen"
|
|
|
149
150
|
Requires-Dist: dkist-header-validator==5.2.1; extra == "frozen"
|
|
150
151
|
Requires-Dist: dkist-processing-common==11.8.0; extra == "frozen"
|
|
151
152
|
Requires-Dist: dkist-processing-core==6.0.0; extra == "frozen"
|
|
152
|
-
Requires-Dist: dkist-processing-dlnirsp==0.32.
|
|
153
|
+
Requires-Dist: dkist-processing-dlnirsp==0.32.4; extra == "frozen"
|
|
153
154
|
Requires-Dist: dkist-processing-math==2.2.1; extra == "frozen"
|
|
154
155
|
Requires-Dist: dkist-processing-pac==3.1.1; extra == "frozen"
|
|
155
156
|
Requires-Dist: dkist-service-configuration==4.1.7; extra == "frozen"
|
|
@@ -157,14 +158,15 @@ Requires-Dist: dkist-spectral-lines==3.0.0; extra == "frozen"
|
|
|
157
158
|
Requires-Dist: dkist_fits_specifications==4.17.0; extra == "frozen"
|
|
158
159
|
Requires-Dist: dnspython==2.8.0; extra == "frozen"
|
|
159
160
|
Requires-Dist: email-validator==2.3.0; extra == "frozen"
|
|
161
|
+
Requires-Dist: exceptiongroup==1.3.1; extra == "frozen"
|
|
160
162
|
Requires-Dist: fastjsonschema==2.21.2; extra == "frozen"
|
|
161
163
|
Requires-Dist: flower==2.0.1; extra == "frozen"
|
|
162
|
-
Requires-Dist: fonttools==4.
|
|
164
|
+
Requires-Dist: fonttools==4.61.0; extra == "frozen"
|
|
163
165
|
Requires-Dist: frozenlist==1.8.0; extra == "frozen"
|
|
164
166
|
Requires-Dist: fsspec==2025.10.0; extra == "frozen"
|
|
165
167
|
Requires-Dist: globus-sdk==3.65.0; extra == "frozen"
|
|
166
|
-
Requires-Dist: google-re2==1.1.
|
|
167
|
-
Requires-Dist: googleapis-common-protos==1.
|
|
168
|
+
Requires-Dist: google-re2==1.1.20251105; extra == "frozen"
|
|
169
|
+
Requires-Dist: googleapis-common-protos==1.72.0; extra == "frozen"
|
|
168
170
|
Requires-Dist: gqlclient==1.2.3; extra == "frozen"
|
|
169
171
|
Requires-Dist: greenlet==3.2.4; extra == "frozen"
|
|
170
172
|
Requires-Dist: grpcio==1.76.0; extra == "frozen"
|
|
@@ -174,7 +176,6 @@ Requires-Dist: httpcore==1.0.9; extra == "frozen"
|
|
|
174
176
|
Requires-Dist: httpx==0.28.1; extra == "frozen"
|
|
175
177
|
Requires-Dist: humanize==4.14.0; extra == "frozen"
|
|
176
178
|
Requires-Dist: idna==3.11; extra == "frozen"
|
|
177
|
-
Requires-Dist: imageio==2.37.0; extra == "frozen"
|
|
178
179
|
Requires-Dist: imageio-ffmpeg==0.6.0; extra == "frozen"
|
|
179
180
|
Requires-Dist: importlib_metadata==8.7.0; extra == "frozen"
|
|
180
181
|
Requires-Dist: inflection==0.5.1; extra == "frozen"
|
|
@@ -184,7 +185,7 @@ Requires-Dist: jsonschema==4.25.1; extra == "frozen"
|
|
|
184
185
|
Requires-Dist: jsonschema-specifications==2025.9.1; extra == "frozen"
|
|
185
186
|
Requires-Dist: jupyter_core==5.9.1; extra == "frozen"
|
|
186
187
|
Requires-Dist: kiwisolver==1.4.9; extra == "frozen"
|
|
187
|
-
Requires-Dist: kombu==5.6.
|
|
188
|
+
Requires-Dist: kombu==5.6.1; extra == "frozen"
|
|
188
189
|
Requires-Dist: lazy-object-proxy==1.12.0; extra == "frozen"
|
|
189
190
|
Requires-Dist: lazy_loader==0.4; extra == "frozen"
|
|
190
191
|
Requires-Dist: limits==5.6.0; extra == "frozen"
|
|
@@ -205,7 +206,7 @@ Requires-Dist: more-itertools==10.8.0; extra == "frozen"
|
|
|
205
206
|
Requires-Dist: moviepy==2.1.2; extra == "frozen"
|
|
206
207
|
Requires-Dist: multidict==6.7.0; extra == "frozen"
|
|
207
208
|
Requires-Dist: nbformat==5.10.4; extra == "frozen"
|
|
208
|
-
Requires-Dist: networkx==3.
|
|
209
|
+
Requires-Dist: networkx==3.6; extra == "frozen"
|
|
209
210
|
Requires-Dist: numba==0.61.2; extra == "frozen"
|
|
210
211
|
Requires-Dist: numpy==2.2.5; extra == "frozen"
|
|
211
212
|
Requires-Dist: object-clerk==1.0.0; extra == "frozen"
|
|
@@ -251,13 +252,13 @@ Requires-Dist: proglog==0.1.12; extra == "frozen"
|
|
|
251
252
|
Requires-Dist: prometheus_client==0.23.1; extra == "frozen"
|
|
252
253
|
Requires-Dist: prompt_toolkit==3.0.52; extra == "frozen"
|
|
253
254
|
Requires-Dist: propcache==0.4.1; extra == "frozen"
|
|
254
|
-
Requires-Dist: protobuf==6.33.
|
|
255
|
+
Requires-Dist: protobuf==6.33.1; extra == "frozen"
|
|
255
256
|
Requires-Dist: psutil==7.1.3; extra == "frozen"
|
|
256
257
|
Requires-Dist: psycopg2-binary==2.9.11; extra == "frozen"
|
|
257
258
|
Requires-Dist: pycparser==2.23; extra == "frozen"
|
|
258
|
-
Requires-Dist: pydantic==2.12.
|
|
259
|
-
Requires-Dist: pydantic-settings==2.
|
|
260
|
-
Requires-Dist: pydantic_core==2.41.
|
|
259
|
+
Requires-Dist: pydantic==2.12.5; extra == "frozen"
|
|
260
|
+
Requires-Dist: pydantic-settings==2.12.0; extra == "frozen"
|
|
261
|
+
Requires-Dist: pydantic_core==2.41.5; extra == "frozen"
|
|
261
262
|
Requires-Dist: pyerfa==2.0.1.5; extra == "frozen"
|
|
262
263
|
Requires-Dist: pyparsing==3.2.5; extra == "frozen"
|
|
263
264
|
Requires-Dist: python-daemon==3.1.2; extra == "frozen"
|
|
@@ -273,17 +274,16 @@ Requires-Dist: requests-toolbelt==1.0.0; extra == "frozen"
|
|
|
273
274
|
Requires-Dist: rfc3339-validator==0.1.4; extra == "frozen"
|
|
274
275
|
Requires-Dist: rich==13.9.4; extra == "frozen"
|
|
275
276
|
Requires-Dist: rich-argparse==1.7.2; extra == "frozen"
|
|
276
|
-
Requires-Dist: rpds-py==0.
|
|
277
|
-
Requires-Dist: s3transfer==0.
|
|
277
|
+
Requires-Dist: rpds-py==0.30.0; extra == "frozen"
|
|
278
|
+
Requires-Dist: s3transfer==0.16.0; extra == "frozen"
|
|
278
279
|
Requires-Dist: scikit-image==0.25.2; extra == "frozen"
|
|
279
280
|
Requires-Dist: scipy==1.15.3; extra == "frozen"
|
|
280
281
|
Requires-Dist: semantic-version==2.10.0; extra == "frozen"
|
|
281
282
|
Requires-Dist: setproctitle==1.3.7; extra == "frozen"
|
|
282
283
|
Requires-Dist: six==1.17.0; extra == "frozen"
|
|
283
|
-
Requires-Dist: sniffio==1.3.1; extra == "frozen"
|
|
284
284
|
Requires-Dist: solar-wavelength-calibration==1.0.1; extra == "frozen"
|
|
285
285
|
Requires-Dist: sqids==0.5.1; extra == "frozen"
|
|
286
|
-
Requires-Dist: sqlparse==0.5.
|
|
286
|
+
Requires-Dist: sqlparse==0.5.4; extra == "frozen"
|
|
287
287
|
Requires-Dist: sunpy==6.1.1; extra == "frozen"
|
|
288
288
|
Requires-Dist: tabulate==0.9.0; extra == "frozen"
|
|
289
289
|
Requires-Dist: talus==1.3.4; extra == "frozen"
|
|
@@ -297,16 +297,17 @@ Requires-Dist: traitlets==5.14.3; extra == "frozen"
|
|
|
297
297
|
Requires-Dist: typing-inspection==0.4.2; extra == "frozen"
|
|
298
298
|
Requires-Dist: typing_extensions==4.15.0; extra == "frozen"
|
|
299
299
|
Requires-Dist: tzdata==2025.2; extra == "frozen"
|
|
300
|
+
Requires-Dist: tzlocal==5.3.1; extra == "frozen"
|
|
300
301
|
Requires-Dist: uc-micro-py==1.0.3; extra == "frozen"
|
|
301
302
|
Requires-Dist: uncertainties==3.2.3; extra == "frozen"
|
|
302
|
-
Requires-Dist: universal_pathlib==0.3.
|
|
303
|
+
Requires-Dist: universal_pathlib==0.3.6; extra == "frozen"
|
|
303
304
|
Requires-Dist: urllib3==2.5.0; extra == "frozen"
|
|
304
305
|
Requires-Dist: vine==5.1.0; extra == "frozen"
|
|
305
306
|
Requires-Dist: voluptuous==0.15.2; extra == "frozen"
|
|
306
307
|
Requires-Dist: wcwidth==0.2.14; extra == "frozen"
|
|
307
308
|
Requires-Dist: wirerope==1.0.0; extra == "frozen"
|
|
308
309
|
Requires-Dist: wrapt==1.17.3; extra == "frozen"
|
|
309
|
-
Requires-Dist: yamale==6.
|
|
310
|
+
Requires-Dist: yamale==6.1.0; extra == "frozen"
|
|
310
311
|
Requires-Dist: yarl==1.22.0; extra == "frozen"
|
|
311
312
|
Requires-Dist: zipp==3.23.0; extra == "frozen"
|
|
312
313
|
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"""DLNIRSP control of FITS key names and values."""
|
|
2
|
+
|
|
3
|
+
from enum import StrEnum
|
|
4
|
+
|
|
5
|
+
from dkist_processing_common.models.fits_access import MetadataKey
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class DlnirspMetadataKey(StrEnum):
|
|
9
|
+
"""Controlled list of names for FITS metadata header keys."""
|
|
10
|
+
|
|
11
|
+
crpix_1 = "CRPIX1"
|
|
12
|
+
crpix_2 = "CRPIX2"
|
|
13
|
+
modulator_spin_mode = "DLMOD"
|
|
14
|
+
camera_readout_mode = "DLCAMSMD"
|
|
15
|
+
num_frames_in_ramp = "DLCAMNS"
|
|
16
|
+
current_frame_in_ramp = "DLCAMCUR"
|
|
17
|
+
arm_id = "DLARMID"
|
|
18
|
+
camera_sample_sequence = "DLCAMSSQ"
|
|
19
|
+
polarimeter_mode = "DLPOLMD"
|
|
20
|
+
number_of_modulator_states = "DLNUMST"
|
|
21
|
+
modulator_state = "DLSTNUM"
|
|
22
|
+
num_mosaic_repeats = "DLMOSNRP"
|
|
23
|
+
mosaic_num = "DLCURMOS"
|
|
24
|
+
num_X_tiles = "DLNSSTPX"
|
|
25
|
+
X_tile_num = "DLCSTPX"
|
|
26
|
+
num_Y_tiles = "DLNSSTPY"
|
|
27
|
+
Y_tile_num = "DLCSTPY"
|
|
28
|
+
num_dither_steps = "DLDMODE"
|
|
29
|
+
dither_step = "DLCURSTP"
|
|
30
|
+
arm_position_mm = "DLARMPS"
|
|
31
|
+
grating_position_deg = "DLGRTAN"
|
|
32
|
+
grating_constant_inverse_mm = "DLGRTCN"
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"""DLNIRSP FitsAccess classes for raw and linearized data."""
|
|
2
|
+
|
|
3
|
+
from astropy.io import fits
|
|
4
|
+
from dkist_processing_common.parsers.l0_fits_access import L0FitsAccess
|
|
5
|
+
|
|
6
|
+
from dkist_processing_dlnirsp.models.fits_access import DlnirspMetadataKey
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class DlnirspRampFitsAccess(L0FitsAccess):
|
|
10
|
+
"""
|
|
11
|
+
Class to provide easy access to L0 headers for non-linearized (raw) DLNIRSP data.
|
|
12
|
+
|
|
13
|
+
i.e. instead of <DlnirspL0FitsAccess>.header['weird_key'] this class lets us use <DlnirspL0FitsAccess>.nice_key instead
|
|
14
|
+
|
|
15
|
+
Parameters
|
|
16
|
+
----------
|
|
17
|
+
hdu :
|
|
18
|
+
Fits L0 header object
|
|
19
|
+
|
|
20
|
+
name : str
|
|
21
|
+
The name of the file that was loaded into this FitsAccess object
|
|
22
|
+
|
|
23
|
+
auto_squeeze : bool
|
|
24
|
+
When set to True, dimensions of length 1 will be removed from the array
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
def __init__(
|
|
28
|
+
self,
|
|
29
|
+
hdu: fits.ImageHDU | fits.PrimaryHDU | fits.CompImageHDU,
|
|
30
|
+
name: str | None = None,
|
|
31
|
+
auto_squeeze: bool = True,
|
|
32
|
+
):
|
|
33
|
+
super().__init__(hdu=hdu, name=name, auto_squeeze=auto_squeeze)
|
|
34
|
+
|
|
35
|
+
self.modulator_spin_mode: str = self.header[DlnirspMetadataKey.modulator_spin_mode]
|
|
36
|
+
self.camera_readout_mode: str = self.header.get(
|
|
37
|
+
DlnirspMetadataKey.camera_readout_mode, "DEFAULT_VISIBLE_CAMERA"
|
|
38
|
+
)
|
|
39
|
+
self.num_frames_in_ramp: int = self.header.get(DlnirspMetadataKey.num_frames_in_ramp, -99)
|
|
40
|
+
self.current_frame_in_ramp: int = self.header.get(
|
|
41
|
+
DlnirspMetadataKey.current_frame_in_ramp, -88
|
|
42
|
+
)
|
|
43
|
+
self.arm_id: str = self.header[DlnirspMetadataKey.arm_id]
|
|
44
|
+
self.camera_sample_sequence: str = self.header.get(
|
|
45
|
+
DlnirspMetadataKey.camera_sample_sequence, "VISIBLE_CAMERA_SEQUENCE"
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class DlnirspL0FitsAccess(L0FitsAccess):
|
|
50
|
+
"""
|
|
51
|
+
Class to provide easy access to L0 headers for linearized (ready for processing) DLNIRSP data.
|
|
52
|
+
|
|
53
|
+
i.e. instead of <DlnirspL0FitsAccess>.header['weird_key'] this class lets us use <DlnirspL0FitsAccess>.nice_key instead
|
|
54
|
+
|
|
55
|
+
Parameters
|
|
56
|
+
----------
|
|
57
|
+
hdu :
|
|
58
|
+
Fits L0 header object
|
|
59
|
+
|
|
60
|
+
name : str
|
|
61
|
+
The name of the file that was loaded into this FitsAccess object
|
|
62
|
+
|
|
63
|
+
auto_squeeze : bool
|
|
64
|
+
When set to True, dimensions of length 1 will be removed from the array
|
|
65
|
+
"""
|
|
66
|
+
|
|
67
|
+
def __init__(
|
|
68
|
+
self,
|
|
69
|
+
hdu: fits.ImageHDU | fits.PrimaryHDU | fits.CompImageHDU,
|
|
70
|
+
name: str | None = None,
|
|
71
|
+
auto_squeeze: bool = True,
|
|
72
|
+
):
|
|
73
|
+
super().__init__(hdu=hdu, name=name, auto_squeeze=auto_squeeze)
|
|
74
|
+
|
|
75
|
+
self.crpix_1: float = self.header[DlnirspMetadataKey.crpix_1]
|
|
76
|
+
self.crpix_2: float = self.header[DlnirspMetadataKey.crpix_2]
|
|
77
|
+
self.arm_id: str = self.header[DlnirspMetadataKey.arm_id]
|
|
78
|
+
self.polarimeter_mode: str = self.header[DlnirspMetadataKey.polarimeter_mode]
|
|
79
|
+
self.number_of_modulator_states: int = self.header[
|
|
80
|
+
DlnirspMetadataKey.number_of_modulator_states
|
|
81
|
+
]
|
|
82
|
+
self.modulator_state: int = self.header[DlnirspMetadataKey.modulator_state]
|
|
83
|
+
self.num_mosaic_repeats: int = self.header[DlnirspMetadataKey.num_mosaic_repeats]
|
|
84
|
+
self.mosaic_num: int = self.header[DlnirspMetadataKey.mosaic_num]
|
|
85
|
+
self.num_X_tiles: int = self.header[DlnirspMetadataKey.num_X_tiles]
|
|
86
|
+
self.X_tile_num: int = self.header[DlnirspMetadataKey.X_tile_num]
|
|
87
|
+
self.num_Y_tiles: int = self.header[DlnirspMetadataKey.num_Y_tiles]
|
|
88
|
+
self.Y_tile_num: int = self.header[DlnirspMetadataKey.Y_tile_num]
|
|
89
|
+
# DLDMODE is a bool in the header; the number of dither steps is either 1 or 2, corresponding to dither
|
|
90
|
+
# mode being True or False, respectively
|
|
91
|
+
self.num_dither_steps: int = int(self.header[DlnirspMetadataKey.num_dither_steps]) + 1
|
|
92
|
+
# Same with DLCURSTP. We'll index the dither loop at 0 so `False` is the first step and `True` is the second
|
|
93
|
+
# Use `get` because this key only exists if DLDMODE is `True`
|
|
94
|
+
self.dither_step: int = int(self.header.get(DlnirspMetadataKey.dither_step, False))
|
|
95
|
+
self.arm_position_mm: float = self.header[DlnirspMetadataKey.arm_position_mm]
|
|
96
|
+
self.grating_position_deg: float = self.header[DlnirspMetadataKey.grating_position_deg]
|
|
97
|
+
self.grating_constant_inverse_mm: float = self.header[
|
|
98
|
+
DlnirspMetadataKey.grating_constant_inverse_mm
|
|
99
|
+
]
|
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
"""Custom parsers to identify task sub-groupings not captured by a single header key."""
|
|
2
2
|
|
|
3
|
-
from
|
|
4
|
-
|
|
5
|
-
from dkist_processing_common.models.flower_pot import SpilledDirt
|
|
3
|
+
from dkist_processing_common.models.fits_access import MetadataKey
|
|
6
4
|
from dkist_processing_common.models.tags import StemName
|
|
7
5
|
from dkist_processing_common.models.task_name import TaskName
|
|
8
|
-
from dkist_processing_common.parsers.near_bud import NearFloatBud
|
|
9
6
|
from dkist_processing_common.parsers.single_value_single_key_flower import (
|
|
10
7
|
SingleValueSingleKeyFlower,
|
|
11
8
|
)
|
|
12
|
-
from dkist_processing_common.parsers.unique_bud import UniqueBud
|
|
13
9
|
|
|
14
10
|
from dkist_processing_dlnirsp.parsers.dlnirsp_l0_fits_access import DlnirspL0FitsAccess
|
|
15
11
|
|
|
@@ -41,7 +37,7 @@ class DlnirspTaskTypeFlower(SingleValueSingleKeyFlower):
|
|
|
41
37
|
"""Flower to find the DLNIRSP task type."""
|
|
42
38
|
|
|
43
39
|
def __init__(self):
|
|
44
|
-
super().__init__(tag_stem_name=StemName.task.value, metadata_key=
|
|
40
|
+
super().__init__(tag_stem_name=StemName.task.value, metadata_key=MetadataKey.ip_task_type)
|
|
45
41
|
|
|
46
42
|
def setter(self, fits_obj: DlnirspL0FitsAccess):
|
|
47
43
|
"""
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from typing import Hashable
|
|
4
4
|
|
|
5
|
+
from dkist_processing_common.models.fits_access import MetadataKey
|
|
5
6
|
from dkist_processing_common.models.flower_pot import Stem
|
|
6
7
|
from dkist_processing_common.models.task_name import TaskName
|
|
7
8
|
from dkist_processing_common.parsers.unique_bud import TaskUniqueBud
|
|
@@ -17,7 +18,7 @@ class DLnirspSolarGainIpStartTimeBud(TaskUniqueBud):
|
|
|
17
18
|
def __init__(self):
|
|
18
19
|
super().__init__(
|
|
19
20
|
constant_name=DlnirspBudName.solar_gain_ip_start_time.value,
|
|
20
|
-
metadata_key=
|
|
21
|
+
metadata_key=MetadataKey.ip_start_time,
|
|
21
22
|
ip_task_types=TaskName.solar_gain.value,
|
|
22
23
|
task_type_parsing_function=parse_header_ip_task,
|
|
23
24
|
)
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"""Bud to get the wavelength."""
|
|
2
2
|
|
|
3
|
+
from dkist_processing_common.models.fits_access import MetadataKey
|
|
3
4
|
from dkist_processing_common.models.flower_pot import SpilledDirt
|
|
4
5
|
from dkist_processing_common.parsers.unique_bud import UniqueBud
|
|
5
6
|
|
|
@@ -11,7 +12,10 @@ class ObserveWavelengthBud(UniqueBud):
|
|
|
11
12
|
"""Bud to find the wavelength."""
|
|
12
13
|
|
|
13
14
|
def __init__(self):
|
|
14
|
-
super().__init__(
|
|
15
|
+
super().__init__(
|
|
16
|
+
constant_name=DlnirspBudName.wavelength.value,
|
|
17
|
+
metadata_key=MetadataKey.wavelength,
|
|
18
|
+
)
|
|
15
19
|
|
|
16
20
|
def setter(self, fits_obj: DlnirspL0FitsAccess):
|
|
17
21
|
"""
|
|
@@ -28,14 +28,32 @@ class LinearityCorrection(DlnirspTaskBase):
|
|
|
28
28
|
|
|
29
29
|
record_provenance = True
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
valid_camera_sequence_regex: re.Pattern = re.compile(
|
|
32
|
+
r"^(\d*subframe)?(?(1)|(?:\d*line,\d*read,?)+)(?:,\d*line)?$"
|
|
33
|
+
)
|
|
32
34
|
"""
|
|
33
|
-
regex pattern
|
|
35
|
+
regex pattern that defines all valid camera-sample sequences.
|
|
36
|
+
|
|
37
|
+
It must start with either "Xline,Yread", which can repeat any number of times, or "Xsubframe" which must be by itself.
|
|
38
|
+
Either of these sequences may be padded with ",Zline" reset frames.
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
uptheramp_coadd_regex: re.Pattern = re.compile(r"(\d*)line,(\d*)read")
|
|
42
|
+
"""
|
|
43
|
+
regex pattern used to parse line-read-line values for a single UpTheRamp coadd.
|
|
34
44
|
|
|
35
45
|
This is where we decide that camera sequences are one or more coadd sequences, where each coadd sequence is
|
|
36
46
|
"Xline,Yread". The total sequence may be padded with ",Zline" reset frames, which are not captured by this regex.
|
|
37
47
|
"""
|
|
38
48
|
|
|
49
|
+
subframe_sequence_regex: re.Pattern = re.compile(r"(\d*)subframe")
|
|
50
|
+
"""
|
|
51
|
+
regex pattern used to parse coadds in SubFrame mode
|
|
52
|
+
|
|
53
|
+
Simply looks for "Xsubframe" and captures the "X". The sequence may be padded with ",Zline" reset frames, which are
|
|
54
|
+
not captured by this regex.
|
|
55
|
+
"""
|
|
56
|
+
|
|
39
57
|
def run(self):
|
|
40
58
|
"""
|
|
41
59
|
Linearize IR camera frames or tag VIS camera frames as LINEARIZED.
|
|
@@ -110,17 +128,16 @@ class LinearityCorrection(DlnirspTaskBase):
|
|
|
110
128
|
)
|
|
111
129
|
num_coadds = len(coadd_sequence_nums_list)
|
|
112
130
|
|
|
113
|
-
line_read_line_indices = coadd_sequence_nums_list[0]
|
|
114
|
-
num_bias, num_read = line_read_line_indices[:2]
|
|
115
|
-
|
|
116
|
-
ndr_per_coadd = num_bias + num_read
|
|
117
|
-
|
|
118
131
|
# In `is_ramp_valid` we already confirmed that all NDRs have the same values and that they are one of the
|
|
119
132
|
# expected values
|
|
120
133
|
camera_readout_mode = ramp_obj_list[0].camera_readout_mode
|
|
121
134
|
modulator_spin_mode = ramp_obj_list[0].modulator_spin_mode
|
|
122
135
|
match camera_readout_mode:
|
|
123
136
|
case "UpTheRamp":
|
|
137
|
+
line_read_line_indices = coadd_sequence_nums_list[0]
|
|
138
|
+
num_bias, num_read = line_read_line_indices[:2]
|
|
139
|
+
ndr_per_coadd = num_bias + num_read
|
|
140
|
+
|
|
124
141
|
match modulator_spin_mode:
|
|
125
142
|
case "Continuous":
|
|
126
143
|
linearization_func = partial(
|
|
@@ -136,6 +153,11 @@ class LinearityCorrection(DlnirspTaskBase):
|
|
|
136
153
|
)
|
|
137
154
|
|
|
138
155
|
case "SubFrame":
|
|
156
|
+
# `self.valid_camera_sequence_regex`, along with `parse_camera_sample_sequence`, provides assurance that
|
|
157
|
+
# by the time we get here these assumptions are valid
|
|
158
|
+
num_bias = 0
|
|
159
|
+
num_read = 1
|
|
160
|
+
ndr_per_coadd = 1
|
|
139
161
|
linearization_func = self.linearize_subframe_coadd
|
|
140
162
|
|
|
141
163
|
coadd_stack = np.zeros((num_coadds, *ramp_obj_list[0].data.shape))
|
|
@@ -291,16 +313,25 @@ class LinearityCorrection(DlnirspTaskBase):
|
|
|
291
313
|
"3line,45read,3line,45read,2line"
|
|
292
314
|
`[[3, 45], [3, 45]]`
|
|
293
315
|
|
|
316
|
+
"4subframe,89line"
|
|
317
|
+
`[[1], [1], [1], [1]]`
|
|
318
|
+
|
|
294
319
|
Returns
|
|
295
320
|
-------
|
|
296
|
-
A list of lists. Top-level list contains an item for each coadd.
|
|
297
|
-
length 2. The numbers in these inner lists correspond to the number of bias and read frames in that coadd,
|
|
298
|
-
respectively.
|
|
321
|
+
A list of lists. Top-level list contains an item for each coadd. In UpTheRamp mode these items are themselves
|
|
322
|
+
lists of length 2. The numbers in these inner lists correspond to the number of bias and read frames in that coadd,
|
|
323
|
+
respectively. In SubFrame mode the inner lists will always be length 1 and should be equal to `[1]`.
|
|
299
324
|
"""
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
325
|
+
if "subframe" in camera_sample_sequence:
|
|
326
|
+
coadd_matches = self.subframe_sequence_regex.findall(camera_sample_sequence)
|
|
327
|
+
# `is_ramp_valid` ensures we only have a single match here
|
|
328
|
+
num_coadd = int(coadd_matches[0])
|
|
329
|
+
coadd_sequence_numbers = [[1]] * num_coadd
|
|
330
|
+
else:
|
|
331
|
+
coadd_matches = self.uptheramp_coadd_regex.findall(camera_sample_sequence)
|
|
332
|
+
coadd_sequence_numbers = [
|
|
333
|
+
[int(num) for num in coadd_match] for coadd_match in coadd_matches
|
|
334
|
+
]
|
|
304
335
|
|
|
305
336
|
return coadd_sequence_numbers
|
|
306
337
|
|
|
@@ -310,15 +341,15 @@ class LinearityCorrection(DlnirspTaskBase):
|
|
|
310
341
|
|
|
311
342
|
Current validity checks are:
|
|
312
343
|
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
344
|
+
#. All frames in the ramp have the same value for NUM_FRAMES_IN_RAMP
|
|
345
|
+
#. All frames in the ramp have the same value for CAMERA_READOUT_MODE
|
|
346
|
+
#. All frames in the ramp have the same value for MODULATOR_SPIN_MODE
|
|
347
|
+
#. The CAMERA_READOUT and MODULATOR_SPIN modes have expected values
|
|
348
|
+
#. The value of NUM_FRAMES_IN_RAMP equals the length of actual frames found
|
|
349
|
+
#. All frames in the ramp have the same value for CAMERA_SAMPLE_SEQUENCE
|
|
350
|
+
#. The camera sample sequence has the expected form (`valid_camera_sequence_regex`)
|
|
351
|
+
#. All coadds in the ramp have the same camera sample sequence
|
|
352
|
+
#. The ramp length is equal to the expected length from the camera sample sequence
|
|
322
353
|
|
|
323
354
|
If a ramp is not valid then the reason is logged and `False` is returned.
|
|
324
355
|
"""
|
|
@@ -382,7 +413,7 @@ class LinearityCorrection(DlnirspTaskBase):
|
|
|
382
413
|
return False
|
|
383
414
|
|
|
384
415
|
camera_sample_sequence = camera_sample_sequence_set.pop()
|
|
385
|
-
if
|
|
416
|
+
if not self.valid_camera_sequence_regex.search(camera_sample_sequence):
|
|
386
417
|
logger.info(
|
|
387
418
|
f"Malformed camera sample sequence: '{camera_sample_sequence}'. "
|
|
388
419
|
f"{common_status_str}"
|