dkist-processing-visp 5.1.2rc2__py3-none-any.whl → 5.2.0rc1__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 (35) hide show
  1. changelog/234.bugfix.rst +2 -0
  2. changelog/234.doc.rst +1 -0
  3. changelog/234.feature.rst +1 -0
  4. changelog/234.science.rst +2 -0
  5. changelog/253.misc.rst +1 -0
  6. dkist_processing_visp/models/parameters.py +43 -1
  7. dkist_processing_visp/models/tags.py +11 -0
  8. dkist_processing_visp/models/task_name.py +2 -0
  9. dkist_processing_visp/tasks/geometric.py +1 -1
  10. dkist_processing_visp/tasks/science.py +88 -11
  11. dkist_processing_visp/tasks/solar.py +12 -205
  12. dkist_processing_visp/tasks/wavelength_calibration.py +430 -0
  13. dkist_processing_visp/tasks/write_l1.py +2 -0
  14. dkist_processing_visp/tests/conftest.py +11 -0
  15. dkist_processing_visp/tests/header_models.py +22 -6
  16. dkist_processing_visp/tests/local_trial_workflows/l0_cals_only.py +21 -0
  17. dkist_processing_visp/tests/local_trial_workflows/l0_polcals_as_science.py +21 -0
  18. dkist_processing_visp/tests/local_trial_workflows/l0_solar_gain_as_science.py +20 -0
  19. dkist_processing_visp/tests/local_trial_workflows/l0_to_l1.py +21 -0
  20. dkist_processing_visp/tests/local_trial_workflows/local_trial_helpers.py +27 -0
  21. dkist_processing_visp/tests/test_parameters.py +11 -5
  22. dkist_processing_visp/tests/test_science.py +60 -5
  23. dkist_processing_visp/tests/test_solar.py +0 -1
  24. dkist_processing_visp/tests/test_wavelength_calibration.py +297 -0
  25. dkist_processing_visp/tests/test_write_l1.py +0 -2
  26. dkist_processing_visp/workflows/l0_processing.py +4 -1
  27. dkist_processing_visp/workflows/trial_workflows.py +4 -1
  28. {dkist_processing_visp-5.1.2rc2.dist-info → dkist_processing_visp-5.2.0rc1.dist-info}/METADATA +33 -33
  29. {dkist_processing_visp-5.1.2rc2.dist-info → dkist_processing_visp-5.2.0rc1.dist-info}/RECORD +34 -27
  30. docs/gain_correction.rst +3 -0
  31. docs/index.rst +1 -0
  32. docs/wavelength_calibration.rst +64 -0
  33. changelog/251.feature.rst +0 -1
  34. {dkist_processing_visp-5.1.2rc2.dist-info → dkist_processing_visp-5.2.0rc1.dist-info}/WHEEL +0 -0
  35. {dkist_processing_visp-5.1.2rc2.dist-info → dkist_processing_visp-5.2.0rc1.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.0rc1
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.8; extra == "frozen"
130
+ Requires-Dist: botocore==1.42.8; 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.0rc1; 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"
@@ -169,7 +170,6 @@ 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,9 @@
1
1
  changelog/.gitempty,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- changelog/251.feature.rst,sha256=WgNcGXrBibEDR5mWraG5OXDx9o63aDqY5qzYHrJzSko,125
2
+ changelog/234.bugfix.rst,sha256=Our6to0s222qmuFeRSUEP2lqqidIkJkmsGjekWWr3oU,171
3
+ changelog/234.doc.rst,sha256=aZLFLpEb6zlmFFiSKuoe2RrbS-7jwLt4aSE3Rw2lN4s,66
4
+ changelog/234.feature.rst,sha256=fsavvoebhLLVbMopyVl-byq6HRKTQ8FAHSsidP6pieU,114
5
+ changelog/234.science.rst,sha256=qB0ul0avWEbGfHaqAZxTkVVi3G-OIQlrQxKnNokwgWA,139
6
+ changelog/253.misc.rst,sha256=Iozax0yAtER5ey6nm2I50b_TY0m4WUHTeRqk6Mss0dM,114
3
7
  dkist_processing_visp/__init__.py,sha256=LC8o31oTIro4F7IgwoWalX1W3KcPU27yJhlDUeGqcwA,351
4
8
  dkist_processing_visp/config.py,sha256=GMr0CreW4qavbueTtsH_Gx5P52v4yZd2PNKyPmxBKQE,478
5
9
  dkist_processing_visp/fonts/Lato-Regular.ttf,sha256=1jbkaDIx-THtoiLViOlE0IK_0726AvkovuRhwPGFslE,656568
@@ -7,9 +11,9 @@ dkist_processing_visp/models/__init__.py,sha256=z2nFVvvIzirxklQ9i5-F1nR-WOgcDttY
7
11
  dkist_processing_visp/models/constants.py,sha256=TP9ZefMdJxu-JWePICMZ6riC4bH1Mz4NJY0hAcWAPQ0,6749
8
12
  dkist_processing_visp/models/fits_access.py,sha256=8uKaUgtapyED-WgJCeswrIqEGy4Ob6ekBmiyBqF6yIE,573
9
13
  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
14
+ dkist_processing_visp/models/parameters.py,sha256=kiYzvXjsQo1EFEGHJUdeYj170tq_CeVqrrtD01E1fmQ,16967
15
+ dkist_processing_visp/models/tags.py,sha256=Pdc-E2wNlaqRzAJgQF_KHUe_xzqDrUfp1IB0mpgRNN4,3514
16
+ dkist_processing_visp/models/task_name.py,sha256=6iZ5j8_beOI8DMoEemxG3dra63a93q0vbjcypb_H9wE,281
13
17
  dkist_processing_visp/parsers/__init__.py,sha256=z2nFVvvIzirxklQ9i5-F1nR-WOgcDttYtog_jx4yN5I,12
14
18
  dkist_processing_visp/parsers/map_repeats.py,sha256=YuO1VROQLuE-Hn9hSzityjNhIDe-EgQ4kjZV6l9xF2Q,5468
15
19
  dkist_processing_visp/parsers/modulator_states.py,sha256=dHAZZaG3i_UUT5FjTg1oJdCBiOKCqkrx1jiQnzp2t2o,3006
@@ -23,25 +27,26 @@ dkist_processing_visp/tasks/__init__.py,sha256=qlPlahiM9_sCsaIj_wzQpzWkMITJ1dPdT
23
27
  dkist_processing_visp/tasks/assemble_movie.py,sha256=8UujniXlV_sSGeuISud8wMHihLy6Gc5fKZpwkXLUQB8,3330
24
28
  dkist_processing_visp/tasks/background_light.py,sha256=qQ3r1LR5qaOz2qNHnO5_QK8l1zbVP0GaCS3aLqJfNYY,16201
25
29
  dkist_processing_visp/tasks/dark.py,sha256=VVitrat08U7e5L1-NVnNNJI_KIx791_DvKEJokvCqXE,4334
26
- dkist_processing_visp/tasks/geometric.py,sha256=FL9LVnI9XvAQeDFXnD1nwj67ExosuZjBSW2M3CrlCB4,48893
30
+ dkist_processing_visp/tasks/geometric.py,sha256=n2Wiy7QovA8V0gkORnQ9LX8lgb-amqE-M_mKr1u4HNY,48934
27
31
  dkist_processing_visp/tasks/instrument_polarization.py,sha256=uj7iyzM3CiJcbQeF4eKpk_KCoheXaM4FpDI83GYDld4,25854
28
32
  dkist_processing_visp/tasks/l1_output_data.py,sha256=vl_c52noozeu4N-BbfpsIHFc5q6JATQ9r4iLa3MDtDI,8347
29
33
  dkist_processing_visp/tasks/lamp.py,sha256=HTBob-4Am1ps5ucmX8nSzxV3BqX2ytMcHZ5iyDrljq0,5132
30
34
  dkist_processing_visp/tasks/make_movie_frames.py,sha256=fw25ksKiJJNS57XV5a7rHpYGcSkYxS2Qf13Fb1UGNpE,7544
31
35
  dkist_processing_visp/tasks/parse.py,sha256=Fe_2svvMSKBup--Ulxbu0uaNW3dzPxQreafMEw0CY6E,7897
32
36
  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
37
+ dkist_processing_visp/tasks/science.py,sha256=fm-LLWxmLEjea0a8fhmN3x1v3n1Od4BJ3BioyjPuih8,38318
38
+ dkist_processing_visp/tasks/solar.py,sha256=-OnpKKkUG0EwYK8S4QsMD5UWU6cIHc837nEDc_3OLl4,41156
35
39
  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
40
+ dkist_processing_visp/tasks/wavelength_calibration.py,sha256=N-pYBRL6Iyb_Q8VrZBQXBWvVBty3LrdhyDVxgxk3n9g,17039
41
+ dkist_processing_visp/tasks/write_l1.py,sha256=UbugV6ilmeYdq-bC9WUiJxkFjn9VzJIkZXtoA7cs71k,8798
37
42
  dkist_processing_visp/tasks/mixin/__init__.py,sha256=z2nFVvvIzirxklQ9i5-F1nR-WOgcDttYtog_jx4yN5I,12
38
43
  dkist_processing_visp/tasks/mixin/beam_access.py,sha256=1VSJkH6yMxCiZWdWOp_RJ37fX5ULMYmB_0_ulT7YJpI,870
39
44
  dkist_processing_visp/tasks/mixin/corrections.py,sha256=FhLFgD9ZYLZd3SaC3PFF-szrcs-zmdrUYNDUEK-h7JA,7145
40
45
  dkist_processing_visp/tasks/mixin/downsample.py,sha256=SvKzY6HJRn-FeyG7O6HPvyOS5dmMu6uPoWkfnpPXpVw,1344
41
46
  dkist_processing_visp/tests/README.rst,sha256=rnedwwg25c0lB9Me7cT7QNZA17FYlqCu9ZnjQxR5hi0,12502
42
47
  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
48
+ dkist_processing_visp/tests/conftest.py,sha256=poJPxGK8RZlDYEoGkwaIyX08WDgf2aF566uJJbZsldk,19049
49
+ dkist_processing_visp/tests/header_models.py,sha256=gD1FUo5TtY_EMSnpWvkrJIOsckkgRAD-e1mthPCdiOw,21687
45
50
  dkist_processing_visp/tests/test_assemble_movie.py,sha256=T5EZzdB3sNY4HcSkN2W1ZBDaI4a68ZUNqPB-JpANSQ0,2247
46
51
  dkist_processing_visp/tests/test_assemble_quality.py,sha256=i2INzb73BM14A6VKD70eb5vaAv5_QjPy3VVVb4lonkc,4314
47
52
  dkist_processing_visp/tests/test_background_light.py,sha256=Zvm8s38qx_ybviEhnKqPI4s36VFBJKtsNrp31-o8lEQ,17553
@@ -53,32 +58,33 @@ dkist_processing_visp/tests/test_instrument_polarization.py,sha256=ZsYSyXUKfs0dv
53
58
  dkist_processing_visp/tests/test_lamp.py,sha256=19mRN8drAg0tqQGwSbSUDlpryqYjMvmfv1DCsttxuXk,5124
54
59
  dkist_processing_visp/tests/test_make_movie_frames.py,sha256=huQ5n0YneHByKumM_Ye9tekqKeh-F-e6MQoudOP3S-g,2628
55
60
  dkist_processing_visp/tests/test_map_repeats.py,sha256=9g3NnvSfn1OqxxYYxTFoOIi1UsCOa6mZjiuGkbxUvTg,7611
56
- dkist_processing_visp/tests/test_parameters.py,sha256=MBSddKsFmRC4zDZEgpA3y3_sRKriETiPEIhcVoSchTo,8053
61
+ dkist_processing_visp/tests/test_parameters.py,sha256=kIwOak4PURFc6yNT9R1rLxfb4x5FbqSlfi3FF-krrGo,8314
57
62
  dkist_processing_visp/tests/test_parse.py,sha256=XyH8oCk5C0CWl4ndNIyVjgXLoMg0679s4dj1MGlJs0c,23363
58
63
  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
64
+ dkist_processing_visp/tests/test_science.py,sha256=B8bbtVTxJIXiPssIbJchPLbzVTPCAzpLAgn5DhpYCn0,26106
65
+ dkist_processing_visp/tests/test_solar.py,sha256=xtw8cbunonOG_6dRJHF9GIiQ5Q-KTBCdo1FZWkiA7_c,16761
61
66
  dkist_processing_visp/tests/test_trial_create_quality_report.py,sha256=5LSvLiInp_ce_jObtBGNHQgVAkvJr9bYgY7IzIKrEuU,2799
62
67
  dkist_processing_visp/tests/test_visp_constants.py,sha256=y2x42Y-dK2lrCPufLAV1KHpu2fQ-FRpe8tSIhfHJEw8,3134
68
+ dkist_processing_visp/tests/test_wavelength_calibration.py,sha256=usOCDd4yjmigpCjc5enQn14JJKojm8laxVJVDtV5PuU,9550
63
69
  dkist_processing_visp/tests/test_workflows.py,sha256=qyWxagIDv-MmVN0u3KFswa5HdaHC6uGeJpvgxvPE30E,287
64
- dkist_processing_visp/tests/test_write_l1.py,sha256=ORNKUvF4RPjXc24HgOzyVsP0BCQ9izi54EqXpjLzHXQ,6574
70
+ dkist_processing_visp/tests/test_write_l1.py,sha256=ZrAWhfx_HZi7dOBRc5YowvkKtMS8TBE_iud_KPjFI8g,6572
65
71
  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
72
+ dkist_processing_visp/tests/local_trial_workflows/l0_cals_only.py,sha256=iqwT8QDA4dvGzBkhs-UXXzMTZtxsa794EOzl1vgGNXA,11559
73
+ dkist_processing_visp/tests/local_trial_workflows/l0_polcals_as_science.py,sha256=SJZp24OZvXnx-t0DNDkNWEvLInZKormWMilbDUOMcKg,18477
74
+ dkist_processing_visp/tests/local_trial_workflows/l0_solar_gain_as_science.py,sha256=bU2kz3n6RdDDAIDXVtiitnAwpLAL60kOuN4HGI6OP3k,16729
75
+ dkist_processing_visp/tests/local_trial_workflows/l0_to_l1.py,sha256=q_rS8PVm6pA5EjayBhj2SfGSRnpsd_jY2IlIfiVpPC4,16101
76
+ dkist_processing_visp/tests/local_trial_workflows/local_trial_helpers.py,sha256=R7NZNEv0VQwwZoBwPa6RYY94_VBnM4JQJ1AQdQaCrGQ,29078
71
77
  dkist_processing_visp/workflows/__init__.py,sha256=1-GP9tOzjCxLJtyq0ry_x4dPdArfSso8Hxu65ydPpXQ,103
72
- dkist_processing_visp/workflows/l0_processing.py,sha256=Af4pDYwuWqXGqapCsOwWhDKrjsu4Pdn4II0YYe_pUL4,3339
78
+ dkist_processing_visp/workflows/l0_processing.py,sha256=XW7tbQLlH06ecEZ3QAt982gK9T_y3eN2U9KtUUq1R_0,3529
73
79
  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
80
+ dkist_processing_visp/workflows/trial_workflows.py,sha256=IYdjVVZ6mCKGMQiy-_cqKLptHws3WzxrPZLjFccaZr0,4022
75
81
  docs/Makefile,sha256=qnlVz6PuBqE39NfHWuUnHhNEA-EFgT2-WJNNNy9ttfk,4598
76
82
  docs/background_light.rst,sha256=FWj8KH7H51BtoqPCJ1A_VIWJkjaXD8-dwM9RdY1rkIc,5147
77
83
  docs/changelog.rst,sha256=ZpZPJIyl4nI0Eicku6uSrLdiinNOF2GcZwrvTEsb-Zs,346
78
84
  docs/conf.py,sha256=qgWzWK98wj5QHHnNW52fzjCyfibFM_g1DkjB8m2WMAk,2151
79
- docs/gain_correction.rst,sha256=rQA51C2ZwUAk1lwCbSUpjs1SjhE2HpT-ik1C5UO9XrU,7148
85
+ docs/gain_correction.rst,sha256=zC2nnSoch5sdAF3C16eQ8BgUi2J6d_dt7JBRLKfst-w,7176
80
86
  docs/geometric.rst,sha256=VsAWefgJ1j64Uo1TQ-ltAQ6INgsdS7-_FSvOtm0i17s,7301
81
- docs/index.rst,sha256=pl8VhwISd-kb1IQi2h7gOySfOhQQl2C71pjTatShGNI,319
87
+ docs/index.rst,sha256=At3fL3E9lLaoY7wBGtEJra5HTUYCAo6wcdzQJBzmTNs,346
82
88
  docs/l0_to_l1_visp.rst,sha256=wE1TT7DD93r3kByaFAaT2HO907pjV4YrJ_fzvJFTchw,623
83
89
  docs/l0_to_l1_visp_full-trial.rst,sha256=Y6YLkRA5b0tgui5l_WdthCx2wrXjLD8U97XKZHXVVBk,558
84
90
  docs/landing_page.rst,sha256=tdxWtmGjO7OUPYvRjgBAI461nubEE61HrtBwPdBeawI,1052
@@ -88,8 +94,9 @@ docs/requirements.txt,sha256=Kbl_X4c7RQZw035YTeNB63We6I7pvXFU4T0Uflp2yDY,29
88
94
  docs/requirements_table.rst,sha256=_HIbwFpDooM5n0JjiDAbFozGfJuX13smtcoujLFN4Gk,292
89
95
  docs/science_calibration.rst,sha256=VN_g7xSjN-nbXhlBaFnPCbNcsc_Qu0207jEUfRAjnBE,2939
90
96
  docs/scientific_changelog.rst,sha256=01AWBSHg8zElnodCgAq-hMxhk9CkX5rtEENx4iz0sjI,300
97
+ docs/wavelength_calibration.rst,sha256=OSGYAeR8Acns2ZUectHzRj2xcAsuNEMLejcYfPYu-vw,3674
91
98
  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,,
99
+ dkist_processing_visp-5.2.0rc1.dist-info/METADATA,sha256=-y76Qbu7VZMF58aOpfdlAY-86o0lWeqmiyITzrgYctg,29976
100
+ dkist_processing_visp-5.2.0rc1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
101
+ dkist_processing_visp-5.2.0rc1.dist-info/top_level.txt,sha256=9GHSn-ZMGQxaRNGrPP3HNc5ZkE7ftzluO74Jz5vUSTE,46
102
+ dkist_processing_visp-5.2.0rc1.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