dkist-processing-visp 2.20.14__py3-none-any.whl → 5.1.1__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.
- dkist_processing_visp/__init__.py +1 -0
- dkist_processing_visp/config.py +1 -0
- dkist_processing_visp/models/constants.py +61 -20
- dkist_processing_visp/models/fits_access.py +20 -0
- dkist_processing_visp/models/metric_code.py +10 -0
- dkist_processing_visp/models/parameters.py +129 -24
- dkist_processing_visp/models/tags.py +22 -1
- dkist_processing_visp/models/task_name.py +1 -0
- dkist_processing_visp/parsers/map_repeats.py +1 -0
- dkist_processing_visp/parsers/modulator_states.py +1 -0
- dkist_processing_visp/parsers/polarimeter_mode.py +4 -2
- dkist_processing_visp/parsers/raster_step.py +4 -1
- dkist_processing_visp/parsers/spectrograph_configuration.py +75 -0
- dkist_processing_visp/parsers/time.py +24 -14
- dkist_processing_visp/parsers/visp_l0_fits_access.py +19 -8
- dkist_processing_visp/parsers/visp_l1_fits_access.py +1 -0
- dkist_processing_visp/tasks/__init__.py +1 -0
- dkist_processing_visp/tasks/assemble_movie.py +1 -0
- dkist_processing_visp/tasks/background_light.py +2 -1
- dkist_processing_visp/tasks/dark.py +5 -4
- dkist_processing_visp/tasks/geometric.py +132 -20
- dkist_processing_visp/tasks/instrument_polarization.py +128 -18
- dkist_processing_visp/tasks/l1_output_data.py +203 -0
- dkist_processing_visp/tasks/lamp.py +53 -93
- dkist_processing_visp/tasks/make_movie_frames.py +8 -6
- dkist_processing_visp/tasks/mixin/beam_access.py +1 -0
- dkist_processing_visp/tasks/mixin/corrections.py +54 -4
- dkist_processing_visp/tasks/mixin/downsample.py +1 -0
- dkist_processing_visp/tasks/parse.py +50 -17
- dkist_processing_visp/tasks/quality_metrics.py +5 -4
- dkist_processing_visp/tasks/science.py +126 -46
- dkist_processing_visp/tasks/solar.py +896 -456
- dkist_processing_visp/tasks/visp_base.py +4 -3
- dkist_processing_visp/tasks/write_l1.py +38 -10
- dkist_processing_visp/tests/conftest.py +145 -47
- dkist_processing_visp/tests/header_models.py +157 -20
- dkist_processing_visp/tests/local_trial_workflows/l0_cals_only.py +21 -78
- dkist_processing_visp/tests/local_trial_workflows/l0_polcals_as_science.py +421 -0
- dkist_processing_visp/tests/local_trial_workflows/l0_solar_gain_as_science.py +387 -0
- dkist_processing_visp/tests/local_trial_workflows/l0_to_l1.py +18 -75
- dkist_processing_visp/tests/local_trial_workflows/local_trial_helpers.py +346 -14
- dkist_processing_visp/tests/test_assemble_movie.py +2 -3
- dkist_processing_visp/tests/test_assemble_quality.py +89 -4
- dkist_processing_visp/tests/test_background_light.py +51 -44
- dkist_processing_visp/tests/test_dark.py +4 -3
- dkist_processing_visp/tests/test_downsample.py +1 -0
- dkist_processing_visp/tests/test_fits_access.py +43 -0
- dkist_processing_visp/tests/test_geometric.py +45 -4
- dkist_processing_visp/tests/test_instrument_polarization.py +72 -9
- dkist_processing_visp/tests/test_lamp.py +22 -26
- dkist_processing_visp/tests/test_make_movie_frames.py +4 -4
- dkist_processing_visp/tests/test_map_repeats.py +3 -1
- dkist_processing_visp/tests/test_parameters.py +122 -21
- dkist_processing_visp/tests/test_parse.py +164 -18
- dkist_processing_visp/tests/test_quality.py +3 -4
- dkist_processing_visp/tests/test_science.py +113 -15
- dkist_processing_visp/tests/test_solar.py +318 -99
- dkist_processing_visp/tests/test_visp_constants.py +38 -8
- dkist_processing_visp/tests/test_workflows.py +1 -0
- dkist_processing_visp/tests/test_write_l1.py +22 -3
- dkist_processing_visp/workflows/__init__.py +1 -0
- dkist_processing_visp/workflows/l0_processing.py +10 -3
- dkist_processing_visp/workflows/trial_workflows.py +8 -2
- dkist_processing_visp-5.1.1.dist-info/METADATA +552 -0
- dkist_processing_visp-5.1.1.dist-info/RECORD +94 -0
- {dkist_processing_visp-2.20.14.dist-info → dkist_processing_visp-5.1.1.dist-info}/WHEEL +1 -1
- docs/conf.py +5 -1
- docs/gain_correction.rst +52 -44
- docs/science_calibration.rst +7 -0
- dkist_processing_visp/tasks/mixin/line_zones.py +0 -115
- dkist_processing_visp-2.20.14.dist-info/METADATA +0 -196
- dkist_processing_visp-2.20.14.dist-info/RECORD +0 -89
- {dkist_processing_visp-2.20.14.dist-info → dkist_processing_visp-5.1.1.dist-info}/top_level.txt +0 -0
|
@@ -4,9 +4,9 @@ from astropy.io import fits
|
|
|
4
4
|
from astropy.time import Time
|
|
5
5
|
from dkist_fits_specifications import __version__ as spec_version
|
|
6
6
|
from dkist_header_validator import spec214_validator
|
|
7
|
+
from dkist_processing_common.models.fits_access import MetadataKey
|
|
7
8
|
from dkist_processing_common.models.tags import Tag
|
|
8
9
|
from dkist_processing_common.models.wavelength import WavelengthRange
|
|
9
|
-
from dkist_processing_common.tests.conftest import FakeGQLClient
|
|
10
10
|
from dkist_spectral_lines import get_closest_spectral_line
|
|
11
11
|
from dkist_spectral_lines import get_spectral_lines
|
|
12
12
|
|
|
@@ -40,6 +40,7 @@ def write_l1_task(
|
|
|
40
40
|
NUM_RASTER_STEPS=2,
|
|
41
41
|
SPECTRAL_LINE="VISP Ca II H",
|
|
42
42
|
POLARIMETER_MODE=pol_mode,
|
|
43
|
+
NUM_MODSTATES=1 if pol_mode == "observe_intensity" else 10,
|
|
43
44
|
)
|
|
44
45
|
init_visp_constants_db(recipe_run_id, constants_db)
|
|
45
46
|
with VispWriteL1Frame(
|
|
@@ -68,7 +69,13 @@ def mocked_get_wavelength_range(wavelength_range):
|
|
|
68
69
|
|
|
69
70
|
@pytest.mark.parametrize("pol_mode", ["observe_polarimetric", "observe_intensity"])
|
|
70
71
|
def test_write_l1_frame(
|
|
71
|
-
write_l1_task,
|
|
72
|
+
write_l1_task,
|
|
73
|
+
wcs_axis_names,
|
|
74
|
+
pol_mode,
|
|
75
|
+
wavelength_range,
|
|
76
|
+
mocked_get_wavelength_range,
|
|
77
|
+
mocker,
|
|
78
|
+
fake_gql_client,
|
|
72
79
|
):
|
|
73
80
|
"""
|
|
74
81
|
:Given: a write L1 task
|
|
@@ -76,7 +83,7 @@ def test_write_l1_frame(
|
|
|
76
83
|
:Then: no errors are raised
|
|
77
84
|
"""
|
|
78
85
|
mocker.patch(
|
|
79
|
-
"dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=
|
|
86
|
+
"dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=fake_gql_client
|
|
80
87
|
)
|
|
81
88
|
mocker.patch(
|
|
82
89
|
"dkist_processing_visp.tasks.write_l1.VispWriteL1Frame.get_wavelength_range",
|
|
@@ -156,9 +163,21 @@ def test_write_l1_frame(
|
|
|
156
163
|
assert header["EXPRID02"] == "EXPERID2"
|
|
157
164
|
assert header["EXPRID03"] == "EXPERID3"
|
|
158
165
|
assert header["WAVEBAND"] == expected_waveband
|
|
166
|
+
assert header["BUNIT"] == ""
|
|
167
|
+
assert (
|
|
168
|
+
header.comments["BUNIT"]
|
|
169
|
+
== "Values are relative to disk center. See calibration docs."
|
|
170
|
+
)
|
|
159
171
|
for i, line in enumerate(expected_spectral_lines, start=1):
|
|
160
172
|
assert header[f"SPECLN{i:02}"] == line.name
|
|
161
173
|
|
|
162
174
|
with pytest.raises(KeyError):
|
|
163
175
|
# Make sure no more lines were added
|
|
164
176
|
header[f"SPECLN{i+1:02}"]
|
|
177
|
+
|
|
178
|
+
if pol_mode == "observe_polarimetric":
|
|
179
|
+
assert header["CADENCE"] == 100
|
|
180
|
+
assert header[MetadataKey.fpa_exposure_time_ms] == 150
|
|
181
|
+
else:
|
|
182
|
+
assert header["CADENCE"] == 10
|
|
183
|
+
assert header[MetadataKey.fpa_exposure_time_ms] == 15
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"""ViSP raw data processing workflow."""
|
|
2
|
+
|
|
2
3
|
from dkist_processing_common.tasks import PublishCatalogAndQualityMessages
|
|
3
4
|
from dkist_processing_common.tasks import QualityL1Metrics
|
|
4
5
|
from dkist_processing_common.tasks import SubmitDatasetMetadata
|
|
@@ -40,8 +41,13 @@ l0_pipeline.add_node(
|
|
|
40
41
|
task=SolarCalibration,
|
|
41
42
|
upstreams=[LampCalibration, GeometricCalibration, BackgroundLightCalibration],
|
|
42
43
|
)
|
|
43
|
-
l0_pipeline.add_node(
|
|
44
|
-
|
|
44
|
+
l0_pipeline.add_node(
|
|
45
|
+
task=InstrumentPolarizationCalibration,
|
|
46
|
+
upstreams=[BackgroundLightCalibration, GeometricCalibration],
|
|
47
|
+
)
|
|
48
|
+
l0_pipeline.add_node(
|
|
49
|
+
task=ScienceCalibration, upstreams=[SolarCalibration, InstrumentPolarizationCalibration]
|
|
50
|
+
)
|
|
45
51
|
l0_pipeline.add_node(task=VispWriteL1Frame, upstreams=ScienceCalibration)
|
|
46
52
|
|
|
47
53
|
# Movie flow
|
|
@@ -60,7 +66,8 @@ l0_pipeline.add_node(
|
|
|
60
66
|
# Output flow
|
|
61
67
|
l0_pipeline.add_node(task=TransferL1Data, upstreams=[VispWriteL1Frame, AssembleVispMovie])
|
|
62
68
|
l0_pipeline.add_node(
|
|
63
|
-
task=SubmitDatasetMetadata,
|
|
69
|
+
task=SubmitDatasetMetadata,
|
|
70
|
+
upstreams=[VispWriteL1Frame, VispAssembleQualityData, AssembleVispMovie],
|
|
64
71
|
)
|
|
65
72
|
l0_pipeline.add_node(
|
|
66
73
|
task=PublishCatalogAndQualityMessages, upstreams=[SubmitDatasetMetadata, TransferL1Data]
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"""Workflows for trial runs (i.e., not Production)."""
|
|
2
|
+
|
|
2
3
|
from dkist_processing_common.tasks import CreateTrialAsdf
|
|
3
4
|
from dkist_processing_common.tasks import CreateTrialDatasetInventory
|
|
4
5
|
from dkist_processing_common.tasks import CreateTrialQualityReport
|
|
@@ -42,8 +43,13 @@ full_trial_pipeline.add_node(
|
|
|
42
43
|
task=SolarCalibration,
|
|
43
44
|
upstreams=[LampCalibration, GeometricCalibration, BackgroundLightCalibration],
|
|
44
45
|
)
|
|
45
|
-
full_trial_pipeline.add_node(
|
|
46
|
-
|
|
46
|
+
full_trial_pipeline.add_node(
|
|
47
|
+
task=InstrumentPolarizationCalibration,
|
|
48
|
+
upstreams=[BackgroundLightCalibration, GeometricCalibration],
|
|
49
|
+
)
|
|
50
|
+
full_trial_pipeline.add_node(
|
|
51
|
+
task=ScienceCalibration, upstreams=[SolarCalibration, InstrumentPolarizationCalibration]
|
|
52
|
+
)
|
|
47
53
|
full_trial_pipeline.add_node(task=VispWriteL1Frame, upstreams=ScienceCalibration)
|
|
48
54
|
|
|
49
55
|
# Movie flow
|