dkist-processing-cryonirsp 1.4.15__py3-none-any.whl → 1.4.16rc1__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.
- changelog/170.feature.rst +11 -0
- changelog/170.misc.1.rst +2 -0
- changelog/170.misc.rst +3 -0
- changelog/174.bugfix.rst +1 -0
- dkist_processing_cryonirsp/codecs/__init__.py +5 -0
- dkist_processing_cryonirsp/codecs/fits.py +52 -0
- dkist_processing_cryonirsp/models/beam_boundaries.py +39 -0
- dkist_processing_cryonirsp/models/parameters.py +0 -1
- dkist_processing_cryonirsp/models/tags.py +34 -0
- dkist_processing_cryonirsp/parsers/cryonirsp_l0_fits_access.py +38 -2
- dkist_processing_cryonirsp/tasks/assemble_movie.py +2 -2
- dkist_processing_cryonirsp/tasks/bad_pixel_map.py +14 -9
- dkist_processing_cryonirsp/tasks/beam_boundaries_base.py +24 -43
- dkist_processing_cryonirsp/tasks/ci_beam_boundaries.py +1 -1
- dkist_processing_cryonirsp/tasks/ci_science.py +24 -6
- dkist_processing_cryonirsp/tasks/cryonirsp_base.py +0 -10
- dkist_processing_cryonirsp/tasks/dark.py +34 -14
- dkist_processing_cryonirsp/tasks/gain.py +69 -22
- dkist_processing_cryonirsp/tasks/instrument_polarization.py +131 -49
- dkist_processing_cryonirsp/tasks/l1_output_data.py +0 -1
- dkist_processing_cryonirsp/tasks/linearity_correction.py +4 -7
- dkist_processing_cryonirsp/tasks/make_movie_frames.py +5 -5
- dkist_processing_cryonirsp/tasks/quality_metrics.py +4 -4
- dkist_processing_cryonirsp/tasks/science_base.py +34 -10
- dkist_processing_cryonirsp/tasks/sp_beam_boundaries.py +1 -1
- dkist_processing_cryonirsp/tasks/sp_dispersion_axis_correction.py +14 -6
- dkist_processing_cryonirsp/tasks/sp_geometric.py +112 -39
- dkist_processing_cryonirsp/tasks/sp_science.py +53 -11
- dkist_processing_cryonirsp/tasks/sp_solar_gain.py +108 -29
- dkist_processing_cryonirsp/tests/local_trial_workflows/l0_cals_only.py +2 -10
- dkist_processing_cryonirsp/tests/local_trial_workflows/l0_to_l1.py +8 -11
- dkist_processing_cryonirsp/tests/local_trial_workflows/local_trial_helpers.py +1 -1
- dkist_processing_cryonirsp/tests/test_bad_pixel_maps.py +1 -2
- dkist_processing_cryonirsp/tests/test_ci_beam_boundaries.py +6 -5
- dkist_processing_cryonirsp/tests/test_ci_science.py +25 -24
- dkist_processing_cryonirsp/tests/test_cryo_base.py +41 -43
- dkist_processing_cryonirsp/tests/test_dark.py +20 -28
- dkist_processing_cryonirsp/tests/test_gain.py +46 -35
- dkist_processing_cryonirsp/tests/test_instrument_polarization.py +22 -16
- dkist_processing_cryonirsp/tests/test_linearity_correction.py +1 -4
- dkist_processing_cryonirsp/tests/test_quality.py +1 -2
- dkist_processing_cryonirsp/tests/test_sp_beam_boundaries.py +6 -5
- dkist_processing_cryonirsp/tests/test_sp_dispersion_axis_correction.py +10 -9
- dkist_processing_cryonirsp/tests/test_sp_geometric.py +108 -53
- dkist_processing_cryonirsp/tests/test_sp_science.py +49 -35
- dkist_processing_cryonirsp/tests/test_sp_solar.py +70 -38
- {dkist_processing_cryonirsp-1.4.15.dist-info → dkist_processing_cryonirsp-1.4.16rc1.dist-info}/METADATA +2 -2
- {dkist_processing_cryonirsp-1.4.15.dist-info → dkist_processing_cryonirsp-1.4.16rc1.dist-info}/RECORD +50 -46
- dkist_processing_cryonirsp/tasks/mixin/beam_access.py +0 -52
- dkist_processing_cryonirsp/tasks/mixin/intermediate_frame.py +0 -193
- dkist_processing_cryonirsp/tasks/mixin/linearized_frame.py +0 -309
- {dkist_processing_cryonirsp-1.4.15.dist-info → dkist_processing_cryonirsp-1.4.16rc1.dist-info}/WHEEL +0 -0
- {dkist_processing_cryonirsp-1.4.15.dist-info → dkist_processing_cryonirsp-1.4.16rc1.dist-info}/top_level.txt +0 -0
|
@@ -127,7 +127,7 @@ def tag_linearized_inputs_task(suffix: str):
|
|
|
127
127
|
)
|
|
128
128
|
for file in input_file_list:
|
|
129
129
|
logger.info(f"Found {file}")
|
|
130
|
-
self.tag(path=file, tags=
|
|
130
|
+
self.tag(path=file, tags=CryonirspTag.linearized_frame())
|
|
131
131
|
# Update the arm_id constant, as it is derived in linearity processing
|
|
132
132
|
with fits.open(file) as hdul:
|
|
133
133
|
if len(hdul) == 1:
|
|
@@ -189,7 +189,6 @@ def CI_workflow(
|
|
|
189
189
|
manual_processing_run: ManualProcessing,
|
|
190
190
|
load_beam_boundaries: bool = False,
|
|
191
191
|
load_dark: bool = False,
|
|
192
|
-
load_lamp: bool = False,
|
|
193
192
|
load_solar: bool = False,
|
|
194
193
|
load_inst_pol: bool = False,
|
|
195
194
|
) -> None:
|
|
@@ -205,12 +204,6 @@ def CI_workflow(
|
|
|
205
204
|
manual_processing_run.run_task(task=DarkCalibration)
|
|
206
205
|
manual_processing_run.run_task(task=SaveDarkCal)
|
|
207
206
|
|
|
208
|
-
if load_lamp:
|
|
209
|
-
manual_processing_run.run_task(task=LoadLampCal)
|
|
210
|
-
else:
|
|
211
|
-
manual_processing_run.run_task(task=LampGainCalibration)
|
|
212
|
-
manual_processing_run.run_task(task=SaveLampCal)
|
|
213
|
-
|
|
214
207
|
if load_solar:
|
|
215
208
|
manual_processing_run.run_task(task=LoadSolarCal)
|
|
216
209
|
else:
|
|
@@ -365,7 +358,7 @@ def main(
|
|
|
365
358
|
if not skip_saving_parse:
|
|
366
359
|
manual_processing_run.run_task(
|
|
367
360
|
task=save_parsing_task(
|
|
368
|
-
tag_list=
|
|
361
|
+
tag_list=CryonirspTag.linearized_frame(),
|
|
369
362
|
save_file="linearized_parsing.asdf",
|
|
370
363
|
)
|
|
371
364
|
)
|
|
@@ -394,7 +387,6 @@ def main(
|
|
|
394
387
|
manual_processing_run,
|
|
395
388
|
load_beam_boundaries=load_beam_boundaries,
|
|
396
389
|
load_dark=load_dark,
|
|
397
|
-
load_lamp=load_lamp,
|
|
398
390
|
load_solar=load_solar,
|
|
399
391
|
load_inst_pol=load_inst_pol,
|
|
400
392
|
)
|
|
@@ -144,7 +144,7 @@ def tag_linearized_inputs_task(suffix: str):
|
|
|
144
144
|
)
|
|
145
145
|
for file in input_file_list:
|
|
146
146
|
logger.info(f"Found {file}")
|
|
147
|
-
self.tag(path=file, tags=
|
|
147
|
+
self.tag(path=file, tags=CryonirspTag.linearized_frame())
|
|
148
148
|
# Update the arm_id constant, as it is derived in linearity processing
|
|
149
149
|
with fits.open(file) as hdul:
|
|
150
150
|
if len(hdul) == 1:
|
|
@@ -165,7 +165,12 @@ class ShowPolMode(CryonirspTaskBase):
|
|
|
165
165
|
class ShowExposureConditions(CryonirspTaskBase):
|
|
166
166
|
def run(self) -> None:
|
|
167
167
|
logger.info(f"{self.constants.dark_exposure_conditions_list = }")
|
|
168
|
-
|
|
168
|
+
try:
|
|
169
|
+
logger.info(f"{self.constants.lamp_gain_exposure_conditions_list = }")
|
|
170
|
+
except KeyError:
|
|
171
|
+
logger.info(
|
|
172
|
+
f"Lamp gain exposure conditions list does not exist. This is expected for CRYO-NIRSP CI."
|
|
173
|
+
)
|
|
169
174
|
logger.info(f"{self.constants.solar_gain_exposure_conditions_list = }")
|
|
170
175
|
if self.constants.correct_for_polarization:
|
|
171
176
|
try:
|
|
@@ -207,7 +212,6 @@ def CI_workflow(
|
|
|
207
212
|
manual_processing_run: ManualProcessing,
|
|
208
213
|
load_beam_boundaries: bool = False,
|
|
209
214
|
load_dark: bool = False,
|
|
210
|
-
load_lamp: bool = False,
|
|
211
215
|
load_solar: bool = False,
|
|
212
216
|
load_inst_pol: bool = False,
|
|
213
217
|
) -> None:
|
|
@@ -223,12 +227,6 @@ def CI_workflow(
|
|
|
223
227
|
manual_processing_run.run_task(task=DarkCalibration)
|
|
224
228
|
manual_processing_run.run_task(task=SaveDarkCal)
|
|
225
229
|
|
|
226
|
-
if load_lamp:
|
|
227
|
-
manual_processing_run.run_task(task=LoadLampCal)
|
|
228
|
-
else:
|
|
229
|
-
manual_processing_run.run_task(task=LampGainCalibration)
|
|
230
|
-
manual_processing_run.run_task(task=SaveLampCal)
|
|
231
|
-
|
|
232
230
|
if load_solar:
|
|
233
231
|
manual_processing_run.run_task(task=LoadSolarCal)
|
|
234
232
|
else:
|
|
@@ -390,7 +388,7 @@ def main(
|
|
|
390
388
|
if not skip_saving_parse:
|
|
391
389
|
manual_processing_run.run_task(
|
|
392
390
|
task=save_parsing_task(
|
|
393
|
-
tag_list=
|
|
391
|
+
tag_list=CryonirspTag.linearized_frame(),
|
|
394
392
|
save_file="linearized_parsing.asdf",
|
|
395
393
|
)
|
|
396
394
|
)
|
|
@@ -425,7 +423,6 @@ def main(
|
|
|
425
423
|
manual_processing_run,
|
|
426
424
|
load_beam_boundaries=load_beam_boundaries,
|
|
427
425
|
load_dark=load_dark,
|
|
428
|
-
load_lamp=load_lamp,
|
|
429
426
|
load_solar=load_solar,
|
|
430
427
|
load_inst_pol=load_inst_pol,
|
|
431
428
|
)
|
|
@@ -222,7 +222,7 @@ class SaveGeometricCal(WorkflowTaskBase):
|
|
|
222
222
|
)
|
|
223
223
|
path_list += list(
|
|
224
224
|
self.read(
|
|
225
|
-
tags=[CryonirspTag.
|
|
225
|
+
tags=[CryonirspTag.task_geometric_spectral_shifts(), CryonirspTag.intermediate()]
|
|
226
226
|
)
|
|
227
227
|
)
|
|
228
228
|
path_list += list(
|
|
@@ -5,6 +5,7 @@ import pytest
|
|
|
5
5
|
from astropy.io import fits
|
|
6
6
|
from dkist_header_validator import spec122_validator
|
|
7
7
|
from dkist_processing_common._util.scratch import WorkflowFileSystem
|
|
8
|
+
from dkist_processing_common.codecs.fits import fits_array_encoder
|
|
8
9
|
from dkist_processing_common.codecs.fits import fits_hdulist_encoder
|
|
9
10
|
from dkist_processing_common.tests.conftest import FakeGQLClient
|
|
10
11
|
|
|
@@ -40,9 +41,10 @@ def compute_beam_boundaries_task(
|
|
|
40
41
|
param_class = cryonirsp_testing_parameters_factory(param_path=tmp_path)
|
|
41
42
|
assign_input_dataset_doc_to_task(task, param_class())
|
|
42
43
|
# Create fake bad pixel map
|
|
43
|
-
task.
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
task.write(
|
|
45
|
+
data=np.zeros(array_shape[1:]),
|
|
46
|
+
tags=[CryonirspTag.intermediate_frame(), CryonirspTag.task_bad_pixel_map()],
|
|
47
|
+
encoder=fits_array_encoder,
|
|
46
48
|
)
|
|
47
49
|
start_time = datetime.now()
|
|
48
50
|
ds = CryonirspHeadersValidCISolarGainFrames(
|
|
@@ -73,9 +75,8 @@ def compute_beam_boundaries_task(
|
|
|
73
75
|
task.write(
|
|
74
76
|
data=hdul,
|
|
75
77
|
tags=[
|
|
76
|
-
CryonirspTag.
|
|
78
|
+
CryonirspTag.linearized_frame(),
|
|
77
79
|
CryonirspTag.task_solar_gain(),
|
|
78
|
-
CryonirspTag.frame(),
|
|
79
80
|
],
|
|
80
81
|
encoder=fits_hdulist_encoder,
|
|
81
82
|
)
|
|
@@ -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
|
|
|
@@ -73,14 +74,16 @@ def ci_science_calibration_task(
|
|
|
73
74
|
assign_input_dataset_doc_to_task(task, param_class())
|
|
74
75
|
|
|
75
76
|
# Need a beam boundary file
|
|
76
|
-
task.
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
77
|
+
task.write(
|
|
78
|
+
data=np.array([0, intermediate_shape[0], 0, intermediate_shape[1]]),
|
|
79
|
+
tags=[CryonirspTag.intermediate_frame(beam=1), CryonirspTag.task_beam_boundaries()],
|
|
80
|
+
encoder=fits_array_encoder,
|
|
80
81
|
)
|
|
81
82
|
# Create fake bad pixel map
|
|
82
|
-
task.
|
|
83
|
-
|
|
83
|
+
task.write(
|
|
84
|
+
data=np.zeros(array_shape[1:]),
|
|
85
|
+
tags=[CryonirspTag.intermediate_frame(), CryonirspTag.task_bad_pixel_map()],
|
|
86
|
+
encoder=fits_array_encoder,
|
|
84
87
|
)
|
|
85
88
|
|
|
86
89
|
# Create fake demodulation matrices
|
|
@@ -91,20 +94,22 @@ def ci_science_calibration_task(
|
|
|
91
94
|
task.write(
|
|
92
95
|
data=demod_hdul,
|
|
93
96
|
tags=[
|
|
94
|
-
CryonirspTag.
|
|
95
|
-
CryonirspTag.frame(),
|
|
97
|
+
CryonirspTag.intermediate_frame(beam=1),
|
|
96
98
|
CryonirspTag.task_demodulation_matrices(),
|
|
97
|
-
CryonirspTag.beam(1),
|
|
98
99
|
],
|
|
99
100
|
encoder=fits_hdulist_encoder,
|
|
100
101
|
)
|
|
101
102
|
|
|
102
103
|
# Create fake dark intermediate arrays
|
|
103
|
-
task.
|
|
104
|
-
all_zeros,
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
104
|
+
task.write(
|
|
105
|
+
data=all_zeros,
|
|
106
|
+
tags=[
|
|
107
|
+
CryonirspTag.intermediate_frame(
|
|
108
|
+
beam=1, exposure_conditions=exposure_conditions
|
|
109
|
+
),
|
|
110
|
+
CryonirspTag.task_dark(),
|
|
111
|
+
],
|
|
112
|
+
encoder=fits_array_encoder,
|
|
108
113
|
)
|
|
109
114
|
|
|
110
115
|
# Create fake lamp and solar gain intermediate arrays
|
|
@@ -113,10 +118,8 @@ def ci_science_calibration_task(
|
|
|
113
118
|
task.write(
|
|
114
119
|
data=gain_hdul,
|
|
115
120
|
tags=[
|
|
116
|
-
CryonirspTag.
|
|
117
|
-
CryonirspTag.frame(),
|
|
121
|
+
CryonirspTag.intermediate_frame(beam=1),
|
|
118
122
|
CryonirspTag.task_lamp_gain(),
|
|
119
|
-
CryonirspTag.beam(1),
|
|
120
123
|
CryonirspTag.modstate(modstate),
|
|
121
124
|
],
|
|
122
125
|
encoder=fits_hdulist_encoder,
|
|
@@ -124,10 +127,8 @@ def ci_science_calibration_task(
|
|
|
124
127
|
task.write(
|
|
125
128
|
data=gain_hdul,
|
|
126
129
|
tags=[
|
|
127
|
-
CryonirspTag.
|
|
128
|
-
CryonirspTag.frame(),
|
|
130
|
+
CryonirspTag.intermediate_frame(beam=1),
|
|
129
131
|
CryonirspTag.task_solar_gain(),
|
|
130
|
-
CryonirspTag.beam(1),
|
|
131
132
|
CryonirspTag.modstate(modstate),
|
|
132
133
|
],
|
|
133
134
|
encoder=fits_hdulist_encoder,
|
|
@@ -172,9 +173,9 @@ def ci_science_calibration_task(
|
|
|
172
173
|
CryonirspTag.scan_step(scan_step),
|
|
173
174
|
CryonirspTag.map_scan(map_scan),
|
|
174
175
|
CryonirspTag.modstate(modstate),
|
|
175
|
-
CryonirspTag.
|
|
176
|
-
|
|
177
|
-
|
|
176
|
+
CryonirspTag.linearized_frame(
|
|
177
|
+
exposure_conditions=exposure_conditions
|
|
178
|
+
),
|
|
178
179
|
CryonirspTag.meas_num(meas_num),
|
|
179
180
|
],
|
|
180
181
|
encoder=fits_hdulist_encoder,
|
|
@@ -283,7 +284,7 @@ def test_ci_science_calibration_task(ci_science_calibration_task, mocker):
|
|
|
283
284
|
data = json.load(f)
|
|
284
285
|
assert isinstance(data, dict)
|
|
285
286
|
assert data["total_frames"] == task.scratch.count_all(
|
|
286
|
-
tags=[CryonirspTag.
|
|
287
|
+
tags=[CryonirspTag.linearized_frame(), CryonirspTag.task_observe()]
|
|
287
288
|
)
|
|
288
289
|
|
|
289
290
|
|
|
@@ -2,14 +2,12 @@ import numpy as np
|
|
|
2
2
|
import pytest
|
|
3
3
|
from astropy.io import fits
|
|
4
4
|
from dkist_processing_common._util.scratch import WorkflowFileSystem
|
|
5
|
+
from dkist_processing_common.codecs.fits import fits_array_encoder
|
|
5
6
|
from dkist_processing_common.codecs.fits import fits_hdu_decoder
|
|
6
7
|
|
|
8
|
+
from dkist_processing_cryonirsp.codecs.fits import cryo_fits_array_decoder
|
|
7
9
|
from dkist_processing_cryonirsp.models.tags import CryonirspTag
|
|
8
|
-
from dkist_processing_cryonirsp.models.task_name import CryonirspTaskName
|
|
9
10
|
from dkist_processing_cryonirsp.tasks.cryonirsp_base import CryonirspTaskBase
|
|
10
|
-
from dkist_processing_cryonirsp.tasks.mixin.intermediate_frame import (
|
|
11
|
-
IntermediateFrameMixin,
|
|
12
|
-
)
|
|
13
11
|
from dkist_processing_cryonirsp.tests.conftest import cryonirsp_testing_parameters_factory
|
|
14
12
|
from dkist_processing_cryonirsp.tests.conftest import CryonirspConstantsDb
|
|
15
13
|
|
|
@@ -24,7 +22,7 @@ WAVE = 1082.0
|
|
|
24
22
|
def cryo_science_task(
|
|
25
23
|
tmp_path, recipe_run_id, assign_input_dataset_doc_to_task, init_cryonirsp_constants_db
|
|
26
24
|
):
|
|
27
|
-
class Task(CryonirspTaskBase
|
|
25
|
+
class Task(CryonirspTaskBase):
|
|
28
26
|
def run(self):
|
|
29
27
|
...
|
|
30
28
|
|
|
@@ -54,21 +52,27 @@ def cryo_science_task(
|
|
|
54
52
|
def test_write_intermediate_arrays(cryo_science_task):
|
|
55
53
|
"""
|
|
56
54
|
Given: A CryonirspTaskBase task
|
|
57
|
-
When:
|
|
55
|
+
When: Writing a single intermediate array
|
|
58
56
|
Then: The array is written and tagged correctly
|
|
59
57
|
"""
|
|
60
58
|
data = np.random.random((10, 10))
|
|
61
59
|
head = fits.Header()
|
|
62
60
|
head["TEST"] = "foo"
|
|
63
|
-
cryo_science_task.
|
|
64
|
-
|
|
61
|
+
cryo_science_task.write(
|
|
62
|
+
data=data,
|
|
63
|
+
header=head,
|
|
64
|
+
tags=[
|
|
65
|
+
CryonirspTag.intermediate_frame(beam=1),
|
|
66
|
+
CryonirspTag.map_scan(2),
|
|
67
|
+
CryonirspTag.scan_step(3),
|
|
68
|
+
CryonirspTag.task("BAR"),
|
|
69
|
+
],
|
|
70
|
+
encoder=fits_array_encoder,
|
|
65
71
|
)
|
|
66
72
|
loaded_list = list(
|
|
67
73
|
cryo_science_task.read(
|
|
68
74
|
tags=[
|
|
69
|
-
CryonirspTag.
|
|
70
|
-
CryonirspTag.frame(),
|
|
71
|
-
CryonirspTag.beam(1),
|
|
75
|
+
CryonirspTag.intermediate_frame(beam=1),
|
|
72
76
|
CryonirspTag.map_scan(2),
|
|
73
77
|
CryonirspTag.scan_step(3),
|
|
74
78
|
CryonirspTag.task("BAR"),
|
|
@@ -85,7 +89,7 @@ def test_write_intermediate_arrays(cryo_science_task):
|
|
|
85
89
|
def test_write_intermediate_arrays_task_tag(cryo_science_task):
|
|
86
90
|
"""
|
|
87
91
|
Given: A CryonirspTaskBase task
|
|
88
|
-
When:
|
|
92
|
+
When: Writing a single intermediate array with a formatted task tag input arg
|
|
89
93
|
Then: The array is written and tagged correctly
|
|
90
94
|
"""
|
|
91
95
|
data = np.random.random((10, 10))
|
|
@@ -93,8 +97,11 @@ def test_write_intermediate_arrays_task_tag(cryo_science_task):
|
|
|
93
97
|
head["TEST"] = "foo"
|
|
94
98
|
|
|
95
99
|
# bad_pixel_map chosen for no particular reason
|
|
96
|
-
cryo_science_task.
|
|
97
|
-
|
|
100
|
+
cryo_science_task.write(
|
|
101
|
+
data=data,
|
|
102
|
+
header=head,
|
|
103
|
+
tags=[CryonirspTag.intermediate_frame(), CryonirspTag.task_bad_pixel_map()],
|
|
104
|
+
encoder=fits_array_encoder,
|
|
98
105
|
)
|
|
99
106
|
loaded_list = list(
|
|
100
107
|
cryo_science_task.read(
|
|
@@ -108,41 +115,27 @@ def test_write_intermediate_arrays_task_tag(cryo_science_task):
|
|
|
108
115
|
assert hdu.header["TEST"] == "foo"
|
|
109
116
|
|
|
110
117
|
|
|
111
|
-
def test_write_intermediate_arrays_task_collisions(cryo_science_task):
|
|
112
|
-
"""
|
|
113
|
-
Given: A CryonirspTaskBase task
|
|
114
|
-
When: Using the helper but providing invalid `task` or `task_tag` inputs
|
|
115
|
-
Then: An error is raised
|
|
116
|
-
"""
|
|
117
|
-
data = np.random.random((10, 10))
|
|
118
|
-
|
|
119
|
-
# Test both given
|
|
120
|
-
with pytest.raises(ValueError, match="Cannot specify"):
|
|
121
|
-
cryo_science_task.intermediate_frame_write_arrays(
|
|
122
|
-
arrays=data, task_tag=CryonirspTag.task_bad_pixel_map(), task="DARK"
|
|
123
|
-
)
|
|
124
|
-
|
|
125
|
-
# Test neither given
|
|
126
|
-
with pytest.raises(ValueError, match="Must specify"):
|
|
127
|
-
cryo_science_task.intermediate_frame_write_arrays(arrays=data)
|
|
128
|
-
|
|
129
|
-
|
|
130
118
|
def test_write_intermediate_arrays_none_header(cryo_science_task):
|
|
131
119
|
"""
|
|
132
120
|
Given: A CryonirspTaskBase task
|
|
133
|
-
When:
|
|
121
|
+
When: Writing a single intermediate array with no header
|
|
134
122
|
Then: The array is written and tagged correctly
|
|
135
123
|
"""
|
|
136
124
|
data = np.random.random((10, 10))
|
|
137
|
-
cryo_science_task.
|
|
138
|
-
|
|
125
|
+
cryo_science_task.write(
|
|
126
|
+
data=data,
|
|
127
|
+
tags=[
|
|
128
|
+
CryonirspTag.intermediate_frame(beam=1),
|
|
129
|
+
CryonirspTag.map_scan(2),
|
|
130
|
+
CryonirspTag.scan_step(3),
|
|
131
|
+
CryonirspTag.task("BAR"),
|
|
132
|
+
],
|
|
133
|
+
encoder=fits_array_encoder,
|
|
139
134
|
)
|
|
140
135
|
loaded_list = list(
|
|
141
136
|
cryo_science_task.read(
|
|
142
137
|
tags=[
|
|
143
|
-
CryonirspTag.
|
|
144
|
-
CryonirspTag.frame(),
|
|
145
|
-
CryonirspTag.beam(1),
|
|
138
|
+
CryonirspTag.intermediate_frame(beam=1),
|
|
146
139
|
CryonirspTag.map_scan(2),
|
|
147
140
|
CryonirspTag.scan_step(3),
|
|
148
141
|
CryonirspTag.task("BAR"),
|
|
@@ -159,7 +152,7 @@ def test_write_intermediate_arrays_none_header(cryo_science_task):
|
|
|
159
152
|
def cryo_science_task_with_tagged_intermediates(
|
|
160
153
|
recipe_run_id, tmpdir_factory, init_cryonirsp_constants_db
|
|
161
154
|
):
|
|
162
|
-
class Task(CryonirspTaskBase
|
|
155
|
+
class Task(CryonirspTaskBase):
|
|
163
156
|
def run(self):
|
|
164
157
|
...
|
|
165
158
|
|
|
@@ -179,7 +172,7 @@ def cryo_science_task_with_tagged_intermediates(
|
|
|
179
172
|
hdul = fits.HDUList([fits.PrimaryHDU(data=np.ones((2, 2)) * i)])
|
|
180
173
|
fname = task.scratch.workflow_base_path / f"file{i}.fits"
|
|
181
174
|
hdul.writeto(fname)
|
|
182
|
-
task.tag(fname, tags +
|
|
175
|
+
task.tag(fname, tags + CryonirspTag.intermediate_frame())
|
|
183
176
|
|
|
184
177
|
yield task, tag_names, tag_vals
|
|
185
178
|
finally:
|
|
@@ -189,7 +182,7 @@ def cryo_science_task_with_tagged_intermediates(
|
|
|
189
182
|
def test_load_intermediate_arrays(cryo_science_task_with_tagged_intermediates):
|
|
190
183
|
"""
|
|
191
184
|
Given: A task with tagged intermediate frames
|
|
192
|
-
When:
|
|
185
|
+
When: Reading intermediate frames
|
|
193
186
|
Then: The correct arrays are returned
|
|
194
187
|
"""
|
|
195
188
|
task, tag_names, tag_vals = cryo_science_task_with_tagged_intermediates
|
|
@@ -197,6 +190,11 @@ def test_load_intermediate_arrays(cryo_science_task_with_tagged_intermediates):
|
|
|
197
190
|
[getattr(CryonirspTag, n)(v) for n, v in zip(nl, vl)] for nl, vl in zip(tag_names, tag_vals)
|
|
198
191
|
]
|
|
199
192
|
for i, tags in enumerate(tag_list_list):
|
|
200
|
-
arrays = list(
|
|
193
|
+
arrays = list(
|
|
194
|
+
task.read(
|
|
195
|
+
tags=[CryonirspTag.intermediate_frame(), tags],
|
|
196
|
+
decoder=cryo_fits_array_decoder,
|
|
197
|
+
)
|
|
198
|
+
)
|
|
201
199
|
assert len(arrays) == 1
|
|
202
200
|
np.testing.assert_equal(arrays[0], np.ones((2, 2)) * i)
|
|
@@ -5,6 +5,7 @@ import pytest
|
|
|
5
5
|
from astropy.io import fits
|
|
6
6
|
from dkist_header_validator import spec122_validator
|
|
7
7
|
from dkist_processing_common._util.scratch import WorkflowFileSystem
|
|
8
|
+
from dkist_processing_common.codecs.fits import fits_array_encoder
|
|
8
9
|
from dkist_processing_common.codecs.fits import fits_hdulist_encoder
|
|
9
10
|
from dkist_processing_common.tests.conftest import FakeGQLClient
|
|
10
11
|
|
|
@@ -65,10 +66,13 @@ def sp_dark_calibration_task(
|
|
|
65
66
|
spectral_starting_pixel + illuminated_beam_shape[1],
|
|
66
67
|
]
|
|
67
68
|
)
|
|
68
|
-
task.
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
69
|
+
task.write(
|
|
70
|
+
data=beam_boundaries,
|
|
71
|
+
tags=[
|
|
72
|
+
CryonirspTag.intermediate_frame(beam=beam),
|
|
73
|
+
CryonirspTag.task_beam_boundaries(),
|
|
74
|
+
],
|
|
75
|
+
encoder=fits_array_encoder,
|
|
72
76
|
)
|
|
73
77
|
|
|
74
78
|
ds = CryonirspHeadersValidDarkFrames(
|
|
@@ -91,10 +95,8 @@ def sp_dark_calibration_task(
|
|
|
91
95
|
task.write(
|
|
92
96
|
data=hdul,
|
|
93
97
|
tags=[
|
|
94
|
-
CryonirspTag.
|
|
95
|
-
CryonirspTag.frame(),
|
|
98
|
+
CryonirspTag.linearized_frame(exposure_conditions=condition),
|
|
96
99
|
CryonirspTag.task_dark(),
|
|
97
|
-
CryonirspTag.exposure_conditions(condition),
|
|
98
100
|
],
|
|
99
101
|
encoder=fits_hdulist_encoder,
|
|
100
102
|
)
|
|
@@ -139,10 +141,10 @@ def ci_dark_calibration_task(
|
|
|
139
141
|
assign_input_dataset_doc_to_task(task, param_class())
|
|
140
142
|
|
|
141
143
|
# Need a beam boundary file
|
|
142
|
-
task.
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
144
|
+
task.write(
|
|
145
|
+
data=np.array([0, 10, 0, 10]),
|
|
146
|
+
tags=[CryonirspTag.intermediate_frame(beam=1), CryonirspTag.task_beam_boundaries()],
|
|
147
|
+
encoder=fits_array_encoder,
|
|
146
148
|
)
|
|
147
149
|
|
|
148
150
|
ds = CryonirspHeadersValidDarkFrames(
|
|
@@ -164,10 +166,8 @@ def ci_dark_calibration_task(
|
|
|
164
166
|
task.write(
|
|
165
167
|
data=hdul,
|
|
166
168
|
tags=[
|
|
167
|
-
CryonirspTag.
|
|
168
|
-
CryonirspTag.frame(),
|
|
169
|
+
CryonirspTag.linearized_frame(exposure_conditions=condition),
|
|
169
170
|
CryonirspTag.task_dark(),
|
|
170
|
-
CryonirspTag.exposure_conditions(condition),
|
|
171
171
|
],
|
|
172
172
|
encoder=fits_hdulist_encoder,
|
|
173
173
|
)
|
|
@@ -201,9 +201,7 @@ def test_sp_dark_calibration_task(sp_dark_calibration_task, mocker):
|
|
|
201
201
|
task.read(
|
|
202
202
|
tags=[
|
|
203
203
|
CryonirspTag.task_dark(),
|
|
204
|
-
CryonirspTag.
|
|
205
|
-
CryonirspTag.frame(),
|
|
206
|
-
CryonirspTag.beam(b + 1),
|
|
204
|
+
CryonirspTag.intermediate_frame(beam=b + 1),
|
|
207
205
|
CryonirspTag.exposure_conditions(condition),
|
|
208
206
|
]
|
|
209
207
|
)
|
|
@@ -217,8 +215,7 @@ def test_sp_dark_calibration_task(sp_dark_calibration_task, mocker):
|
|
|
217
215
|
unused_time_read = task.read(
|
|
218
216
|
tags=[
|
|
219
217
|
CryonirspTag.task_dark(),
|
|
220
|
-
CryonirspTag.
|
|
221
|
-
CryonirspTag.frame(),
|
|
218
|
+
CryonirspTag.intermediate_frame(),
|
|
222
219
|
CryonirspTag.exposure_conditions(unused_condition),
|
|
223
220
|
]
|
|
224
221
|
)
|
|
@@ -230,7 +227,7 @@ def test_sp_dark_calibration_task(sp_dark_calibration_task, mocker):
|
|
|
230
227
|
data = json.load(f)
|
|
231
228
|
assert isinstance(data, dict)
|
|
232
229
|
assert data["total_frames"] == task.scratch.count_all(
|
|
233
|
-
tags=[CryonirspTag.
|
|
230
|
+
tags=[CryonirspTag.linearized_frame(), CryonirspTag.task_dark()]
|
|
234
231
|
)
|
|
235
232
|
assert data["frames_not_used"] == 3
|
|
236
233
|
|
|
@@ -253,10 +250,7 @@ def test_ci_dark_calibration_task(ci_dark_calibration_task, mocker):
|
|
|
253
250
|
task.read(
|
|
254
251
|
tags=[
|
|
255
252
|
CryonirspTag.task_dark(),
|
|
256
|
-
CryonirspTag.beam
|
|
257
|
-
CryonirspTag.intermediate(),
|
|
258
|
-
CryonirspTag.frame(),
|
|
259
|
-
CryonirspTag.exposure_conditions(condition),
|
|
253
|
+
CryonirspTag.intermediate_frame(beam=1, exposure_conditions=condition),
|
|
260
254
|
]
|
|
261
255
|
)
|
|
262
256
|
)
|
|
@@ -269,9 +263,7 @@ def test_ci_dark_calibration_task(ci_dark_calibration_task, mocker):
|
|
|
269
263
|
unused_time_read = task.read(
|
|
270
264
|
tags=[
|
|
271
265
|
CryonirspTag.task_dark(),
|
|
272
|
-
CryonirspTag.
|
|
273
|
-
CryonirspTag.frame(),
|
|
274
|
-
CryonirspTag.exposure_conditions(unused_condition),
|
|
266
|
+
CryonirspTag.intermediate_frame(exposure_conditions=unused_condition),
|
|
275
267
|
]
|
|
276
268
|
)
|
|
277
269
|
assert len(list(unused_time_read)) == 0
|
|
@@ -282,6 +274,6 @@ def test_ci_dark_calibration_task(ci_dark_calibration_task, mocker):
|
|
|
282
274
|
data = json.load(f)
|
|
283
275
|
assert isinstance(data, dict)
|
|
284
276
|
assert data["total_frames"] == task.scratch.count_all(
|
|
285
|
-
tags=[CryonirspTag.
|
|
277
|
+
tags=[CryonirspTag.linearized_frame(), CryonirspTag.task_dark()]
|
|
286
278
|
)
|
|
287
279
|
assert data["frames_not_used"] == 3
|