dkist-processing-cryonirsp 0.0.62__tar.gz → 0.0.63__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 (122) hide show
  1. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/CHANGELOG.rst +19 -0
  2. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/PKG-INFO +1 -1
  3. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/models/tags.py +0 -18
  4. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/parsers/modstates.py +2 -6
  5. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tasks/instrument_polarization.py +11 -2
  6. dkist_processing_cryonirsp-0.0.63/dkist_processing_cryonirsp/tasks/l1_output_data.py +44 -0
  7. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tests/conftest.py +1 -1
  8. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tests/header_models.py +12 -6
  9. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tests/local_trial_workflows/l0_to_l1.py +3 -0
  10. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tests/local_trial_workflows/local_trial_helpers.py +62 -7
  11. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tests/test_assemble_qualilty.py +7 -2
  12. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tests/test_instrument_polarization.py +3 -3
  13. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tests/test_parse.py +97 -57
  14. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp.egg-info/PKG-INFO +1 -1
  15. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp.egg-info/requires.txt +1 -1
  16. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/setup.cfg +1 -1
  17. dkist_processing_cryonirsp-0.0.62/dkist_processing_cryonirsp/tasks/l1_output_data.py +0 -22
  18. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/.gitignore +0 -0
  19. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/.pre-commit-config.yaml +0 -0
  20. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/.readthedocs.yml +0 -0
  21. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/README.rst +0 -0
  22. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/SCIENCE_CHANGELOG.rst +0 -0
  23. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/bitbucket-pipelines.yml +0 -0
  24. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/changelog/.gitempty +0 -0
  25. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/check_changelog_updated.sh +0 -0
  26. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/__init__.py +0 -0
  27. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/models/__init__.py +0 -0
  28. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/models/constants.py +0 -0
  29. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/models/exposure_conditions.py +0 -0
  30. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/models/parameters.py +0 -0
  31. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/models/task_name.py +0 -0
  32. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/parsers/__init__.py +0 -0
  33. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/parsers/cryonirsp_l0_fits_access.py +0 -0
  34. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/parsers/cryonirsp_l1_fits_access.py +0 -0
  35. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/parsers/exposure_conditions.py +0 -0
  36. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/parsers/map_repeats.py +0 -0
  37. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/parsers/measurements.py +0 -0
  38. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/parsers/optical_density_filters.py +0 -0
  39. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/parsers/polarimetric_check.py +0 -0
  40. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/parsers/scan_step.py +0 -0
  41. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/parsers/time.py +0 -0
  42. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/parsers/wavelength.py +0 -0
  43. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tasks/__init__.py +0 -0
  44. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tasks/assemble_movie.py +0 -0
  45. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tasks/bad_pixel_map.py +0 -0
  46. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tasks/beam_boundaries_base.py +0 -0
  47. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tasks/ci_beam_boundaries.py +0 -0
  48. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tasks/ci_science.py +0 -0
  49. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tasks/cryonirsp_base.py +0 -0
  50. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tasks/dark.py +0 -0
  51. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tasks/gain.py +0 -0
  52. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tasks/linearity_correction.py +0 -0
  53. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tasks/make_movie_frames.py +0 -0
  54. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tasks/mixin/__init__.py +0 -0
  55. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tasks/mixin/beam_access.py +0 -0
  56. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tasks/mixin/corrections.py +0 -0
  57. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tasks/mixin/intermediate_frame.py +0 -0
  58. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tasks/mixin/linearized_frame.py +0 -0
  59. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tasks/mixin/shift_measurements.py +0 -0
  60. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tasks/parse.py +0 -0
  61. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tasks/quality_metrics.py +0 -0
  62. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tasks/science_base.py +0 -0
  63. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tasks/sp_beam_boundaries.py +0 -0
  64. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tasks/sp_geometric.py +0 -0
  65. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tasks/sp_science.py +0 -0
  66. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tasks/sp_solar_gain.py +0 -0
  67. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tasks/trial_output_data.py +0 -0
  68. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tasks/write_l1.py +0 -0
  69. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tests/__init__.py +0 -0
  70. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tests/local_trial_workflows/__init__.py +0 -0
  71. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tests/local_trial_workflows/l0_cals_only.py +0 -0
  72. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tests/local_trial_workflows/linearize_only.py +0 -0
  73. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tests/test_assemble_movie.py +0 -0
  74. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tests/test_bad_pixel_maps.py +0 -0
  75. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tests/test_ci_beam_boundaries.py +0 -0
  76. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tests/test_ci_science.py +0 -0
  77. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tests/test_corrections.py +0 -0
  78. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tests/test_cryo_base.py +0 -0
  79. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tests/test_cryo_constants.py +0 -0
  80. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tests/test_dark.py +0 -0
  81. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tests/test_gain.py +0 -0
  82. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tests/test_linearity_correction.py +0 -0
  83. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tests/test_make_movie_frames.py +0 -0
  84. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tests/test_parameters.py +0 -0
  85. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tests/test_quality.py +0 -0
  86. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tests/test_sp_beam_boundaries.py +0 -0
  87. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tests/test_sp_geometric.py +0 -0
  88. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tests/test_sp_make_movie_frames.py +0 -0
  89. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tests/test_sp_science.py +0 -0
  90. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tests/test_sp_solar.py +0 -0
  91. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tests/test_trial_create_quality_report.py +0 -0
  92. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tests/test_trial_output_data.py +0 -0
  93. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tests/test_workflows.py +0 -0
  94. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/tests/test_write_l1.py +0 -0
  95. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/workflows/__init__.py +0 -0
  96. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/workflows/ci_l0_processing.py +0 -0
  97. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/workflows/sp_l0_processing.py +0 -0
  98. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp/workflows/trial_workflows.py +0 -0
  99. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp.egg-info/SOURCES.txt +0 -0
  100. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp.egg-info/dependency_links.txt +0 -0
  101. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/dkist_processing_cryonirsp.egg-info/top_level.txt +0 -0
  102. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/docs/Makefile +0 -0
  103. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/docs/bad_pixel_calibration.rst +0 -0
  104. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/docs/beam_angle_calculation.rst +0 -0
  105. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/docs/beam_boundary_computation.rst +0 -0
  106. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/docs/changelog.rst +0 -0
  107. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/docs/ci_science_calibration.rst +0 -0
  108. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/docs/conf.py +0 -0
  109. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/docs/index.rst +0 -0
  110. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/docs/l0_to_l1_cryonirsp_ci.rst +0 -0
  111. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/docs/l0_to_l1_cryonirsp_sp.rst +0 -0
  112. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/docs/linearization.rst +0 -0
  113. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/docs/make.bat +0 -0
  114. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/docs/requirements.txt +0 -0
  115. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/docs/requirements_table.rst +0 -0
  116. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/docs/scientific_changelog.rst +0 -0
  117. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/docs/sp_science_calibration.rst +0 -0
  118. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/licenses/LICENSE.rst +0 -0
  119. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/pyproject.toml +0 -0
  120. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/science_towncrier.sh +0 -0
  121. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/setup.py +0 -0
  122. {dkist_processing_cryonirsp-0.0.62 → dkist_processing_cryonirsp-0.0.63}/towncrier_science.toml +0 -0
