dkist-processing-cryonirsp 0.0.62__tar.gz → 0.0.64__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.

Files changed (124) hide show
  1. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/CHANGELOG.rst +29 -0
  2. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/PKG-INFO +1 -1
  3. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/__init__.py +1 -1
  4. dkist_processing_cryonirsp-0.0.64/dkist_processing_cryonirsp/config.py +12 -0
  5. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/models/tags.py +0 -18
  6. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/parsers/modstates.py +2 -6
  7. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tasks/assemble_movie.py +1 -1
  8. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tasks/bad_pixel_map.py +1 -1
  9. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tasks/beam_boundaries_base.py +1 -1
  10. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tasks/ci_beam_boundaries.py +1 -1
  11. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tasks/ci_science.py +1 -1
  12. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tasks/dark.py +1 -1
  13. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tasks/gain.py +1 -1
  14. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tasks/instrument_polarization.py +12 -3
  15. dkist_processing_cryonirsp-0.0.64/dkist_processing_cryonirsp/tasks/l1_output_data.py +44 -0
  16. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tasks/linearity_correction.py +1 -1
  17. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tasks/make_movie_frames.py +1 -1
  18. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tasks/mixin/intermediate_frame.py +1 -1
  19. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tasks/mixin/shift_measurements.py +1 -1
  20. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tasks/quality_metrics.py +1 -1
  21. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tasks/science_base.py +1 -1
  22. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tasks/sp_beam_boundaries.py +1 -1
  23. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tasks/sp_geometric.py +1 -1
  24. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tasks/sp_science.py +1 -1
  25. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tasks/sp_solar_gain.py +1 -1
  26. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tasks/write_l1.py +1 -1
  27. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tests/conftest.py +1 -1
  28. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tests/header_models.py +12 -6
  29. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tests/local_trial_workflows/l0_cals_only.py +1 -1
  30. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tests/local_trial_workflows/l0_to_l1.py +4 -1
  31. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tests/local_trial_workflows/local_trial_helpers.py +63 -8
  32. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tests/test_assemble_qualilty.py +7 -2
  33. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tests/test_bad_pixel_maps.py +1 -1
  34. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tests/test_instrument_polarization.py +3 -3
  35. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tests/test_parse.py +97 -57
  36. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tests/test_trial_output_data.py +2 -3
  37. dkist_processing_cryonirsp-0.0.64/dkist_processing_cryonirsp/workflows/__init__.py +2 -0
  38. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp.egg-info/PKG-INFO +1 -1
  39. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp.egg-info/SOURCES.txt +1 -0
  40. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp.egg-info/requires.txt +5 -5
  41. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/setup.cfg +4 -4
  42. dkist_processing_cryonirsp-0.0.62/dkist_processing_cryonirsp/tasks/l1_output_data.py +0 -22
  43. dkist_processing_cryonirsp-0.0.62/dkist_processing_cryonirsp/workflows/__init__.py +0 -9
  44. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/.gitignore +0 -0
  45. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/.pre-commit-config.yaml +0 -0
  46. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/.readthedocs.yml +0 -0
  47. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/README.rst +0 -0
  48. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/SCIENCE_CHANGELOG.rst +0 -0
  49. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/bitbucket-pipelines.yml +0 -0
  50. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/changelog/.gitempty +0 -0
  51. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/check_changelog_updated.sh +0 -0
  52. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/models/__init__.py +0 -0
  53. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/models/constants.py +0 -0
  54. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/models/exposure_conditions.py +0 -0
  55. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/models/parameters.py +0 -0
  56. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/models/task_name.py +0 -0
  57. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/parsers/__init__.py +0 -0
  58. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/parsers/cryonirsp_l0_fits_access.py +0 -0
  59. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/parsers/cryonirsp_l1_fits_access.py +0 -0
  60. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/parsers/exposure_conditions.py +0 -0
  61. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/parsers/map_repeats.py +0 -0
  62. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/parsers/measurements.py +0 -0
  63. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/parsers/optical_density_filters.py +0 -0
  64. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/parsers/polarimetric_check.py +0 -0
  65. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/parsers/scan_step.py +0 -0
  66. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/parsers/time.py +0 -0
  67. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/parsers/wavelength.py +0 -0
  68. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tasks/__init__.py +0 -0
  69. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tasks/cryonirsp_base.py +0 -0
  70. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tasks/mixin/__init__.py +0 -0
  71. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tasks/mixin/beam_access.py +0 -0
  72. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tasks/mixin/corrections.py +0 -0
  73. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tasks/mixin/linearized_frame.py +0 -0
  74. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tasks/parse.py +0 -0
  75. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tasks/trial_output_data.py +0 -0
  76. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tests/__init__.py +0 -0
  77. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tests/local_trial_workflows/__init__.py +0 -0
  78. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tests/local_trial_workflows/linearize_only.py +0 -0
  79. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tests/test_assemble_movie.py +0 -0
  80. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tests/test_ci_beam_boundaries.py +0 -0
  81. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tests/test_ci_science.py +0 -0
  82. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tests/test_corrections.py +0 -0
  83. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tests/test_cryo_base.py +0 -0
  84. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tests/test_cryo_constants.py +0 -0
  85. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tests/test_dark.py +0 -0
  86. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tests/test_gain.py +0 -0
  87. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tests/test_linearity_correction.py +0 -0
  88. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tests/test_make_movie_frames.py +0 -0
  89. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tests/test_parameters.py +0 -0
  90. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tests/test_quality.py +0 -0
  91. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tests/test_sp_beam_boundaries.py +0 -0
  92. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tests/test_sp_geometric.py +0 -0
  93. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tests/test_sp_make_movie_frames.py +0 -0
  94. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tests/test_sp_science.py +0 -0
  95. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tests/test_sp_solar.py +0 -0
  96. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tests/test_trial_create_quality_report.py +0 -0
  97. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tests/test_workflows.py +0 -0
  98. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/tests/test_write_l1.py +0 -0
  99. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/workflows/ci_l0_processing.py +0 -0
  100. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/workflows/sp_l0_processing.py +0 -0
  101. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp/workflows/trial_workflows.py +0 -0
  102. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp.egg-info/dependency_links.txt +0 -0
  103. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/dkist_processing_cryonirsp.egg-info/top_level.txt +0 -0
  104. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/docs/Makefile +0 -0
  105. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/docs/bad_pixel_calibration.rst +0 -0
  106. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/docs/beam_angle_calculation.rst +0 -0
  107. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/docs/beam_boundary_computation.rst +0 -0
  108. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/docs/changelog.rst +0 -0
  109. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/docs/ci_science_calibration.rst +0 -0
  110. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/docs/conf.py +0 -0
  111. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/docs/index.rst +0 -0
  112. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/docs/l0_to_l1_cryonirsp_ci.rst +0 -0
  113. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/docs/l0_to_l1_cryonirsp_sp.rst +0 -0
  114. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/docs/linearization.rst +0 -0
  115. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/docs/make.bat +0 -0
  116. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/docs/requirements.txt +0 -0
  117. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/docs/requirements_table.rst +0 -0
  118. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/docs/scientific_changelog.rst +0 -0
  119. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/docs/sp_science_calibration.rst +0 -0
  120. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/licenses/LICENSE.rst +0 -0
  121. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/pyproject.toml +0 -0
  122. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/science_towncrier.sh +0 -0
  123. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/setup.py +0 -0
  124. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.64}/towncrier_science.toml +0 -0
