dkist-processing-cryonirsp 1.1.1rc1__tar.gz → 1.2.0__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 (128) hide show
  1. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/CHANGELOG.rst +39 -0
  2. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/PKG-INFO +1 -1
  3. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/bitbucket-pipelines.yml +1 -0
  4. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tasks/assemble_movie.py +5 -0
  5. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tasks/make_movie_frames.py +9 -4
  6. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tasks/quality_metrics.py +3 -3
  7. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tests/local_trial_workflows/local_trial_helpers.py +5 -0
  8. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tests/test_make_movie_frames.py +1 -2
  9. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tests/test_quality.py +1 -1
  10. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tests/test_sp_make_movie_frames.py +1 -1
  11. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tests/test_write_l1.py +62 -56
  12. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/workflows/ci_l0_processing.py +17 -9
  13. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/workflows/sp_l0_processing.py +17 -9
  14. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/workflows/trial_workflows.py +40 -14
  15. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp.egg-info/PKG-INFO +1 -1
  16. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp.egg-info/SOURCES.txt +0 -2
  17. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp.egg-info/requires.txt +3 -3
  18. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/setup.cfg +2 -2
  19. dkist_processing_cryonirsp-1.1.1rc1/changelog/147.bugfix.rst +0 -2
  20. dkist_processing_cryonirsp-1.1.1rc1/changelog/148.bugfix.rst +0 -1
  21. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/.gitignore +0 -0
  22. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/.pre-commit-config.yaml +0 -0
  23. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/.readthedocs.yml +0 -0
  24. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/README.rst +0 -0
  25. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/SCIENCE_CHANGELOG.rst +0 -0
  26. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/changelog/.gitempty +0 -0
  27. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/check_changelog_updated.sh +0 -0
  28. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/__init__.py +0 -0
  29. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/config.py +0 -0
  30. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/models/__init__.py +0 -0
  31. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/models/constants.py +0 -0
  32. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/models/exposure_conditions.py +0 -0
  33. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/models/parameters.py +0 -0
  34. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/models/tags.py +0 -0
  35. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/models/task_name.py +0 -0
  36. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/parsers/__init__.py +0 -0
  37. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/parsers/cryonirsp_l0_fits_access.py +0 -0
  38. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/parsers/cryonirsp_l1_fits_access.py +0 -0
  39. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/parsers/exposure_conditions.py +0 -0
  40. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/parsers/map_repeats.py +0 -0
  41. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/parsers/measurements.py +0 -0
  42. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/parsers/modstates.py +0 -0
  43. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/parsers/optical_density_filters.py +0 -0
  44. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/parsers/polarimetric_check.py +0 -0
  45. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/parsers/scan_step.py +0 -0
  46. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/parsers/time.py +0 -0
  47. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/parsers/wavelength.py +0 -0
  48. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tasks/__init__.py +0 -0
  49. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tasks/bad_pixel_map.py +0 -0
  50. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tasks/beam_boundaries_base.py +0 -0
  51. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tasks/ci_beam_boundaries.py +0 -0
  52. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tasks/ci_science.py +0 -0
  53. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tasks/cryonirsp_base.py +0 -0
  54. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tasks/dark.py +0 -0
  55. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tasks/gain.py +0 -0
  56. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tasks/instrument_polarization.py +0 -0
  57. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tasks/l1_output_data.py +0 -0
  58. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tasks/linearity_correction.py +0 -0
  59. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tasks/mixin/__init__.py +0 -0
  60. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tasks/mixin/beam_access.py +0 -0
  61. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tasks/mixin/corrections.py +0 -0
  62. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tasks/mixin/intermediate_frame.py +0 -0
  63. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tasks/mixin/linearized_frame.py +0 -0
  64. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tasks/mixin/shift_measurements.py +0 -0
  65. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tasks/parse.py +0 -0
  66. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tasks/science_base.py +0 -0
  67. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tasks/sp_beam_boundaries.py +0 -0
  68. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tasks/sp_dispersion_axis_correction.py +0 -0
  69. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tasks/sp_geometric.py +0 -0
  70. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tasks/sp_science.py +0 -0
  71. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tasks/sp_solar_gain.py +0 -0
  72. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tasks/trial_output_data.py +0 -0
  73. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tasks/write_l1.py +0 -0
  74. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tests/__init__.py +0 -0
  75. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tests/conftest.py +0 -0
  76. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tests/header_models.py +0 -0
  77. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tests/local_trial_workflows/__init__.py +0 -0
  78. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tests/local_trial_workflows/l0_cals_only.py +0 -0
  79. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tests/local_trial_workflows/l0_to_l1.py +0 -0
  80. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tests/local_trial_workflows/linearize_only.py +0 -0
  81. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tests/test_assemble_movie.py +0 -0
  82. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tests/test_assemble_qualilty.py +0 -0
  83. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tests/test_bad_pixel_maps.py +0 -0
  84. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tests/test_ci_beam_boundaries.py +0 -0
  85. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tests/test_ci_science.py +0 -0
  86. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tests/test_corrections.py +0 -0
  87. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tests/test_cryo_base.py +0 -0
  88. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tests/test_cryo_constants.py +0 -0
  89. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tests/test_dark.py +0 -0
  90. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tests/test_gain.py +0 -0
  91. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tests/test_instrument_polarization.py +0 -0
  92. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tests/test_linearity_correction.py +0 -0
  93. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tests/test_parameters.py +0 -0
  94. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tests/test_parse.py +0 -0
  95. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tests/test_sp_beam_boundaries.py +0 -0
  96. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tests/test_sp_dispersion_axis_correction.py +0 -0
  97. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tests/test_sp_geometric.py +0 -0
  98. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tests/test_sp_science.py +0 -0
  99. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tests/test_sp_solar.py +0 -0
  100. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tests/test_trial_create_quality_report.py +0 -0
  101. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tests/test_trial_output_data.py +0 -0
  102. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/tests/test_workflows.py +0 -0
  103. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp/workflows/__init__.py +0 -0
  104. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp.egg-info/dependency_links.txt +0 -0
  105. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/dkist_processing_cryonirsp.egg-info/top_level.txt +0 -0
  106. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/docs/Makefile +0 -0
  107. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/docs/bad_pixel_calibration.rst +0 -0
  108. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/docs/beam_angle_calculation.rst +0 -0
  109. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/docs/beam_boundary_computation.rst +0 -0
  110. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/docs/changelog.rst +0 -0
  111. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/docs/ci_science_calibration.rst +0 -0
  112. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/docs/conf.py +0 -0
  113. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/docs/index.rst +0 -0
  114. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/docs/l0_to_l1_cryonirsp_ci-full-trial.rst +0 -0
  115. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/docs/l0_to_l1_cryonirsp_ci.rst +0 -0
  116. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/docs/l0_to_l1_cryonirsp_sp-full-trial.rst +0 -0
  117. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/docs/l0_to_l1_cryonirsp_sp.rst +0 -0
  118. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/docs/linearization.rst +0 -0
  119. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/docs/make.bat +0 -0
  120. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/docs/requirements.txt +0 -0
  121. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/docs/requirements_table.rst +0 -0
  122. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/docs/scientific_changelog.rst +0 -0
  123. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/docs/sp_science_calibration.rst +0 -0
  124. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/licenses/LICENSE.rst +0 -0
  125. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/pyproject.toml +0 -0
  126. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/science_towncrier.sh +0 -0
  127. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/setup.py +0 -0
  128. {dkist_processing_cryonirsp-1.1.1rc1 → dkist_processing_cryonirsp-1.2.0}/towncrier_science.toml +0 -0
