dkist-processing-cryonirsp 0.0.76__tar.gz → 0.0.77rc1__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_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/PKG-INFO +1 -1
- dkist_processing_cryonirsp-0.0.77rc1/changelog/110.feature.rst +6 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/models/constants.py +36 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/models/parameters.py +36 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/models/tags.py +10 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/models/task_name.py +2 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/parsers/cryonirsp_l0_fits_access.py +12 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/parsers/time.py +31 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tasks/__init__.py +1 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tasks/mixin/corrections.py +2 -2
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tasks/parse.py +34 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tasks/quality_metrics.py +1 -1
- dkist_processing_cryonirsp-0.0.77rc1/dkist_processing_cryonirsp/tasks/sp_dispersion_axis_correction.py +484 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tasks/sp_solar_gain.py +5 -2
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tasks/write_l1.py +32 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tests/conftest.py +22 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tests/header_models.py +18 -1
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tests/local_trial_workflows/l0_to_l1.py +26 -1
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tests/local_trial_workflows/local_trial_helpers.py +29 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tests/test_parameters.py +8 -5
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tests/test_parse.py +1 -1
- dkist_processing_cryonirsp-0.0.77rc1/dkist_processing_cryonirsp/tests/test_sp_dispersion_axis_correction.py +155 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tests/test_write_l1.py +41 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/workflows/sp_l0_processing.py +6 -1
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/workflows/trial_workflows.py +5 -1
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp.egg-info/PKG-INFO +1 -1
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp.egg-info/SOURCES.txt +3 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/.gitignore +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/.pre-commit-config.yaml +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/.readthedocs.yml +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/CHANGELOG.rst +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/README.rst +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/SCIENCE_CHANGELOG.rst +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/bitbucket-pipelines.yml +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/changelog/.gitempty +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/check_changelog_updated.sh +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/__init__.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/config.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/models/__init__.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/models/exposure_conditions.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/parsers/__init__.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/parsers/cryonirsp_l1_fits_access.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/parsers/exposure_conditions.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/parsers/map_repeats.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/parsers/measurements.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/parsers/modstates.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/parsers/optical_density_filters.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/parsers/polarimetric_check.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/parsers/scan_step.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/parsers/wavelength.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tasks/assemble_movie.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tasks/bad_pixel_map.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tasks/beam_boundaries_base.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tasks/ci_beam_boundaries.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tasks/ci_science.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tasks/cryonirsp_base.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tasks/dark.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tasks/gain.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tasks/instrument_polarization.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tasks/l1_output_data.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tasks/linearity_correction.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tasks/make_movie_frames.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tasks/mixin/__init__.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tasks/mixin/beam_access.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tasks/mixin/intermediate_frame.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tasks/mixin/linearized_frame.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tasks/mixin/shift_measurements.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tasks/science_base.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tasks/sp_beam_boundaries.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tasks/sp_geometric.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tasks/sp_science.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tasks/trial_output_data.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tests/__init__.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tests/local_trial_workflows/__init__.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tests/local_trial_workflows/l0_cals_only.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tests/local_trial_workflows/linearize_only.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tests/test_assemble_movie.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tests/test_assemble_qualilty.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tests/test_bad_pixel_maps.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tests/test_ci_beam_boundaries.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tests/test_ci_science.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tests/test_corrections.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tests/test_cryo_base.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tests/test_cryo_constants.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tests/test_dark.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tests/test_gain.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tests/test_instrument_polarization.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tests/test_linearity_correction.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tests/test_make_movie_frames.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tests/test_quality.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tests/test_sp_beam_boundaries.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tests/test_sp_geometric.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tests/test_sp_make_movie_frames.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tests/test_sp_science.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tests/test_sp_solar.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tests/test_trial_create_quality_report.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tests/test_trial_output_data.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/tests/test_workflows.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/workflows/__init__.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp/workflows/ci_l0_processing.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp.egg-info/dependency_links.txt +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp.egg-info/requires.txt +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/dkist_processing_cryonirsp.egg-info/top_level.txt +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/docs/Makefile +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/docs/bad_pixel_calibration.rst +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/docs/beam_angle_calculation.rst +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/docs/beam_boundary_computation.rst +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/docs/changelog.rst +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/docs/ci_science_calibration.rst +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/docs/conf.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/docs/index.rst +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/docs/l0_to_l1_cryonirsp_ci-full-trial.rst +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/docs/l0_to_l1_cryonirsp_ci.rst +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/docs/l0_to_l1_cryonirsp_sp-full-trial.rst +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/docs/l0_to_l1_cryonirsp_sp.rst +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/docs/linearization.rst +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/docs/make.bat +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/docs/requirements.txt +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/docs/requirements_table.rst +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/docs/scientific_changelog.rst +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/docs/sp_science_calibration.rst +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/licenses/LICENSE.rst +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/pyproject.toml +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/science_towncrier.sh +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/setup.cfg +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/setup.py +0 -0
- {dkist_processing_cryonirsp-0.0.76 → dkist_processing_cryonirsp-0.0.77rc1}/towncrier_science.toml +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: dkist_processing_cryonirsp
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.77rc1
|
|
4
4
|
Summary: Science processing code for the Cryo-NIRSP instrument on DKIST
|
|
5
5
|
Home-page: https://bitbucket.org/dkistdc/dkist_processing_cryonirsp/src/main/
|
|
6
6
|
Author: NSO / AURA
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
Add calibration task to compute accurate header values for
|
|
2
|
+
CTYPE1, CUNIT1, CRPIX1, PV1_0, PV1_1, PV1_2, CRVAL1, CDELT1, PV1_2,
|
|
3
|
+
CTYPE1A, CUNIT1A, CRPIX1A, PV1_0A, PV1_1A, PV1_2A, CRVAL1A, CDELT1A, PV1_2A.
|
|
4
|
+
|
|
5
|
+
This is done by shifting the raw wavelength value (CRVAL1/A) to align with the FTS atlas, and
|
|
6
|
+
then fitting a model to infer and correct the values of the aforementioned headers.
|
|
@@ -18,6 +18,11 @@ class CryonirspBudName(Enum):
|
|
|
18
18
|
num_map_scans = "NUM_MAP_SCANS"
|
|
19
19
|
num_modstates = "NUM_MODSTATES"
|
|
20
20
|
wavelength = "WAVELENGTH"
|
|
21
|
+
wave_min = "WAVE_MIN"
|
|
22
|
+
wave_max = "WAVE_MAX"
|
|
23
|
+
grating_position_deg = "GRATING_POSITION_DEG"
|
|
24
|
+
grating_littrow_angle_deg = "GRATING_LITTROW_ANGLE_DEG"
|
|
25
|
+
grating_constant = "GRATING_CONSTANT"
|
|
21
26
|
camera_readout_mode = "CAM_READOUT_MODE"
|
|
22
27
|
num_meas = "NUM_MEAS"
|
|
23
28
|
time_obs_list = "TIME_OBS_LIST"
|
|
@@ -40,6 +45,7 @@ class CryonirspBudName(Enum):
|
|
|
40
45
|
roi_1_size_x = "ROI_1_SIZE_X"
|
|
41
46
|
roi_1_size_y = "ROI_1_SIZE_Y"
|
|
42
47
|
optical_density_filter_picky_bud = "OPTICAL_DENSITY_FILTER_PICKY_BUD"
|
|
48
|
+
solar_gain_ip_start_time = "SOLAR_GAIN_IP_START_TIME"
|
|
43
49
|
|
|
44
50
|
|
|
45
51
|
class CryonirspConstants(ConstantsBase):
|
|
@@ -73,6 +79,36 @@ class CryonirspConstants(ConstantsBase):
|
|
|
73
79
|
"""Wavelength."""
|
|
74
80
|
return self._db_dict[CryonirspBudName.wavelength.value]
|
|
75
81
|
|
|
82
|
+
@property
|
|
83
|
+
def wave_min(self) -> float:
|
|
84
|
+
"""Wavelength minimum."""
|
|
85
|
+
return self._db_dict[CryonirspBudName.wave_min.value]
|
|
86
|
+
|
|
87
|
+
@property
|
|
88
|
+
def wave_max(self) -> float:
|
|
89
|
+
"""Wavelength maximum."""
|
|
90
|
+
return self._db_dict[CryonirspBudName.wave_max.value]
|
|
91
|
+
|
|
92
|
+
@property
|
|
93
|
+
def solar_gain_ip_start_time(self) -> str:
|
|
94
|
+
"""Solar gain IP start time."""
|
|
95
|
+
return self._db_dict[CryonirspBudName.solar_gain_ip_start_time.value]
|
|
96
|
+
|
|
97
|
+
@property
|
|
98
|
+
def grating_position_deg(self) -> float:
|
|
99
|
+
"""Grating position angle (deg)."""
|
|
100
|
+
return self._db_dict[CryonirspBudName.grating_position_deg.value]
|
|
101
|
+
|
|
102
|
+
@property
|
|
103
|
+
def grating_littrow_angle_deg(self) -> float:
|
|
104
|
+
"""Grating littrow angle (deg)."""
|
|
105
|
+
return self._db_dict[CryonirspBudName.grating_littrow_angle_deg.value]
|
|
106
|
+
|
|
107
|
+
@property
|
|
108
|
+
def grating_constant(self) -> float:
|
|
109
|
+
"""Grating constant."""
|
|
110
|
+
return self._db_dict[CryonirspBudName.grating_constant.value]
|
|
111
|
+
|
|
76
112
|
@property
|
|
77
113
|
def camera_readout_mode(self) -> str:
|
|
78
114
|
"""Determine the readout mode of the camera."""
|
|
@@ -7,6 +7,7 @@ import numpy as np
|
|
|
7
7
|
from dkist_processing_common.models.parameters import ParameterArmIdMixin
|
|
8
8
|
from dkist_processing_common.models.parameters import ParameterBase
|
|
9
9
|
from dkist_processing_common.models.parameters import ParameterWavelengthMixin
|
|
10
|
+
from dkist_processing_common.tasks.mixin.input_dataset import InputDatasetMixin
|
|
10
11
|
|
|
11
12
|
from dkist_processing_cryonirsp.models.exposure_conditions import AllowableOpticalDensityFilterNames
|
|
12
13
|
|
|
@@ -258,3 +259,38 @@ class CryonirspParameters(ParameterBase, ParameterWavelengthMixin, ParameterArmI
|
|
|
258
259
|
"""Return the CryoNIRSP mirror scan recalibration constant."""
|
|
259
260
|
mirror_scan_recalibration_constant = 0.466 / 0.5
|
|
260
261
|
return mirror_scan_recalibration_constant
|
|
262
|
+
|
|
263
|
+
@property
|
|
264
|
+
def camera_mirror_focal_length_mm(self) -> u.Quantity:
|
|
265
|
+
"""Return the CryoNIRSP camera mirror focal length."""
|
|
266
|
+
return (
|
|
267
|
+
self._find_most_recent_past_value("cryonirsp_camera_mirror_focal_length_mm")
|
|
268
|
+
* u.millimeter
|
|
269
|
+
)
|
|
270
|
+
|
|
271
|
+
@property
|
|
272
|
+
def pixel_pitch_micron(self) -> u.Quantity:
|
|
273
|
+
"""Return the CryoNIRSP pixel pitch."""
|
|
274
|
+
return self._find_most_recent_past_value("cryonirsp_pixel_pitch_micron") * u.micron
|
|
275
|
+
|
|
276
|
+
@cached_property
|
|
277
|
+
def solar_atlas(self) -> np.ndarray:
|
|
278
|
+
"""Solar reference atlas.
|
|
279
|
+
|
|
280
|
+
Contains two arrays:
|
|
281
|
+
- wavelength in nanometers
|
|
282
|
+
- transmission at given wavelength
|
|
283
|
+
"""
|
|
284
|
+
param_dict = self._find_most_recent_past_value("cryonirsp_solar_atlas")
|
|
285
|
+
return self._load_param_value_from_numpy_save(param_dict)
|
|
286
|
+
|
|
287
|
+
@cached_property
|
|
288
|
+
def telluric_atlas(self) -> np.ndarray:
|
|
289
|
+
"""Telluric reference atlas.
|
|
290
|
+
|
|
291
|
+
Contains two arrays:
|
|
292
|
+
- wavelength in nanometers
|
|
293
|
+
- transmission at given wavelength
|
|
294
|
+
"""
|
|
295
|
+
param_dict = self._find_most_recent_past_value("cryonirsp_telluric_atlas")
|
|
296
|
+
return self._load_param_value_from_numpy_save(param_dict)
|
|
@@ -156,3 +156,13 @@ class CryonirspTag(Tag):
|
|
|
156
156
|
def task_bad_pixel_map(cls) -> str:
|
|
157
157
|
"""Tags intermediate bad pixel map objects."""
|
|
158
158
|
return cls.format_tag(StemName.task, CryonirspTaskName.bad_pixel_map.value)
|
|
159
|
+
|
|
160
|
+
@classmethod
|
|
161
|
+
def task_spectral_fit(cls) -> str:
|
|
162
|
+
"""Tags spectral fit solution."""
|
|
163
|
+
return cls.format_tag(StemName.task, CryonirspTaskName.spectral_fit.value)
|
|
164
|
+
|
|
165
|
+
@classmethod
|
|
166
|
+
def task_characteristic_spectra(cls) -> str:
|
|
167
|
+
"""Tags 1D intermediate characteristic spectra."""
|
|
168
|
+
return cls.format_tag(StemName.task, CryonirspTaskName.solar_char_spec.value)
|
|
@@ -86,12 +86,24 @@ class CryonirspL0FitsAccess(L0FitsAccess):
|
|
|
86
86
|
self.axis_1_type: str = self.header["CTYPE1"]
|
|
87
87
|
self.axis_2_type: str = self.header["CTYPE2"]
|
|
88
88
|
self.axis_3_type: str = self.header["CTYPE3"]
|
|
89
|
+
self.wave_min: float = round(
|
|
90
|
+
self.header["CRVAL1"] - (self.header["CRPIX1"] * self.header["CDELT1"]), 1
|
|
91
|
+
)
|
|
92
|
+
self.wave_max: float = round(
|
|
93
|
+
self.header["CRVAL1"]
|
|
94
|
+
+ ((self.header["NAXIS1"] - self.header["CRPIX1"]) * self.header["CDELT1"]),
|
|
95
|
+
1,
|
|
96
|
+
)
|
|
97
|
+
self.grating_position_deg: float = self.header["CNGRTPOS"]
|
|
98
|
+
self.grating_littrow_angle_deg: float = self.header["CNGRTLAT"]
|
|
99
|
+
self.grating_constant: float = self.header["CNGRTCON"]
|
|
89
100
|
self.obs_ip_start_time = self.header["DKIST011"]
|
|
90
101
|
# The ExposureConditions are a combination of the exposure time and the OD filter name:
|
|
91
102
|
self.exposure_conditions = ExposureConditions(
|
|
92
103
|
round(self.fpa_exposure_time_ms, CRYO_EXP_TIME_ROUND_DIGITS),
|
|
93
104
|
self.header["CNFILTNP"].upper(),
|
|
94
105
|
)
|
|
106
|
+
self.solar_gain_ip_start_time = self.header["DATE-OBS"]
|
|
95
107
|
|
|
96
108
|
@property
|
|
97
109
|
def cn1_scan_step(self):
|
|
@@ -1,12 +1,43 @@
|
|
|
1
1
|
"""Buds to parse exposure time."""
|
|
2
2
|
from typing import Hashable
|
|
3
|
+
from typing import Type
|
|
3
4
|
|
|
5
|
+
from dkist_processing_common.models.flower_pot import SpilledDirt
|
|
4
6
|
from dkist_processing_common.models.flower_pot import Stem
|
|
7
|
+
from dkist_processing_common.models.task_name import TaskName
|
|
8
|
+
from dkist_processing_common.parsers.task import parse_header_ip_task_with_gains
|
|
5
9
|
|
|
6
10
|
from dkist_processing_cryonirsp.models.constants import CryonirspBudName
|
|
11
|
+
from dkist_processing_cryonirsp.parsers.cryonirsp_l0_fits_access import CryonirspL0FitsAccess
|
|
7
12
|
from dkist_processing_cryonirsp.parsers.cryonirsp_l0_fits_access import CryonirspRampFitsAccess
|
|
8
13
|
|
|
9
14
|
|
|
15
|
+
class CryonirspSolarGainStartTimeBud(Stem):
|
|
16
|
+
"""Bud for finding the start time of the solar gain."""
|
|
17
|
+
|
|
18
|
+
def __init__(self):
|
|
19
|
+
self.metadata_key = "time_obs"
|
|
20
|
+
super().__init__(stem_name=CryonirspBudName.solar_gain_ip_start_time.value)
|
|
21
|
+
|
|
22
|
+
def setter(self, fits_obj: CryonirspL0FitsAccess) -> Type[SpilledDirt] | int:
|
|
23
|
+
"""
|
|
24
|
+
Setter for the bud.
|
|
25
|
+
|
|
26
|
+
Parameters
|
|
27
|
+
----------
|
|
28
|
+
fits_obj:
|
|
29
|
+
A single FitsAccess object
|
|
30
|
+
"""
|
|
31
|
+
if parse_header_ip_task_with_gains(fits_obj) != TaskName.solar_gain.value:
|
|
32
|
+
return SpilledDirt
|
|
33
|
+
return getattr(fits_obj, self.metadata_key)
|
|
34
|
+
|
|
35
|
+
def getter(self, key: Hashable):
|
|
36
|
+
"""Return the first date-obs value."""
|
|
37
|
+
first_date_obs = min(list(self.key_to_petal_dict.values()))
|
|
38
|
+
return first_date_obs
|
|
39
|
+
|
|
40
|
+
|
|
10
41
|
class CryonirspTimeObsBud(Stem):
|
|
11
42
|
"""
|
|
12
43
|
Produce a tuple of all time_obs values present in the dataset.
|
|
@@ -11,6 +11,7 @@ from dkist_processing_cryonirsp.tasks.make_movie_frames import *
|
|
|
11
11
|
from dkist_processing_cryonirsp.tasks.parse import *
|
|
12
12
|
from dkist_processing_cryonirsp.tasks.quality_metrics import *
|
|
13
13
|
from dkist_processing_cryonirsp.tasks.sp_beam_boundaries import *
|
|
14
|
+
from dkist_processing_cryonirsp.tasks.sp_dispersion_axis_correction import *
|
|
14
15
|
from dkist_processing_cryonirsp.tasks.sp_geometric import *
|
|
15
16
|
from dkist_processing_cryonirsp.tasks.sp_science import *
|
|
16
17
|
from dkist_processing_cryonirsp.tasks.sp_solar_gain import *
|
|
@@ -47,7 +47,7 @@ class CorrectionsMixin:
|
|
|
47
47
|
array[np.where(array == -np.inf)] = np.min(array[np.isfinite(array)])
|
|
48
48
|
array[np.isnan(array)] = np.nanmedian(array)
|
|
49
49
|
translated = affine_transform_arrays(array, translation=-shift, mode="edge", order=1)
|
|
50
|
-
#
|
|
50
|
+
# rotate_arrays_about_point rotates the wrong way, so no negative sign here
|
|
51
51
|
yield next(rotate_arrays_about_point(translated, angle=angle, mode="edge", order=1))
|
|
52
52
|
|
|
53
53
|
@staticmethod
|
|
@@ -85,7 +85,7 @@ class CorrectionsMixin:
|
|
|
85
85
|
array[np.where(array == np.inf)] = np.max(array[np.isfinite(array)])
|
|
86
86
|
array[np.where(array == -np.inf)] = np.min(array[np.isfinite(array)])
|
|
87
87
|
array[np.isnan(array)] = np.nanmedian(array)
|
|
88
|
-
#
|
|
88
|
+
# rotate_arrays_about_point rotates the wrong way, so no negative sign here
|
|
89
89
|
rotated = rotate_arrays_about_point(array, angle=angle, mode="edge")
|
|
90
90
|
yield next(affine_transform_arrays(rotated, translation=-shift, mode="edge"))
|
|
91
91
|
|
|
@@ -13,6 +13,7 @@ from dkist_processing_common.parsers.task import parse_header_ip_task_with_gains
|
|
|
13
13
|
from dkist_processing_common.parsers.task import PolcalTaskFlower
|
|
14
14
|
from dkist_processing_common.parsers.task import TaskTypeFlower
|
|
15
15
|
from dkist_processing_common.parsers.time import ObsIpStartTimeBud
|
|
16
|
+
from dkist_processing_common.parsers.unique_bud import TaskUniqueBud
|
|
16
17
|
from dkist_processing_common.parsers.unique_bud import UniqueBud
|
|
17
18
|
from dkist_processing_common.tasks import default_constant_bud_factory
|
|
18
19
|
from dkist_processing_common.tasks import default_tag_flower_factory
|
|
@@ -43,9 +44,11 @@ from dkist_processing_cryonirsp.parsers.optical_density_filters import OpticalDe
|
|
|
43
44
|
from dkist_processing_cryonirsp.parsers.polarimetric_check import PolarimetricCheckingUniqueBud
|
|
44
45
|
from dkist_processing_cryonirsp.parsers.scan_step import NumberOfScanStepsBud
|
|
45
46
|
from dkist_processing_cryonirsp.parsers.scan_step import ScanStepNumberFlower
|
|
47
|
+
from dkist_processing_cryonirsp.parsers.time import CryonirspSolarGainStartTimeBud
|
|
46
48
|
from dkist_processing_cryonirsp.parsers.time import CryonirspTimeObsBud
|
|
47
49
|
from dkist_processing_cryonirsp.parsers.wavelength import ObserveWavelengthBud
|
|
48
50
|
|
|
51
|
+
|
|
49
52
|
__all__ = ["ParseL0CryonirspRampData", "ParseL0CryonirspLinearizedData"]
|
|
50
53
|
S = TypeVar("S", bound=Stem)
|
|
51
54
|
|
|
@@ -169,7 +172,20 @@ class ParseL0CryonirspLinearizedData(ParseDataBase, InputDatasetMixin):
|
|
|
169
172
|
NumMapScansBud(),
|
|
170
173
|
NumberOfScanStepsBud(),
|
|
171
174
|
NumberOfMeasurementsBud(),
|
|
175
|
+
CryonirspSolarGainStartTimeBud(),
|
|
172
176
|
NumCSStepBud(self.parameters.max_cs_step_time_sec),
|
|
177
|
+
TaskUniqueBud(
|
|
178
|
+
constant_name=CryonirspBudName.wave_min.value,
|
|
179
|
+
metadata_key="wave_min",
|
|
180
|
+
ip_task_type=TaskName.solar_gain.value,
|
|
181
|
+
task_type_parsing_function=parse_header_ip_task_with_gains,
|
|
182
|
+
),
|
|
183
|
+
TaskUniqueBud(
|
|
184
|
+
constant_name=CryonirspBudName.wave_max.value,
|
|
185
|
+
metadata_key="wave_max",
|
|
186
|
+
ip_task_type=TaskName.solar_gain.value,
|
|
187
|
+
task_type_parsing_function=parse_header_ip_task_with_gains,
|
|
188
|
+
),
|
|
173
189
|
CryonirspTaskExposureConditionsBud(
|
|
174
190
|
stem_name=CryonirspBudName.dark_frame_exposure_conditions_list.value,
|
|
175
191
|
ip_task_type=TaskName.dark.value,
|
|
@@ -203,6 +219,24 @@ class ParseL0CryonirspLinearizedData(ParseDataBase, InputDatasetMixin):
|
|
|
203
219
|
constant_name=CryonirspBudName.modulator_spin_mode.value,
|
|
204
220
|
metadata_key="modulator_spin_mode",
|
|
205
221
|
),
|
|
222
|
+
TaskUniqueBud(
|
|
223
|
+
constant_name=CryonirspBudName.grating_position_deg.value,
|
|
224
|
+
metadata_key="grating_position_deg",
|
|
225
|
+
ip_task_type=TaskName.solar_gain.value,
|
|
226
|
+
task_type_parsing_function=parse_header_ip_task_with_gains,
|
|
227
|
+
),
|
|
228
|
+
TaskUniqueBud(
|
|
229
|
+
constant_name=CryonirspBudName.grating_littrow_angle_deg.value,
|
|
230
|
+
metadata_key="grating_littrow_angle_deg",
|
|
231
|
+
ip_task_type=TaskName.solar_gain.value,
|
|
232
|
+
task_type_parsing_function=parse_header_ip_task_with_gains,
|
|
233
|
+
),
|
|
234
|
+
TaskUniqueBud(
|
|
235
|
+
constant_name=CryonirspBudName.grating_constant.value,
|
|
236
|
+
metadata_key="grating_constant",
|
|
237
|
+
ip_task_type=TaskName.solar_gain.value,
|
|
238
|
+
task_type_parsing_function=parse_header_ip_task_with_gains,
|
|
239
|
+
),
|
|
206
240
|
]
|
|
207
241
|
|
|
208
242
|
@property
|
|
@@ -237,7 +237,7 @@ class CryonirspL1QualityMetrics(CryonirspTaskBase, QualityMixin):
|
|
|
237
237
|
median = np.nanmedian(frame.data)
|
|
238
238
|
time_obs_mjd = Time(frame.time_obs).mjd
|
|
239
239
|
mean = np.nanmean(frame.data)
|
|
240
|
-
average = median or mean
|
|
240
|
+
average = median or mean
|
|
241
241
|
result = _QualityDataPoint(value=average, datetime=time_obs_mjd)
|
|
242
242
|
logger.info(f"Calculated intensity frame average as {result}")
|
|
243
243
|
return result
|