@@ -1,3 +1,32 @@
1
+ v0.0.64 (2024-06-03)
2
+ ====================
3
+
4
+ Misc
5
+ ----
6
+
7
+ - Resolve matplotlib version conflict (`#127 <https://bitbucket.org/dkistdc/dkist-processing-cryonirsp/pull-requests/127>`__)
8
+ - Upgrade the version of dkist-processing-common which brings along various major version upgrades to libraries associated with Pydantic 2. (`#128 <https://bitbucket.org/dkistdc/dkist-processing-cryonirsp/pull-requests/128>`__)
9
+
10
+
11
+ v0.0.63 (2024-05-20)
12
+ ====================
13
+
14
+ Bugfixes
15
+ --------
16
+
17
+ - Polcal fit/modulation matrix quality metrics are now correctly rendered in quality report. (`#125 <https://bitbucket.org/dkistdc/dkist-processing-cryonirsp/pull-requests/125>`__)
18
+ - Correctly render L0 quality metrics (individual frame and dataset average and RMS values for dark, lamp, and solar frames).
19
+ Previously these had been missing from quality reports of polarimetric datasets. (`#125 <https://bitbucket.org/dkistdc/dkist-processing-cryonirsp/pull-requests/125>`__)
20
+
21
+
22
+ Misc
23
+ ----
24
+
25
+ - Remove `CryoStemName.modstate` and `CryonirspTag.modstate`. Both of these already exist in `*-common` and can be used directly from there. (`#125 <https://bitbucket.org/dkistdc/dkist-processing-cryonirsp/pull-requests/125>`__)
26
+ - Update `dkist-processing-common` to v6.2.4. This fixes a bug that could cause the quality report to fail to render if
27
+ the demodulation matrices were fit with the (very old) "use_M12" fit mode. (`#126 <https://bitbucket.org/dkistdc/dkist-processing-cryonirsp/pull-requests/126>`__)
28
+
29
+
1
30
  v0.0.62 (2024-05-16)
2
31
  ====================
3
32
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dkist_processing_cryonirsp
3
- Version: 0.0.62
3
+ Version: 0.0.64
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
@@ -1,5 +1,5 @@
1
1
  """Init."""
2
- from dkist_service_configuration import logger # first import to set logging.BasicConfig
2
+ from dkist_service_configuration.logging import logger # first import to set logging.BasicConfig
3
3
  from pkg_resources import DistributionNotFound
