dkist-processing-cryonirsp 0.0.37__tar.gz → 0.0.38__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 (113) hide show
  1. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/CHANGELOG.rst +10 -0
  2. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/PKG-INFO +1 -1
  3. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tasks/mixin/corrections.py +10 -30
  4. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tasks/sp_geometric.py +34 -8
  5. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tests/local_trial_workflows/l0_cals_only.py +9 -4
  6. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tests/test_sp_geometric.py +2 -2
  7. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp.egg-info/PKG-INFO +1 -1
  8. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/.gitignore +0 -0
  9. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/.pre-commit-config.yaml +0 -0
  10. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/.readthedocs.yml +0 -0
  11. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/README.rst +0 -0
  12. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/SCIENCE_CHANGELOG.rst +0 -0
  13. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/bitbucket-pipelines.yml +0 -0
  14. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/changelog/.gitempty +0 -0
  15. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/check_changelog_updated.sh +0 -0
  16. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/__init__.py +0 -0
  17. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/models/__init__.py +0 -0
  18. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/models/constants.py +0 -0
  19. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/models/filter.py +0 -0
  20. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/models/optical_density_filter_names.py +0 -0
  21. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/models/parameters.py +0 -0
  22. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/models/tags.py +0 -0
  23. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/models/task_name.py +0 -0
  24. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/parsers/__init__.py +0 -0
  25. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/parsers/cryonirsp_l0_fits_access.py +0 -0
  26. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/parsers/cryonirsp_l1_fits_access.py +0 -0
  27. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/parsers/map_repeats.py +0 -0
  28. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/parsers/measurements.py +0 -0
  29. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/parsers/modstates.py +0 -0
  30. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/parsers/optical_density_filters.py +0 -0
  31. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/parsers/polarimetric_check.py +0 -0
  32. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/parsers/scan_step.py +0 -0
  33. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/parsers/time.py +0 -0
  34. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/parsers/wavelength.py +0 -0
  35. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tasks/__init__.py +0 -0
  36. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tasks/assemble_movie.py +0 -0
  37. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tasks/bad_pixel_map.py +0 -0
  38. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tasks/beam_boundaries_base.py +0 -0
  39. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tasks/ci_beam_boundaries.py +0 -0
  40. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tasks/ci_science.py +0 -0
  41. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tasks/cryonirsp_base.py +0 -0
  42. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tasks/dark.py +0 -0
  43. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tasks/gain.py +0 -0
  44. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tasks/instrument_polarization.py +0 -0
  45. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tasks/l1_output_data.py +0 -0
  46. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tasks/linearity_correction.py +0 -0
  47. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tasks/make_movie_frames.py +0 -0
  48. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tasks/mixin/__init__.py +0 -0
  49. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tasks/mixin/beam_access.py +0 -0
  50. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tasks/mixin/intermediate_frame.py +0 -0
  51. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tasks/mixin/linearized_frame.py +0 -0
  52. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tasks/mixin/shift_measurements.py +0 -0
  53. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tasks/parse.py +0 -0
  54. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tasks/quality_metrics.py +0 -0
  55. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tasks/science_base.py +0 -0
  56. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tasks/sp_beam_boundaries.py +0 -0
  57. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tasks/sp_science.py +0 -0
  58. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tasks/sp_solar_gain.py +0 -0
  59. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tasks/trial_output_data.py +0 -0
  60. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tasks/write_l1.py +0 -0
  61. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tests/__init__.py +0 -0
  62. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tests/conftest.py +0 -0
  63. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tests/header_models.py +0 -0
  64. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tests/local_trial_workflows/__init__.py +0 -0
  65. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tests/local_trial_workflows/l0_to_l1.py +0 -0
  66. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tests/local_trial_workflows/linearize_only.py +0 -0
  67. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tests/local_trial_workflows/local_trial_helpers.py +0 -0
  68. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tests/test_assemble_movie.py +0 -0
  69. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tests/test_bad_pixel_maps.py +0 -0
  70. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tests/test_build_quality_report.py +0 -0
  71. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tests/test_ci_beam_boundaries.py +0 -0
  72. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tests/test_ci_science.py +0 -0
  73. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tests/test_cryo_base.py +0 -0
  74. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tests/test_cryo_constants.py +0 -0
  75. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tests/test_dark.py +0 -0
  76. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tests/test_gain.py +0 -0
  77. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tests/test_instrument_polarization.py +0 -0
  78. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tests/test_linearity_correction.py +0 -0
  79. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tests/test_make_movie_frames.py +0 -0
  80. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tests/test_parameters.py +0 -0
  81. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tests/test_parse.py +0 -0
  82. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tests/test_quality.py +0 -0
  83. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tests/test_sp_beam_boundaries.py +0 -0
  84. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tests/test_sp_make_movie_frames.py +0 -0
  85. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tests/test_sp_science.py +0 -0
  86. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tests/test_sp_solar.py +0 -0
  87. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tests/test_submit_qualilty.py +0 -0
  88. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tests/test_workflows.py +0 -0
  89. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/tests/test_write_l1.py +0 -0
  90. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/workflows/__init__.py +0 -0
  91. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/workflows/ci_l0_processing.py +0 -0
  92. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/workflows/sp_l0_processing.py +0 -0
  93. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp/workflows/trial_workflows.py +0 -0
  94. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp.egg-info/SOURCES.txt +0 -0
  95. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp.egg-info/dependency_links.txt +0 -0
  96. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp.egg-info/requires.txt +0 -0
  97. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/dkist_processing_cryonirsp.egg-info/top_level.txt +0 -0
  98. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/docs/Makefile +0 -0
  99. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/docs/changelog.rst +0 -0
  100. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/docs/conf.py +0 -0
  101. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/docs/index.rst +0 -0
  102. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/docs/l0_to_l1_cryonirsp_ci.rst +0 -0
  103. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/docs/l0_to_l1_cryonirsp_sp.rst +0 -0
  104. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/docs/make.bat +0 -0
  105. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/docs/requirements.txt +0 -0
  106. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/docs/requirements_table.rst +0 -0
  107. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/docs/scientific_changelog.rst +0 -0
  108. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/licenses/LICENSE.rst +0 -0
  109. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/pyproject.toml +0 -0
  110. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/science_towncrier.sh +0 -0
  111. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/setup.cfg +0 -0
  112. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/setup.py +0 -0
  113. {dkist_processing_cryonirsp-0.0.37 → dkist_processing_cryonirsp-0.0.38}/towncrier_science.toml +0 -0
