dkist-processing-cryonirsp 1.4.15__py3-none-any.whl → 1.4.16__py3-none-any.whl

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 (49) hide show
  1. dkist_processing_cryonirsp/codecs/__init__.py +5 -0
  2. dkist_processing_cryonirsp/codecs/fits.py +52 -0
  3. dkist_processing_cryonirsp/models/beam_boundaries.py +39 -0
  4. dkist_processing_cryonirsp/models/parameters.py +0 -1
  5. dkist_processing_cryonirsp/models/tags.py +34 -0
  6. dkist_processing_cryonirsp/parsers/cryonirsp_l0_fits_access.py +38 -2
  7. dkist_processing_cryonirsp/tasks/assemble_movie.py +2 -2
  8. dkist_processing_cryonirsp/tasks/bad_pixel_map.py +14 -9
  9. dkist_processing_cryonirsp/tasks/beam_boundaries_base.py +24 -43
  10. dkist_processing_cryonirsp/tasks/ci_beam_boundaries.py +1 -1
  11. dkist_processing_cryonirsp/tasks/ci_science.py +24 -6
  12. dkist_processing_cryonirsp/tasks/cryonirsp_base.py +0 -10
  13. dkist_processing_cryonirsp/tasks/dark.py +34 -14
  14. dkist_processing_cryonirsp/tasks/gain.py +69 -22
  15. dkist_processing_cryonirsp/tasks/instrument_polarization.py +131 -49
  16. dkist_processing_cryonirsp/tasks/l1_output_data.py +0 -1
  17. dkist_processing_cryonirsp/tasks/linearity_correction.py +4 -7
  18. dkist_processing_cryonirsp/tasks/make_movie_frames.py +5 -5
  19. dkist_processing_cryonirsp/tasks/quality_metrics.py +4 -4
  20. dkist_processing_cryonirsp/tasks/science_base.py +34 -10
  21. dkist_processing_cryonirsp/tasks/sp_beam_boundaries.py +1 -1
  22. dkist_processing_cryonirsp/tasks/sp_dispersion_axis_correction.py +14 -6
  23. dkist_processing_cryonirsp/tasks/sp_geometric.py +112 -39
  24. dkist_processing_cryonirsp/tasks/sp_science.py +53 -11
  25. dkist_processing_cryonirsp/tasks/sp_solar_gain.py +108 -29
  26. dkist_processing_cryonirsp/tests/local_trial_workflows/l0_cals_only.py +2 -10
  27. dkist_processing_cryonirsp/tests/local_trial_workflows/l0_to_l1.py +8 -11
  28. dkist_processing_cryonirsp/tests/local_trial_workflows/local_trial_helpers.py +1 -1
  29. dkist_processing_cryonirsp/tests/test_bad_pixel_maps.py +1 -2
  30. dkist_processing_cryonirsp/tests/test_ci_beam_boundaries.py +6 -5
  31. dkist_processing_cryonirsp/tests/test_ci_science.py +25 -24
  32. dkist_processing_cryonirsp/tests/test_cryo_base.py +41 -43
  33. dkist_processing_cryonirsp/tests/test_dark.py +20 -28
  34. dkist_processing_cryonirsp/tests/test_gain.py +46 -35
  35. dkist_processing_cryonirsp/tests/test_instrument_polarization.py +22 -16
  36. dkist_processing_cryonirsp/tests/test_linearity_correction.py +1 -4
  37. dkist_processing_cryonirsp/tests/test_quality.py +1 -2
  38. dkist_processing_cryonirsp/tests/test_sp_beam_boundaries.py +6 -5
  39. dkist_processing_cryonirsp/tests/test_sp_dispersion_axis_correction.py +10 -9
  40. dkist_processing_cryonirsp/tests/test_sp_geometric.py +108 -53
  41. dkist_processing_cryonirsp/tests/test_sp_science.py +49 -35
  42. dkist_processing_cryonirsp/tests/test_sp_solar.py +70 -38
  43. {dkist_processing_cryonirsp-1.4.15.dist-info → dkist_processing_cryonirsp-1.4.16.dist-info}/METADATA +2 -2
  44. {dkist_processing_cryonirsp-1.4.15.dist-info → dkist_processing_cryonirsp-1.4.16.dist-info}/RECORD +46 -46
  45. dkist_processing_cryonirsp/tasks/mixin/beam_access.py +0 -52
  46. dkist_processing_cryonirsp/tasks/mixin/intermediate_frame.py +0 -193
  47. dkist_processing_cryonirsp/tasks/mixin/linearized_frame.py +0 -309
  48. {dkist_processing_cryonirsp-1.4.15.dist-info → dkist_processing_cryonirsp-1.4.16.dist-info}/WHEEL +0 -0
  49. {dkist_processing_cryonirsp-1.4.15.dist-info → dkist_processing_cryonirsp-1.4.16.dist-info}/top_level.txt +0 -0
@@ -9,6 +9,7 @@ from astropy.time import Time
9
9
  from astropy.time import TimeDelta
10
10
  from dkist_header_validator import spec122_validator
11
11
  from dkist_processing_common._util.scratch import WorkflowFileSystem
12
+ from dkist_processing_common.codecs.fits import fits_array_encoder
12
13
  from dkist_processing_common.codecs.fits import fits_hdulist_encoder
13
14
  from dkist_processing_common.tests.conftest import FakeGQLClient
14
15
 