@@ -1,3 +1,22 @@
1
+ v0.0.63 (2024-05-20)
2
+ ====================
3
+
4
+ Bugfixes
5
+ --------
6
+
7
+ - Polcal fit/modulation matrix quality metrics are now correctly rendered in quality report. (`#125 <https://bitbucket.org/dkistdc/dkist-processing-cryonirsp/pull-requests/125>`__)
8
+ - Correctly render L0 quality metrics (individual frame and dataset average and RMS values for dark, lamp, and solar frames).
9
+ Previously these had been missing from quality reports of polarimetric datasets. (`#125 <https://bitbucket.org/dkistdc/dkist-processing-cryonirsp/pull-requests/125>`__)
10
+
11
+
12
+ Misc
13
+ ----
14
+
15
+ - 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>`__)
16
+ - Update `dkist-processing-common` to v6.2.4. This fixes a bug that could cause the quality report to fail to render if
17
+ the demodulation matrices were fit with the (very old) "use_M12" fit mode. (`#126 <https://bitbucket.org/dkistdc/dkist-processing-cryonirsp/pull-requests/126>`__)
18
+
19
+
1
20
  v0.0.62 (2024-05-16)
2
21
  ====================
3
22
 
@@ -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.63
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
@@ -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
@@ -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
+ ]
@@ -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,
@@ -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:
@@ -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
  ),