4
4
  from pkg_resources import get_distribution
5
5
 
@@ -0,0 +1,12 @@
1
+ """Configuration for the dkist-processing-cryonirsp package and the logging thereof."""
2
+ from dkist_processing_common.config import DKISTProcessingCommonConfiguration
3
+
4
+
5
+ class DKISTProcessingCryoNIRSPConfigurations(DKISTProcessingCommonConfiguration):
6
+ """Configurations custom to the dkist-processing-cryonirsp package."""
7
+
8
+ pass # nothing custom yet
9
+
10
+
11
+ dkist_processing_cryonirsp_configurations = DKISTProcessingCryoNIRSPConfigurations()
12
+ dkist_processing_cryonirsp_configurations.log_configurations()
@@ -3,7 +3,6 @@ from enum import Enum
3
3
 
4
4
  from dkist_processing_common.models.tags import StemName
5
5
  from dkist_processing_common.models.tags import Tag
6
- from dkist_processing_common.models.task_name import TaskName
7
6
 
8
7
  from dkist_processing_cryonirsp.models.exposure_conditions import ExposureConditions
9
8
  from dkist_processing_cryonirsp.models.task_name import CryonirspTaskName
@@ -18,7 +17,6 @@ class CryonirspStemName(str, Enum):
18
17
  curr_frame_in_ramp = "CURR_FRAME_IN_RAMP"
19
18
  time_obs = "TIME_OBS"
20
19
  meas_num = "MEAS_NUM"
21
- modstate = "MODSTATE"
22
20
  map_scan = "MAP_SCAN"
23
21
  exposure_conditions = "EXPOSURE_CONDITIONS"
24
22
 
@@ -74,22 +72,6 @@ class CryonirspTag(Tag):
74
72
  """
75
73
  return cls.format_tag(CryonirspStemName.map_scan, map_scan)
76
74
 
77
- @classmethod
78
- def modstate(cls, modstate: int) -> str:
79
- """
80
- Tags by the current modstate number.
81
-
82
- Parameters
83
- ----------
84
- modstate
85
- The current scan step number
86
-
87
- Returns
88
- -------
89
- The formatted tag string
90
- """
91
- return cls.format_tag(CryonirspStemName.modstate, modstate)
92
-
93
75
  @classmethod
94
76
  def linearized(cls) -> str:
95
77
  """
@@ -2,11 +2,11 @@
2
2
  from typing import Type
3
3
 
4
4
  from dkist_processing_common.models.flower_pot import SpilledDirt
5
+ from dkist_processing_common.models.tags import StemName
5
6
  from dkist_processing_common.parsers.single_value_single_key_flower import (
6
7
  SingleValueSingleKeyFlower,
7
8
  )
8
9
 
9
- from dkist_processing_cryonirsp.models.tags import CryonirspStemName
10
10
  from dkist_processing_cryonirsp.parsers.cryonirsp_l0_fits_access import CryonirspL0FitsAccess
11
11
 
12
12
 
@@ -14,9 +14,7 @@ class ModstateNumberFlower(SingleValueSingleKeyFlower):
14
14
  """Flower for a modstate number."""
15
15
 
16
16
  def __init__(self):
17
- super().__init__(
18
- tag_stem_name=CryonirspStemName.modstate.value, metadata_key="modulator_state"
19
- )
17
+ super().__init__(tag_stem_name=StemName.modstate.value, metadata_key="modulator_state")
20
18
 
21
19
  def setter(self, fits_obj: CryonirspL0FitsAccess) -> Type[SpilledDirt] | int:
22
20
  """
@@ -27,8 +25,6 @@ class ModstateNumberFlower(SingleValueSingleKeyFlower):
27
25
  fits_obj:
28
26
  A single FitsAccess object
29
27
  """
30
- if fits_obj.ip_task_type != "observe" and fits_obj.ip_task_type != "polcal":
31
- return SpilledDirt
32
28
  # Some intensity data incorrectly has modulator state = 0
33
29
  if getattr(fits_obj, self.metadata_key) == 0:
34
30
  return 1
@@ -2,7 +2,7 @@
2
2
  import numpy as np
3
3
  from dkist_processing_common.codecs.fits import fits_array_decoder
4
4
  from dkist_processing_common.tasks import AssembleMovie
5
- from dkist_service_configuration import logger
5
+ from dkist_service_configuration.logging import logger
6
6
  from PIL import ImageDraw
7
7
  from PIL.ImageFont import FreeTypeFont
8
8
 
@@ -2,7 +2,7 @@
2
2
  import numpy as np
3
3
  import scipy.ndimage as spnd
4
4
  from dkist_processing_math.statistics import average_numpy_arrays
5
- from dkist_service_configuration import logger
5
+ from dkist_service_configuration.logging import logger
6
6
 
7
7
  from dkist_processing_cryonirsp.models.tags import CryonirspTag
8
8
  from dkist_processing_cryonirsp.models.task_name import CryonirspTaskName