@@ -69,9 +70,10 @@ def sp_science_calibration_task(
69
70
  param_class = cryonirsp_testing_parameters_factory(param_path=tmp_path)
70
71
  assign_input_dataset_doc_to_task(task, param_class())
71
72
  # Create fake bad pixel map
72
- task.intermediate_frame_write_arrays(
73
- arrays=np.zeros((30, 60)),
74
- task_tag=CryonirspTag.task_bad_pixel_map(),
73
+ task.write(
74
+ data=np.zeros((30, 60)),
75
+ tags=[CryonirspTag.intermediate_frame(), CryonirspTag.task_bad_pixel_map()],
76
+ encoder=fits_array_encoder,
75
77
  )
76
78
  # Create fake demodulation matrices
77
79
  demod_matrices = np.zeros((1, 1, 4, num_modstates))
@@ -82,10 +84,8 @@ def sp_science_calibration_task(
82
84
  task.write(
83
85
  data=demod_hdul,
84
86
  tags=[
85
- CryonirspTag.intermediate(),
86
- CryonirspTag.frame(),
87
+ CryonirspTag.intermediate_frame(beam=beam + 1),
87
88
  CryonirspTag.task_demodulation_matrices(),
88
- CryonirspTag.beam(beam + 1),
89
89
  ],
90
90
  encoder=fits_hdulist_encoder,
91
91
  )
@@ -95,38 +95,56 @@ def sp_science_calibration_task(
95
95
  offset = np.array([-10.2, 5.1])
96
96
  spec_shift = np.zeros(intermediate_shape[0])
97
97
  for beam in range(1, num_beams + 1):
98
- task.intermediate_frame_write_arrays(
99
- arrays=angle, beam=beam, task_tag=CryonirspTag.task_geometric_angle()
98
+ task.write(
99
+ data=angle,
100
+ tags=[
101
+ CryonirspTag.intermediate_frame(beam=beam),
102
+ CryonirspTag.task_geometric_angle(),
103
+ ],
104
+ encoder=fits_array_encoder,
100
105
  )
101
- task.intermediate_frame_write_arrays(
102
- arrays=spec_shift,
103
- beam=beam,
104
- task_tag=CryonirspTag.task_geometric_sepectral_shifts(),
106
+ task.write(
107
+ data=spec_shift,
108
+ tags=[
109
+ CryonirspTag.intermediate_frame(beam=beam),
110
+ CryonirspTag.task_geometric_spectral_shifts(),
111
+ ],
112
+ encoder=fits_array_encoder,
105
113
  )
106
114
  for modstate in range(1, num_modstates + 1):
107
- task.intermediate_frame_write_arrays(
108
- arrays=offset
115
+ task.write(
116
+ data=offset
109
117
  * (beam - 1), # Because we need the fiducial array to have (0, 0) offset
110
- beam=beam,
111
- modstate=modstate,
112
- task_tag=CryonirspTag.task_geometric_offset(),
118
+ tags=[
119
+ CryonirspTag.intermediate_frame(beam=beam),
120
+ CryonirspTag.task_geometric_offset(),
121
+ CryonirspTag.modstate(modstate),
122
+ ],
123
+ encoder=fits_array_encoder,
113
124
  )
114
125
 
115
126
  # Create fake dark intermediate arrays
116
127
  for beam in range(1, num_beams + 1):
117
- task.intermediate_frame_write_arrays(
128
+ task.write(
118
129
  all_zeros,
119
- beam=beam,
120
- task_tag=CryonirspTag.task_dark(),
121
- exposure_conditions=exposure_conditions,
130
+ tags=[
131
+ CryonirspTag.intermediate_frame(
132
+ beam=beam, exposure_conditions=exposure_conditions
133
+ ),
134
+ CryonirspTag.task_dark(),
135
+ ],
136
+ encoder=fits_array_encoder,
122
137
  )
123
138
 
124
139
  # And a beam border intermediate array
125
140
  for beam in range(1, num_beams + 1):
126
- task.intermediate_frame_write_arrays(
127
- arrays=np.array([0, 30, ((beam - 1) * 30), (30 + (beam - 1) * 30)]),
128
- task_tag=CryonirspTag.task_beam_boundaries(),
129
- beam=beam,
141
+ task.write(
142
+ data=np.array([0, 30, ((beam - 1) * 30), (30 + (beam - 1) * 30)]),
143
+ tags=[
144
+ CryonirspTag.intermediate_frame(beam=beam),
145
+ CryonirspTag.task_beam_boundaries(),
146
+ ],
147
+ encoder=fits_array_encoder,
130
148
  )
131
149
 
132
150
  # Create fake lamp and solar gain intermediate arrays
@@ -136,10 +154,8 @@ def sp_science_calibration_task(
136
154
  task.write(
137
155
  data=gain_hdul,
138
156
  tags=[
139
- CryonirspTag.intermediate(),
140
- CryonirspTag.frame(),
157
+ CryonirspTag.intermediate_frame(beam=beam),
141
158
  CryonirspTag.task_lamp_gain(),
142
- CryonirspTag.beam(beam),
143
159
  CryonirspTag.modstate(modstate),
144
160
  ],
145
161
  encoder=fits_hdulist_encoder,
@@ -148,10 +164,8 @@ def sp_science_calibration_task(
148
164
  task.write(
149
165
  data=gain_hdul,
150
166
  tags=[
151
- CryonirspTag.intermediate(),
152
- CryonirspTag.frame(),
167
+ CryonirspTag.intermediate_frame(beam=beam),
153
168
  CryonirspTag.task_solar_gain(),
154
- CryonirspTag.beam(beam),
155
169
  CryonirspTag.modstate(modstate),
156
170
  ],
157
171
  encoder=fits_hdulist_encoder,
@@ -196,9 +210,9 @@ def sp_science_calibration_task(
196
210
  CryonirspTag.scan_step(scan_step),
197
211
  CryonirspTag.map_scan(map_scan),
198
212
  CryonirspTag.modstate(modstate),
199
- CryonirspTag.linearized(),
200
- CryonirspTag.frame(),
201
- CryonirspTag.exposure_conditions(exposure_conditions),
213
+ CryonirspTag.linearized_frame(
214
+ exposure_conditions=exposure_conditions
215
+ ),
202
216
  ],
203
217
  encoder=fits_hdulist_encoder,
204
218
  )
@@ -372,7 +386,7 @@ def test_sp_science_calibration_task(sp_science_calibration_task, mocker):
372
386
  data = json.load(f)
373
387
  assert isinstance(data, dict)
374
388
  assert data["total_frames"] == task.scratch.count_all(
375
- tags=[CryonirspTag.linearized(), CryonirspTag.frame(), CryonirspTag.task_observe()]
389
+ tags=[CryonirspTag.linearized_frame(), CryonirspTag.task_observe()]
376
390
  )
377
391
 
378
392
 
@@ -3,9 +3,11 @@ import json
3
3
  import numpy as np
4
4
  import pytest
5
5
  from dkist_processing_common._util.scratch import WorkflowFileSystem
6
+ from dkist_processing_common.codecs.fits import fits_array_encoder
6
7
  from dkist_processing_common.codecs.fits import fits_hdulist_encoder
7
8
  from dkist_processing_common.tests.conftest import FakeGQLClient
8
9
 
10
+ from dkist_processing_cryonirsp.codecs.fits import cryo_fits_array_decoder
9
11
  from dkist_processing_cryonirsp.models.exposure_conditions import AllowableOpticalDensityFilterNames
10
12
  from dkist_processing_cryonirsp.models.exposure_conditions import ExposureConditions
11
13
  from dkist_processing_cryonirsp.models.tags import CryonirspTag
@@ -54,37 +56,51 @@ def solar_gain_calibration_task_that_completes(
54
56
  task, param_class(cryonirsp_fringe_correction_on=fringe_correction)
55
57
  )
56
58
  # Create fake bad pixel map
57
- task.intermediate_frame_write_arrays(
58
- arrays=np.zeros((10, 20)),
59
- task_tag=CryonirspTag.task_bad_pixel_map(),
59
+ task.write(
60
+ data=np.zeros((10, 20)),
61
+ tags=[CryonirspTag.intermediate_frame(), CryonirspTag.task_bad_pixel_map()],
62
+ encoder=fits_array_encoder,
60
63
  )
61
64
  for beam in range(1, number_of_beams + 1):
62
65
  # Create fake beam border intermediate arrays
63
- task.intermediate_frame_write_arrays(
64
- arrays=np.array([0, 10, ((beam - 1) * 10), 10 + ((beam - 1) * 10)]),
65
- task_tag=CryonirspTag.task_beam_boundaries(),
66
- beam=beam,
66
+ task.write(
67
+ data=np.array([0, 10, ((beam - 1) * 10), 10 + ((beam - 1) * 10)]),
68
+ tags=[
69
+ CryonirspTag.intermediate_frame(beam=beam),
70
+ CryonirspTag.task_beam_boundaries(),
71
+ ],
72
+ encoder=fits_array_encoder,
67
73
  )
68
74
 
69
75
  # DarkCal object
70
76
  dark_cal = np.ones(intermediate_shape) * 3.0
71
- task.intermediate_frame_write_arrays(
72
- arrays=dark_cal,
73
- beam=beam,
74
- task_tag=CryonirspTag.task_dark(),
75
- exposure_conditions=exposure_conditions,
77
+ task.write(
78
+ data=dark_cal,
79
+ tags=[
80
+ CryonirspTag.intermediate_frame(
81
+ beam=beam, exposure_conditions=exposure_conditions
82
+ ),
83
+ CryonirspTag.task_dark(),
84
+ ],
85
+ encoder=fits_array_encoder,
76
86
  )
77
87
 
78
88
  # Geo angles and spec_shifts
79
- task.intermediate_frame_write_arrays(
80
- arrays=np.zeros(1),
81
- beam=beam,
82
- task_tag=CryonirspTag.task_geometric_angle(),
89
+ task.write(
90
+ data=np.zeros(1),
91
+ tags=[
92
+ CryonirspTag.intermediate_frame(beam=beam),
93
+ CryonirspTag.task_geometric_angle(),
94
+ ],
95
+ encoder=fits_array_encoder,
83
96
  )
84
- task.intermediate_frame_write_arrays(
85
- arrays=np.zeros(intermediate_shape[0]),
86
- beam=beam,
87
- task_tag=CryonirspTag.task_geometric_sepectral_shifts(),
97
+ task.write(
98
+ data=np.zeros(intermediate_shape[0]),
99
+ tags=[
100
+ CryonirspTag.intermediate_frame(beam=beam),
101
+ CryonirspTag.task_geometric_spectral_shifts(),
102
+ ],
103
+ encoder=fits_array_encoder,
88
104
  )
89
105
 
90
106
  for modstate in range(1, number_of_modstates + 1):
@@ -93,19 +109,25 @@ def solar_gain_calibration_task_that_completes(
93
109
  lamp_cal_ramp = np.flip(lamp_cal_ramp)
94
110
  lamp_cal = np.ones(intermediate_shape) * lamp_cal_ramp[None, :]
95
111
  lamp_cal /= np.nanmean(lamp_cal)
96
- task.intermediate_frame_write_arrays(
97
- arrays=lamp_cal,
98
- beam=beam,
99
- modstate=modstate,
100
- task_tag=CryonirspTag.task_lamp_gain(),
112
+ task.write(
113
+ data=lamp_cal,
114
+ tags=[
115
+ CryonirspTag.intermediate_frame(beam=beam),
116
+ CryonirspTag.modstate(modstate),
117
+ CryonirspTag.task_lamp_gain(),
118
+ ],
119
+ encoder=fits_array_encoder,
101
120
  )
102
121
 
103
122
  # Geo offsets
104
- task.intermediate_frame_write_arrays(
105
- arrays=np.zeros(2),
106
- beam=beam,
107
- modstate=modstate,
108
- task_tag=CryonirspTag.task_geometric_offset(),
123
+ task.write(
124
+ data=np.zeros(2),
125
+ tags=[
126
+ CryonirspTag.intermediate_frame(beam=beam),
127
+ CryonirspTag.modstate(modstate),
128
+ CryonirspTag.task_geometric_offset(),
129
+ ],
130
+ encoder=fits_array_encoder,
109
131
  )
110
132
 
111
133
  # Raw gain input images contain both beams, so are not beam specific!!!
@@ -129,11 +151,9 @@ def solar_gain_calibration_task_that_completes(
129
151
  task.write(
130
152
  data=solar_hdul,
131
153
  tags=[
132
- CryonirspTag.linearized(),
154
+ CryonirspTag.linearized_frame(exposure_conditions=exposure_conditions),
133
155
  CryonirspTag.task_solar_gain(),
134
156
  CryonirspTag.modstate(modstate),
135
- CryonirspTag.frame(),
136
- CryonirspTag.exposure_conditions(exposure_conditions),
137
157
  ],
138
158
  encoder=fits_hdulist_encoder,
139
159
  )
@@ -172,7 +192,15 @@ def test_solar_gain_task(solar_gain_calibration_task_that_completes, mocker, fri
172
192
  task()
173
193
  for beam in range(1, task.constants.num_beams + 1):
174
194
  for modstate in range(1, task.constants.num_modstates + 1):
175
- solar_gain = task.intermediate_frame_load_solar_gain_array(beam=beam)
195
+ solar_gain = next(
196
+ task.read(
197
+ tags=[
198
+ CryonirspTag.intermediate_frame(beam=beam),
199
+ CryonirspTag.task_solar_gain(),
200
+ ],
201
+ decoder=cryo_fits_array_decoder,
202
+ )
203
+ )
176
204
  # If fringe correction is on, then just be happy we got a file...
177
205
  if task.parameters.fringe_correction_on:
178
206
  continue
@@ -180,8 +208,13 @@ def test_solar_gain_task(solar_gain_calibration_task_that_completes, mocker, fri
180
208
  expected = np.flip(true_solar_single_beam, axis=1)
181
209
  np.testing.assert_allclose(expected, solar_gain)
182
210
  # Test for the existence of the spectral corrected solar array
183
- spectral_corrected_array = task.intermediate_frame_load_intermediate_arrays(
184
- tags=[CryonirspTag.beam(beam), CryonirspTag.task("SPECTRAL_CORRECTED_SOLAR_ARRAY")]
211
+ spectral_corrected_array = next(
212
+ task.read(
213
+ tags=[
214
+ CryonirspTag.intermediate_frame(beam=beam),
215
+ CryonirspTag.task("SPECTRAL_CORRECTED_SOLAR_ARRAY"),
216
+ ]
217
+ )
185
218
  )
186
219
 
187
220
  quality_files = task.read(tags=[CryonirspTag.quality("TASK_TYPES")])
@@ -191,8 +224,7 @@ def test_solar_gain_task(solar_gain_calibration_task_that_completes, mocker, fri
191
224
  assert isinstance(data, dict)
192
225
  assert data["total_frames"] == task.scratch.count_all(
193
226
  tags=[
194
- CryonirspTag.linearized(),
195
- CryonirspTag.frame(),
227
+ CryonirspTag.linearized_frame(),
196
228
  CryonirspTag.task_solar_gain(),
197
229
  ]
198
230
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: dkist-processing-cryonirsp
3
- Version: 1.4.15
3
+ Version: 1.4.16
4
4
  Summary: Science processing code for the Cryo-NIRSP instrument on DKIST
5
5
  Author-email: NSO / AURA <dkistdc@nso.edu>
6
6
  License: BSD-3-Clause
@@ -17,7 +17,7 @@ Requires-Dist: Pillow==10.3.0
17
17
  Requires-Dist: astropy==6.1.0
18
18
  Requires-Dist: dkist-fits-specifications==4.10.0
19
19
  Requires-Dist: dkist-header-validator==5.1.1
20
- Requires-Dist: dkist-processing-common==10.5.9
20
+ Requires-Dist: dkist-processing-common==10.5.10
21
21
  Requires-Dist: dkist-processing-math==2.1.2
22
22
  Requires-Dist: dkist-processing-pac==3.1.1
23
23
  Requires-Dist: dkist-spectral-lines==3.0.0
@@ -1,15 +1,18 @@
1
1
  changelog/.gitempty,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  dkist_processing_cryonirsp/__init__.py,sha256=Z6-kB7fXXUI-F7Vz1HnEaja2h8qgH9IZExRl1lUxvZg,350
3
3
  dkist_processing_cryonirsp/config.py,sha256=xNkUNJ1BeBxJX881mTCIEbirZlD5_5txpV1QqkbfRM0,507
4
+ dkist_processing_cryonirsp/codecs/__init__.py,sha256=du1iitvsudSSOMENSywXmXSLOlvIocJsPbvfEcyqFNc,159
5
+ dkist_processing_cryonirsp/codecs/fits.py,sha256=EAdPcqWXMEWtWnRDLH_LX20giPoLVfmKBawb9J2z0wM,1718
4
6
  dkist_processing_cryonirsp/models/__init__.py,sha256=m6UekKftTahNJ3W5K3mZSz4Y4ZZpHRxF_ZAxuaKYL7o,12
7
+ dkist_processing_cryonirsp/models/beam_boundaries.py,sha256=FyiLd2iCWA6TUojeGaqQ_ULxvakDY13VxqUJVlmYvV0,1159
5
8
  dkist_processing_cryonirsp/models/constants.py,sha256=p0HTXr994UHUrDRf3o-S5lb2ic7K2TRrHWl-hTWJUlA,10650
6
9
  dkist_processing_cryonirsp/models/exposure_conditions.py,sha256=slFq5-Qz4fRpJKDBabbm4evPWLQVYmT-Uf9rk7nI734,813
7
- dkist_processing_cryonirsp/models/parameters.py,sha256=oAB_68AY2HdxK8IkvzisPKDI-c2agZeKiE5VIkHkkRI,13422
8
- dkist_processing_cryonirsp/models/tags.py,sha256=1Q2ag0ud9gx3su-XUqa--gwSnf5di7CGnlkyiEFreRs,4388
10
+ dkist_processing_cryonirsp/models/parameters.py,sha256=Oa3H7nc3wb8AkKLCsEnxibBJTwwK5U9ZMxzpS7pGFp4,13342
11
+ dkist_processing_cryonirsp/models/tags.py,sha256=ac0MnYlsn8-w7IioOvWeo7mBaDKE9o9TlRpxCH1OsRc,5743
9
12
  dkist_processing_cryonirsp/models/task_name.py,sha256=xK4AKwgOx2uANbjhr0Q5Q3R9iPxLfkVKxWYY8wWjKhE,439
10
13
  dkist_processing_cryonirsp/parsers/__init__.py,sha256=m6UekKftTahNJ3W5K3mZSz4Y4ZZpHRxF_ZAxuaKYL7o,12
11
14
  dkist_processing_cryonirsp/parsers/check_for_gains.py,sha256=v-eD1LG0dlFoZXz5Y-2ZyPvRL2TZ8gWfr5cN6YNYqvo,2341
12
- dkist_processing_cryonirsp/parsers/cryonirsp_l0_fits_access.py,sha256=iu5GJWVQ1PZfv5TR0u_IS2j2KZBU0yewa1ugxjDfVzk,4568
15
+ dkist_processing_cryonirsp/parsers/cryonirsp_l0_fits_access.py,sha256=HtkmVdhEZxasKQyxWQyrirmiDrzAVfr3QCC2ldzBdSk,5617
13
16
  dkist_processing_cryonirsp/parsers/cryonirsp_l1_fits_access.py,sha256=sc8MzxYMc8E1eFrL5KguAGHViCMJhaDfiBtZPml4ELg,886
14
17
  dkist_processing_cryonirsp/parsers/exposure_conditions.py,sha256=Mcud-0PQK0oJSxbqtQUtVk0t8b6YBEFSyGsGbG5UqGg,8445
15
18
  dkist_processing_cryonirsp/parsers/map_repeats.py,sha256=PjZ986bqkCdii-EOzU045cWqadxQC_nyyqwWYIpYdls,1566
@@ -21,66 +24,63 @@ dkist_processing_cryonirsp/parsers/scan_step.py,sha256=7XNUq48qbdpV8GeaBeG9XFRDk
21
24
  dkist_processing_cryonirsp/parsers/time.py,sha256=dpajm3tfrih-8pjlOWOvZVJVP2FihR87HFQSjR_KPYI,2543
22
25
  dkist_processing_cryonirsp/parsers/wavelength.py,sha256=Ay5hZiDNV25-N_QXZINTCgn1ToiP2jvwumkbirBiJGk,883
23
26
  dkist_processing_cryonirsp/tasks/__init__.py,sha256=JyM9oA1A6t5sPsbaNmnK9_e6t00kUYzDZzqmSg0nVjE,1061
24
- dkist_processing_cryonirsp/tasks/assemble_movie.py,sha256=Brj3zdTKQiwgclIKoW2TSxuEHlkST8WjxvtBZONyGKM,7337
25
- dkist_processing_cryonirsp/tasks/bad_pixel_map.py,sha256=QZzCngleitLDjq_2zRBuUorMMkmzMEo11Xwvu6dEudc,3713
26
- dkist_processing_cryonirsp/tasks/beam_boundaries_base.py,sha256=N3zk08sRcczoNGIqRd8vzGtYLQUUiH52-WOc7fIw7t4,9960
27
- dkist_processing_cryonirsp/tasks/ci_beam_boundaries.py,sha256=N-LDXCzI0JJLvhTM69W0zW6moAPaVzl96h41RTn0wNE,1893
28
- dkist_processing_cryonirsp/tasks/ci_science.py,sha256=Qa-qSx_TxtXzGGjgN73TDbO1kqxBNlkt2zaBBB43erM,6693
29
- dkist_processing_cryonirsp/tasks/cryonirsp_base.py,sha256=rVy7vV4il0_B5KXenmCYEcYLNaIQ8_MDiKKn8X6v8yw,2168
30
- dkist_processing_cryonirsp/tasks/dark.py,sha256=RAIejLZFYwJcXjrpGlLRnW42xsD5EGjxyHdXvsBUztw,4127
31
- dkist_processing_cryonirsp/tasks/gain.py,sha256=adrYXgCg0gmDsiczFhyU8kBQsVXj15IEfGrRE2TqVdw,8537
32
- dkist_processing_cryonirsp/tasks/instrument_polarization.py,sha256=uaQWIcQkw61azIA8J1GaRHegFrpZmjWT4wER3iaRmWE,19526
33
- dkist_processing_cryonirsp/tasks/l1_output_data.py,sha256=FdL_Dv-YTLgT-xH_uOOUjk4GUYMjbaSDPIg1rIQu_iY,1621
34
- dkist_processing_cryonirsp/tasks/linearity_correction.py,sha256=-R0iBJDNF9o57GUd5C8YlOL6wyVUzKf5rSDFgu0kpgA,24310
35
- dkist_processing_cryonirsp/tasks/make_movie_frames.py,sha256=Ql_bg1r1W1m-tTOParAdkllFJEJFdNoE16GgHyhDgdw,13900
27
+ dkist_processing_cryonirsp/tasks/assemble_movie.py,sha256=UrxfKSsT3mBkV2LYvnePzKr9nXlvjpoa5amY5C3ftFI,7350
28
+ dkist_processing_cryonirsp/tasks/bad_pixel_map.py,sha256=z-ACCwHqiRANsR7gkkCIycPpgOdR04Mo85WLAPiAJno,3961
29
+ dkist_processing_cryonirsp/tasks/beam_boundaries_base.py,sha256=mOP_AlyZyO6aL6UW7OXV63852tK6Dljkbno_4jlFWNg,9618
30
+ dkist_processing_cryonirsp/tasks/ci_beam_boundaries.py,sha256=pgpi6m0T1E1dkJ8btu45DMK--e7aCJ0wdEnZyD3g7MU,1889
31
+ dkist_processing_cryonirsp/tasks/ci_science.py,sha256=VCt5E2gqL2j5fseSfsqCyCKK5hCGpXiR0XCBC74BiKQ,7366
32
+ dkist_processing_cryonirsp/tasks/cryonirsp_base.py,sha256=7cMXOI7yQ8xTAtJg4ZkhBDej4AknHKBIvw8e9mCiRBw,1814
33
+ dkist_processing_cryonirsp/tasks/dark.py,sha256=h_n1SU2bFiK7lp4vAKxv2ETKHYRODUp2KkH0YXjgFq8,4936
34
+ dkist_processing_cryonirsp/tasks/gain.py,sha256=1aMeSOupmw-WQNb9O2Qx4uxGae0ilZDszo9xbf38Y_g,10438
35
+ dkist_processing_cryonirsp/tasks/instrument_polarization.py,sha256=CpewhRYIz7R6THkvvpsxuZTlz6O_k2w9seQDwaqcklY,23301
36
+ dkist_processing_cryonirsp/tasks/l1_output_data.py,sha256=3RFt493MEJxdpF81gcp8FDlQ8vGZ0GXEDYQFWIufumI,1554
37
+ dkist_processing_cryonirsp/tasks/linearity_correction.py,sha256=n9vK9cT7NWkpAM9J6wOYDj95Kh0va_ot-hdncd7ye0Y,24199
38
+ dkist_processing_cryonirsp/tasks/make_movie_frames.py,sha256=I7s3Tml6AevHci0kTPF71mNjXNl3wlG57Jh7ghnndeg,13928
36
39
  dkist_processing_cryonirsp/tasks/parse.py,sha256=tDOC2_r8xw0RYBxe3b3Te18Y5dBnRrPtikJmuhmwT88,13117
37
- dkist_processing_cryonirsp/tasks/quality_metrics.py,sha256=r4mS1Qp88tHlbNKsqed-MOsFT_6Zbhr5H8-4hrx9OGw,11424
38
- dkist_processing_cryonirsp/tasks/science_base.py,sha256=-BjPNPI5jjiBR7K8p_9fa4vYCEUEdOFx7c2AC5EmFoE,17619
39
- dkist_processing_cryonirsp/tasks/sp_beam_boundaries.py,sha256=3bdj6W2H_UiOhmj2xHvADwOzojteLsTL9RkTwvzB6_M,10300
40
- dkist_processing_cryonirsp/tasks/sp_dispersion_axis_correction.py,sha256=Fx3UUPF3iTRLm2qn2acxvbMO4POyq6L6yeSLDpOaCKA,19036
41
- dkist_processing_cryonirsp/tasks/sp_geometric.py,sha256=Ym5M1DJR_ZYGqjD1Cy5IQiult3GN5dp0hnJ9sLfMDQM,21860
42
- dkist_processing_cryonirsp/tasks/sp_science.py,sha256=FubmQSg_ZrVy08TcT6dRK2nuA2cmGMrMYMmjT6_bYQM,12091
43
- dkist_processing_cryonirsp/tasks/sp_solar_gain.py,sha256=WJKenRlqFlsP3zb3IPqRFdxCGcmJZMVlM9Me-myyvn0,18541
40
+ dkist_processing_cryonirsp/tasks/quality_metrics.py,sha256=jyx2YZzLb5sVxbJ_H6PaKQqZbyZy9QuuLqu18jsnncQ,11447
41
+ dkist_processing_cryonirsp/tasks/science_base.py,sha256=YYUQUfLeuzDb6E5TecOH22orTN4-hWocoYaGOq6Zoro,18637
42
+ dkist_processing_cryonirsp/tasks/sp_beam_boundaries.py,sha256=XI3iepNe04xaU4ilqxrlOgYDkv5I5rUc0RXEE1Rwt0o,10296
43
+ dkist_processing_cryonirsp/tasks/sp_dispersion_axis_correction.py,sha256=ZfUpsija9T7ZCm111u-iCxbcx7WxHWd_OklVCfYbjXg,19465
44
+ dkist_processing_cryonirsp/tasks/sp_geometric.py,sha256=_M_e_blz4mKDIUWSasonnOzbZ6EUbHp9pAZXQx4zY7U,24387
45
+ dkist_processing_cryonirsp/tasks/sp_science.py,sha256=QWyAEkXYamAcWxi62-tVD6ptuQ6vt8yIzuCKzCIYW20,13643
46
+ dkist_processing_cryonirsp/tasks/sp_solar_gain.py,sha256=d4UABsMxyzCMduVxptHY_TCGqS-l-W5iuhW7HJwVPkA,21024
44
47
  dkist_processing_cryonirsp/tasks/write_l1.py,sha256=hIjTun-zs35sXqVrcFhWqWA2gX2HpoGZxotvfHj_KpA,41457
45
48
  dkist_processing_cryonirsp/tasks/mixin/__init__.py,sha256=m6UekKftTahNJ3W5K3mZSz4Y4ZZpHRxF_ZAxuaKYL7o,12
46
- dkist_processing_cryonirsp/tasks/mixin/beam_access.py,sha256=DiPRbsAyfhX-juHL0slypcXi5C8PJT-DNMX6ck1IH1w,1627
47
49
  dkist_processing_cryonirsp/tasks/mixin/corrections.py,sha256=rcKmckBJkoExcX0XW1i3OZzuMu1i7tX5Hgwy15chU50,6566
48
- dkist_processing_cryonirsp/tasks/mixin/intermediate_frame.py,sha256=fFeIvuA4AtkQTt9hOFHUYolrSYPtjUGZU4g5f7JKj5Y,7911
49
- dkist_processing_cryonirsp/tasks/mixin/linearized_frame.py,sha256=oyiMA_rzBUYtlmh1ilfE5DkuIe4FFiyptaYjcU8-joA,10176
50
50
  dkist_processing_cryonirsp/tasks/mixin/shift_measurements.py,sha256=7ToSy9uOJ_JrFfd-X225wqW_laq4xoRJkBiAPanfb_g,11225
51
51
  dkist_processing_cryonirsp/tests/__init__.py,sha256=m6UekKftTahNJ3W5K3mZSz4Y4ZZpHRxF_ZAxuaKYL7o,12
52
52
  dkist_processing_cryonirsp/tests/conftest.py,sha256=_yAXaaaiyw4iQOGETN2sgelJsf1_AwjicXv1e1oqdqw,17485
53
53
  dkist_processing_cryonirsp/tests/header_models.py,sha256=Ny4h5lS54bGRPDo4nOzvJgNWMzFY9DDs1IQorr_r3s8,20591
54
54
  dkist_processing_cryonirsp/tests/test_assemble_movie.py,sha256=YNZINIFXR9kZBlE1AIvjlVmwwhZJeVYOOPk7Q8IVkcI,6222
55
55
  dkist_processing_cryonirsp/tests/test_assemble_qualilty.py,sha256=upk-oUqVBHGK3F0eemshLpAPrnfh9mbeuZXow4E1Rmc,16859
56
- dkist_processing_cryonirsp/tests/test_bad_pixel_maps.py,sha256=O3_GiGmc2le4TwiXZXEv4cjx-vE_oV9QrNsAc4L-Ufs,4906
57
- dkist_processing_cryonirsp/tests/test_ci_beam_boundaries.py,sha256=4Im8TB9iIqHep7H3P0VCfEmPAzdDOZH3MfIJdMyiHvE,4493
58
- dkist_processing_cryonirsp/tests/test_ci_science.py,sha256=GdzUR5csW2uoJBc_y5gYEpUxB8Qqlc8d0qhrZRjhYds,14401
56
+ dkist_processing_cryonirsp/tests/test_bad_pixel_maps.py,sha256=4Lrcvbzzzczkz1mEXVDb_qc1cGPIWTrSZQFv4KiDhn4,4870
57
+ dkist_processing_cryonirsp/tests/test_ci_beam_boundaries.py,sha256=lkFuFVZHDDbNkOZKeJC1inOkR0VByZVaATbdHDmr3Ew,4573
58
+ dkist_processing_cryonirsp/tests/test_ci_science.py,sha256=dFFn49nxhv2iocZ5uGeXegJU8c-csDYaKjumvcOMxZI,14418
59
59
  dkist_processing_cryonirsp/tests/test_corrections.py,sha256=5nY8MccZcNDyQYV8IEokqtY_YrP08TZ-H7WQNioK-A0,4650
60
- dkist_processing_cryonirsp/tests/test_cryo_base.py,sha256=lF27S1aBmMc5wRWNPKjkXZTyGDPvLo59IubYAb1McsU,7172
60
+ dkist_processing_cryonirsp/tests/test_cryo_base.py,sha256=6uOUgJPehr6XwZUE0InVDKJllJsTvfuG-VM5PdKlf0Q,6662
61
61
  dkist_processing_cryonirsp/tests/test_cryo_constants.py,sha256=VbjM1vZYRa_057yK_aP2ta6JyT7Ob1ou4SbGEVIIKH0,2715
62
- dkist_processing_cryonirsp/tests/test_dark.py,sha256=wUeRG0Gw_oQ6HxKa7nozLJA_nwKZQB0nDKnpobf5Ksw,11977
63
- dkist_processing_cryonirsp/tests/test_gain.py,sha256=YUgcGFh325TZBT9BbkzlkbapVJL4skTE1FVhsFNhUc8,10854
64
- dkist_processing_cryonirsp/tests/test_instrument_polarization.py,sha256=GgZmPJVtsEploGFEZsddwXAh9QtnoOUdywEPdkT_l-s,19276
65
- dkist_processing_cryonirsp/tests/test_linearity_correction.py,sha256=y9gDWlHsOaTMP7K5-lIIVmboa6nd0ozaqEtl6Fvt5T0,9406
62
+ dkist_processing_cryonirsp/tests/test_dark.py,sha256=ZGbjFP2IOL1gyC3rjde43xMS-vWStHDL9md1bhXt8Lg,11699
63
+ dkist_processing_cryonirsp/tests/test_gain.py,sha256=BSeum2N0vUIP12AiPB2Qhw-zgvd3EkGkK8UX9FEchuA,11290
64
+ dkist_processing_cryonirsp/tests/test_instrument_polarization.py,sha256=AB97NvR4VIivSu7X-GBKDrOJNx_LNbCQ_7mk0T3Eezo,19505
65
+ dkist_processing_cryonirsp/tests/test_linearity_correction.py,sha256=HRIi8fKfZvyaOOgEkO3JGz1j2ceoecrw70mmiszcGio,9365
66
66
  dkist_processing_cryonirsp/tests/test_make_movie_frames.py,sha256=WznHp9dV2-jbJYzRniCAIbSHCGNc0SpSzyVDSrZkYd4,4904
67
67
  dkist_processing_cryonirsp/tests/test_parameters.py,sha256=CbaEnxx3HGZmqZJbNzQ2IJpIg6AKlK26BT3TXUMGYAE,11438
68
68
  dkist_processing_cryonirsp/tests/test_parse.py,sha256=UXbAZb4EJ-jlrkSfQXGTp7SA9B-OG5UBgV2SkCQZHxg,55804
69
- dkist_processing_cryonirsp/tests/test_quality.py,sha256=DWuL7q8x2RtPz3LN9-KEw541sv6Law9WyVQKaamkOmE,8169
70
- dkist_processing_cryonirsp/tests/test_sp_beam_boundaries.py,sha256=4hONuVLQAqkQjNtpNzvmqEWLg3LI1XJLWaekkeS3SJo,4815
71
- dkist_processing_cryonirsp/tests/test_sp_dispersion_axis_correction.py,sha256=lhwT_I0HQuH66I0TRvARfuNnWWjxeAvQ4fEEVmbhp_E,6098
72
- dkist_processing_cryonirsp/tests/test_sp_geometric.py,sha256=xlfmE6xfHDIJqKdXjJ_fj1ADaufg2MnkTtH11_vIxWQ,13927
69
+ dkist_processing_cryonirsp/tests/test_quality.py,sha256=qrJBYjnZOhmQ4vjDcDV3FVSUAdktFgs-pRaHX4cf2G0,8129
70
+ dkist_processing_cryonirsp/tests/test_sp_beam_boundaries.py,sha256=b_o5k94zQEgG7fdMkuDHs1iyq6NFxv_NLYS7FvtlZQI,4895
71
+ dkist_processing_cryonirsp/tests/test_sp_dispersion_axis_correction.py,sha256=Fha0q4yJGftQ0l815FO78K1SmXtA-qbhQ3-Jk5iiBDE,6156
72
+ dkist_processing_cryonirsp/tests/test_sp_geometric.py,sha256=TQTR26SG6OQE00adx5lTdmb943HmXI3C6tLT-weZCM8,15721
73
73
  dkist_processing_cryonirsp/tests/test_sp_make_movie_frames.py,sha256=Kn8U_HzaaHW2bHmBxsotdjmpBhd_Ft6pLWhVsMWIJE8,5322
74
- dkist_processing_cryonirsp/tests/test_sp_science.py,sha256=bjUtZNlRiCaDK0ql0iMdZ6YF8f1dGAhz5HmOxWX1XBE,19416
75
- dkist_processing_cryonirsp/tests/test_sp_solar.py,sha256=NHHE-PPa2bU0JK0fuezZakFvAi1f_2z7AHM9vxInF-U,8913
74
+ dkist_processing_cryonirsp/tests/test_sp_science.py,sha256=fffX8Fi-k7dYOax_5nvocbq8CXMYklmtSLfZRSe7Dsw,19850
75
+ dkist_processing_cryonirsp/tests/test_sp_solar.py,sha256=xSIKs8yylB18dZA75jTb-yOvCE2CMbESXCFwyHK3J_c,10023
76
76
  dkist_processing_cryonirsp/tests/test_trial_create_quality_report.py,sha256=x8dRAMyawQVYZQGsuO36DMZxK4L13hZBUn86qbhJiNk,2805
77
77
  dkist_processing_cryonirsp/tests/test_workflows.py,sha256=2a-TUMbVEyNjHYNyzo2UQMLg5PSaEx6iV9hOsGp-Mck,291
78
78
  dkist_processing_cryonirsp/tests/test_write_l1.py,sha256=TIizk5mViC6Km8Ee-CfHwRFTqJmSa3Ey_GfM09iGBRc,17597
79
79
  dkist_processing_cryonirsp/tests/local_trial_workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
- dkist_processing_cryonirsp/tests/local_trial_workflows/l0_cals_only.py,sha256=jJ9g2muTBfSHP-RgUInnMzsfqmMY9O0Qu_N9SVH0nq4,20420
81
- dkist_processing_cryonirsp/tests/local_trial_workflows/l0_to_l1.py,sha256=f00YZl9ew1IX5p-a6hisXjOcA8WvM6cJ_h_jKXCFZb8,24061
80
+ dkist_processing_cryonirsp/tests/local_trial_workflows/l0_cals_only.py,sha256=nWs3Qg3f4DHqN_6JBKDaR5q9TncgR_PeRWw3_bUBZWA,20110
81
+ dkist_processing_cryonirsp/tests/local_trial_workflows/l0_to_l1.py,sha256=KaxxMeo_sOMWgekNVkPsTJt6XWU2Ov7rnMkBtG_sKcc,23938
82
82
  dkist_processing_cryonirsp/tests/local_trial_workflows/linearize_only.py,sha256=kl9yrE1EbgxNn__x4q0WYoZIvS8zefcOPbQQdxB4_ZE,3280
83
- dkist_processing_cryonirsp/tests/local_trial_workflows/local_trial_helpers.py,sha256=14XonDUbMWh6n1AwtPaDLCeSvoHCzn-MNHCkHLB4VUc,19330
83
+ dkist_processing_cryonirsp/tests/local_trial_workflows/local_trial_helpers.py,sha256=LCvmP2KAiq0BVqMj-ThFWxAwo4oNs9hZRibQevRj4nU,19329
84
84
  dkist_processing_cryonirsp/workflows/__init__.py,sha256=iEbV3oiKmkfmdZjeNJxqw08IIZnYSroq-2b-ARpkLFQ,112
85
85
  dkist_processing_cryonirsp/workflows/ci_l0_processing.py,sha256=T-BOvDDWHzs5BDH5ctSBjzGgD6Xez52AnDXsH5_7Bms,3788
86
86
  dkist_processing_cryonirsp/workflows/sp_l0_processing.py,sha256=A74av8E8mL9WzI4vWI2GbhVrRFQ7JCMlGAioEjXkkCU,4219
@@ -105,7 +105,7 @@ docs/requirements_table.rst,sha256=FaqSag9kPi77gWPhzeo_tFEhRFjb3qUuNqqQe1K76NM,2
105
105
  docs/scientific_changelog.rst,sha256=01AWBSHg8zElnodCgAq-hMxhk9CkX5rtEENx4iz0sjI,300
106
106
  docs/sp_science_calibration.rst,sha256=fHBOZ2cqySxLjNi737KfynlmHZy9W4EwvuzxnyjDNvk,2597
107
107
  licenses/LICENSE.rst,sha256=piZaQplkzOMmH1NXg6QIdo9wwo9pPCoHkvm2-DmH76E,1462
108
- dkist_processing_cryonirsp-1.4.15.dist-info/METADATA,sha256=nzYxsQYcgSPkitS0xUODUPTMDhXnJhGgo3mUvL9VyZE,8410
109
- dkist_processing_cryonirsp-1.4.15.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
110
- dkist_processing_cryonirsp-1.4.15.dist-info/top_level.txt,sha256=Sm9b1ddKnsF9Bh3mqDOct1Sm7k8I9aN7vGHgpmu-MlQ,51
111
- dkist_processing_cryonirsp-1.4.15.dist-info/RECORD,,
108
+ dkist_processing_cryonirsp-1.4.16.dist-info/METADATA,sha256=EVZu26UXMgkXySvDTykCg-f2mGFYwltcMxJPSbKNhWw,8411
109
+ dkist_processing_cryonirsp-1.4.16.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
110
+ dkist_processing_cryonirsp-1.4.16.dist-info/top_level.txt,sha256=Sm9b1ddKnsF9Bh3mqDOct1Sm7k8I9aN7vGHgpmu-MlQ,51
111
+ dkist_processing_cryonirsp-1.4.16.dist-info/RECORD,,
@@ -1,52 +0,0 @@
1
- """Mixin to support extracting the desired beam from an input image on-the-fly."""
2
- from functools import cached_property
3
-
4
- import numpy as np
5
-
6
-
7
- class BeamAccessMixin:
8
- """Mixin that supports extracting the desired beam from an input image on-the-fly."""
9
-
10
- def beam_access_get_beam(self, array: np.ndarray, beam: int) -> np.ndarray:
11
- """
12
- Extract a single beam array from a dual-beam array.
13
-
14
- Parameters
15
- ----------
16
- array
17
- The input dual-beam array
18
- beam
19
- The desired beam to extract
20
-
21
- Returns
22
- -------
23
- An ndarray containing the extracted beam
24
- """
25
- boundaries = self.beam_boundaries[beam]
26
- spatial_min, spatial_max, spectral_min, spectral_max = boundaries
27
-
28
- if (
29
- spatial_min < 0
30
- or spatial_max > array.shape[0]
31
- or spectral_min < 0
32
- or spectral_max > array.shape[1]
33
- ):
34
- raise IndexError(
35
- f"beam_access_get_boundaries exceed array bounds: {boundaries = }, {array.shape = }."
36
- )
37
-
38
- return np.copy(array[spatial_min:spatial_max, spectral_min:spectral_max])
39
-
40
- @cached_property
41
- def beam_boundaries(self) -> dict[int, np.ndarray]:
42
- """
43
- Load the beam boundaries from their respective files and return as a boundary dict.
44
-
45
- Returns
46
- -------
47
- beam_boundary dict
48
- """
49
- boundaries = dict()
50
- for beam in range(1, self.constants.num_beams + 1):
51
- boundaries[beam] = self.intermediate_frame_load_beam_boundaries(beam=beam)
52
- return boundaries