dkist-processing-cryonirsp 0.0.55__tar.gz → 0.0.56__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 (123) hide show
  1. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/CHANGELOG.rst +9 -0
  2. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/PKG-INFO +1 -1
  3. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tasks/linearity_correction.py +1 -1
  4. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp.egg-info/PKG-INFO +1 -1
  5. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp.egg-info/SOURCES.txt +6 -0
  6. dkist_processing_cryonirsp-0.0.56/docs/bad_pixel_calibration.rst +47 -0
  7. dkist_processing_cryonirsp-0.0.56/docs/beam_angle_calculation.rst +53 -0
  8. dkist_processing_cryonirsp-0.0.56/docs/beam_boundary_computation.rst +88 -0
  9. dkist_processing_cryonirsp-0.0.56/docs/ci_science_calibration.rst +33 -0
  10. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/docs/index.rst +6 -0
  11. dkist_processing_cryonirsp-0.0.56/docs/l0_to_l1_cryonirsp_ci.rst +10 -0
  12. dkist_processing_cryonirsp-0.0.56/docs/l0_to_l1_cryonirsp_sp.rst +10 -0
  13. dkist_processing_cryonirsp-0.0.56/docs/linearization.rst +43 -0
  14. dkist_processing_cryonirsp-0.0.56/docs/sp_science_calibration.rst +59 -0
  15. dkist_processing_cryonirsp-0.0.55/docs/l0_to_l1_cryonirsp_ci.rst +0 -11
  16. dkist_processing_cryonirsp-0.0.55/docs/l0_to_l1_cryonirsp_sp.rst +0 -11
  17. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/.gitignore +0 -0
  18. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/.pre-commit-config.yaml +0 -0
  19. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/.readthedocs.yml +0 -0
  20. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/README.rst +0 -0
  21. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/SCIENCE_CHANGELOG.rst +0 -0
  22. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/bitbucket-pipelines.yml +0 -0
  23. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/changelog/.gitempty +0 -0
  24. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/check_changelog_updated.sh +0 -0
  25. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/__init__.py +0 -0
  26. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/models/__init__.py +0 -0
  27. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/models/constants.py +0 -0
  28. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/models/exposure_conditions.py +0 -0
  29. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/models/parameters.py +0 -0
  30. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/models/tags.py +0 -0
  31. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/models/task_name.py +0 -0
  32. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/parsers/__init__.py +0 -0
  33. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/parsers/cryonirsp_l0_fits_access.py +0 -0
  34. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/parsers/cryonirsp_l1_fits_access.py +0 -0
  35. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/parsers/exposure_conditions.py +0 -0
  36. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/parsers/map_repeats.py +0 -0
  37. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/parsers/measurements.py +0 -0
  38. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/parsers/modstates.py +0 -0
  39. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/parsers/optical_density_filters.py +0 -0
  40. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/parsers/polarimetric_check.py +0 -0
  41. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/parsers/scan_step.py +0 -0
  42. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/parsers/time.py +0 -0
  43. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/parsers/wavelength.py +0 -0
  44. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tasks/__init__.py +0 -0
  45. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tasks/assemble_movie.py +0 -0
  46. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tasks/bad_pixel_map.py +0 -0
  47. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tasks/beam_boundaries_base.py +0 -0
  48. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tasks/ci_beam_boundaries.py +0 -0
  49. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tasks/ci_science.py +0 -0
  50. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tasks/cryonirsp_base.py +0 -0
  51. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tasks/dark.py +0 -0
  52. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tasks/gain.py +0 -0
  53. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tasks/instrument_polarization.py +0 -0
  54. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tasks/l1_output_data.py +0 -0
  55. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tasks/make_movie_frames.py +0 -0
  56. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tasks/mixin/__init__.py +0 -0
  57. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tasks/mixin/beam_access.py +0 -0
  58. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tasks/mixin/corrections.py +0 -0
  59. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tasks/mixin/intermediate_frame.py +0 -0
  60. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tasks/mixin/linearized_frame.py +0 -0
  61. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tasks/mixin/shift_measurements.py +0 -0
  62. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tasks/parse.py +0 -0
  63. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tasks/quality_metrics.py +0 -0
  64. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tasks/science_base.py +0 -0
  65. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tasks/sp_beam_boundaries.py +0 -0
  66. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tasks/sp_geometric.py +0 -0
  67. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tasks/sp_science.py +0 -0
  68. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tasks/sp_solar_gain.py +0 -0
  69. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tasks/trial_output_data.py +0 -0
  70. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tasks/write_l1.py +0 -0
  71. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tests/__init__.py +0 -0
  72. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tests/conftest.py +0 -0
  73. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tests/header_models.py +0 -0
  74. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tests/local_trial_workflows/__init__.py +0 -0
  75. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tests/local_trial_workflows/l0_cals_only.py +0 -0
  76. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tests/local_trial_workflows/l0_to_l1.py +0 -0
  77. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tests/local_trial_workflows/linearize_only.py +0 -0
  78. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tests/local_trial_workflows/local_trial_helpers.py +0 -0
  79. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tests/test_assemble_movie.py +0 -0
  80. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tests/test_bad_pixel_maps.py +0 -0
  81. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tests/test_build_quality_report.py +0 -0
  82. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tests/test_ci_beam_boundaries.py +0 -0
  83. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tests/test_ci_science.py +0 -0
  84. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tests/test_corrections.py +0 -0
  85. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tests/test_cryo_base.py +0 -0
  86. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tests/test_cryo_constants.py +0 -0
  87. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tests/test_dark.py +0 -0
  88. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tests/test_gain.py +0 -0
  89. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tests/test_instrument_polarization.py +0 -0
  90. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tests/test_linearity_correction.py +0 -0
  91. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tests/test_make_movie_frames.py +0 -0
  92. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tests/test_parameters.py +0 -0
  93. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tests/test_parse.py +0 -0
  94. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tests/test_quality.py +0 -0
  95. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tests/test_sp_beam_boundaries.py +0 -0
  96. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tests/test_sp_geometric.py +0 -0
  97. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tests/test_sp_make_movie_frames.py +0 -0
  98. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tests/test_sp_science.py +0 -0
  99. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tests/test_sp_solar.py +0 -0
  100. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tests/test_submit_qualilty.py +0 -0
  101. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tests/test_trial_output_data.py +0 -0
  102. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tests/test_workflows.py +0 -0
  103. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/tests/test_write_l1.py +0 -0
  104. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/workflows/__init__.py +0 -0
  105. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/workflows/ci_l0_processing.py +0 -0
  106. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/workflows/sp_l0_processing.py +0 -0
  107. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp/workflows/trial_workflows.py +0 -0
  108. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp.egg-info/dependency_links.txt +0 -0
  109. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp.egg-info/requires.txt +0 -0
  110. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/dkist_processing_cryonirsp.egg-info/top_level.txt +0 -0
  111. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/docs/Makefile +0 -0
  112. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/docs/changelog.rst +0 -0
  113. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/docs/conf.py +0 -0
  114. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/docs/make.bat +0 -0
  115. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/docs/requirements.txt +0 -0
  116. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/docs/requirements_table.rst +0 -0
  117. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/docs/scientific_changelog.rst +0 -0
  118. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/licenses/LICENSE.rst +0 -0
  119. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/pyproject.toml +0 -0
  120. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/science_towncrier.sh +0 -0
  121. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/setup.cfg +0 -0
  122. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/setup.py +0 -0
  123. {dkist_processing_cryonirsp-0.0.55 → dkist_processing_cryonirsp-0.0.56}/towncrier_science.toml +0 -0