@@ -46,7 +46,7 @@ class DummyPolcalFitter(PolcalFitter):
46
46
  super().__init__(
47
47
  local_dresser=local_dresser,
48
48
  global_dresser=global_dresser,
49
- fit_mode="use_M12",
49
+ fit_mode="use_M12_I_sys_per_step",
50
50
  init_set="OCCal_VIS",
51
51
  _dont_fit=True,
52
52
  )
@@ -411,7 +411,7 @@ def test_ci_instrument_polarization_calibration_task(
411
411
 
412
412
  quality_mocker.assert_any_call(
413
413
  polcal_fitter=ANY,
414
- label=f"CryoNIRSP CI beam {beam}",
414
+ label=f"CI Beam {beam}",
415
415
  bins_1=task.parameters.polcal_num_spatial_bins,
416
416
  bins_2=task.parameters.polcal_num_spatial_bins,
417
417
  bin_1_type="spatial",
@@ -447,7 +447,7 @@ def test_sp_instrument_polarization_calibration_task(
447
447
 
448
448
  quality_mocker.assert_any_call(
449
449
  polcal_fitter=ANY,
450
- label=f"CryoNIRSP SP beam {beam}",
450
+ label=f"SP Beam {beam}",
451
451
  bins_1=task.parameters.polcal_num_spatial_bins,
452
452
  bins_2=task.parameters.polcal_num_spectral_bins,
453
453
  bin_1_type="spatial",
@@ -39,12 +39,19 @@ def write_dark_frames_to_task(
39
39
  exposure_condition: ExposureConditions,
40
40
  array_shape=(2, 2, 1),
41
41
  tags: list[str] | None = None,
42
+ num_modstates: int = 1,
42
43
  ):
43
- frame_generator = ModulatedDarkHeaders(
44
- array_shape=array_shape, exposure_condition=exposure_condition
45
- )
46
-
47
- num_frames = _write_frames_to_task(task=task, frame_generator=frame_generator, extra_tags=tags)
44
+ num_frames = 0
45
+ for modstate in range(1, num_modstates + 1):
46
+ frame_generator = ModulatedDarkHeaders(
47
+ array_shape=array_shape,
48
+ exposure_condition=exposure_condition,
49
+ num_modstates=num_modstates,
50
+ modstate=modstate,
51
+ )
52
+ num_frames += _write_frames_to_task(
53
+ task=task, frame_generator=frame_generator, extra_tags=tags
54
+ )
48
55
 
49
56
  return num_frames
50
57
 
@@ -55,17 +62,23 @@ def write_lamp_gain_frames_to_task(
55
62
  array_shape=(2, 2, 1),
56
63
  tags: list[str] | None = None,
57
64
  tag_func: Callable[[CryonirspHeaders], list[str]] = lambda x: [],
65
+ num_modstates: int = 1,
58
66
  ):
59
- frame_generator = ModulatedLampGainHeaders(
60
- array_shape=array_shape, exposure_condition=exposure_condition
61
- )
67
+ num_frames = 0
68
+ for modstate in range(1, num_modstates + 1):
69
+ frame_generator = ModulatedLampGainHeaders(
70
+ array_shape=array_shape,
71
+ exposure_condition=exposure_condition,
72
+ num_modstates=num_modstates,
73
+ modstate=modstate,
74
+ )
62
75
 
63
- num_frames = _write_frames_to_task(
64
- task=task,
65
- frame_generator=frame_generator,
66
- extra_tags=tags,
67
- tag_func=tag_func,
68
- )
76
+ num_frames += _write_frames_to_task(
77
+ task=task,
78
+ frame_generator=frame_generator,
79
+ extra_tags=tags,
80
+ tag_func=tag_func,
81
+ )
69
82
 
70
83
  return num_frames
71
84
 
@@ -75,12 +88,20 @@ def write_solar_gain_frames_to_task(
75
88
  exposure_condition: ExposureConditions,
76
89
  array_shape=(2, 2, 1),
77
90
  tags: list[str] | None = None,
91
+ num_modstates: int = 1,
78
92
  ):
79
- frame_generator = ModulatedSolarGainHeaders(
80
- array_shape=array_shape, exposure_condition=exposure_condition
81
- )
93
+ num_frames = 0
94
+ for modstate in range(1, num_modstates + 1):
95
+ frame_generator = ModulatedSolarGainHeaders(
96
+ array_shape=array_shape,
97
+ exposure_condition=exposure_condition,
98
+ num_modstates=num_modstates,
99
+ modstate=modstate,
100
+ )
82
101
 
83
- num_frames = _write_frames_to_task(task=task, frame_generator=frame_generator, extra_tags=tags)
102
+ num_frames += _write_frames_to_task(
103
+ task=task, frame_generator=frame_generator, extra_tags=tags
104
+ )
84
105
 
85
106
  return num_frames
86
107
 
@@ -241,13 +262,20 @@ def make_linearized_test_frames(
241
262
  task,
242
263
  exposure_condition=condition,
243
264
  tags=lin_tag,
265
+ num_modstates=num_modstates or 1, # We *always* need dark frames
244
266
  )
245
267
 
246
268
  num_lamp = write_lamp_gain_frames_to_task(
247
- task, tags=lin_tag, exposure_condition=lamp_exposure_condition
269
+ task,
270
+ tags=lin_tag,
271
+ exposure_condition=lamp_exposure_condition,
272
+ num_modstates=num_modstates or 1, # We *always* need dark frames
248
273
  )
249
274
  num_solar = write_solar_gain_frames_to_task(
250
- task, tags=lin_tag, exposure_condition=solar_exposure_condition
275
+ task,
276
+ tags=lin_tag,
277
+ exposure_condition=solar_exposure_condition,
278
+ num_modstates=num_modstates or 1, # We *always* need dark frames
251
279
  )
252
280
 
253
281
  num_polcal += write_polcal_frames_to_task(
@@ -434,69 +462,81 @@ def test_parse_cryonirsp_linearized_data(parse_linearized_task, arm_id, number_o
434
462
  )
435
463
 
436
464
  task()
437
-
438
- assert (
439
- len(list(task.read(tags=[CryonirspTag.linearized(), CryonirspTag.task_dark()]))) == num_dark
440
- )
441
-
442
- assert (
443
- len(
444
- list(
445
- parse_linearized_task.read(
446
- tags=[CryonirspTag.linearized(), CryonirspTag.task_lamp_gain()]
465
+ num_actual_modstates = number_of_modstates or 1
466
+ for modstate in range(1, num_actual_modstates + 1):
467
+ assert (
468
+ len(
469
+ list(
470
+ task.read(
471
+ tags=[
472
+ CryonirspTag.linearized(),
473
+ CryonirspTag.task_dark(),
474
+ CryonirspTag.modstate(modstate),
475
+ ]
476
+ )
447
477
  )
448
478
  )
479
+ == num_dark / num_actual_modstates
449
480
  )
450
- == num_lamp
451
- )
452
481
 
453
- assert (
454
- len(
455
- list(
456
- parse_linearized_task.read(
457
- tags=[CryonirspTag.linearized(), CryonirspTag.task_solar_gain()]
482
+ assert (
483
+ len(
484
+ list(
485
+ task.read(
486
+ tags=[
487
+ CryonirspTag.linearized(),
488
+ CryonirspTag.task_lamp_gain(),
489
+ CryonirspTag.modstate(modstate),
490
+ ]
491
+ )
458
492
  )
459
493
  )
494
+ == num_lamp / num_actual_modstates
460
495
  )
461
- == num_solar
462
- )
463
496
 
464
- assert (
465
- len(
466
- list(
467
- parse_linearized_task.read(
468
- tags=[CryonirspTag.linearized(), CryonirspTag.task_polcal()]
497
+ assert (
498
+ len(
499
+ list(
500
+ task.read(
501
+ tags=[
502
+ CryonirspTag.linearized(),
503
+ CryonirspTag.task_solar_gain(),
504
+ CryonirspTag.modstate(modstate),
505
+ ]
506
+ )
469
507
  )
470
508
  )
509
+ == num_solar / num_actual_modstates
471
510
  )
472
- == num_polcal
473
- )
474
511
 
475
- assert (
476
- len(
477
- list(
478
- parse_linearized_task.read(
479
- tags=[CryonirspTag.linearized(), CryonirspTag.task_observe()]
512
+ assert (
513
+ len(
514
+ list(
515
+ task.read(
516
+ tags=[
517
+ CryonirspTag.linearized(),
518
+ CryonirspTag.task_polcal(),
519
+ CryonirspTag.modstate(modstate),
520
+ ]
521
+ )
480
522
  )
481
523
  )
524
+ == num_polcal / num_actual_modstates
482
525
  )
483
- == num_obs
484
- )
485
526
 
486
- if number_of_modstates in [0, 1]:
487
527
  assert (
488
528
  len(
489
529
  list(
490
- parse_linearized_task.read(
530
+ task.read(
491
531
  tags=[
492
532
  CryonirspTag.linearized(),
493
533
  CryonirspTag.task_observe(),
494
- CryonirspTag.modstate(1),
534
+ CryonirspTag.modstate(modstate),
495
535
  ]
496
536
  )
497
537
  )
498
538
  )
499
- == num_obs
539
+ == num_obs / num_actual_modstates
500
540
  )
501
541
 
502
542
 
@@ -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.63
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
@@ -2,7 +2,7 @@ Pillow==10.2.0
2
2
  astropy==5.3.2
3
3
  dkist-fits-specifications==4.2.0
4
4
  dkist-header-validator==5.1.0
5
- dkist-processing-common==6.2.3
5
+ dkist-processing-common==6.2.4
6
6
  dkist-processing-math==2.0.0
7
7
  dkist-processing-pac==3.0.1
8
8
  dkist-spectral-lines==2.0.0
@@ -21,7 +21,7 @@ install_requires =
21
21
  astropy == 5.3.2
22
22
  dkist-fits-specifications == 4.2.0
23
23
  dkist-header-validator == 5.1.0
24
- dkist-processing-common == 6.2.3
24
+ dkist-processing-common == 6.2.4
25
25
  dkist-processing-math == 2.0.0
26
26
  dkist-processing-pac == 3.0.1
27
27
  dkist-spectral-lines == 2.0.0
@@ -1,22 +0,0 @@
1
- """Subclasses of AssembleQualityData that cause the correct polcal metrics to build."""
2
- from dkist_processing_common.tasks import AssembleQualityData
3
-
4
- __all__ = ["CIAssembleQualityData", "SPAssembleQualityData"]
5
-
6
-
7
- class CIAssembleQualityData(AssembleQualityData):
8
- """Subclass just so that the polcal_label_list can be populated."""
9
-
10
- @property
11
- def polcal_label_list(self) -> list[str]:
12
- """Return label(s) for Cryo CI."""
13
- return ["CI Beam 1"]
14
-
15
-
16
- class SPAssembleQualityData(AssembleQualityData):
17
- """Subclass just so that the polcal_label_list can be populated."""
18
-
19
- @property
20
- def polcal_label_list(self) -> list[str]:
21
- """Return labels for beams 1 and 2."""
22
- return ["SP Beam 1", "SP Beam 2"]