@@ -1,3 +1,13 @@
1
+ v0.0.38 (2024-02-22)
2
+ ====================
3
+
4
+ Bugfixes
5
+ --------
6
+
7
+ - Fixed bugs in `SPGeometricCalibration` task to use basic-corrected or gain-corrected arrays where needed. (`#97 <https://bitbucket.org/dkistdc/dkist-processing-cryonirsp/pull-requests/97>`__)
8
+ - Fixed errors in `CorrectionsMixin` that caused problems in rotation, shift and spectral curvature computations. (`#97 <https://bitbucket.org/dkistdc/dkist-processing-cryonirsp/pull-requests/97>`__)
9
+
10
+
1
11
  v0.0.37 (2024-02-21)
2
12
  ====================
3
13
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dkist_processing_cryonirsp
3
- Version: 0.0.37
3
+ Version: 0.0.38
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
@@ -27,11 +27,11 @@ class CorrectionsMixin:
27
27
  arrays
28
28
  2D array(s) containing the data for the un-shifted beam
29
29
 
30
- shift : np.ndarray
30
+ shift
31
31
  The measured shift offset in the spectral dimension
32
32
  between beams or between modulator states in a single beam.
33
33
 
34
- angle : float
34
+ angle
35
35
  The angle between the slit and pixel axes.
36
36
 
37
37
  Returns