@@ -1,3 +1,12 @@
1
+ v0.0.56 (2024-04-26)
2
+ ====================
3
+
4
+ Documentation
5
+ -------------
6
+
7
+ - Update online documentation for Cryo-NIRSP bad pixel correction, beam angle calculation, and beam boundary calculation. (`#117 <https://bitbucket.org/dkistdc/dkist-processing-cryonirsp/pull-requests/117>`__)
8
+
9
+
1
10
  v0.0.55 (2024-04-12)
2
11
  ====================
3
12
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dkist_processing_cryonirsp
3
- Version: 0.0.55
3
+ Version: 0.0.56
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
@@ -376,7 +376,7 @@ class LinearityCorrection(CryonirspTaskBase):
376
376
  c. Load the frame slices into the chunk chunk_stack
377
377
  d. Linearize the chunk chunk_stack
378
378
  e. Store the linearized chunk in the proper location in the final linearized array
379
- 4. Return the linearized ramp, reshaping it to the original frame shape
379
+ 3. Return the linearized ramp, reshaping it to the original frame shape
380
380
  """
381
381
  thresholds_flattened = thresholds.flatten()
382
382
  frame_shape = ramp_set.frame_shape
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dkist-processing-cryonirsp
3
- Version: 0.0.55
3
+ Version: 0.0.56
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
@@ -102,13 +102,19 @@ dkist_processing_cryonirsp/workflows/ci_l0_processing.py
102
102
  dkist_processing_cryonirsp/workflows/sp_l0_processing.py
103
103
  dkist_processing_cryonirsp/workflows/trial_workflows.py
104
104
  docs/Makefile
105
+ docs/bad_pixel_calibration.rst
106
+ docs/beam_angle_calculation.rst
107
+ docs/beam_boundary_computation.rst
105
108
  docs/changelog.rst
109
+ docs/ci_science_calibration.rst
106
110
  docs/conf.py
107
111
  docs/index.rst
108
112
  docs/l0_to_l1_cryonirsp_ci.rst
109
113
  docs/l0_to_l1_cryonirsp_sp.rst
114
+ docs/linearization.rst
110
115
  docs/make.bat
111
116
  docs/requirements.txt
112
117
  docs/requirements_table.rst
113
118
  docs/scientific_changelog.rst
119
+ docs/sp_science_calibration.rst
114
120
  licenses/LICENSE.rst
@@ -0,0 +1,47 @@
1
+ Bad Pixel Calibration
2
+ ============================
3
+
4
+ Introduction
5
+ ------------
6
+
7
+ Both of the Cryo-NIRSP instrument cameras are known to have significant numbers of bad pixels.
8
+ The effects of these are made worse by the linearization algorithm, which can force some pixels
9
+ to be exactly zero. The algorithm described below is used to identify bad pixels and create a map
10
+ of their locations. The map is an integer array of the same size as the camera output array, with
11
+ zeros for pixels that are good and ones for the pixels that are bad.
12
+
13
+ The Bad Pixel Map Algorithm
14
+ ------------------------------
15
+
16
+ Compute Average Solar Gain Image
17
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18
+
19
+ First we will compute an average solar gain image. The solar gain is used because it has high flux
20
+ and the beam illumination pattern is the same as during normal observing.
21
+
22
+ Smooth the Average Gain Image
23
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
24
+
25
+ We can remove the effects of any bad pixels by smoothing the average gain image using a median filter method,
26
+ filtering only along the spatial axis of the slit for SP data so as to not broaden the spectral lines, and
27
+ filtering along both the spatial and spectral axes for CI data. After the gain image has been smoothed,
28
+ the bad pixel areas should no longer be visible.
29
+
30
+ Threshold the Difference Image to Find Bad Pixels
31
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
32
+
33
+ Next, we subtract the smoothed image from the average gain image. Doing this allows us to identify all
34
+ pixels in the difference image whose absolute value is larger than a set threshold value times the standard
35
+ deviation of the average image (i.e., a difference larger than N standard deviations of the original image is
36
+ considered a bad pixel). The threshold value is a pipeline settable parameter and was derived
37
+ empirically. With a too-low threshold, we start to pick up the solar spectrum in the bad pixel image. With a
38
+ too-large threshold, we start to miss bad pixels. Moreover, we currently use bad pixel corrections only for the
39
+ gain images and not for the observe images, so any potential impacts are limited. This may change in the
40
+ future.
41
+
42
+ Apply Bad Pixel Map
43
+ ^^^^^^^^^^^^^^^^^^^
44
+
45
+ This bad pixel map is then applied to the lamp gain and solar gain by replacing the identified
46
+ bad pixels with the median value of the input image over a specified region. This prevents the
47
+ gain image from causing “hot” or “cold” pixels in the resulting gain corrected input images.
@@ -0,0 +1,53 @@
1
+ Beam Angle Computation
2
+ ============================
3
+
4
+ Introduction
5
+ ------------
6
+
7
+ As part of the geometric calibration, the angular rotation of the slit relative to the image axes
8
+ must be computed and then corrected. There is no fiducial mark or hairline present in the Cryo-NIRSP
9
+ images, so some other method must be used. The angular rotation is derived from the lamp gain images using
10
+ the algorithm described below. It is described for only a single beam, but is equally applicable to use for both
11
+ beams.
12
+
13
+ The Beam Angle Algorithm
14
+ ------------------------------
15
+
16
+ Compute Average Lamp Gain Image
17
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18
+
19
+ We start by using the normalized lamp gain image that is computed as part of the lamp gain calibration.
20
+ The image has been corrected for bad pixels (hot or cold) using the bad pixel map derived from average
21
+ solar gain images (See :doc:`bad pixel calibration <bad_pixel_calibration>`).
22
+
23
+ Compute the Normalized Spatial Gradient Image
24
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
25
+
26
+ The normalized lamp gain image contains some some faint horizontal (i.e. along the spectral axis) lines. These are the result of slight
27
+ imperfections in the slit and in the grating optics, and they can be used to derive the rotation of the slit axis
28
+ relative to the image axes. By computing a normalized spatial gradient along the spatial axis (along the slit),
29
+ we can enhance the faint horizontal lines to make them more pronounced. The gradient is computed by shifting the
30
+ image along the spatial axis in both the + and - directions, computing the difference of the two images, and
31
+ normalizing by the sum of the two at each pixel position. The resulting gradient image contains horizontal
32
+ lines that are more emphasized.
33
+
34
+ Compute the Angular Rotation
35
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
36
+
37
+ Next we identify two long, narrow regions, or strips along the spatial axis. The length of each of the strips
38
+ is one half of the slit length in pixels and they are centered about the mid-point of the length of the slit
39
+ as seen on the sensor.
40
+
41
+ We then compute the median value along the spectral axis (or rows). This condenses each strip into a 1D signal
42
+ that represents the static fluctuations in the image along the spatial axis. The next step is to compute the
43
+ cross correlation of the right signal relative to the left signal (the reference). The result is the measured
44
+ shift of the right signal relative to the left. Using the measured shift between the signals and the known
45
+ separation along the spectral axis between the midpoints of the strips, we can then compute the angular
46
+ rotation using a simple arc-tangent.
47
+
48
+ Correcting the Rotational Offset
49
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
50
+
51
+ Finally, we can remove this rotational offset. The slit axis is now aligned with the spatial axis of the image.
52
+ The angular rotation measured here using the lamp gain image is then used to correct all of the
53
+ observe images as part of the geometric corrections.
@@ -0,0 +1,88 @@
1
+ Beam Boundary Computation
2
+ ============================
3
+
4
+ Introduction
5
+ ------------
6
+
7
+ Raw Cryo-NIRSP frames are not fully illuminated; in some areas, there is no illumination at all.
8
+ These areas should not be used for science processing and
9
+ must be accounted for. Moreover, the illuminated region(s) will change slightly depending
10
+ on the optical alignment of the instrument. Hence, we cannot use a particular set
11
+ of beam boundary constants from which to extract the illuminated regions. Instead we need to
12
+ compute these regions as part of the calibration process.
13
+
14
+ The Beam Boundary Algorithm
15
+ ------------------------------
16
+
17
+ The basic idea of the algorithm is to use an average solar gain image and apply a segmentation
18
+ algorithm to it that separates the image into illuminated pixels and non-illuminated pixels.
19
+ (Note: We use solar gain images because they have larger flux than the lamp gain images
20
+ and the lamp gain images do not have the same illumination pattern as the solar
21
+ gain images. Therefore, in order to make sure the beam boundaries match the on-sky data,
22
+ and are as correct as they can be, we must use solar gain images. We only use a single frame because the
23
+ illuminated portion of the CCD is always constant.)
24
+ The segmentation must be robust enough to have all pixels within a well defined outer boundary
25
+ considered to be illuminated. This is sufficient to extract an illuminated region from a single
26
+ beam for the Context Imager (CI). For the Spectropolarimeter (SP), however, we need to identify
27
+ the separate beam regions and perform an initial alignment prior to computing the final individual
28
+ beam boundaries.
29
+
30
+ Compute the Average Solar Gain Image
31
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
32
+
33
+ We start by computing an average solar gain image. Because we are interested only in identifying
34
+ the regions of the sensor that are illuminated, we do not need to perform any dark correction.
35
+ Simply averaging the input solar gain images is sufficient.
36
+
37
+
38
+ Correct Bad Pixels Using the Median Filter
39
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
40
+
41
+ The effects of the bad pixels must be corrected, otherwise they might be mistaken for non-illuminated
42
+ regions. We correct these bad pixels using the :doc:`bad pixel calibration algorithm <bad_pixel_calibration>`
43
+ and by applying a median filter to only those pixels that are flagged as bad. We use the masked array feature
44
+ of numpy to achieve this filtering. For the SP, the correction algorithm is applied only in the spatial
45
+ direction along the slit. For the CI, it is applied along both axes. For this application, the
46
+ difference does not matter, as all we are doing is identifying illuminated pixels. However, later on when
47
+ the solar gain array is computed, the correction must not broaden the spectral lines and so the restriction
48
+ is important.
49
+
50
+
51
+ Segment the Image Into Illuminated and Non-Illuminated Regions
52
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
53
+
54
+ Next we smooth the entire array so the image segmentation algorithm does not recognize the absorption
55
+ lines as part of the non-illuminated region. The smoothed solar gain array is then used as the input to an
56
+ image segmentation algorithm. The `Scikit Image threshold minimum <https://scikit-image.org/docs/stable/api/skimage.filters.html#skimage.filters.threshold_minimum>`_
57
+ method is used to find the threshold between light and dark and this threshold is then
58
+ used to generate a boolean map describing which pixels are illuminated (True) and which pixels are non-illuminated
59
+ (False). However, this map cannot be used to easily extract illuminated regions because it is not guaranteed to be
60
+ contiguous. Ideally, we would like to be able to identify a slice that can be used to extract the illuminated
61
+ region as a rectangular array.
62
+
63
+
64
+ Split Into Two Separate beam Images
65
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
66
+
67
+ Now that we know the illuminated boundaries, we can identify and extract the largest inscribed rectangular
68
+ region within the illuminated map. This is done using the `largestinteriorrectangle package <https://pypi.org/project/largestinteriorrectangle/>`_.
69
+ We split the image into two beam images, avoiding a 10% spectral region
70
+ surrounding the beam boundary in the middle of the image.
71
+
72
+ Compute Relative Horizontal Shift of Right Beam to Left Beam
73
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
74
+
75
+ There is a relative shift between these two images, so we need to determine that shift and compute the
76
+ boundaries of each so that they overlap properly to within a single horizontal pixel. Note that the rotational
77
+ differences and any additional shifts required to align the images are computed later as part of the geometric
78
+ calibration. The horizontal shift of the right beam relative to the left is computed using the
79
+ `Scikit Image phase cross correlation <https://scikit-image.org/docs/stable/api/skimage.registration.html#skimage.registration.phase_cross_correlation>`_
80
+ method.
81
+
82
+ Compute Beam Boundaries for Identical Size Overlapping Regions
83
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
84
+ The final step is to use the shift to adjust the boundaries of each beam image such that both images
85
+ have the same horizontal dimension and represent essentially the same spatial and spectral regions
86
+ (as mentioned above, final adjustments will come later in the geometric calibration). Moreover the beam
87
+ boundaries must be defined so that they represent slices into the original image and can then be used
88
+ later to extract each beam from any type of input image (dark, gain, polcal, observe).
@@ -0,0 +1,33 @@
1
+ CI L1 Science Calibration
2
+ =========================
3
+
4
+ Introduction
5
+ ------------
6
+
7
+ The `~dkist_processing_cryonirsp.tasks.ci_science` module takes L0 input science frames and fully calibrates
8
+ them into L1 science products. This page describes the basic steps in this processes as well as important
9
+ features of the Cryo-NIRSP Context Imager (CI) algorithm that may not be obvious.
10
+
11
+ L1 Coordinate System
12
+ ^^^^^^^^^^^^^^^^^^^^
13
+
14
+ The final step of the science pipeline places L1 data into a coordinate frame that matches the coordinates used by
15
+ SDO/HMI and HINDOE-SP. Namely, -Q and +Q will be aligned parallel and perpendicular to the central meridian of the Sun,
16
+ respectively.
17
+
18
+ Algorithm
19
+ ---------
20
+
21
+ Input CI science data is processed into L1 science data via the following steps:
22
+
23
+
24
+ #. Dark signals are subtracted from linearized input data.
25
+
26
+ #. :doc:`Bad Pixel correction <bad_pixel_calibration>` is done.
27
+
28
+ #. A solar gain calibration frame is divided from the data.
29
+
30
+ #. If data is polarimetric, demodulation matricies are applied.
31
+
32
+ #. If data is polarimetric, the Telescope Polarization is removed. This removes the polarization effects of all DKIST mirrors upstream
33
+ of Cryo-NIRSP. This step also includes the rotation into the coordinate frame described above.
@@ -11,3 +11,9 @@
11
11
  requirements_table
12
12
  changelog
13
13
  scientific_changelog
14
+ linearization
15
+ bad_pixel_calibration
16
+ beam_boundary_computation
17
+ beam_angle_calculation
18
+ ci_science_calibration
19
+ sp_science_calibration
@@ -0,0 +1,10 @@
1
+ l0_to_l1_cryonirsp_ci
2
+ =====================
3
+
4
+ In the normal Cryo-NIRSP Context Imager (CI) operating mode, raw Cryo-NIRSP data are gathered at the summit and
5
+ delivered to the Data Center. The Data Center then calibrates this data and prepares it for storage using the
6
+ following workflow.
7
+
8
+ For more detail on each workflow task, you can click on the task in the diagram.
9
+
10
+ .. workflow_diagram:: dkist_processing_cryonirsp.workflows.ci_l0_processing.l0_pipeline
@@ -0,0 +1,10 @@
1
+ l0_to_l1_cryonirsp_sp
2
+ =====================
3
+
4
+ In the normal Cryo-NIRSP Spectropolarimetric (SP) operating mode, raw Cryo-NIRSP data are gathered at the summit
5
+ and delivered to the Data Center. The Data Center then calibrates this data and prepares it for storage using
6
+ the following workflow.
7
+
8
+ For more detail on each workflow task, you can click on the task in the diagram.
9
+
10
+ .. workflow_diagram:: dkist_processing_cryonirsp.workflows.sp_l0_processing.l0_pipeline
@@ -0,0 +1,43 @@
1
+ Linearization
2
+ =============
3
+
4
+ Introduction
5
+ ------------
6
+
7
+ The Cryo-NIRSP camera has an H2RG detector, which has a non-linear response to light with
8
+ increasing exposure time. This can vary from pixel to pixel. Because of the non-linear response, the count
9
+ values at the final exposure do not accurately represent the light falling on the chip and therefore need to
10
+ be corrected. We call this correction ‘linearization’. During an exposure, the camera
11
+ reads out multiple frames and saves them while it continues to expose. The accumulated charge on the chip is
12
+ not erased when this happens, so they are referred to as Non-Destructive Readouts (NDRs). The NDRs are
13
+ saved at a pre-selected rate that is a fraction of the overall desired exposure time for a
14
+ complete NDR. A set of NDRs with exposure times varying from 0 to the final desired exposure time are
15
+ called a ramp. The linearization process reads all of the NDRs associated with a particular ramp and then
16
+ applies an algorithm to compute what the final count values at the desired exposure time should be if the
17
+ response of the detector was linear. Basically it takes the ramp set and "linearizes" it to produce a single
18
+ NDR that has the correct counts at each pixel.
19
+
20
+ A ramp can have many frames (anywhere from 10 to as much as 100, or more), and the linearization
21
+ algorithm is agnostic to just about everything except the final exposure time. So after linearization, we
22
+ have over 10x fewer frames to process, and the pipeline proceeds as though the linearized frames are raw input frames.
23
+
24
+ The Linearization Algorithm
25
+ ---------------------------
26
+
27
+ The Algorithm
28
+ ^^^^^^^^^^^^^
29
+
30
+ First, we identify all NDRs from a single exposure of the Cryo-NIRSP cameras (i.e., a ramp set). A ramp is
31
+ identified as all the files having the same DATE-OBS value. Note: If a ramp set contains only a single frame,
32
+ it is discarded.
33
+
34
+ Next, we need to identify the NDRs that fall in the “linear” portion of the chip response. These are those
35
+ NDRs whose pixel value is below a pre-computed threshold value. I.e., the threshold values define the upper-limit
36
+ of the linear response of each pixel.
37
+
38
+ Then, we linearize this ramp set by normalizing the measured raw flux by the final ramp exposure time of the ramp set.
39
+ Essentially, this removes the non-linear response of each pixel in the array. The resulting ramp set is essentially
40
+ linear in ADUs v exposure time.
41
+
42
+ Finally, we normalize the array by converting to counts per second and correct the counts for the Optical Density
43
+ filter used during observations.
@@ -0,0 +1,59 @@
1
+ SP L1 Science Calibration
2
+ =========================
3
+
4
+ Introduction
5
+ ------------
6
+
7
+ The `~dkist_processing_cryonirsp.tasks.sp_science` module takes L0 input science frames and fully calibrates
8
+ them into L1 science products. This page describes the basic steps in this processes as well as important
9
+ features of the Cryo-NIRSP Spectropolarimetric (SP) algorithm that may not be obvious.
10
+
11
+ Important Features
12
+ ------------------
13
+
14
+ Beam Combination
15
+ ^^^^^^^^^^^^^^^^
16
+
17
+ Apart from the order in which the basic corrections are applied (described below), it is important to state how the two
18
+ polarimetric beams of Cryo-NIRSP are combined to produce a single L1 data frame. After demodulation the 4 Stokes components of
19
+ the two beams are combined thusly:
20
+
21
+ .. math::
22
+
23
+ I_{comb} &= (I_1 + I_2) / 2 \\
24
+ Q_{comb} &= I_{comb} \left(\frac{Q_1}{I_1} + \frac{Q_2}{I_2}\right) / 2 \\
25
+ U_{comb} &= I_{comb} \left(\frac{U_1}{I_1} + \frac{U_2}{I_2}\right) / 2 \\
26
+ V_{comb} &= I_{comb} \left(\frac{V_1}{I_1} + \frac{V_2}{I_2}\right) / 2,
27
+
28
+ where numbered subscripts correspond to beam number. This combination scheme improves the signal-to-noise of the data
29
+ and mitigates residual polarization artifacts caused by temporal-based modulation (e.g., atmospheric seeing).
30
+
31
+ L1 Coordinate System
32
+ ^^^^^^^^^^^^^^^^^^^^
33
+
34
+ The final step of the science pipeline places L1 data into a coordinate frame that matches the coordinates used by
35
+ SDO/HMI and HINDOE-SP. Namely, -Q and +Q will be aligned parallel and perpendicular to the central meridian of the Sun,
36
+ respectively.
37
+
38
+ Algorithm
39
+ ---------
40
+
41
+ Input SP science data is processed into L1 science data via the following steps:
42
+
43
+ #. Dark signals are subtracted from linearized input data.
44
+
45
+ #. :doc:`Bad Pixel correction <bad_pixel_calibration>` is done.
46
+
47
+ #. A solar gain calibration frame is divided from the data.
48
+
49
+ #. If data is polarimetric, demodulation matrices are applied.
50
+
51
+ #. Geometric distortions (spectral rotation, x/y shift, spectral curvature) are removed via interpolation.
52
+ This step aligns the dispersion axis with a pixel axis, places both beams on the same pixel grid, and
53
+ straightens the spectra so that a single spectral pixel corresponds to the same physical wavelength for
54
+ all locations along the slit.
55
+
56
+ #. The beams are combined as described above. For non-polarimetric data, the combination is a simple average.
57
+
58
+ #. If data is polarimetric, the Telescope Polarization is removed. This removes the polarization effects of all DKIST mirrors upstream
59
+ of Cryo-NIRSP. This step also includes the rotation into the coordinate frame described above.
@@ -1,11 +0,0 @@
1
- l0_to_l1_cryonirsp_ci
2
- =====================
3
-
4
- In the normal CryoNIRSP operating mode, raw CryoNIRSP data is gathered at the summit and delivered to the Data Center.
5
- The Data Center then calibrates this data and prepares it for storage using the following workflow.
6
-
7
- For more detail on each workflow task, you can click on the task in the diagram.
8
-
9
- .. workflow_diagram:: dkist_processing_cryonirsp.workflows.ci_l0_processing.l0_pipeline
10
-
11
- In this workflow, raw dark, gain, and polarization calibration data is used to generate calibration products that are then applied to the science frames before repackaging them for storage and delivery to a science user.
@@ -1,11 +0,0 @@
1
- l0_to_l1_cryonirsp_sp
2
- =====================
3
-
4
- In the normal CryoNIRSP operating mode, raw CryoNIRSP data is gathered at the summit and delivered to the Data Center.
5
- The Data Center then calibrates this data and prepares it for storage using the following workflow.
6
-
7
- For more detail on each workflow task, you can click on the task in the diagram.
8
-
9
- .. workflow_diagram:: dkist_processing_cryonirsp.workflows.sp_l0_processing.l0_pipeline
10
-
11
- In this workflow, raw dark, gain, and polarization calibration data is used to generate calibration products that are then applied to the science frames before repackaging them for storage and delivery to a science user.