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.
- dkist_processing_visp/models/parameters.py +43 -1
- dkist_processing_visp/models/tags.py +11 -0
- dkist_processing_visp/models/task_name.py +2 -0
- dkist_processing_visp/tasks/geometric.py +1 -1
- dkist_processing_visp/tasks/science.py +88 -11
- dkist_processing_visp/tasks/solar.py +12 -205
- dkist_processing_visp/tasks/wavelength_calibration.py +430 -0
- dkist_processing_visp/tasks/write_l1.py +2 -0
- dkist_processing_visp/tests/conftest.py +11 -0
- dkist_processing_visp/tests/header_models.py +22 -6
- dkist_processing_visp/tests/local_trial_workflows/l0_cals_only.py +21 -0
- dkist_processing_visp/tests/local_trial_workflows/l0_polcals_as_science.py +21 -0
- dkist_processing_visp/tests/local_trial_workflows/l0_solar_gain_as_science.py +20 -0
- dkist_processing_visp/tests/local_trial_workflows/l0_to_l1.py +21 -0
- dkist_processing_visp/tests/local_trial_workflows/local_trial_helpers.py +27 -0
- dkist_processing_visp/tests/test_parameters.py +11 -5
- dkist_processing_visp/tests/test_science.py +60 -5
- dkist_processing_visp/tests/test_solar.py +0 -1
- dkist_processing_visp/tests/test_wavelength_calibration.py +297 -0
- dkist_processing_visp/tests/test_write_l1.py +0 -2
- dkist_processing_visp/workflows/l0_processing.py +4 -1
- dkist_processing_visp/workflows/trial_workflows.py +4 -1
- {dkist_processing_visp-5.1.2rc2.dist-info → dkist_processing_visp-5.2.0.dist-info}/METADATA +34 -34
- {dkist_processing_visp-5.1.2rc2.dist-info → dkist_processing_visp-5.2.0.dist-info}/RECORD +29 -27
- docs/gain_correction.rst +3 -0
- docs/index.rst +1 -0
- docs/wavelength_calibration.rst +64 -0
- changelog/251.feature.rst +0 -1
- {dkist_processing_visp-5.1.2rc2.dist-info → dkist_processing_visp-5.2.0.dist-info}/WHEEL +0 -0
- {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()))
|
|
@@ -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,
|
|
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,
|
|
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.
|
|
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.
|
|
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.
|
|
129
|
-
Requires-Dist: botocore==1.42.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
214
|
-
Requires-Dist: opentelemetry-exporter-otlp==1.39.
|
|
215
|
-
Requires-Dist: opentelemetry-exporter-otlp-proto-common==1.39.
|
|
216
|
-
Requires-Dist: opentelemetry-exporter-otlp-proto-grpc==1.39.
|
|
217
|
-
Requires-Dist: opentelemetry-exporter-otlp-proto-http==1.39.
|
|
218
|
-
Requires-Dist: opentelemetry-instrumentation==0.
|
|
219
|
-
Requires-Dist: opentelemetry-instrumentation-aiohttp-client==0.
|
|
220
|
-
Requires-Dist: opentelemetry-instrumentation-asgi==0.
|
|
221
|
-
Requires-Dist: opentelemetry-instrumentation-botocore==0.
|
|
222
|
-
Requires-Dist: opentelemetry-instrumentation-celery==0.
|
|
223
|
-
Requires-Dist: opentelemetry-instrumentation-dbapi==0.
|
|
224
|
-
Requires-Dist: opentelemetry-instrumentation-fastapi==0.
|
|
225
|
-
Requires-Dist: opentelemetry-instrumentation-pika==0.
|
|
226
|
-
Requires-Dist: opentelemetry-instrumentation-psycopg2==0.
|
|
227
|
-
Requires-Dist: opentelemetry-instrumentation-pymongo==0.
|
|
228
|
-
Requires-Dist: opentelemetry-instrumentation-redis==0.
|
|
229
|
-
Requires-Dist: opentelemetry-instrumentation-requests==0.
|
|
230
|
-
Requires-Dist: opentelemetry-instrumentation-sqlalchemy==0.
|
|
231
|
-
Requires-Dist: opentelemetry-instrumentation-system-metrics==0.
|
|
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.
|
|
234
|
-
Requires-Dist: opentelemetry-sdk==1.39.
|
|
235
|
-
Requires-Dist: opentelemetry-semantic-conventions==0.
|
|
236
|
-
Requires-Dist: opentelemetry-util-http==0.
|
|
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.
|
|
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.
|
|
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=
|
|
11
|
-
dkist_processing_visp/models/tags.py,sha256=
|
|
12
|
-
dkist_processing_visp/models/task_name.py,sha256=
|
|
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=
|
|
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=
|
|
34
|
-
dkist_processing_visp/tasks/solar.py,sha256
|
|
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/
|
|
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=
|
|
44
|
-
dkist_processing_visp/tests/header_models.py,sha256=
|
|
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=
|
|
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=
|
|
60
|
-
dkist_processing_visp/tests/test_solar.py,sha256=
|
|
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=
|
|
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=
|
|
67
|
-
dkist_processing_visp/tests/local_trial_workflows/l0_polcals_as_science.py,sha256=
|
|
68
|
-
dkist_processing_visp/tests/local_trial_workflows/l0_solar_gain_as_science.py,sha256=
|
|
69
|
-
dkist_processing_visp/tests/local_trial_workflows/l0_to_l1.py,sha256=
|
|
70
|
-
dkist_processing_visp/tests/local_trial_workflows/local_trial_helpers.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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.
|
|
93
|
-
dkist_processing_visp-5.
|
|
94
|
-
dkist_processing_visp-5.
|
|
95
|
-
dkist_processing_visp-5.
|
|
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
|
|