@@ -1,3 +1,42 @@
1
+ v1.2.0 (2024-09-23)
2
+ ===================
3
+
4
+ Features
5
+ --------
6
+
7
+ - Reorder task dependencies in workflows. Movie and L1 quality tasks are no longer dependent on the presence of OUTPUT
8
+ frames and thus can be run in parallel with the `WriteL1` task. (`#152 <https://bitbucket.org/dkistdc/dkist-processing-cryonirsp/pull-requests/152>`__)
9
+
10
+
11
+ Misc
12
+ ----
13
+
14
+ - Use CALIBRATED instead of OUTPUT frames in post-science movie and quality tasks. This doesn't change their output at all (the arrays are the same), but
15
+ it's necessary for `dkist-processing-common >= 10.0.0` that will break using OUTPUT frames. (`#151 <https://bitbucket.org/dkistdc/dkist-processing-cryonirsp/pull-requests/151>`__)
16
+ - Remove `AssembleCryonirspMovie` as workflow dependency on `SubmitDatasetMetadata`. This dependency has been unnecessary
17
+ since the introduction of `SubmitDatasetMetadata` in v0.0.60. (`#151 <https://bitbucket.org/dkistdc/dkist-processing-cryonirsp/pull-requests/151>`__)
18
+
19
+
20
+ v1.1.2 (2024-09-19)
21
+ ===================
22
+
23
+ Misc
24
+ ----
25
+
26
+ - Bump `dkist-quality` to v1.1.1. This fixes raincloud plot rendering in trial workflows. (`#152 <https://bitbucket.org/dkistdc/dkist-processing-cryonirsp/pull-requests/152>`__)
27
+
28
+
29
+ v1.1.1 (2024-09-18)
30
+ ===================
31
+
32
+ Bugfixes
33
+ --------
34
+
35
+ - Add validation in linearity_correction task to ensure that the value of NUM_FRAMES_IN_RAMP is the same
36
+ across all frames in a ramp, and that the value of NUM_FRAMES_IN_RAMP actually matches the number of frames found. (`#147 <https://bitbucket.org/dkistdc/dkist-processing-cryonirsp/pull-requests/147>`__)
37
+ - When writing linearized frames, use a fixed tag list as opposed to one derived from L0 data to alleviate load on redis. (`#148 <https://bitbucket.org/dkistdc/dkist-processing-cryonirsp/pull-requests/148>`__)
38
+
39
+
1
40
  v1.1.0 (2024-09-10)
2
41
  ===================
3
42
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dkist_processing_cryonirsp
3
- Version: 1.1.1rc1
3
+ Version: 1.2.0
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
@@ -47,6 +47,7 @@ definitions:
47
47
  caches:
48
48
  - pip
49
49
  name: Test
50
+ size: 4x
50
51
  script:
51
52
  - pip install -U pip
52
53
  - pip install .[test]
@@ -119,6 +119,7 @@ class AssembleCryonirspMovieBase(AssembleMovie):
119
119
  return line
120
120
 
121
121
 
122
+ # See note below on `SPAssembleCryonirspMovie`
122
123
  class AssembleCryonirspMovie(AssembleCryonirspMovieBase):
123
124
  """
124
125
  Assemble all CryoNIRSP CI movie frames (tagged with CryonirspTag.movie_frame()) into an mp4 movie file.
@@ -162,6 +163,10 @@ class AssembleCryonirspMovie(AssembleCryonirspMovieBase):
162
163
  return tags
163
164
 
164
165
 
166
+ # NOTE:
167
+ # This task isn't used right now because the SP movies need some better handling of the wavelength dimension.
168
+ # For the time being both arms use the `MakeCryonirspMovieFrames` task above.
169
+ # See PR #91 for more information.
165
170
  class SPAssembleCryonirspMovie(AssembleCryonirspMovieBase):
166
171
  """
