dkist-processing-visp 5.1.2rc2__py3-none-any.whl → 5.2.0__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.
Files changed (30) hide show
  1. dkist_processing_visp/models/parameters.py +43 -1
  2. dkist_processing_visp/models/tags.py +11 -0
  3. dkist_processing_visp/models/task_name.py +2 -0
  4. dkist_processing_visp/tasks/geometric.py +1 -1
  5. dkist_processing_visp/tasks/science.py +88 -11
  6. dkist_processing_visp/tasks/solar.py +12 -205
  7. dkist_processing_visp/tasks/wavelength_calibration.py +430 -0
  8. dkist_processing_visp/tasks/write_l1.py +2 -0
  9. dkist_processing_visp/tests/conftest.py +11 -0
  10. dkist_processing_visp/tests/header_models.py +22 -6
  11. dkist_processing_visp/tests/local_trial_workflows/l0_cals_only.py +21 -0
  12. dkist_processing_visp/tests/local_trial_workflows/l0_polcals_as_science.py +21 -0
  13. dkist_processing_visp/tests/local_trial_workflows/l0_solar_gain_as_science.py +20 -0
  14. dkist_processing_visp/tests/local_trial_workflows/l0_to_l1.py +21 -0
  15. dkist_processing_visp/tests/local_trial_workflows/local_trial_helpers.py +27 -0
  16. dkist_processing_visp/tests/test_parameters.py +11 -5
  17. dkist_processing_visp/tests/test_science.py +60 -5
  18. dkist_processing_visp/tests/test_solar.py +0 -1
  19. dkist_processing_visp/tests/test_wavelength_calibration.py +297 -0
  20. dkist_processing_visp/tests/test_write_l1.py +0 -2
  21. dkist_processing_visp/workflows/l0_processing.py +4 -1
  22. dkist_processing_visp/workflows/trial_workflows.py +4 -1
  23. {dkist_processing_visp-5.1.2rc2.dist-info → dkist_processing_visp-5.2.0.dist-info}/METADATA +34 -34
  24. {dkist_processing_visp-5.1.2rc2.dist-info → dkist_processing_visp-5.2.0.dist-info}/RECORD +29 -27
  25. docs/gain_correction.rst +3 -0
  26. docs/index.rst +1 -0
  27. docs/wavelength_calibration.rst +64 -0
  28. changelog/251.feature.rst +0 -1
  29. {dkist_processing_visp-5.1.2rc2.dist-info → dkist_processing_visp-5.2.0.dist-info}/WHEEL +0 -0
  30. {dkist_processing_visp-5.1.2rc2.dist-info → dkist_processing_visp-5.2.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,297 @@
1
+ import json
2
+
3
+ import astropy.units as u
4
+ import numpy as np
5
+ import pytest
6
+ from astropy.stats import gaussian_fwhm_to_sigma
7
+ from astropy.units import Quantity
8
+ from dkist_processing_common._util.scratch import WorkflowFileSystem
9
+ from dkist_processing_common.codecs.fits import fits_array_encoder
10
+ from dkist_processing_common.codecs.json import json_decoder
11
+ from dkist_processing_common.models.metric_code import MetricCode
12
+ from scipy.ndimage import gaussian_filter
13
+ from solar_wavelength_calibration import Atlas
14
+
15
+ from dkist_processing_visp.models.tags import VispTag
16
+ from dkist_processing_visp.tasks.wavelength_calibration import WavelengthCalibration
17
+ from dkist_processing_visp.tasks.wavelength_calibration import compute_initial_dispersion
18
+ from dkist_processing_visp.tasks.wavelength_calibration import compute_input_wavelength_vector
19
+ from dkist_processing_visp.tasks.wavelength_calibration import compute_order
20
+ from dkist_processing_visp.tests.conftest import VispConstantsDb
21
+ from dkist_processing_visp.tests.conftest import VispInputDatasetParameterValues
22
+
23
+
24
+ @pytest.fixture(scope="session")
25
+ def opacity_factor() -> float:
26
+ return 0.8
27
+
28
+
29
+ @pytest.fixture(scope="session")
30
+ def continuum_level() -> float:
31
+ return 1.1
32
+
33
+
34
+ @pytest.fixture(scope="session")
35
+ def straylight_fraction() -> float:
36
+ return 0.7
37
+
38
+
39
+ @pytest.fixture(scope="session")
40
+ def offset_factor() -> Quantity:
41
+ # Given the wavelength we're using, a negative value here lets us have a larger offset. Positive offsets of a similar
42
+ # magnitude at the same wavelength range push us into a tough-to-fit region of the spectrum.
43
+ return 0.15 * u.nm
44
+
45
+
46
+ @pytest.fixture(scope="session")
47
+ def num_wave_pix() -> int:
48
+ return 1000
49
+
50
+
51
+ @pytest.fixture(scope="session")
52
+ def wavelength() -> u.Quantity:
53
+ return 589.23 * u.nm
54
+
55
+
56
+ @pytest.fixture(scope="session")
57
+ def grating_constant() -> u.Quantity:
58
+ return 316.0 / u.mm
59
+
60
+
61
+ @pytest.fixture(scope="session")
62
+ def order() -> int:
63
+ return 10
64
+
65
+
66
+ @pytest.fixture(scope="session")
67
+ def incident_light_angle() -> u.Quantity:
68
+ return 73.22 * u.deg
69
+
70
+
71
+ @pytest.fixture(scope="session")
72
+ def reflected_light_angle() -> u.Quantity:
73
+ return 64.91983 * u.deg
74
+
75
+
76
+ @pytest.fixture(scope="session")
77
+ def pixel_pitch() -> u.Quantity:
78
+ return 6.5 * u.micron / u.pix
79
+
80
+
81
+ @pytest.fixture(scope="session")
82
+ def lens_parameters_no_units() -> list[float]:
83
+ return [0.9512, 2.141e-4, -1.014e-7]
84
+
85
+
86
+ @pytest.fixture(scope="session")
87
+ def lens_parameters(lens_parameters_no_units) -> list[u.Quantity]:
88
+ return [
89
+ lens_parameters_no_units[0] * u.m,
90
+ lens_parameters_no_units[1] * u.m / u.nm,
91
+ lens_parameters_no_units[2] * u.m / u.nm**2,
92
+ ]
93
+
94
+
95
+ @pytest.fixture(scope="session")
96
+ def dispersion(
97
+ wavelength, incident_light_angle, reflected_light_angle, lens_parameters, pixel_pitch
98
+ ) -> u.Quantity:
99
+ return compute_initial_dispersion(
100
+ central_wavelength=wavelength,
101
+ incident_light_angle=incident_light_angle,
102
+ reflected_light_angle=reflected_light_angle,
103
+ lens_parameters=lens_parameters,
104
+ pixel_pitch=pixel_pitch,
105
+ )
106
+
107
+
108
+ @pytest.fixture(scope="session")
109
+ def resolving_power() -> int:
110
+ return int(1.15e5)
111
+
112
+
113
+ @pytest.fixture(scope="session")
114
+ def solar_atlas() -> Atlas:
115
+ return Atlas()
116
+
117
+
118
+ @pytest.fixture(scope="function")
119
+ def visp_wavelength_correction_task(
120
+ tmp_path,
121
+ recipe_run_id,
122
+ assign_input_dataset_doc_to_task,
123
+ init_visp_constants_db,
124
+ wavelength,
125
+ solar_atlas,
126
+ dispersion,
127
+ num_wave_pix,
128
+ resolving_power,
129
+ incident_light_angle,
130
+ reflected_light_angle,
131
+ grating_constant,
132
+ order,
133
+ offset_factor,
134
+ opacity_factor,
135
+ continuum_level,
136
+ straylight_fraction,
137
+ num_start_nans,
138
+ ):
139
+ num_beams = 2
140
+ char_spec_shape = (num_wave_pix, 2560)
141
+ arm_id = 2
142
+
143
+ constants_db = VispConstantsDb(
144
+ NUM_BEAMS=num_beams,
145
+ INCIDENT_LIGHT_ANGLE_DEG=incident_light_angle.value,
146
+ GRATING_CONSTANT_INVERSE_MM=grating_constant.value,
147
+ ARM_ID=arm_id,
148
+ REFLECTED_LIGHT_ANGLE_DEG=reflected_light_angle.value,
149
+ WAVELENGTH=wavelength.value,
150
+ )
151
+ init_visp_constants_db(recipe_run_id, constants_db)
152
+ with WavelengthCalibration(
153
+ recipe_run_id=recipe_run_id,
154
+ workflow_name="wavelength_correction",
155
+ workflow_version="VX.Y",
156
+ ) as task:
157
+ try: # This try... block is here to make sure the dbs get cleaned up if there's a failure in the fixture
158
+
159
+ # Create a realistic spectra
160
+ wave_vec = compute_input_wavelength_vector(
161
+ central_wavelength=wavelength,
162
+ dispersion=dispersion,
163
+ grating_constant=grating_constant,
164
+ order=order,
165
+ incident_light_angle=incident_light_angle,
166
+ num_spec_px=num_wave_pix,
167
+ )
168
+
169
+ # Simulate a "realistic" input spectra with errors that need to be corrected
170
+ solar_signal = np.interp(
171
+ wave_vec,
172
+ solar_atlas.solar_atlas_wavelength + offset_factor,
173
+ solar_atlas.solar_atlas_transmission,
174
+ )
175
+ telluric_signal = np.interp(
176
+ wave_vec,
177
+ solar_atlas.telluric_atlas_wavelength + offset_factor,
178
+ solar_atlas.telluric_atlas_transmission,
179
+ )
180
+
181
+ combined_spec_1d = solar_signal * telluric_signal
182
+ combined_spec_1d_with_error = (
183
+ combined_spec_1d**opacity_factor * continuum_level + straylight_fraction
184
+ )
185
+
186
+ sigma_wavelength = (
187
+ wavelength.to_value(u.nm) / resolving_power
188
+ ) * gaussian_fwhm_to_sigma
189
+ sigma_pix = sigma_wavelength / np.abs(dispersion.to_value(u.nm / u.pix))
190
+ spec_1d = gaussian_filter(combined_spec_1d_with_error, np.abs(sigma_pix))
191
+
192
+ spec_1d[:num_start_nans] = np.nan
193
+
194
+ spec = np.ones(char_spec_shape) * spec_1d[:, None]
195
+
196
+ task.scratch = WorkflowFileSystem(
197
+ scratch_base_path=tmp_path, recipe_run_id=recipe_run_id
198
+ )
199
+ params = VispInputDatasetParameterValues()
200
+ assign_input_dataset_doc_to_task(task, params)
201
+
202
+ # Create fake solar charcteristic spectra for one beam
203
+ task.write(
204
+ data=spec,
205
+ tags=[
206
+ VispTag.intermediate_frame(beam=1),
207
+ VispTag.task_characteristic_spectra(),
208
+ ],
209
+ encoder=fits_array_encoder,
210
+ )
211
+
212
+ yield task
213
+ except:
214
+ raise
215
+ finally:
216
+ task._purge()
217
+
218
+
219
+ @pytest.mark.parametrize(
220
+ "num_start_nans", [pytest.param(17, id="with_nans"), pytest.param(0, id="no_nans")]
221
+ )
222
+ def test_wavelength_correction(
223
+ visp_wavelength_correction_task,
224
+ mocker,
225
+ fake_gql_client,
226
+ wavelength,
227
+ dispersion,
228
+ offset_factor,
229
+ incident_light_angle,
230
+ num_wave_pix,
231
+ num_start_nans,
232
+ ):
233
+ """
234
+ Given: A `WavelengthCalibration` task with all the data needed to run
235
+ When: Running the task
236
+ Then: The correct output files are produced and the wavelength solution is close to what's expected
237
+ """
238
+ mocker.patch(
239
+ "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=fake_gql_client
240
+ )
241
+
242
+ task = visp_wavelength_correction_task
243
+ task()
244
+ tags = [
245
+ VispTag.task_wavelength_calibration(),
246
+ VispTag.intermediate(),
247
+ ]
248
+ fit_result = next(task.read(tags=tags, decoder=json_decoder))
249
+
250
+ expected_crval = wavelength - offset_factor
251
+
252
+ wavelength_solution_header_files = list(
253
+ task.read(tags=[VispTag.intermediate(), VispTag.task_wavelength_calibration()])
254
+ )
255
+ assert len(wavelength_solution_header_files) == 1
256
+ with open(wavelength_solution_header_files[0], "r") as f:
257
+ wavecal_header_dict = json.load(f)
258
+
259
+ # `num_wave_pix - num_start_nans` is the length of the input spectrum that the wavecal library sees
260
+ assert fit_result["CRPIX2"] == (num_wave_pix - num_start_nans) // 2 + 1 + num_start_nans
261
+ np.testing.assert_allclose(fit_result["CDELT2"], dispersion.value, rtol=1e-2)
262
+ np.testing.assert_allclose(
263
+ wavecal_header_dict["CRVAL2"], expected_crval.to_value(u.nm), rtol=1e-5
264
+ )
265
+ assert wavecal_header_dict["PV2_0"] == task.constants.grating_constant_inverse_mm.to_value(
266
+ 1 / u.m
267
+ )
268
+ assert wavecal_header_dict["PV2_1"] == compute_order(
269
+ central_wavelength=wavelength,
270
+ incident_light_angle=incident_light_angle,
271
+ reflected_light_angle=task.constants.reflected_light_angle_deg,
272
+ grating_constant=task.constants.grating_constant_inverse_mm,
273
+ )
274
+
275
+ np.testing.assert_allclose(
276
+ wavecal_header_dict["PV2_2"], incident_light_angle.to_value(u.deg), rtol=1e-2
277
+ )
278
+
279
+ for primary_key in filter(lambda k: not k.endswith("A"), wavecal_header_dict.keys()):
280
+ assert (
281
+ wavecal_header_dict[primary_key] == wavecal_header_dict[f"{primary_key}A"]
282
+ ), f"{primary_key} does not match {primary_key}A"
283
+
284
+ quality_files = list(task.read(tags=[VispTag.quality(MetricCode.wavecal_fit)]))
285
+ assert len(quality_files) == 1
286
+ with open(quality_files[0]) as f:
287
+ quality_dict = json.load(f)
288
+ assert sorted(
289
+ [
290
+ "input_wavelength_nm",
291
+ "input_spectrum",
292
+ "best_fit_wavelength_nm",
293
+ "best_fit_atlas",
294
+ "normalized_residuals",
295
+ "weights",
296
+ ]
297
+ ) == sorted(list(quality_dict.keys()))
@@ -48,9 +48,7 @@ def write_l1_task(
48
48
  workflow_name="workflow_name",
49
49
  workflow_version="workflow_version",
50
50
  ) as task:
51
-
52
51
  yield task
53
-
54
52
  task._purge()
55
53
 
56
54
 
@@ -22,6 +22,7 @@ from dkist_processing_visp.tasks import VispAssembleQualityData
22
22
  from dkist_processing_visp.tasks import VispL0QualityMetrics
23
23
  from dkist_processing_visp.tasks import VispL1QualityMetrics
24
24
  from dkist_processing_visp.tasks import VispWriteL1Frame
25
+ from dkist_processing_visp.tasks.wavelength_calibration import WavelengthCalibration
25
26
 
26
27
  l0_pipeline = Workflow(
27
28
  category="visp",
@@ -41,12 +42,14 @@ l0_pipeline.add_node(
41
42
  task=SolarCalibration,
42
43
  upstreams=[LampCalibration, GeometricCalibration, BackgroundLightCalibration],
43
44
  )
45
+ l0_pipeline.add_node(task=WavelengthCalibration, upstreams=SolarCalibration)
44
46
  l0_pipeline.add_node(
45
47
  task=InstrumentPolarizationCalibration,
46
48
  upstreams=[BackgroundLightCalibration, GeometricCalibration],
47
49
  )
48
50
  l0_pipeline.add_node(
49
- task=ScienceCalibration, upstreams=[SolarCalibration, InstrumentPolarizationCalibration]
51
+ task=ScienceCalibration,
52
+ upstreams=[SolarCalibration, InstrumentPolarizationCalibration, WavelengthCalibration],
50
53
  )
51
54
  l0_pipeline.add_node(task=VispWriteL1Frame, upstreams=ScienceCalibration)
52
55
 
@@ -23,6 +23,7 @@ from dkist_processing_visp.tasks import VispAssembleQualityData
23
23
  from dkist_processing_visp.tasks import VispL0QualityMetrics
24
24
  from dkist_processing_visp.tasks import VispL1QualityMetrics
25
25
  from dkist_processing_visp.tasks import VispWriteL1Frame
26
+ from dkist_processing_visp.tasks.wavelength_calibration import WavelengthCalibration
26
27
 
27
28
  full_trial_pipeline = Workflow(
28
29
  category="visp",
@@ -43,12 +44,14 @@ full_trial_pipeline.add_node(
43
44
  task=SolarCalibration,
44
45
  upstreams=[LampCalibration, GeometricCalibration, BackgroundLightCalibration],
45
46
  )
47
+ full_trial_pipeline.add_node(task=WavelengthCalibration, upstreams=SolarCalibration)
46
48
  full_trial_pipeline.add_node(
47
49
  task=InstrumentPolarizationCalibration,
48
50
  upstreams=[BackgroundLightCalibration, GeometricCalibration],
49
51
  )
50
52
  full_trial_pipeline.add_node(
51
- task=ScienceCalibration, upstreams=[SolarCalibration, InstrumentPolarizationCalibration]
53
+ task=ScienceCalibration,
54
+ upstreams=[SolarCalibration, InstrumentPolarizationCalibration, WavelengthCalibration],
52
55
  )
53
56
  full_trial_pipeline.add_node(task=VispWriteL1Frame, upstreams=ScienceCalibration)
54
57
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dkist-processing-visp
3
- Version: 5.1.2rc2
3
+ Version: 5.2.0
4
4
  Summary: Science processing code for the ViSP instrument on DKIST
5
5
  Author-email: NSO / AURA <dkistdc@nso.edu>
6
6
  License: BSD-3-Clause
@@ -13,7 +13,7 @@ Classifier: Programming Language :: Python :: 3
13
13
  Classifier: Programming Language :: Python :: 3.12
14
14
  Requires-Python: >=3.12
15
15
  Description-Content-Type: text/x-rst
16
- Requires-Dist: dkist-processing-common==11.9.1rc2
16
+ Requires-Dist: dkist-processing-common==11.9.1
17
17
  Requires-Dist: dkist-processing-math==2.2.1
18
18
  Requires-Dist: dkist-processing-pac==3.1.1
19
19
  Requires-Dist: dkist-header-validator==5.2.1
@@ -30,6 +30,7 @@ Requires-Dist: scikit-learn==1.6.1
30
30
  Requires-Dist: peakutils==1.3.5
31
31
  Requires-Dist: Pillow==10.4.0
32
32
  Requires-Dist: moviepy==2.1.2
33
+ Requires-Dist: solar-wavelength-calibration==2.0.0
33
34
  Provides-Extra: test
34
35
  Requires-Dist: pytest; extra == "test"
35
36
  Requires-Dist: pytest-cov; extra == "test"
@@ -125,8 +126,8 @@ Requires-Dist: attrs==25.4.0; extra == "frozen"
125
126
  Requires-Dist: babel==2.17.0; extra == "frozen"
126
127
  Requires-Dist: billiard==4.2.4; extra == "frozen"
127
128
  Requires-Dist: blinker==1.9.0; extra == "frozen"
128
- Requires-Dist: boto3==1.42.5; extra == "frozen"
129
- Requires-Dist: botocore==1.42.5; extra == "frozen"
129
+ Requires-Dist: boto3==1.42.9; extra == "frozen"
130
+ Requires-Dist: botocore==1.42.9; extra == "frozen"
130
131
  Requires-Dist: cachelib==0.13.0; extra == "frozen"
131
132
  Requires-Dist: celery==5.6.0; extra == "frozen"
132
133
  Requires-Dist: certifi==2025.11.12; extra == "frozen"
@@ -149,11 +150,11 @@ Requires-Dist: dacite==1.9.2; extra == "frozen"
149
150
  Requires-Dist: decorator==5.2.1; extra == "frozen"
150
151
  Requires-Dist: dill==0.4.0; extra == "frozen"
151
152
  Requires-Dist: dkist-header-validator==5.2.1; extra == "frozen"
152
- Requires-Dist: dkist-processing-common==11.9.1rc2; extra == "frozen"
153
+ Requires-Dist: dkist-processing-common==11.9.1; extra == "frozen"
153
154
  Requires-Dist: dkist-processing-core==6.0.1; extra == "frozen"
154
155
  Requires-Dist: dkist-processing-math==2.2.1; extra == "frozen"
155
156
  Requires-Dist: dkist-processing-pac==3.1.1; extra == "frozen"
156
- Requires-Dist: dkist-processing-visp==5.1.2rc2; extra == "frozen"
157
+ Requires-Dist: dkist-processing-visp==5.2.0; extra == "frozen"
157
158
  Requires-Dist: dkist-service-configuration==4.1.13; extra == "frozen"
158
159
  Requires-Dist: dkist-spectral-lines==3.0.0; extra == "frozen"
159
160
  Requires-Dist: dkist_fits_specifications==4.17.0; extra == "frozen"
@@ -162,14 +163,13 @@ Requires-Dist: email-validator==2.3.0; extra == "frozen"
162
163
  Requires-Dist: exceptiongroup==1.3.1; extra == "frozen"
163
164
  Requires-Dist: fastjsonschema==2.21.2; extra == "frozen"
164
165
  Requires-Dist: flower==2.0.1; extra == "frozen"
165
- Requires-Dist: fonttools==4.61.0; extra == "frozen"
166
+ Requires-Dist: fonttools==4.61.1; extra == "frozen"
166
167
  Requires-Dist: frozenlist==1.8.0; extra == "frozen"
167
168
  Requires-Dist: fsspec==2025.12.0; extra == "frozen"
168
169
  Requires-Dist: globus-sdk==4.2.0; extra == "frozen"
169
170
  Requires-Dist: google-re2==1.1.20251105; extra == "frozen"
170
171
  Requires-Dist: googleapis-common-protos==1.72.0; extra == "frozen"
171
172
  Requires-Dist: gqlclient==1.2.3; extra == "frozen"
172
- Requires-Dist: greenlet==3.3.0; extra == "frozen"
173
173
  Requires-Dist: grpcio==1.76.0; extra == "frozen"
174
174
  Requires-Dist: gunicorn==23.0.0; extra == "frozen"
175
175
  Requires-Dist: h11==0.16.0; extra == "frozen"
@@ -199,7 +199,7 @@ Requires-Dist: markdown-it-py==4.0.0; extra == "frozen"
199
199
  Requires-Dist: marshmallow==3.26.1; extra == "frozen"
200
200
  Requires-Dist: marshmallow-oneofschema==3.2.0; extra == "frozen"
201
201
  Requires-Dist: marshmallow-sqlalchemy==0.28.2; extra == "frozen"
202
- Requires-Dist: matplotlib==3.10.7; extra == "frozen"
202
+ Requires-Dist: matplotlib==3.10.8; extra == "frozen"
203
203
  Requires-Dist: mdit-py-plugins==0.5.0; extra == "frozen"
204
204
  Requires-Dist: mdurl==0.1.2; extra == "frozen"
205
205
  Requires-Dist: methodtools==0.4.7; extra == "frozen"
@@ -210,30 +210,30 @@ Requires-Dist: nbformat==5.10.4; extra == "frozen"
210
210
  Requires-Dist: networkx==3.6.1; extra == "frozen"
211
211
  Requires-Dist: numpy==2.2.5; extra == "frozen"
212
212
  Requires-Dist: object-clerk==1.0.0; extra == "frozen"
213
- Requires-Dist: opentelemetry-api==1.39.0; extra == "frozen"
214
- Requires-Dist: opentelemetry-exporter-otlp==1.39.0; extra == "frozen"
215
- Requires-Dist: opentelemetry-exporter-otlp-proto-common==1.39.0; extra == "frozen"
216
- Requires-Dist: opentelemetry-exporter-otlp-proto-grpc==1.39.0; extra == "frozen"
217
- Requires-Dist: opentelemetry-exporter-otlp-proto-http==1.39.0; extra == "frozen"
218
- Requires-Dist: opentelemetry-instrumentation==0.60b0; extra == "frozen"
219
- Requires-Dist: opentelemetry-instrumentation-aiohttp-client==0.60b0; extra == "frozen"
220
- Requires-Dist: opentelemetry-instrumentation-asgi==0.60b0; extra == "frozen"
221
- Requires-Dist: opentelemetry-instrumentation-botocore==0.60b0; extra == "frozen"
222
- Requires-Dist: opentelemetry-instrumentation-celery==0.60b0; extra == "frozen"
223
- Requires-Dist: opentelemetry-instrumentation-dbapi==0.60b0; extra == "frozen"
224
- Requires-Dist: opentelemetry-instrumentation-fastapi==0.60b0; extra == "frozen"
225
- Requires-Dist: opentelemetry-instrumentation-pika==0.60b0; extra == "frozen"
226
- Requires-Dist: opentelemetry-instrumentation-psycopg2==0.60b0; extra == "frozen"
227
- Requires-Dist: opentelemetry-instrumentation-pymongo==0.60b0; extra == "frozen"
228
- Requires-Dist: opentelemetry-instrumentation-redis==0.60b0; extra == "frozen"
229
- Requires-Dist: opentelemetry-instrumentation-requests==0.60b0; extra == "frozen"
230
- Requires-Dist: opentelemetry-instrumentation-sqlalchemy==0.60b0; extra == "frozen"
231
- Requires-Dist: opentelemetry-instrumentation-system-metrics==0.60b0; extra == "frozen"
213
+ Requires-Dist: opentelemetry-api==1.39.1; extra == "frozen"
214
+ Requires-Dist: opentelemetry-exporter-otlp==1.39.1; extra == "frozen"
215
+ Requires-Dist: opentelemetry-exporter-otlp-proto-common==1.39.1; extra == "frozen"
216
+ Requires-Dist: opentelemetry-exporter-otlp-proto-grpc==1.39.1; extra == "frozen"
217
+ Requires-Dist: opentelemetry-exporter-otlp-proto-http==1.39.1; extra == "frozen"
218
+ Requires-Dist: opentelemetry-instrumentation==0.60b1; extra == "frozen"
219
+ Requires-Dist: opentelemetry-instrumentation-aiohttp-client==0.60b1; extra == "frozen"
220
+ Requires-Dist: opentelemetry-instrumentation-asgi==0.60b1; extra == "frozen"
221
+ Requires-Dist: opentelemetry-instrumentation-botocore==0.60b1; extra == "frozen"
222
+ Requires-Dist: opentelemetry-instrumentation-celery==0.60b1; extra == "frozen"
223
+ Requires-Dist: opentelemetry-instrumentation-dbapi==0.60b1; extra == "frozen"
224
+ Requires-Dist: opentelemetry-instrumentation-fastapi==0.60b1; extra == "frozen"
225
+ Requires-Dist: opentelemetry-instrumentation-pika==0.60b1; extra == "frozen"
226
+ Requires-Dist: opentelemetry-instrumentation-psycopg2==0.60b1; extra == "frozen"
227
+ Requires-Dist: opentelemetry-instrumentation-pymongo==0.60b1; extra == "frozen"
228
+ Requires-Dist: opentelemetry-instrumentation-redis==0.60b1; extra == "frozen"
229
+ Requires-Dist: opentelemetry-instrumentation-requests==0.60b1; extra == "frozen"
230
+ Requires-Dist: opentelemetry-instrumentation-sqlalchemy==0.60b1; extra == "frozen"
231
+ Requires-Dist: opentelemetry-instrumentation-system-metrics==0.60b1; extra == "frozen"
232
232
  Requires-Dist: opentelemetry-propagator-aws-xray==1.0.2; extra == "frozen"
233
- Requires-Dist: opentelemetry-proto==1.39.0; extra == "frozen"
234
- Requires-Dist: opentelemetry-sdk==1.39.0; extra == "frozen"
235
- Requires-Dist: opentelemetry-semantic-conventions==0.60b0; extra == "frozen"
236
- Requires-Dist: opentelemetry-util-http==0.60b0; extra == "frozen"
233
+ Requires-Dist: opentelemetry-proto==1.39.1; extra == "frozen"
234
+ Requires-Dist: opentelemetry-sdk==1.39.1; extra == "frozen"
235
+ Requires-Dist: opentelemetry-semantic-conventions==0.60b1; extra == "frozen"
236
+ Requires-Dist: opentelemetry-util-http==0.60b1; extra == "frozen"
237
237
  Requires-Dist: ordered-set==4.1.0; extra == "frozen"
238
238
  Requires-Dist: packaging==25.0; extra == "frozen"
239
239
  Requires-Dist: pandas==2.3.3; extra == "frozen"
@@ -293,7 +293,7 @@ Requires-Dist: termcolor==3.2.0; extra == "frozen"
293
293
  Requires-Dist: text-unidecode==1.3; extra == "frozen"
294
294
  Requires-Dist: threadpoolctl==3.6.0; extra == "frozen"
295
295
  Requires-Dist: tifffile==2025.10.16; extra == "frozen"
296
- Requires-Dist: tornado==6.5.2; extra == "frozen"
296
+ Requires-Dist: tornado==6.5.3; extra == "frozen"
297
297
  Requires-Dist: tqdm==4.67.1; extra == "frozen"
298
298
  Requires-Dist: traitlets==5.14.3; extra == "frozen"
299
299
  Requires-Dist: typing-inspection==0.4.2; extra == "frozen"
@@ -303,7 +303,7 @@ Requires-Dist: tzlocal==5.3.1; extra == "frozen"
303
303
  Requires-Dist: uc-micro-py==1.0.3; extra == "frozen"
304
304
  Requires-Dist: uncertainties==3.2.3; extra == "frozen"
305
305
  Requires-Dist: universal_pathlib==0.3.7; extra == "frozen"
306
- Requires-Dist: urllib3==2.6.1; extra == "frozen"
306
+ Requires-Dist: urllib3==2.6.2; extra == "frozen"
307
307
  Requires-Dist: vine==5.1.0; extra == "frozen"
308
308
  Requires-Dist: voluptuous==0.15.2; extra == "frozen"
309
309
  Requires-Dist: wcwidth==0.2.14; extra == "frozen"
@@ -1,5 +1,4 @@
1
1
  changelog/.gitempty,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- changelog/251.feature.rst,sha256=WgNcGXrBibEDR5mWraG5OXDx9o63aDqY5qzYHrJzSko,125
3
2
  dkist_processing_visp/__init__.py,sha256=LC8o31oTIro4F7IgwoWalX1W3KcPU27yJhlDUeGqcwA,351
4
3
  dkist_processing_visp/config.py,sha256=GMr0CreW4qavbueTtsH_Gx5P52v4yZd2PNKyPmxBKQE,478
5
4
  dkist_processing_visp/fonts/Lato-Regular.ttf,sha256=1jbkaDIx-THtoiLViOlE0IK_0726AvkovuRhwPGFslE,656568
@@ -7,9 +6,9 @@ dkist_processing_visp/models/__init__.py,sha256=z2nFVvvIzirxklQ9i5-F1nR-WOgcDttY
7
6
  dkist_processing_visp/models/constants.py,sha256=TP9ZefMdJxu-JWePICMZ6riC4bH1Mz4NJY0hAcWAPQ0,6749
8
7
  dkist_processing_visp/models/fits_access.py,sha256=8uKaUgtapyED-WgJCeswrIqEGy4Ob6ekBmiyBqF6yIE,573
9
8
  dkist_processing_visp/models/metric_code.py,sha256=L_VJ-l5RXsYgcEIOO6hsez1a5oL5FqTnoVKZ0z7NKng,266
10
- dkist_processing_visp/models/parameters.py,sha256=ynPzU9Clv15tuI_h7OFH4bgngeGP-WJ0I3814lnaKMw,15070
11
- dkist_processing_visp/models/tags.py,sha256=RKtDlNA9O3LMinUP7BJ3tXWn6CWAARaKhXIVB1EHtg0,3055
12
- dkist_processing_visp/models/task_name.py,sha256=ykLXcmCBWYguopdBlg_G0X_u-0o_Ugh2117XrCqdbFk,187
9
+ dkist_processing_visp/models/parameters.py,sha256=kiYzvXjsQo1EFEGHJUdeYj170tq_CeVqrrtD01E1fmQ,16967
10
+ dkist_processing_visp/models/tags.py,sha256=Pdc-E2wNlaqRzAJgQF_KHUe_xzqDrUfp1IB0mpgRNN4,3514
11
+ dkist_processing_visp/models/task_name.py,sha256=6iZ5j8_beOI8DMoEemxG3dra63a93q0vbjcypb_H9wE,281
13
12
  dkist_processing_visp/parsers/__init__.py,sha256=z2nFVvvIzirxklQ9i5-F1nR-WOgcDttYtog_jx4yN5I,12
14
13
  dkist_processing_visp/parsers/map_repeats.py,sha256=YuO1VROQLuE-Hn9hSzityjNhIDe-EgQ4kjZV6l9xF2Q,5468
15
14
  dkist_processing_visp/parsers/modulator_states.py,sha256=dHAZZaG3i_UUT5FjTg1oJdCBiOKCqkrx1jiQnzp2t2o,3006
@@ -23,25 +22,26 @@ dkist_processing_visp/tasks/__init__.py,sha256=qlPlahiM9_sCsaIj_wzQpzWkMITJ1dPdT
23
22
  dkist_processing_visp/tasks/assemble_movie.py,sha256=8UujniXlV_sSGeuISud8wMHihLy6Gc5fKZpwkXLUQB8,3330
24
23
  dkist_processing_visp/tasks/background_light.py,sha256=qQ3r1LR5qaOz2qNHnO5_QK8l1zbVP0GaCS3aLqJfNYY,16201
25
24
  dkist_processing_visp/tasks/dark.py,sha256=VVitrat08U7e5L1-NVnNNJI_KIx791_DvKEJokvCqXE,4334
26
- dkist_processing_visp/tasks/geometric.py,sha256=FL9LVnI9XvAQeDFXnD1nwj67ExosuZjBSW2M3CrlCB4,48893
25
+ dkist_processing_visp/tasks/geometric.py,sha256=n2Wiy7QovA8V0gkORnQ9LX8lgb-amqE-M_mKr1u4HNY,48934
27
26
  dkist_processing_visp/tasks/instrument_polarization.py,sha256=uj7iyzM3CiJcbQeF4eKpk_KCoheXaM4FpDI83GYDld4,25854
28
27
  dkist_processing_visp/tasks/l1_output_data.py,sha256=vl_c52noozeu4N-BbfpsIHFc5q6JATQ9r4iLa3MDtDI,8347
29
28
  dkist_processing_visp/tasks/lamp.py,sha256=HTBob-4Am1ps5ucmX8nSzxV3BqX2ytMcHZ5iyDrljq0,5132
30
29
  dkist_processing_visp/tasks/make_movie_frames.py,sha256=fw25ksKiJJNS57XV5a7rHpYGcSkYxS2Qf13Fb1UGNpE,7544
31
30
  dkist_processing_visp/tasks/parse.py,sha256=Fe_2svvMSKBup--Ulxbu0uaNW3dzPxQreafMEw0CY6E,7897
32
31
  dkist_processing_visp/tasks/quality_metrics.py,sha256=Pw55-PXW0cl39FuNkEQCGGhvI_zMDimwmh-swVPVBD4,8133
33
- dkist_processing_visp/tasks/science.py,sha256=eQZ5MDJhOD8hhp2huksOkl8Btm8EL15no-LX3o6zBXE,34550
34
- dkist_processing_visp/tasks/solar.py,sha256=YJFHmpmdV-FSIrjFKMH3eLXZ8KTdZWcZo-_XFf-u9Gs,47624
32
+ dkist_processing_visp/tasks/science.py,sha256=fm-LLWxmLEjea0a8fhmN3x1v3n1Od4BJ3BioyjPuih8,38318
33
+ dkist_processing_visp/tasks/solar.py,sha256=-OnpKKkUG0EwYK8S4QsMD5UWU6cIHc837nEDc_3OLl4,41156
35
34
  dkist_processing_visp/tasks/visp_base.py,sha256=-yC-PVP9AqFeZJshJ_nqZpSyRsZyHWUlugWvkeWkPKA,1412
36
- dkist_processing_visp/tasks/write_l1.py,sha256=bsDZ0BwoqpTtS_f_rAzUn7Ra8UvYb-kINQhX6BwwFQw,8796
35
+ dkist_processing_visp/tasks/wavelength_calibration.py,sha256=N-pYBRL6Iyb_Q8VrZBQXBWvVBty3LrdhyDVxgxk3n9g,17039
36
+ dkist_processing_visp/tasks/write_l1.py,sha256=UbugV6ilmeYdq-bC9WUiJxkFjn9VzJIkZXtoA7cs71k,8798
37
37
  dkist_processing_visp/tasks/mixin/__init__.py,sha256=z2nFVvvIzirxklQ9i5-F1nR-WOgcDttYtog_jx4yN5I,12
38
38
  dkist_processing_visp/tasks/mixin/beam_access.py,sha256=1VSJkH6yMxCiZWdWOp_RJ37fX5ULMYmB_0_ulT7YJpI,870
39
39
  dkist_processing_visp/tasks/mixin/corrections.py,sha256=FhLFgD9ZYLZd3SaC3PFF-szrcs-zmdrUYNDUEK-h7JA,7145
40
40
  dkist_processing_visp/tasks/mixin/downsample.py,sha256=SvKzY6HJRn-FeyG7O6HPvyOS5dmMu6uPoWkfnpPXpVw,1344
41
41
  dkist_processing_visp/tests/README.rst,sha256=rnedwwg25c0lB9Me7cT7QNZA17FYlqCu9ZnjQxR5hi0,12502
42
42
  dkist_processing_visp/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
- dkist_processing_visp/tests/conftest.py,sha256=h5K8OyKFKmV6emjDywrS_ZTeWburIyBnZw_3L8uJmnY,18652
44
- dkist_processing_visp/tests/header_models.py,sha256=80IZgVsEoGbWOG8kvh7BjC2gHqZq9QSEDcjcmW5B4gA,21126
43
+ dkist_processing_visp/tests/conftest.py,sha256=poJPxGK8RZlDYEoGkwaIyX08WDgf2aF566uJJbZsldk,19049
44
+ dkist_processing_visp/tests/header_models.py,sha256=gD1FUo5TtY_EMSnpWvkrJIOsckkgRAD-e1mthPCdiOw,21687
45
45
  dkist_processing_visp/tests/test_assemble_movie.py,sha256=T5EZzdB3sNY4HcSkN2W1ZBDaI4a68ZUNqPB-JpANSQ0,2247
46
46
  dkist_processing_visp/tests/test_assemble_quality.py,sha256=i2INzb73BM14A6VKD70eb5vaAv5_QjPy3VVVb4lonkc,4314
47
47
  dkist_processing_visp/tests/test_background_light.py,sha256=Zvm8s38qx_ybviEhnKqPI4s36VFBJKtsNrp31-o8lEQ,17553
@@ -53,32 +53,33 @@ dkist_processing_visp/tests/test_instrument_polarization.py,sha256=ZsYSyXUKfs0dv
53
53
  dkist_processing_visp/tests/test_lamp.py,sha256=19mRN8drAg0tqQGwSbSUDlpryqYjMvmfv1DCsttxuXk,5124
54
54
  dkist_processing_visp/tests/test_make_movie_frames.py,sha256=huQ5n0YneHByKumM_Ye9tekqKeh-F-e6MQoudOP3S-g,2628
55
55
  dkist_processing_visp/tests/test_map_repeats.py,sha256=9g3NnvSfn1OqxxYYxTFoOIi1UsCOa6mZjiuGkbxUvTg,7611
56
- dkist_processing_visp/tests/test_parameters.py,sha256=MBSddKsFmRC4zDZEgpA3y3_sRKriETiPEIhcVoSchTo,8053
56
+ dkist_processing_visp/tests/test_parameters.py,sha256=kIwOak4PURFc6yNT9R1rLxfb4x5FbqSlfi3FF-krrGo,8314
57
57
  dkist_processing_visp/tests/test_parse.py,sha256=XyH8oCk5C0CWl4ndNIyVjgXLoMg0679s4dj1MGlJs0c,23363
58
58
  dkist_processing_visp/tests/test_quality.py,sha256=YW24VjEHoILseFIXZBp4-o7egT26mfT1lafzajVjXu8,6905
59
- dkist_processing_visp/tests/test_science.py,sha256=KpOYvL86xhSnTCOcVDveE-enDxcj_G4IrUw_wa375tI,23893
60
- dkist_processing_visp/tests/test_solar.py,sha256=xuKeUrnAeTQoWbL6pUTiRr09jw0O4jYL6-MSCmyF_k4,16789
59
+ dkist_processing_visp/tests/test_science.py,sha256=B8bbtVTxJIXiPssIbJchPLbzVTPCAzpLAgn5DhpYCn0,26106
60
+ dkist_processing_visp/tests/test_solar.py,sha256=xtw8cbunonOG_6dRJHF9GIiQ5Q-KTBCdo1FZWkiA7_c,16761
61
61
  dkist_processing_visp/tests/test_trial_create_quality_report.py,sha256=5LSvLiInp_ce_jObtBGNHQgVAkvJr9bYgY7IzIKrEuU,2799
62
62
  dkist_processing_visp/tests/test_visp_constants.py,sha256=y2x42Y-dK2lrCPufLAV1KHpu2fQ-FRpe8tSIhfHJEw8,3134
63
+ dkist_processing_visp/tests/test_wavelength_calibration.py,sha256=usOCDd4yjmigpCjc5enQn14JJKojm8laxVJVDtV5PuU,9550
63
64
  dkist_processing_visp/tests/test_workflows.py,sha256=qyWxagIDv-MmVN0u3KFswa5HdaHC6uGeJpvgxvPE30E,287
64
- dkist_processing_visp/tests/test_write_l1.py,sha256=ORNKUvF4RPjXc24HgOzyVsP0BCQ9izi54EqXpjLzHXQ,6574
65
+ dkist_processing_visp/tests/test_write_l1.py,sha256=ZrAWhfx_HZi7dOBRc5YowvkKtMS8TBE_iud_KPjFI8g,6572
65
66
  dkist_processing_visp/tests/local_trial_workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
66
- dkist_processing_visp/tests/local_trial_workflows/l0_cals_only.py,sha256=1TmvdAn80WKW-2DsuSg9iK6yQ3Urwm9yt5HlVv1dGWE,10649
67
- dkist_processing_visp/tests/local_trial_workflows/l0_polcals_as_science.py,sha256=geU6Q8ULfIq4Jmj6ORq8mgXYlF8SYrvgZP-0u-4Uz24,17567
68
- dkist_processing_visp/tests/local_trial_workflows/l0_solar_gain_as_science.py,sha256=cRrLklazesLBHPPbGzVjBXbEQKaCxQfgy1_AgWyZRyo,15820
69
- dkist_processing_visp/tests/local_trial_workflows/l0_to_l1.py,sha256=cwEdvUGqqSpp4htrxlmyRN2sZBBvVOjomd66DEqTmTA,15191
70
- dkist_processing_visp/tests/local_trial_workflows/local_trial_helpers.py,sha256=UYGDwvCqzyCzyp44T-vys_JdKuMVRVS7bpWG9gvwnSE,28250
67
+ dkist_processing_visp/tests/local_trial_workflows/l0_cals_only.py,sha256=iqwT8QDA4dvGzBkhs-UXXzMTZtxsa794EOzl1vgGNXA,11559
68
+ dkist_processing_visp/tests/local_trial_workflows/l0_polcals_as_science.py,sha256=SJZp24OZvXnx-t0DNDkNWEvLInZKormWMilbDUOMcKg,18477
69
+ dkist_processing_visp/tests/local_trial_workflows/l0_solar_gain_as_science.py,sha256=bU2kz3n6RdDDAIDXVtiitnAwpLAL60kOuN4HGI6OP3k,16729
70
+ dkist_processing_visp/tests/local_trial_workflows/l0_to_l1.py,sha256=q_rS8PVm6pA5EjayBhj2SfGSRnpsd_jY2IlIfiVpPC4,16101
71
+ dkist_processing_visp/tests/local_trial_workflows/local_trial_helpers.py,sha256=R7NZNEv0VQwwZoBwPa6RYY94_VBnM4JQJ1AQdQaCrGQ,29078
71
72
  dkist_processing_visp/workflows/__init__.py,sha256=1-GP9tOzjCxLJtyq0ry_x4dPdArfSso8Hxu65ydPpXQ,103
72
- dkist_processing_visp/workflows/l0_processing.py,sha256=Af4pDYwuWqXGqapCsOwWhDKrjsu4Pdn4II0YYe_pUL4,3339
73
+ dkist_processing_visp/workflows/l0_processing.py,sha256=XW7tbQLlH06ecEZ3QAt982gK9T_y3eN2U9KtUUq1R_0,3529
73
74
  dkist_processing_visp/workflows/single_task_workflows.py,sha256=LK4dsshM0-lwy79WaMoTplyCxUyINnP9RU74MG_dhyc,33
74
- dkist_processing_visp/workflows/trial_workflows.py,sha256=l3WY9NDqRMCxgadIFRD1UTV99EpA7sD_NXApFXJ2UNY,3824
75
+ dkist_processing_visp/workflows/trial_workflows.py,sha256=IYdjVVZ6mCKGMQiy-_cqKLptHws3WzxrPZLjFccaZr0,4022
75
76
  docs/Makefile,sha256=qnlVz6PuBqE39NfHWuUnHhNEA-EFgT2-WJNNNy9ttfk,4598
76
77
  docs/background_light.rst,sha256=FWj8KH7H51BtoqPCJ1A_VIWJkjaXD8-dwM9RdY1rkIc,5147
77
78
  docs/changelog.rst,sha256=ZpZPJIyl4nI0Eicku6uSrLdiinNOF2GcZwrvTEsb-Zs,346
78
79
  docs/conf.py,sha256=qgWzWK98wj5QHHnNW52fzjCyfibFM_g1DkjB8m2WMAk,2151
79
- docs/gain_correction.rst,sha256=rQA51C2ZwUAk1lwCbSUpjs1SjhE2HpT-ik1C5UO9XrU,7148
80
+ docs/gain_correction.rst,sha256=zC2nnSoch5sdAF3C16eQ8BgUi2J6d_dt7JBRLKfst-w,7176
80
81
  docs/geometric.rst,sha256=VsAWefgJ1j64Uo1TQ-ltAQ6INgsdS7-_FSvOtm0i17s,7301
81
- docs/index.rst,sha256=pl8VhwISd-kb1IQi2h7gOySfOhQQl2C71pjTatShGNI,319
82
+ docs/index.rst,sha256=At3fL3E9lLaoY7wBGtEJra5HTUYCAo6wcdzQJBzmTNs,346
82
83
  docs/l0_to_l1_visp.rst,sha256=wE1TT7DD93r3kByaFAaT2HO907pjV4YrJ_fzvJFTchw,623
83
84
  docs/l0_to_l1_visp_full-trial.rst,sha256=Y6YLkRA5b0tgui5l_WdthCx2wrXjLD8U97XKZHXVVBk,558
84
85
  docs/landing_page.rst,sha256=tdxWtmGjO7OUPYvRjgBAI461nubEE61HrtBwPdBeawI,1052
@@ -88,8 +89,9 @@ docs/requirements.txt,sha256=Kbl_X4c7RQZw035YTeNB63We6I7pvXFU4T0Uflp2yDY,29
88
89
  docs/requirements_table.rst,sha256=_HIbwFpDooM5n0JjiDAbFozGfJuX13smtcoujLFN4Gk,292
89
90
  docs/science_calibration.rst,sha256=VN_g7xSjN-nbXhlBaFnPCbNcsc_Qu0207jEUfRAjnBE,2939
90
91
  docs/scientific_changelog.rst,sha256=01AWBSHg8zElnodCgAq-hMxhk9CkX5rtEENx4iz0sjI,300
92
+ docs/wavelength_calibration.rst,sha256=OSGYAeR8Acns2ZUectHzRj2xcAsuNEMLejcYfPYu-vw,3674
91
93
  licenses/LICENSE.rst,sha256=piZaQplkzOMmH1NXg6QIdo9wwo9pPCoHkvm2-DmH76E,1462
92
- dkist_processing_visp-5.1.2rc2.dist-info/METADATA,sha256=iNUcMX9Czyn4qzmNC0lRqB7GFvh-A_yFjXGyq1A_xBM,29981
93
- dkist_processing_visp-5.1.2rc2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
94
- dkist_processing_visp-5.1.2rc2.dist-info/top_level.txt,sha256=9GHSn-ZMGQxaRNGrPP3HNc5ZkE7ftzluO74Jz5vUSTE,46
95
- dkist_processing_visp-5.1.2rc2.dist-info/RECORD,,
94
+ dkist_processing_visp-5.2.0.dist-info/METADATA,sha256=L0HPzvTGlMrzTsShbBTSCdB6eZ58-c4iY4fOfwIRPpQ,29970
95
+ dkist_processing_visp-5.2.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
96
+ dkist_processing_visp-5.2.0.dist-info/top_level.txt,sha256=9GHSn-ZMGQxaRNGrPP3HNc5ZkE7ftzluO74Jz5vUSTE,46
97
+ dkist_processing_visp-5.2.0.dist-info/RECORD,,
docs/gain_correction.rst CHANGED
@@ -83,6 +83,9 @@ vignette signal varies with spatial and spectral position across the chip. We fi
83
83
  to compute a fully 2D estimate of the true vignette signal. The order of this polynomial fit is set by the
84
84
  ``solar_vignette_spectral_poly_fit_order`` parameter.
85
85
 
86
+
87
+ .. _charspec-description:
88
+
86
89
  Compute Characteristic Spectra
87
90
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
88
91
 
docs/index.rst CHANGED
@@ -11,6 +11,7 @@
11
11
  background_light
12
12
  geometric
13
13
  gain_correction
14
+ wavelength_calibration
14
15
  polarization_calibration
15
16
  science_calibration
16
17
  autoapi/index