@@ -46,18 +46,9 @@ class CorrectionsMixin:
46
46
  array[np.where(array == np.inf)] = np.max(array[np.isfinite(array)])
47
47
  array[np.where(array == -np.inf)] = np.min(array[np.isfinite(array)])
48
48
  array[np.isnan(array)] = np.nanmedian(array)
49
- cval = np.nanmedian(array)
50
- translated = affine_transform_arrays(
51
- # The shift is inverted here to represent the correction that should be applied
52
- array,
53
- translation=-shift,
54
- mode="constant",
55
- cval=cval,
56
- )
57
- yield next(
58
- # TODO: rotate_arrays_about_point rotates the wrong way, so no negative sign here
59
- rotate_arrays_about_point(translated, angle=angle, mode="constant", cval=cval)
60
- )
49
+ translated = affine_transform_arrays(array, translation=-shift, mode="edge", order=1)
50
+ # TODO: rotate_arrays_about_point rotates the wrong way, so no negative sign here
51
+ yield next(rotate_arrays_about_point(translated, angle=angle, mode="edge", order=1))
61
52
 
62
53
  @staticmethod
63
54
  def corrections_distort_geometry(
@@ -75,11 +66,11 @@ class CorrectionsMixin:
75
66
  arrays
76
67
  2D array(s) containing the data for the un-shifted beam
77
68
 
78
- shift : np.ndarray
69
+ shift
79
70
  The measured shift offset in the spectral dimension
80
71
  between beams or between modulator states in a single beam.
81
72
 
82
- angle : float
73
+ angle
83
74
  The angle between the slit and pixel axes.
84
75
 
85
76
  Returns
@@ -94,18 +85,9 @@ class CorrectionsMixin:
94
85
  array[np.where(array == np.inf)] = np.max(array[np.isfinite(array)])
95
86
  array[np.where(array == -np.inf)] = np.min(array[np.isfinite(array)])
96
87
  array[np.isnan(array)] = np.nanmedian(array)
97
- cval = np.nanmedian(array)
98
88
  # TODO: rotate_arrays_about_point rotates the wrong way, so no negative sign here
99
- rotated = rotate_arrays_about_point(array, angle=angle, mode="constant", cval=cval)
100
- yield next(
101
- affine_transform_arrays(
102
- # The shift is inverted here to represent the correction that should be applied
103
- rotated,
104
- translation=-shift,
105
- mode="constant",
106
- cval=cval,
107
- )
108
- )
89
+ rotated = rotate_arrays_about_point(array, angle=angle, mode="edge")
90
+ yield next(affine_transform_arrays(rotated, translation=-shift, mode="edge"))
109
91
 
110
92
  @staticmethod
111
93
  def corrections_remove_spec_shifts(
@@ -136,9 +118,7 @@ class CorrectionsMixin:
136
118
  numx = array.shape[0]
137
119
  array_output = np.zeros(array.shape)
138
120
  for j in range(numx):
139
- array_output[j, :] = spnd.interpolation.shift(
140
- array[j, :], -spec_shift[j], mode="constant", cval=np.nanmedian(array[j, :])
141
- )
121
+ array_output[j, :] = spnd.shift(array[j, :], -spec_shift[j], mode="nearest")
142
122
  yield array_output
143
123
 
144
124
  def corrections_correct_bad_pixels(
@@ -4,7 +4,6 @@ import math
4
4
  import numpy as np
5
5
  import peakutils as pku
6
6
  import scipy.ndimage as spnd
7
- import skimage.registration as skir
8
7
  from dkist_processing_common.models.task_name import TaskName
9
8
  from dkist_processing_math.arithmetic import divide_arrays_by_array
10
9
  from dkist_processing_math.arithmetic import subtract_array_from_arrays
@@ -110,9 +109,9 @@ class SPGeometricCalibration(CryonirspTaskBase, ShiftMeasurementsMixin):
110
109
  task_type=TaskName.geometric.value, total_frames=no_of_raw_geo_frames
111
110
  )
112
111
 
113
- def basic_corrected_data(self, beam: int) -> np.ndarray:
112
+ def basic_gain_corrected_data(self, beam: int) -> np.ndarray:
114
113
  """
115
- Get dark corrected data array for a single beam.
114
+ Get dark and lamp gain corrected data array for a single beam.
116
115
 
117
116
  Parameters
118
117
  ----------
@@ -125,7 +124,26 @@ class SPGeometricCalibration(CryonirspTaskBase, ShiftMeasurementsMixin):
125
124
  Dark corrected data array
126
125
  """
127
126
  array_generator = self.intermediate_frame_load_intermediate_arrays(
128
- tags=[CryonirspTag.task("GC_BASIC"), CryonirspTag.beam(beam)]
127
+ tags=[CryonirspTag.task("GC_BASIC_GAIN_CORRECTED"), CryonirspTag.beam(beam)]
128
+ )
129
+ return average_numpy_arrays(array_generator)
130
+
131
+ def basic_dark_bp_corrected_data(self, beam: int) -> np.ndarray:
132
+ """
133
+ Get dark and bad pixel corrected data array for a single beam.
134
+
135
+ Parameters
136
+ ----------
137
+ beam : int
138
+ The current beam being processed
139
+
140
+ Returns
141
+ -------
142
+ np.ndarray
143
+ Dark and bad pixel corrected data array
144
+ """
145
+ array_generator = self.intermediate_frame_load_intermediate_arrays(
146
+ tags=[CryonirspTag.task("GC_BASIC_DARK_BP_CORRECTED"), CryonirspTag.beam(beam)]
129
147
  )
130
148
  return average_numpy_arrays(array_generator)
131
149
 
@@ -183,7 +201,12 @@ class SPGeometricCalibration(CryonirspTaskBase, ShiftMeasurementsMixin):
183
201
  bad_pixel_corrected_array = self.corrections_correct_bad_pixels(
184
202
  dark_corrected_solar_array, bad_pixel_map
185
203
  )
186
-
204
+ logger.info(f"Writing bad pixel corrected data for {beam=}")
205
+ self.intermediate_frame_write_arrays(
206
+ arrays=bad_pixel_corrected_array,
207
+ beam=beam,
208
+ task="GC_BASIC_DARK_BP_CORRECTED",
209
+ )
187
210
  gain_corrected_solar_array = next(
188
211
  divide_arrays_by_array(bad_pixel_corrected_array, lamp_gain_array)
189
212
  )
@@ -191,7 +214,7 @@ class SPGeometricCalibration(CryonirspTaskBase, ShiftMeasurementsMixin):
191
214
  self.intermediate_frame_write_arrays(
192
215
  arrays=gain_corrected_solar_array,
193
216
  beam=beam,
194
- task="GC_BASIC",
217
+ task="GC_BASIC_GAIN_CORRECTED",
195
218
  )
196
219
 
197
220
  def compute_beam_angle(self, beam: int) -> float:
@@ -214,7 +237,10 @@ class SPGeometricCalibration(CryonirspTaskBase, ShiftMeasurementsMixin):
214
237
  The beam rotation angle in radians
215
238
  """
216
239
  # Step 1
217
- gain_array = self.basic_corrected_data(beam)
240
+ # Do not use a gain corrected image here, as it will cancel out the slit structure
241
+ # that is used for the shift measurement computations
242
+ gain_array = self.intermediate_frame_load_lamp_gain_array(beam=beam)
243
+
218
244
  full_spatial_size, full_spectral_size = gain_array.shape
219
245
 
220
246
  # Get the params for the strips
@@ -257,7 +283,7 @@ class SPGeometricCalibration(CryonirspTaskBase, ShiftMeasurementsMixin):
257
283
  np.ndarray
258
284
  The corrected array
259
285
  """
260
- rotated_array = self.basic_corrected_data(beam=beam)
286
+ rotated_array = self.basic_gain_corrected_data(beam=beam)
261
287
  corrected_array = next(self.corrections_correct_geometry(rotated_array, angle=angle))
262
288
  return corrected_array
263
289
 
@@ -2,10 +2,12 @@ import argparse
2
2
  import json
3
3
  import os
4
4
  import sys
5
+ from datetime import datetime
5
6
  from pathlib import Path
6
7
 
7
8
  from astropy.io import fits
8
9
  from dkist_processing_common.manual import ManualProcessing
10
+ from dkist_processing_common.models.constants import BudName
9
11
  from dkist_processing_common.tasks import WorkflowTaskBase
10
12
  from dkist_service_configuration import logger
11
13
 
@@ -131,15 +133,16 @@ def tag_linearized_inputs_task(suffix: str):
131
133
  return TagLinearizedInputs
132
134
 
133
135
 
134
- def spoof_obs_wavelength_task(wavelength: float = 1083.0):
136
+ def spoof_obs_ramp_parsed_constants(wavelength: float = 1083.0):
135
137
  class SetObsWavelength(WorkflowTaskBase):
136
138
  def run(self) -> None:
137
139
  self.constants._update({CryonirspBudName.wavelength.value: wavelength})
140
+ self.constants._update({BudName.obs_ip_start_time.value: datetime.now().isoformat()})
138
141
 
139
142
  return SetObsWavelength
140
143
 
141
144
 
142
- def spoof_obs_constants_task(
145
+ def spoof_obs_lin_parsed_constants(
143
146
  polarimetric: bool = True,
144
147
  ):
145
148
  class SetCalOnlyConstants(CryonirspTaskBase):
@@ -346,7 +349,7 @@ def main(
346
349
  manual_processing_run.run_task(task=load_parsing_task(save_file="input_parsing.asdf"))
347
350
  else:
348
351
  manual_processing_run.run_task(task=ParseL0CryonirspRampData)
349
- manual_processing_run.run_task(task=spoof_obs_wavelength_task(dummy_wavelength))
352
+ manual_processing_run.run_task(task=spoof_obs_ramp_parsed_constants(dummy_wavelength))
350
353
  manual_processing_run.run_task(
351
354
  task=save_parsing_task(
352
355
  tag_list=[CryonirspTag.input(), CryonirspTag.frame()],
@@ -372,7 +375,9 @@ def main(
372
375
  )
373
376
  else:
374
377
  manual_processing_run.run_task(task=ParseL0CryonirspLinearizedData)
375
- manual_processing_run.run_task(task=spoof_obs_constants_task(polarimetric=polarimetric))
378
+ manual_processing_run.run_task(
379
+ task=spoof_obs_lin_parsed_constants(polarimetric=polarimetric)
380
+ )
376
381
  if not skip_saving_parse:
377
382
  manual_processing_run.run_task(
378
383
  task=save_parsing_task(
@@ -291,7 +291,7 @@ def test_basic_corrections(geometric_calibration_task_with_simple_raw_data):
291
291
  expected = flipped_true_solar[:, 0 : beam_shape[1]]
292
292
  else:
293
293
  expected = flipped_true_solar[:, beam_shape[1] :]
294
- array = task.basic_corrected_data(beam=beam)
294
+ array = task.basic_dark_bp_corrected_data(beam=beam)
295
295
  np.testing.assert_equal(expected, array)
296
296
 
297
297
  # Negative test on the original true solar image
@@ -300,6 +300,6 @@ def test_basic_corrections(geometric_calibration_task_with_simple_raw_data):
300
300
  expected = true_solar[:, 0 : beam_shape[1]]
301
301
  else:
302
302
  expected = true_solar[:, beam_shape[1] :]
303
- array = task.basic_corrected_data(beam=beam)
303
+ array = task.basic_dark_bp_corrected_data(beam=beam)
304
304
  with pytest.raises(AssertionError):
305
305
  np.testing.assert_equal(expected, array)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dkist-processing-cryonirsp
3
- Version: 0.0.37
3
+ Version: 0.0.38
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