@@ -4,7 +4,7 @@ from dataclasses import dataclass
4
4
 
5
5
  import numpy as np
6
6
  from dkist_processing_math.statistics import average_numpy_arrays
7
- from dkist_service_configuration import logger
7
+ from dkist_service_configuration.logging import logger
8
8
  from largestinteriorrectangle import lir
9
9
  from skimage import filters
10
10
  from skimage.exposure import rescale_intensity
@@ -1,7 +1,7 @@
1
1
  """Cryonirsp CI beam boundaries task."""
2
2
  import largestinteriorrectangle as lir
3
3
  import numpy as np
4
- from dkist_service_configuration import logger
4
+ from dkist_service_configuration.logging import logger
5
5
 
6
6
  from dkist_processing_cryonirsp.tasks.beam_boundaries_base import BeamBoundariesCalibrationBase
7
7
  from dkist_processing_cryonirsp.tasks.beam_boundaries_base import BeamBoundary
@@ -1,7 +1,7 @@
1
1
  """Cryonirsp CI science calibration task."""
2
2
  from collections import defaultdict
3
3
 
4
- from dkist_service_configuration import logger
4
+ from dkist_service_configuration.logging import logger
5
5
 
6
6
  from dkist_processing_cryonirsp.models.exposure_conditions import ExposureConditions
7
7
  from dkist_processing_cryonirsp.models.tags import CryonirspTag
@@ -1,7 +1,7 @@
1
1
  """CryoNIRSP dark calibration task."""
2
2
  from dkist_processing_common.models.task_name import TaskName
3
3
  from dkist_processing_math.statistics import average_numpy_arrays
4
- from dkist_service_configuration import logger
4
+ from dkist_service_configuration.logging import logger
5
5
 
6
6
  from dkist_processing_cryonirsp.models.tags import CryonirspTag
7
7
  from dkist_processing_cryonirsp.tasks.cryonirsp_base import CryonirspTaskBase
@@ -6,7 +6,7 @@ import numpy as np
6
6
  from dkist_processing_common.models.task_name import TaskName
7
7
  from dkist_processing_math.arithmetic import subtract_array_from_arrays
8
8
  from dkist_processing_math.statistics import average_numpy_arrays
9
- from dkist_service_configuration import logger
9
+ from dkist_service_configuration.logging import logger
10
10
 
11
11
  from dkist_processing_cryonirsp.models.exposure_conditions import ExposureConditions
12
12
  from dkist_processing_cryonirsp.models.tags import CryonirspTag
@@ -13,7 +13,7 @@ from dkist_processing_math.transform.binning import resize_arrays
13
13
  from dkist_processing_pac.fitter.polcal_fitter import PolcalFitter
14
14
  from dkist_processing_pac.input_data.drawer import Drawer
15
15
  from dkist_processing_pac.input_data.dresser import Dresser
16
- from dkist_service_configuration import logger
16
+ from dkist_service_configuration.logging import logger
17
17
 
18
18
  from dkist_processing_cryonirsp.models.exposure_conditions import ExposureConditions
19
19
  from dkist_processing_cryonirsp.models.tags import CryonirspTag
@@ -23,6 +23,15 @@ from dkist_processing_cryonirsp.tasks.cryonirsp_base import CryonirspTaskBase
23
23
  __all__ = ["CIInstrumentPolarizationCalibration", "SPInstrumentPolarizationCalibration"]
24
24
 
25
25
 
26
+ def generate_polcal_quality_label(arm: str, beam: int) -> str:
27
+ """
28
+ Make a quality label given an arm and beam.
29
+
30
+ Defined here so we don't have to remember what our labels are in the L1 output data task.
31
+ """
32
+ return f"{arm} Beam {beam}"
33
+
34
+
26
35
  class InstrumentPolarizationCalibrationBase(CryonirspTaskBase, ABC):