167
172
  Assemble all CryoNIRSP SP movie frames (tagged with CryonirspTag.movie_frame()) into an mp4 movie file.
@@ -67,7 +67,7 @@ class MakeCryonirspMovieFramesBase(CryonirspTaskBase, ABC):
67
67
  self.read(
68
68
  tags=[
69
69
  CryonirspTag.frame(),
70
- CryonirspTag.output(),
70
+ CryonirspTag.calibrated(),
71
71
  CryonirspTag.stokes(stokes_state),
72
72
  CryonirspTag.meas_num(meas_num),
73
73
  CryonirspTag.map_scan(map_scan),
@@ -81,6 +81,7 @@ class MakeCryonirspMovieFramesBase(CryonirspTaskBase, ABC):
81
81
  return header
82
82
 
83
83
 
84
+ # See note below on `SPMakeCryonirspMovieFrames`
84
85
  class MakeCryonirspMovieFrames(MakeCryonirspMovieFramesBase):
85
86
  """Make CryoNIRSP movie frames for the Context Imager and tag with CryonirspTag.movie_frame()."""
86
87
 
@@ -150,7 +151,7 @@ class MakeCryonirspMovieFrames(MakeCryonirspMovieFramesBase):
150
151
  self.read(
151
152
  tags=[
152
153
  CryonirspTag.frame(),
153
- CryonirspTag.output(),
154
+ CryonirspTag.calibrated(),
154
155
  CryonirspTag.stokes(stokes_state),
155
156
  CryonirspTag.meas_num(meas_num),
156
157
  CryonirspTag.map_scan(map_scan),
@@ -164,6 +165,10 @@ class MakeCryonirspMovieFrames(MakeCryonirspMovieFramesBase):
164
165
  return movie_frame
165
166
 
166
167
 
168
+ # NOTE:
169
+ # This task isn't used right now because the SP movies need some better handling of the wavelength dimension.
170
+ # For the time being both arms use the `MakeCryonirspMovieFrames` task above.
171
+ # See PR #91 for more information.
167
172
  class SPMakeCryonirspMovieFrames(MakeCryonirspMovieFramesBase):
168
173
  """Make CryoNIRSP movie frames for the Spectropolarimeter and tag with CryonirspTag.movie_frame()."""
169
174
 
@@ -249,7 +254,7 @@ class SPMakeCryonirspMovieFrames(MakeCryonirspMovieFramesBase):
249
254
  self.read(
250
255
  tags=[
251
256
  CryonirspTag.frame(),
252
- CryonirspTag.output(),
257
+ CryonirspTag.calibrated(),
253
258
  CryonirspTag.stokes(stokes_state),
254
259
  CryonirspTag.meas_num(meas_num),
255
260
  CryonirspTag.map_scan(map_scan),
@@ -275,7 +280,7 @@ class SPMakeCryonirspMovieFrames(MakeCryonirspMovieFramesBase):
275
280
  self.read(
276
281
  tags=[
277
282
  CryonirspTag.frame(),
278
- CryonirspTag.output(),
283
+ CryonirspTag.calibrated(),
279
284
  CryonirspTag.stokes(stokes_state),
280
285
  CryonirspTag.meas_num(meas_num),
281
286
  CryonirspTag.map_scan(map_scan),
@@ -205,7 +205,7 @@ class CryonirspL1QualityMetrics(CryonirspTaskBase, QualityMixin):
205
205
  frame = next(
206
206
  self.read(
207
207
  tags=[
208
- CryonirspTag.output(),
208
+ CryonirspTag.calibrated(),
209
209
  CryonirspTag.frame(),
210
210
  CryonirspTag.scan_step(step),
211
211
  CryonirspTag.map_scan(map_scan),
@@ -234,7 +234,7 @@ class CryonirspL1QualityMetrics(CryonirspTaskBase, QualityMixin):
234
234
  frame: L1QualityFitsAccess = next(
235
235
  self.read(
236
236
  tags=[
237
- CryonirspTag.output(),
237
+ CryonirspTag.calibrated(),
238
238
  CryonirspTag.frame(),
239
239
  CryonirspTag.scan_step(step),
240
240
  CryonirspTag.map_scan(map_scan),
@@ -255,7 +255,7 @@ class CryonirspL1QualityMetrics(CryonirspTaskBase, QualityMixin):
255
255
 
256
256
  def compile_noise_data(self, stokes: str) -> _QualityData:
257
257
  """Compile lists of noise values and their observation times."""
258
- tags = [CryonirspTag.output(), CryonirspTag.frame(), CryonirspTag.stokes(stokes)]
258
+ tags = [CryonirspTag.calibrated(), CryonirspTag.frame(), CryonirspTag.stokes(stokes)]
259
259
  frames: Generator[L1QualityFitsAccess, None, None] = self.read(
260
260
  tags=tags,
261
261
  decoder=fits_access_decoder,
@@ -407,6 +407,11 @@ class SaveInstPolCal(SaveTaskTags):
407
407
  CryonirspTag.quality("TASK_TYPES"),
408
408
  CryonirspTag.workflow_task("SPInstrumentPolarizationCalibration"),
409
409
  ],
410
+ [CryonirspTag.quality("POLCAL_CONSTANT_PAR_VALS")],
411
+ [CryonirspTag.quality("POLCAL_GLOBAL_PAR_VALS")],
412
+ [CryonirspTag.quality("POLCAL_LOCAL_PAR_VALS")],
413
+ [CryonirspTag.quality("POLCAL_FIT_RESIDUALS")],
414
+ [CryonirspTag.quality("POLCAL_EFFICIENCY")],
410
415
  ]
411
416
 
412
417
 
@@ -1,6 +1,5 @@
1
1
  from datetime import datetime
2
2
 
3
- import numpy as np
4
3
  import pytest
5
4
  from astropy.io import fits
6
5
  from dkist_header_validator import spec122_validator
@@ -77,7 +76,7 @@ def movie_frames_task(tmp_path, recipe_run_id, init_cryonirsp_constants_db, requ
77
76
  task.write(
78
77
  data=hdul,
79
78
  tags=[
80
- CryonirspTag.output(),
79
+ CryonirspTag.calibrated(),
81
80
  CryonirspTag.frame(),
82
81
  CryonirspTag.map_scan(map_scan),
83
82
  CryonirspTag.scan_step(scan_step),
@@ -115,7 +115,7 @@ def cryo_l1_quality_task(tmp_path, recipe_run_id, init_cryonirsp_constants_db):
115
115
  task.write(
116
116
  data=hdul,
117
117
  tags=[
118
- CryonirspTag.output(),
118
+ CryonirspTag.calibrated(),
119
119
  CryonirspTag.frame(),
120
120
  CryonirspTag.stokes(stokes_param),
121
121
  CryonirspTag.scan_step(scan_step),
@@ -81,7 +81,7 @@ def sp_movie_frames_task(tmp_path, recipe_run_id, init_cryonirsp_constants_db, r
81
81
  task.write(
82
82
  data=hdul,
83
83
  tags=[
84
- CryonirspTag.output(),
84
+ CryonirspTag.calibrated(),
85
85
  CryonirspTag.frame(),
86
86
  CryonirspTag.map_scan(map_scan),
87
87
  CryonirspTag.scan_step(scan_step),
@@ -1,4 +1,5 @@
1
1
  from datetime import datetime
2
+ from pathlib import Path
2
3
 
3
4
  import numpy as np
4
5
  import pytest
@@ -176,56 +177,54 @@ def test_write_l1_frame(write_l1_task, mocker, arm_id, num_stokes_params, num_ma
176
177
  task()
177
178
 
178
179
  for stokes_param in stokes_params:
179
- for map_scan in range(1, task.constants.num_map_scans + 1):
180
- for scan_step in range(1, task.constants.num_scan_steps + 1):
181
- for meas_num in range(1, task.constants.num_meas + 1):
182
- common_tags = [
183
- CryonirspTag.frame(),
184
- CryonirspTag.stokes(stokes_param),
185
- CryonirspTag.map_scan(map_scan),
186
- CryonirspTag.scan_step(scan_step),
187
- CryonirspTag.meas_num(meas_num),
188
- ]
189
- output_files = list(task.read(tags=common_tags + [CryonirspTag.output()]))
190
- calibrated_files = list(
191
- task.read(tags=common_tags + [CryonirspTag.calibrated()])
192
- )
193
- assert len(output_files) == 1
194
- output_file = output_files.pop()
195
- assert output_file.exists
196
- assert output_file.name.startswith(f"CRYO-NIRSP_{arm_id}_")
197
- assert spec214_validator.validate(output_file, extra=False)
198
- hdu_list = fits.open(output_file)
199
- header = hdu_list[1].header
200
- assert len(hdu_list) == 2 # Primary, CompImage
201
- assert type(hdu_list[0]) is fits.PrimaryHDU
202
- assert type(hdu_list[1]) is fits.CompImageHDU
203
- axis_num = 1
204
- if arm_id == "CI":
205
- longitude_axis_tests(axis_num, header)
206
- ci_spatial_axis_correction_tests(axis_num, original_headers, header)
207
- else:
208
- spectral_axis_tests(axis_num, header)
209
- sp_spatial_axis_correction_tests(axis_num, original_headers, header)
210
- sp_spectral_axis_correction_tests(original_headers, header)
211
- axis_num += 1
212
- latitude_axis_tests(axis_num, arm_id, header)
213
- axis_num += 1
214
- if task.constants.num_meas > 1:
215
- measurement_axis_tests(axis_num, header, task)
216
- axis_num += 1
217
- scan_step_axis_tests(axis_num, arm_id, header, task)
218
- if task.constants.num_map_scans > 1:
219
- axis_num += 1
220
- map_scan_tests(axis_num, header, task)
221
- if task.constants.correct_for_polarization:
222
- axis_num += 1
223
- stokes_axis_tests(axis_num, header)
224
-
225
- # Other general tests
226
- general_header_tests(axis_num, header, task, arm_id, calibrated_files)
227
-
228
- axis_flip_tests(original_headers, header, arm_id)
180
+ common_tags = [
181
+ CryonirspTag.frame(),
182
+ CryonirspTag.stokes(stokes_param),
183
+ ]
184
+ output_files = list(task.read(tags=common_tags + [CryonirspTag.output()]))
185
+ calibrated_files = list(task.read(tags=common_tags + [CryonirspTag.calibrated()]))
186
+ assert (
187
+ len(output_files)
188
+ == task.constants.num_map_scans
189
+ * task.constants.num_scan_steps
190
+ * task.constants.num_meas
191
+ )
192
+ preserve_date_tests(output_files, calibrated_files)
193
+ for output_file in output_files:
194
+ assert output_file.exists
195
+ assert output_file.name.startswith(f"CRYO-NIRSP_{arm_id}_")
196
+ assert spec214_validator.validate(output_file, extra=False)
197
+ hdu_list = fits.open(output_file)
198
+ header = hdu_list[1].header
199
+ assert len(hdu_list) == 2 # Primary, CompImage
200
+ assert type(hdu_list[0]) is fits.PrimaryHDU
201
+ assert type(hdu_list[1]) is fits.CompImageHDU
202
+ axis_num = 1
203
+ if arm_id == "CI":
204
+ longitude_axis_tests(axis_num, header)
205
+ ci_spatial_axis_correction_tests(axis_num, original_headers, header)
206
+ else:
207
+ spectral_axis_tests(axis_num, header)
208
+ sp_spatial_axis_correction_tests(axis_num, original_headers, header)
209
+ sp_spectral_axis_correction_tests(original_headers, header)
210
+ axis_num += 1
211
+ latitude_axis_tests(axis_num, arm_id, header)
212
+ axis_num += 1
213
+ if task.constants.num_meas > 1:
214
+ measurement_axis_tests(axis_num, header, task)
215
+ axis_num += 1
216
+ scan_step_axis_tests(axis_num, arm_id, header, task)
217
+ if task.constants.num_map_scans > 1:
218
+ axis_num += 1
219
+ map_scan_tests(axis_num, header, task)
220
+ if task.constants.correct_for_polarization:
221
+ axis_num += 1
222
+ stokes_axis_tests(axis_num, header)
223
+
224
+ # Other general tests
225
+ general_header_tests(axis_num, header, task, arm_id)
226
+
227
+ axis_flip_tests(original_headers, header, arm_id)
229
228
 
230
229
 
231
230
  def sp_spatial_axis_correction_tests(
@@ -382,12 +381,24 @@ def axis_flip_tests(original_header: fits.Header, header: fits.Header, arm_id: s
382
381
  pass
383
382
 
384
383
 
384
+ def preserve_date_tests(output_files: list[Path], calibrated_files: list[Path]) -> None:
385
+ # Make sure we didn't overwrite pre-computed DATE-BEG and DATE-END keys
386
+ cal_headers = [fits.getheader(f) for f in calibrated_files]
387
+ output_headers = [fits.getheader(f, ext=1) for f in output_files]
388
+
389
+ assert sorted([h["DATE-BEG"] for h in cal_headers]) == sorted(
390
+ [h["DATE-BEG"] for h in output_headers]
391
+ )
392
+ assert sorted([h["DATE-END"] for h in cal_headers]) == sorted(
393
+ [h["DATE-END"] for h in output_headers]
394
+ )
395
+
396
+
385
397
  def general_header_tests(
386
398
  axis_num: int,
387
399
  header: fits.Header,
388
400
  task: CryonirspWriteL1Frame,
389
401
  arm_id: str,
390
- calibrated_files: list,
391
402
  ):
392
403
  # Other general tests
393
404
  assert header["DAAXES"] == 2
@@ -404,11 +415,6 @@ def general_header_tests(
404
415
  header["CAL_URL"]
405
416
  == f"{task.docs_base_url}/projects/{task.constants.instrument.lower()}/en/v{calvers}/{task.workflow_name}.html"
406
417
  )
407
- cal_header = fits.open(calibrated_files.pop())[0].header
408
-
409
- # Make sure we didn't overwrite pre-computed DATE-BEG and DATE-END keys
410
- assert header["DATE-BEG"] == cal_header["DATE-BEG"]
411
- assert header["DATE-END"] == cal_header["DATE-END"]
412
418
  date_avg = (
413
419
  (Time(header["DATE-END"], precision=6) - Time(header["DATE-BEG"], precision=6)) / 2
414
420
  + Time(header["DATE-BEG"], precision=6)
@@ -35,6 +35,8 @@ l0_pipeline = Workflow(
35
35
  workflow_package=__package__,
36
36
  )
37
37
  l0_pipeline.add_node(task=TransferL0Data, upstreams=None)
38
+
39
+ # Science flow
38
40
  l0_pipeline.add_node(task=ParseL0CryonirspRampData, upstreams=TransferL0Data)
39
41
  l0_pipeline.add_node(
40
42
  task=LinearityCorrection,
@@ -42,7 +44,6 @@ l0_pipeline.add_node(
42
44
  upstreams=ParseL0CryonirspRampData,
43
45
  )
44
46
  l0_pipeline.add_node(task=ParseL0CryonirspCILinearizedData, upstreams=LinearityCorrection)
45
- l0_pipeline.add_node(task=CryonirspL0QualityMetrics, upstreams=ParseL0CryonirspCILinearizedData)
46
47
  l0_pipeline.add_node(task=BadPixelMapCalibration, upstreams=ParseL0CryonirspCILinearizedData)
47
48
  l0_pipeline.add_node(task=CIBeamBoundariesCalibration, upstreams=BadPixelMapCalibration)
48
49
  l0_pipeline.add_node(task=DarkCalibration, upstreams=CIBeamBoundariesCalibration)
@@ -51,19 +52,26 @@ l0_pipeline.add_node(task=CISolarGainCalibration, upstreams=LampGainCalibration)
51
52
  l0_pipeline.add_node(task=CIInstrumentPolarizationCalibration, upstreams=CISolarGainCalibration)
52
53
  l0_pipeline.add_node(task=CIScienceCalibration, upstreams=CIInstrumentPolarizationCalibration)
53
54
  l0_pipeline.add_node(task=CIWriteL1Frame, upstreams=CIScienceCalibration)
54
- l0_pipeline.add_node(task=QualityL1Metrics, upstreams=CIWriteL1Frame)
55
- l0_pipeline.add_node(task=CryonirspL1QualityMetrics, upstreams=CIWriteL1Frame)
55
+
56
+ # Movie flow
57
+ l0_pipeline.add_node(task=MakeCryonirspMovieFrames, upstreams=CIScienceCalibration)
58
+ l0_pipeline.add_node(task=AssembleCryonirspMovie, upstreams=MakeCryonirspMovieFrames)
59
+
60
+ # Quality flow
61
+ l0_pipeline.add_node(task=CryonirspL0QualityMetrics, upstreams=ParseL0CryonirspCILinearizedData)
62
+ l0_pipeline.add_node(task=QualityL1Metrics, upstreams=CIScienceCalibration)
63
+ l0_pipeline.add_node(task=CryonirspL1QualityMetrics, upstreams=CIScienceCalibration)
56
64
  l0_pipeline.add_node(
57
65
  task=CIAssembleQualityData,
58
66
  upstreams=[CryonirspL0QualityMetrics, QualityL1Metrics, CryonirspL1QualityMetrics],
59
67
  )
60
- l0_pipeline.add_node(task=MakeCryonirspMovieFrames, upstreams=CIWriteL1Frame)
61
- l0_pipeline.add_node(task=AssembleCryonirspMovie, upstreams=MakeCryonirspMovieFrames)
62
- l0_pipeline.add_node(
63
- task=SubmitDatasetMetadata, upstreams=[AssembleCryonirspMovie, CIAssembleQualityData]
64
- )
65
- l0_pipeline.add_node(task=TransferL1Data, upstreams=AssembleCryonirspMovie)
68
+
69
+ # Output flow
70
+ l0_pipeline.add_node(task=SubmitDatasetMetadata, upstreams=[CIWriteL1Frame, CIAssembleQualityData])
71
+ l0_pipeline.add_node(task=TransferL1Data, upstreams=[CIWriteL1Frame, AssembleCryonirspMovie])
66
72
  l0_pipeline.add_node(
67
73
  task=PublishCatalogAndQualityMessages, upstreams=[SubmitDatasetMetadata, TransferL1Data]
68
74
  )
75
+
76
+ # goodbye
69
77
  l0_pipeline.add_node(task=Teardown, upstreams=PublishCatalogAndQualityMessages)
@@ -37,6 +37,8 @@ l0_pipeline = Workflow(
37
37
  workflow_package=__package__,
38
38
  )
39
39
  l0_pipeline.add_node(task=TransferL0Data, upstreams=None)
40
+
41
+ # Science flow
40
42
  l0_pipeline.add_node(task=ParseL0CryonirspRampData, upstreams=TransferL0Data)
41
43
  l0_pipeline.add_node(
42
44
  task=LinearityCorrection,
@@ -44,7 +46,6 @@ l0_pipeline.add_node(
44
46
  upstreams=ParseL0CryonirspRampData,
45
47
  )
46
48
  l0_pipeline.add_node(task=ParseL0CryonirspSPLinearizedData, upstreams=LinearityCorrection)
47
- l0_pipeline.add_node(task=CryonirspL0QualityMetrics, upstreams=ParseL0CryonirspSPLinearizedData)
48
49
  l0_pipeline.add_node(task=BadPixelMapCalibration, upstreams=ParseL0CryonirspSPLinearizedData)
49
50
  l0_pipeline.add_node(task=SPBeamBoundariesCalibration, upstreams=BadPixelMapCalibration)
50
51
  l0_pipeline.add_node(task=DarkCalibration, upstreams=SPBeamBoundariesCalibration)
@@ -58,19 +59,26 @@ l0_pipeline.add_node(
58
59
  upstreams=[SPInstrumentPolarizationCalibration, SPDispersionAxisCorrection],
59
60
  )
60
61
  l0_pipeline.add_node(task=SPWriteL1Frame, upstreams=SPScienceCalibration)
61
- l0_pipeline.add_node(task=QualityL1Metrics, upstreams=SPWriteL1Frame)
62
- l0_pipeline.add_node(task=CryonirspL1QualityMetrics, upstreams=SPWriteL1Frame)
62
+
63
+ # Movie flow
64
+ l0_pipeline.add_node(task=MakeCryonirspMovieFrames, upstreams=SPScienceCalibration)
65
+ l0_pipeline.add_node(task=AssembleCryonirspMovie, upstreams=MakeCryonirspMovieFrames)
66
+
67
+ # Quality flow
68
+ l0_pipeline.add_node(task=CryonirspL0QualityMetrics, upstreams=ParseL0CryonirspSPLinearizedData)
69
+ l0_pipeline.add_node(task=QualityL1Metrics, upstreams=SPScienceCalibration)
70
+ l0_pipeline.add_node(task=CryonirspL1QualityMetrics, upstreams=SPScienceCalibration)
63
71
  l0_pipeline.add_node(
64
72
  task=SPAssembleQualityData,
65
73
  upstreams=[CryonirspL0QualityMetrics, QualityL1Metrics, CryonirspL1QualityMetrics],
66
74
  )
67
- l0_pipeline.add_node(task=MakeCryonirspMovieFrames, upstreams=SPWriteL1Frame)
68
- l0_pipeline.add_node(task=AssembleCryonirspMovie, upstreams=MakeCryonirspMovieFrames)
69
- l0_pipeline.add_node(
70
- task=SubmitDatasetMetadata, upstreams=[AssembleCryonirspMovie, SPAssembleQualityData]
71
- )
72
- l0_pipeline.add_node(task=TransferL1Data, upstreams=AssembleCryonirspMovie)
75
+
76
+ # Output flow
77
+ l0_pipeline.add_node(task=SubmitDatasetMetadata, upstreams=[SPWriteL1Frame, SPAssembleQualityData])
78
+ l0_pipeline.add_node(task=TransferL1Data, upstreams=[SPWriteL1Frame, AssembleCryonirspMovie])
73
79
  l0_pipeline.add_node(
74
80
  task=PublishCatalogAndQualityMessages, upstreams=[SubmitDatasetMetadata, TransferL1Data]
75
81
  )
82
+
83
+ # goodbye
76
84
  l0_pipeline.add_node(task=Teardown, upstreams=PublishCatalogAndQualityMessages)
@@ -47,6 +47,8 @@ full_trial_ci_pipeline = Workflow(
47
47
  workflow_package=__package__,
48
48
  )
49
49
  full_trial_ci_pipeline.add_node(task=TransferL0Data, upstreams=None)
50
+
51
+ # Science flow
50
52
  full_trial_ci_pipeline.add_node(task=ParseL0CryonirspRampData, upstreams=TransferL0Data)
51
53
  full_trial_ci_pipeline.add_node(
52
54
  task=LinearityCorrection,
@@ -56,9 +58,6 @@ full_trial_ci_pipeline.add_node(
56
58
  full_trial_ci_pipeline.add_node(
57
59
  task=ParseL0CryonirspCILinearizedData, upstreams=LinearityCorrection
58
60
  )
59
- full_trial_ci_pipeline.add_node(
60
- task=CryonirspL0QualityMetrics, upstreams=ParseL0CryonirspCILinearizedData
61
- )
62
61
  full_trial_ci_pipeline.add_node(
63
62
  task=BadPixelMapCalibration, upstreams=ParseL0CryonirspCILinearizedData
64
63
  )
@@ -73,14 +72,23 @@ full_trial_ci_pipeline.add_node(
73
72
  task=CIScienceCalibration, upstreams=CIInstrumentPolarizationCalibration
74
73
  )
75
74
  full_trial_ci_pipeline.add_node(task=CIWriteL1Frame, upstreams=CIScienceCalibration)
76
- full_trial_ci_pipeline.add_node(task=QualityL1Metrics, upstreams=CIWriteL1Frame)
77
- full_trial_ci_pipeline.add_node(task=CryonirspL1QualityMetrics, upstreams=CIWriteL1Frame)
75
+
76
+ # Movie flow
77
+ full_trial_ci_pipeline.add_node(task=MakeCryonirspMovieFrames, upstreams=CIScienceCalibration)
78
+ full_trial_ci_pipeline.add_node(task=AssembleCryonirspMovie, upstreams=MakeCryonirspMovieFrames)
79
+
80
+ # Quality flow
81
+ full_trial_ci_pipeline.add_node(
82
+ task=CryonirspL0QualityMetrics, upstreams=ParseL0CryonirspCILinearizedData
83
+ )
84
+ full_trial_ci_pipeline.add_node(task=QualityL1Metrics, upstreams=CIScienceCalibration)
85
+ full_trial_ci_pipeline.add_node(task=CryonirspL1QualityMetrics, upstreams=CIScienceCalibration)
78
86
  full_trial_ci_pipeline.add_node(
79
87
  task=CIAssembleQualityData,
80
88
  upstreams=[CryonirspL0QualityMetrics, QualityL1Metrics, CryonirspL1QualityMetrics],
81
89
  )
82
- full_trial_ci_pipeline.add_node(task=MakeCryonirspMovieFrames, upstreams=CIWriteL1Frame)
83
- full_trial_ci_pipeline.add_node(task=AssembleCryonirspMovie, upstreams=MakeCryonirspMovieFrames)
90
+
91
+ # Trial data generation
84
92
  full_trial_ci_pipeline.add_node(
85
93
  task=CreateTrialDatasetInventory, upstreams=CIWriteL1Frame, pip_extras=["inventory"]
86
94
  )
@@ -88,6 +96,8 @@ full_trial_ci_pipeline.add_node(task=CreateTrialAsdf, upstreams=CIWriteL1Frame,
88
96
  full_trial_ci_pipeline.add_node(
89
97
  task=CreateTrialQualityReport, upstreams=CIAssembleQualityData, pip_extras=["quality"]
90
98
  )
99
+
100
+ # Output flow
91
101
  full_trial_ci_pipeline.add_node(
92
102
  task=TransferCryoTrialData,
93
103
  upstreams=[
@@ -97,8 +107,12 @@ full_trial_ci_pipeline.add_node(
97
107
  AssembleCryonirspMovie,
98
108
  ],
99
109
  )
110
+
111
+ # goodbye
100
112
  full_trial_ci_pipeline.add_node(task=TrialTeardown, upstreams=TransferCryoTrialData)
101
113
 
114
+ #######################
115
+ #######################
102
116
  full_trial_sp_pipeline = Workflow(
103
117
  category="cryonirsp",
104
118
  input_data="l0",
@@ -107,6 +121,8 @@ full_trial_sp_pipeline = Workflow(
107
121
  workflow_package=__package__,
108
122
  )
109
123
  full_trial_sp_pipeline.add_node(task=TransferL0Data, upstreams=None)
124
+
125
+ # Science flow
110
126
  full_trial_sp_pipeline.add_node(task=ParseL0CryonirspRampData, upstreams=TransferL0Data)
111
127
  full_trial_sp_pipeline.add_node(
112
128
  task=LinearityCorrection,
@@ -116,9 +132,6 @@ full_trial_sp_pipeline.add_node(
116
132
  full_trial_sp_pipeline.add_node(
117
133
  task=ParseL0CryonirspSPLinearizedData, upstreams=LinearityCorrection
118
134
  )
119
- full_trial_sp_pipeline.add_node(
120
- task=CryonirspL0QualityMetrics, upstreams=ParseL0CryonirspSPLinearizedData
121
- )
122
135
  full_trial_sp_pipeline.add_node(
123
136
  task=BadPixelMapCalibration, upstreams=ParseL0CryonirspSPLinearizedData
124
137
  )
@@ -137,14 +150,23 @@ full_trial_sp_pipeline.add_node(
137
150
  upstreams=[SPInstrumentPolarizationCalibration, SPDispersionAxisCorrection],
138
151
  )
139
152
  full_trial_sp_pipeline.add_node(task=SPWriteL1Frame, upstreams=SPScienceCalibration)
140
- full_trial_sp_pipeline.add_node(task=QualityL1Metrics, upstreams=SPWriteL1Frame)
141
- full_trial_sp_pipeline.add_node(task=CryonirspL1QualityMetrics, upstreams=SPWriteL1Frame)
153
+
154
+ # Movie flow
155
+ full_trial_sp_pipeline.add_node(task=MakeCryonirspMovieFrames, upstreams=SPScienceCalibration)
156
+ full_trial_sp_pipeline.add_node(task=AssembleCryonirspMovie, upstreams=MakeCryonirspMovieFrames)
157
+
158
+ # Quality flow
159
+ full_trial_sp_pipeline.add_node(
160
+ task=CryonirspL0QualityMetrics, upstreams=ParseL0CryonirspSPLinearizedData
161
+ )
162
+ full_trial_sp_pipeline.add_node(task=QualityL1Metrics, upstreams=SPScienceCalibration)
163
+ full_trial_sp_pipeline.add_node(task=CryonirspL1QualityMetrics, upstreams=SPScienceCalibration)
142
164
  full_trial_sp_pipeline.add_node(
143
165
  task=SPAssembleQualityData,
144
166
  upstreams=[CryonirspL0QualityMetrics, QualityL1Metrics, CryonirspL1QualityMetrics],
145
167
  )
146
- full_trial_sp_pipeline.add_node(task=MakeCryonirspMovieFrames, upstreams=SPWriteL1Frame)
147
- full_trial_sp_pipeline.add_node(task=AssembleCryonirspMovie, upstreams=MakeCryonirspMovieFrames)
168
+
169
+ # Trial data generation
148
170
  full_trial_sp_pipeline.add_node(
149
171
  task=CreateTrialDatasetInventory, upstreams=SPWriteL1Frame, pip_extras=["inventory"]
150
172
  )
@@ -152,6 +174,8 @@ full_trial_sp_pipeline.add_node(task=CreateTrialAsdf, upstreams=SPWriteL1Frame,
152
174
  full_trial_sp_pipeline.add_node(
153
175
  task=CreateTrialQualityReport, upstreams=SPAssembleQualityData, pip_extras=["quality"]
154
176
  )
177
+
178
+ # Output flow
155
179
  full_trial_sp_pipeline.add_node(
156
180
  task=TransferCryoTrialData,
157
181
  upstreams=[
@@ -161,4 +185,6 @@ full_trial_sp_pipeline.add_node(
161
185
  AssembleCryonirspMovie,
162
186
  ],
163
187
  )
188
+
189
+ # goodbye
164
190
  full_trial_sp_pipeline.add_node(task=TrialTeardown, upstreams=TransferCryoTrialData)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dkist-processing-cryonirsp
3
- Version: 1.1.1rc1
3
+ Version: 1.2.0
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
@@ -12,8 +12,6 @@ setup.cfg
12
12
  setup.py
13
13
  towncrier_science.toml
14
14
  changelog/.gitempty
15
- changelog/147.bugfix.rst
16
- changelog/148.bugfix.rst
17
15
  dkist_processing_cryonirsp/__init__.py
18
16
  dkist_processing_cryonirsp/config.py
19
17
  dkist_processing_cryonirsp.egg-info/PKG-INFO
@@ -2,7 +2,7 @@ Pillow==10.3.0
2
2
  astropy==6.1.0
3
3
  dkist-fits-specifications==4.6.0
4
4
  dkist-header-validator==5.1.1
5
- dkist-processing-common==9.1.0
5
+ dkist-processing-common==10.0.0
6
6
  dkist-processing-math==2.1.0
7
7
  dkist-processing-pac==3.0.2
8
8
  dkist-spectral-lines==3.0.0
@@ -39,7 +39,7 @@ dkist-processing-common[inventory]
39
39
  dkist-inventory==1.4.0
40
40
 
41
41
  [quality]
42
- dkist-quality==1.0.4
42
+ dkist-quality==1.1.1
43
43
 
44
44
  [test]
45
45
  pytest
@@ -53,4 +53,4 @@ dkist-processing-common[inventory]
53
53
  dkist-inventory==1.4.0
54
54
  dkist-processing-common[asdf]
55
55
  dkist-inventory[asdf]==1.4.0
56
- dkist-quality==1.0.4
56
+ dkist-quality==1.1.1
@@ -21,7 +21,7 @@ install_requires =
21
21
  astropy == 6.1.0
22
22
  dkist-fits-specifications == 4.6.0
23
23
  dkist-header-validator == 5.1.1
24
- dkist-processing-common == 9.1.0
24
+ dkist-processing-common == 10.0.0
25
25
  dkist-processing-math == 2.1.0
26
26
  dkist-processing-pac == 3.0.2
27
27
  dkist-spectral-lines == 3.0.0
@@ -54,7 +54,7 @@ asdf =
54
54
  dkist-processing-common[asdf]
55
55
  dkist-inventory[asdf]==1.4.0
56
56
  quality =
57
- dkist-quality==1.0.4
57
+ dkist-quality==1.1.1
58
58
  grogu =
59
59
  dkist
60
60
  pyparsing
@@ -1,2 +0,0 @@
1
- Add validation in linearity_correction task to ensure that the value of NUM_FRAMES_IN_RAMP is the same
2
- across all frames in a ramp, and that the value of NUM_FRAMES_IN_RAMP actually matches the number of frames found.
@@ -1 +0,0 @@
1
- When writing linearized frames, use a fixed tag list as opposed to one derived from L0 data to alleviate load on redis.