27
36
  """
28
37
  Base task class for instrument polarization for a CryoNIRSP calibration run.
@@ -402,7 +411,7 @@ class CIInstrumentPolarizationCalibration(InstrumentPolarizationCalibrationBase)
402
411
  """Record various quality metrics from PolCal fits."""
403
412
  self.quality_store_polcal_results(
404
413
  polcal_fitter=polcal_fitter,
405
- label=f"CryoNIRSP CI beam {beam}",
414
+ label=generate_polcal_quality_label(arm="CI", beam=beam),
406
415
  bins_1=self.parameters.polcal_num_spatial_bins,
407
416
  bins_2=self.parameters.polcal_num_spatial_bins,
408
417
  bin_1_type="spatial",
@@ -421,7 +430,7 @@ class SPInstrumentPolarizationCalibration(InstrumentPolarizationCalibrationBase)
421
430
  """Record various quality metrics from PolCal fits."""
422
431
  self.quality_store_polcal_results(
423
432
  polcal_fitter=polcal_fitter,
424
- label=f"CryoNIRSP SP beam {beam}",
433
+ label=generate_polcal_quality_label(arm="SP", beam=beam),
425
434
  bins_1=self.parameters.polcal_num_spatial_bins,
426
435
  bins_2=self.parameters.polcal_num_spectral_bins,
427
436
  bin_1_type="spatial",
@@ -0,0 +1,44 @@
1
+ """Subclasses of AssembleQualityData that cause the correct polcal metrics to build."""
2
+ from typing import Type
3
+
4
+ from dkist_processing_common.models.constants import ConstantsBase
5
+ from dkist_processing_common.tasks import AssembleQualityData
6
+
7
+ __all__ = ["CIAssembleQualityData", "SPAssembleQualityData"]
8
+
9
+ from dkist_processing_cryonirsp.models.constants import CryonirspConstants
10
+ from dkist_processing_cryonirsp.tasks.instrument_polarization import generate_polcal_quality_label
11
+
12
+
13
+ class CIAssembleQualityData(AssembleQualityData):
14
+ """Subclass just so that the polcal_label_list can be populated."""
15
+
16
+ @property
17
+ def constants_model_class(self) -> Type[CryonirspConstants]:
18
+ """Grab the Cryo constants so we can have the number of beams."""
19
+ return CryonirspConstants
20
+
21
+ @property
22
+ def polcal_label_list(self) -> list[str]:
23
+ """Return label(s) for Cryo CI."""
24
+ return [
25
+ generate_polcal_quality_label(arm="CI", beam=beam)
26
+ for beam in range(1, self.constants.num_beams + 1)
27
+ ]
28
+
29
+
30
+ class SPAssembleQualityData(AssembleQualityData):
31
+ """Subclass just so that the polcal_label_list can be populated."""
32
+
33
+ @property
34
+ def constants_model_class(self) -> Type[CryonirspConstants]:
35
+ """Grab the Cryo constants so we can have the number of beams."""
36
+ return CryonirspConstants
37
+
38
+ @property
39
+ def polcal_label_list(self) -> list[str]:
40
+ """Return labels for beams 1 and 2."""
41
+ return [
42
+ generate_polcal_quality_label(arm="SP", beam=beam)
43
+ for beam in range(1, self.constants.num_beams + 1)
44
+ ]
@@ -7,7 +7,7 @@ from astropy.io import fits
7
7
  from dkist_processing_common.codecs.fits import fits_access_decoder
8
8
  from dkist_processing_common.codecs.fits import fits_array_encoder
9
9
  from dkist_processing_common.codecs.fits import fits_hdulist_encoder
10
- from dkist_service_configuration import logger
10
+ from dkist_service_configuration.logging import logger
11
11
  from numba import njit
12
12
  from numba import prange
13
13
 
@@ -7,7 +7,7 @@ from astropy.io import fits
7
7
  from astropy.visualization import ZScaleInterval
8
8
  from dkist_processing_common.codecs.fits import fits_access_decoder
9
9
  from dkist_processing_common.codecs.fits import fits_hdulist_encoder
10
- from dkist_service_configuration import logger
10
+ from dkist_service_configuration.logging import logger
11
11
 
12
12
  from dkist_processing_cryonirsp.models.tags import CryonirspTag
13
13
  from dkist_processing_cryonirsp.parsers.cryonirsp_l1_fits_access import CryonirspL1FitsAccess
@@ -6,7 +6,7 @@ import numpy as np
6
6
  from astropy.io import fits
7
7
  from dkist_processing_common.codecs.fits import fits_hdu_decoder
8
8
  from dkist_processing_common.codecs.fits import fits_hdulist_encoder
9
- from dkist_service_configuration import logger
9
+ from dkist_service_configuration.logging import logger
10
10
 
11
11
  from dkist_processing_cryonirsp.models.exposure_conditions import ExposureConditions
12
12
  from dkist_processing_cryonirsp.models.tags import CryonirspTag
@@ -4,7 +4,7 @@ from dataclasses import dataclass
4
4
 
5
5
  import numpy as np
6
6
  import skimage.registration as skir
7
- from dkist_service_configuration import logger
7
+ from dkist_service_configuration.logging import logger
8
8
 
9
9
  SPATIAL = "SPATIAL"
10
10
  SPECTRAL = "SPECTRAL"
@@ -9,7 +9,7 @@ from dkist_processing_common.codecs.fits import fits_access_decoder
9
9
  from dkist_processing_common.parsers.quality import L1QualityFitsAccess
10
10
  from dkist_processing_common.tasks import QualityL0Metrics
11
11
  from dkist_processing_common.tasks.mixin.quality import QualityMixin
12
- from dkist_service_configuration import logger
12
+ from dkist_service_configuration.logging import logger
13
13
 
14
14
  from dkist_processing_cryonirsp.models.constants import CryonirspConstants
15
15
  from dkist_processing_cryonirsp.models.tags import CryonirspTag
@@ -14,7 +14,7 @@ from dkist_processing_math.arithmetic import divide_arrays_by_array
14
14
  from dkist_processing_math.arithmetic import subtract_array_from_arrays
15
15
  from dkist_processing_math.statistics import average_numpy_arrays
16
16
  from dkist_processing_pac.optics.telescope import Telescope
17
- from dkist_service_configuration import logger
17
+ from dkist_service_configuration.logging import logger
18
18
 
19
19
  from dkist_processing_cryonirsp.models.exposure_conditions import ExposureConditions
20
20
  from dkist_processing_cryonirsp.models.tags import CryonirspTag
@@ -2,7 +2,7 @@
2
2
  import math
3
3
 
4
4
  import numpy as np
5
- from dkist_service_configuration import logger
5
+ from dkist_service_configuration.logging import logger
6
6
 
7
7
  from dkist_processing_cryonirsp.tasks.beam_boundaries_base import BeamBoundariesCalibrationBase
8
8
  from dkist_processing_cryonirsp.tasks.beam_boundaries_base import BeamBoundary
@@ -8,7 +8,7 @@ from dkist_processing_common.models.task_name import TaskName
8
8
  from dkist_processing_math.arithmetic import divide_arrays_by_array
9
9
  from dkist_processing_math.arithmetic import subtract_array_from_arrays
10
10
  from dkist_processing_math.statistics import average_numpy_arrays
11
- from dkist_service_configuration import logger
11
+ from dkist_service_configuration.logging import logger
12
12
  from scipy.optimize import minimize
13
13
 
14
14
  from dkist_processing_cryonirsp.models.tags import CryonirspTag
@@ -4,7 +4,7 @@ from collections import defaultdict
4
4
  import numpy as np
5
5
  from astropy.io import fits
6
6
  from dkist_processing_math.statistics import average_numpy_arrays
7
- from dkist_service_configuration import logger
7
+ from dkist_service_configuration.logging import logger
8
8
 
9
9
  from dkist_processing_cryonirsp.models.exposure_conditions import ExposureConditions
10
10
  from dkist_processing_cryonirsp.models.tags import CryonirspTag
@@ -5,7 +5,7 @@ from dkist_processing_common.models.task_name import TaskName
5
5
  from dkist_processing_math.arithmetic import divide_arrays_by_array
6
6
  from dkist_processing_math.arithmetic import subtract_array_from_arrays
7
7
  from dkist_processing_math.statistics import average_numpy_arrays
8
- from dkist_service_configuration import logger
8
+ from dkist_service_configuration.logging import logger
9
9
  from scipy import signal
10
10
 
11
11
  from dkist_processing_cryonirsp.models.exposure_conditions import ExposureConditions
@@ -9,7 +9,7 @@ import numpy as np
9
9
  from astropy.io import fits
10
10
  from dkist_processing_common.models.wavelength import WavelengthRange
11
11
  from dkist_processing_common.tasks import WriteL1Frame
12
- from dkist_service_configuration import logger
12
+ from dkist_service_configuration.logging import logger
13
13
 
14
14
  from dkist_processing_cryonirsp.models.constants import CryonirspConstants
15
15
 
@@ -284,7 +284,7 @@ def cryonirsp_testing_parameters_factory(
284
284
  class CryonirspTestingParameters:
285
285
  cryonirsp_polcal_num_spatial_bins: int = 1
286
286
  cryonirsp_polcal_num_spectral_bins: int = 1
287
- cryonirsp_polcal_pac_fit_mode: str = "use_M12"
287
+ cryonirsp_polcal_pac_fit_mode: str = "use_M12_I_sys_per_step"
288
288
  cryonirsp_polcal_pac_init_set: str = "OCCal_VIS"
289
289
  cryonirsp_geo_upsample_factor: int = 100
290
290
  cryonirsp_geo_max_shift: int = 80
@@ -372,10 +372,12 @@ class ModulatedLampGainHeaders(SimpleModulatedHeaders):
372
372
  exposure_condition: ExposureConditions,
373
373
  start_date: str = "2023-01-01T01:23:45",
374
374
  modstate_length_sec: float = 0.5,
375
+ num_modstates: int = 1,
376
+ modstate: int = 1,
375
377
  ):
376
378
  super().__init__(
377
- num_modstates=1,
378
- modstate=1,
379
+ num_modstates=num_modstates,
380
+ modstate=modstate,
379
381
  array_shape=array_shape,
380
382
  task="gain",
381
383
  exposure_condition=exposure_condition,
@@ -403,10 +405,12 @@ class ModulatedSolarGainHeaders(SimpleModulatedHeaders):
403
405
  exposure_condition: ExposureConditions,
404
406
  start_date: str = "2023-01-01T01:23:45",
405
407
  modstate_length_sec: float = 0.5,
408
+ num_modstates: int = 1,
409
+ modstate: int = 1,
406
410
  ):
407
411
  super().__init__(
408
- num_modstates=1,
409
- modstate=1,
412
+ num_modstates=num_modstates,
413
+ modstate=modstate,
410
414
  array_shape=array_shape,
411
415
  task="gain",
412
416
  exposure_condition=exposure_condition,
@@ -436,10 +440,12 @@ class ModulatedDarkHeaders(SimpleModulatedHeaders):
436
440
  exposure_condition: ExposureConditions,
437
441
  start_date: str = "2023-01-01T01:23:45",
438
442
  modstate_length_sec: float = 0.5,
443
+ num_modstates: int = 1,
444
+ modstate: int = 1,
439
445
  ):
440
446
  super().__init__(
441
- num_modstates=1,
442
- modstate=1,
447
+ num_modstates=num_modstates,
448
+ modstate=modstate,
443
449
  array_shape=array_shape,
444
450
  task="dark",
445
451
  exposure_condition=exposure_condition,
@@ -9,7 +9,7 @@ from astropy.io import fits
9
9
  from dkist_processing_common.manual import ManualProcessing
10
10
  from dkist_processing_common.models.constants import BudName
11
11
  from dkist_processing_common.tasks import WorkflowTaskBase
12
- from dkist_service_configuration import logger
12
+ from dkist_service_configuration.logging import logger
13
13
 
14
14
  from dkist_processing_cryonirsp.models.constants import CryonirspBudName
15
15
  from dkist_processing_cryonirsp.models.tags import CryonirspTag
@@ -11,7 +11,7 @@ from dkist_processing_common.tasks import CreateTrialAsdf
11
11
  from dkist_processing_common.tasks import CreateTrialQualityReport
12
12
  from dkist_processing_common.tasks import QualityL1Metrics
13
13
  from dkist_processing_common.tasks import WorkflowTaskBase
14
- from dkist_service_configuration import logger
14
+ from dkist_service_configuration.logging import logger
15
15
 
16
16
  from dkist_processing_cryonirsp.models.constants import CryonirspBudName
17
17
  from dkist_processing_cryonirsp.models.tags import CryonirspTag
@@ -406,12 +406,15 @@ def main(
406
406
  )
407
407
  else:
408
408
  raise ValueError(f"Did not recognize {arm_id = }")
409
+
409
410
  manual_processing_run.run_task(task=QualityL1Metrics)
410
411
  manual_processing_run.run_task(task=CryonirspL1QualityMetrics)
412
+
411
413
  if arm_id == "SP":
412
414
  manual_processing_run.run_task(task=SPAssembleQualityData)
413
415
  elif arm_id == "CI":
414
416
  manual_processing_run.run_task(task=CIAssembleQualityData)
417
+
415
418
  manual_processing_run.run_task(task=ValidateL1Output)
416
419
 
417
420
  if transfer_trial_data:
@@ -11,7 +11,7 @@ from dkist_header_validator import spec122_validator
11
11
  from dkist_processing_common.models.task_name import TaskName
12
12
  from dkist_processing_common.tasks import WorkflowTaskBase
13
13
  from dkist_processing_common.tasks.mixin.globus import GlobusTransferItem
14
- from dkist_service_configuration import logger
14
+ from dkist_service_configuration.logging import logger
15
15
 
16
16
  from dkist_processing_cryonirsp.models.tags import CryonirspTag
17
17
  from dkist_processing_cryonirsp.models.task_name import CryonirspTaskName
@@ -171,15 +171,24 @@ class SaveTaskTags(WorkflowTaskBase):
171
171
  def relative_save_file(self) -> str:
172
172
  return "default_sav.asdf"
173
173
 
174
+ @property
175
+ def tag_lists_to_save(self) -> list[list[str]] | list[str]:
176
+ return [[CryonirspTag.task(self.task_str), CryonirspTag.intermediate()]]
177
+
174
178
  def run(self):
175
179
  file_tag_dict = dict()
176
- path_list = self.read(tags=[CryonirspTag.task(self.task_str), CryonirspTag.intermediate()])
177
- save_dir = self.scratch.workflow_base_path / Path(self.relative_save_file).stem
178
- save_dir.mkdir(exist_ok=True)
179
- for p in path_list:
180
- copied_path = shutil.copy(str(p), save_dir)
181
- tags = self.tags(p)
182
- file_tag_dict[copied_path] = tags
180
+ tag_list_list = self.tag_lists_to_save
181
+ if isinstance(tag_list_list[0], str):
182
+ tag_list_list = [tag_list_list]
183
+
184
+ for tags_to_save in tag_list_list:
185
+ path_list = self.read(tags=tags_to_save)
186
+ save_dir = self.scratch.workflow_base_path / Path(self.relative_save_file).stem
187
+ save_dir.mkdir(exist_ok=True)
188
+ for p in path_list:
189
+ copied_path = shutil.copy(str(p), save_dir)
190
+ tags = self.tags(p)
191
+ file_tag_dict[copied_path] = tags
183
192
 
184
193
  full_save_file = self.scratch.workflow_base_path / self.relative_save_file
185
194
  tree = {"file_tag_dict": file_tag_dict}
@@ -216,6 +225,14 @@ class SaveGeometricCal(WorkflowTaskBase):
216
225
  tags=[CryonirspTag.task_geometric_sepectral_shifts(), CryonirspTag.intermediate()]
217
226
  )
218
227
  )
228
+ path_list += list(
229
+ self.read(
230
+ tags=[
231
+ CryonirspTag.quality("TASK_TYPES"),
232
+ CryonirspTag.workflow_task("SPGeometricCalibration"),
233
+ ]
234
+ )
235
+ )
219
236
  save_dir = self.scratch.workflow_base_path / Path(relative_save_file).stem
220
237
  save_dir.mkdir(exist_ok=True)
221
238
  for p in path_list:
@@ -277,6 +294,12 @@ class SaveDarkCal(SaveTaskTags):
277
294
  def relative_save_file(self) -> str:
278
295
  return "dark_cal.asdf"
279
296
 
297
+ @property
298
+ def tag_lists_to_save(self) -> list[list[str]]:
299
+ return super().tag_lists_to_save + [
300
+ [CryonirspTag.quality("TASK_TYPES"), CryonirspTag.workflow_task("DarkCalibration")]
301
+ ]
302
+
280
303
 
281
304
  class LoadDarkCal(LoadTaskTags):
282
305
  @property
@@ -293,6 +316,12 @@ class SaveLampCal(SaveTaskTags):
293
316
  def relative_save_file(self) -> str:
294
317
  return "lamp_cal.asdf"
295
318
 
319
+ @property
320
+ def tag_lists_to_save(self) -> list[list[str]]:
321
+ return super().tag_lists_to_save + [
322
+ [CryonirspTag.quality("TASK_TYPES"), CryonirspTag.workflow_task("LampGainCalibration")],
323
+ ]
324
+
296
325
 
297
326
  class LoadLampCal(LoadTaskTags):
298
327
  @property
@@ -309,6 +338,19 @@ class SaveSolarCal(SaveTaskTags):
309
338
  def relative_save_file(self) -> str:
310
339
  return "solar_cal.asdf"
311
340
 
341
+ @property
342
+ def tag_lists_to_save(self) -> list[list[str]]:
343
+ return super().tag_lists_to_save + [
344
+ [
345
+ CryonirspTag.quality("TASK_TYPES"),
346
+ CryonirspTag.workflow_task("CISolarGainCalibration"),
347
+ ],
348
+ [
349
+ CryonirspTag.quality("TASK_TYPES"),
350
+ CryonirspTag.workflow_task("SPSolarGainCalibration"),
351
+ ],
352
+ ]
353
+
312
354
 
313
355
  class LoadSolarCal(LoadTaskTags):
314
356
  @property
@@ -325,6 +367,19 @@ class SaveInstPolCal(SaveTaskTags):
325
367
  def relative_save_file(self) -> str:
326
368
  return "inst_pol_cal.asdf"
327
369
 
370
+ @property
371
+ def tag_lists_to_save(self) -> list[list[str]]:
372
+ return super().tag_lists_to_save + [
373
+ [
374
+ CryonirspTag.quality("TASK_TYPES"),
375
+ CryonirspTag.workflow_task("CIInstrumentPolarizationCalibration"),
376
+ ],
377
+ [
378
+ CryonirspTag.quality("TASK_TYPES"),
379
+ CryonirspTag.workflow_task("SPInstrumentPolarizationCalibration"),
380
+ ],
381
+ ]
382
+
328
383
 
329
384
  class LoadInstPolCal(LoadTaskTags):
330
385
  @property
@@ -21,8 +21,13 @@ from dkist_processing_cryonirsp.tests.conftest import CryonirspConstantsDb
21
21
 
22
22
 
23
23
  @pytest.fixture(scope="function", params=["CI", "SP"])
24
- def cryo_assemble_quality_data_task(tmp_path, recipe_run_id, request) -> AssembleQualityData:
24
+ def cryo_assemble_quality_data_task(
25
+ tmp_path, recipe_run_id, init_cryonirsp_constants_db, request
26
+ ) -> AssembleQualityData:
25
27
  arm_id = request.param
28
+ init_cryonirsp_constants_db(
29
+ recipe_run_id=recipe_run_id, constants_obj=CryonirspConstantsDb(ARM_ID=arm_id)
30
+ )
26
31
  if arm_id == "CI":
27
32
  with CIAssembleQualityData(
28
33
  recipe_run_id=recipe_run_id,
@@ -228,7 +233,7 @@ def quality_metrics(dataframe_json) -> list[Metric]:
228
233
  "bin_1_str": "bin1",
229
234
  "bin_2_str": "bin2",
230
235
  "total_bins": 100,
231
- "num_steps": 2,
236
+ "num_varied_I_sys": 2,
232
237
  },
233
238
  ["QUALITY_POLCAL_LOCAL_PAR_VALS", "QUALITY_TASK_CI BEAM 1"],
234
239
  ),