dkist-processing-visp 5.0.0rc2__py3-none-any.whl → 5.1.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 +37 -1
- dkist_processing_visp/tasks/geometric.py +6 -1
- dkist_processing_visp/tasks/solar.py +63 -12
- dkist_processing_visp/tests/conftest.py +3 -0
- dkist_processing_visp/tests/test_parameters.py +50 -1
- dkist_processing_visp/tests/test_solar.py +13 -7
- dkist_processing_visp/workflows/l0_processing.py +7 -2
- dkist_processing_visp/workflows/trial_workflows.py +7 -2
- {dkist_processing_visp-5.0.0rc2.dist-info → dkist_processing_visp-5.1.0.dist-info}/METADATA +63 -62
- {dkist_processing_visp-5.0.0rc2.dist-info → dkist_processing_visp-5.1.0.dist-info}/RECORD +12 -22
- changelog/246.doc.2.rst +0 -2
- changelog/246.doc.rst +0 -2
- changelog/246.feature.2.rst +0 -1
- changelog/246.feature.3.rst +0 -1
- changelog/246.feature.4.rst +0 -1
- changelog/246.feature.rst +0 -4
- changelog/246.misc.2.rst +0 -1
- changelog/246.misc.3.rst +0 -1
- changelog/246.misc.rst +0 -2
- changelog/246.science.rst +0 -11
- {dkist_processing_visp-5.0.0rc2.dist-info → dkist_processing_visp-5.1.0.dist-info}/WHEEL +0 -0
- {dkist_processing_visp-5.0.0rc2.dist-info → dkist_processing_visp-5.1.0.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"""Visp calibration pipeline parameters."""
|
|
2
2
|
|
|
3
3
|
from datetime import datetime
|
|
4
|
+
from random import randint
|
|
4
5
|
from typing import Any
|
|
5
6
|
|
|
6
7
|
import astropy.units as u
|
|
@@ -186,10 +187,38 @@ class VispParameters(ParameterBase, ParameterWavelengthMixin, ParameterArmIdMixi
|
|
|
186
187
|
"visp_solar_vignette_initial_continuum_poly_fit_order"
|
|
187
188
|
)
|
|
188
189
|
|
|
190
|
+
@property
|
|
191
|
+
def solar_vignette_crval_bounds_px(self) -> float:
|
|
192
|
+
"""
|
|
193
|
+
Define the bounds (in *pixels*) on crval when fitting the initial vignette signal.
|
|
194
|
+
|
|
195
|
+
The actual bounds on the value of crval are equal to ± the initial dispersion times this number. Note that the
|
|
196
|
+
total range searched by the fitting algorithm will be twice this number (in pixels).
|
|
197
|
+
"""
|
|
198
|
+
return self._find_most_recent_past_value("visp_solar_vignette_crval_bounds_px") * u.pix
|
|
199
|
+
|
|
200
|
+
@property
|
|
201
|
+
def solar_vignette_dispersion_bounds_fraction(self) -> float:
|
|
202
|
+
"""
|
|
203
|
+
Define the ± fraction away from the initial value for bounds on dispersion when fitting the initial vignette signal.
|
|
204
|
+
|
|
205
|
+
This value should be between 0 and 1. For example, the minimum bound is `init_value * (1 - solar_vignette_dispersion_bounds_fraction)`.
|
|
206
|
+
"""
|
|
207
|
+
return self._find_most_recent_past_value("visp_solar_vignette_dispersion_bounds_fraction")
|
|
208
|
+
|
|
189
209
|
@property
|
|
190
210
|
def solar_vignette_wavecal_fit_kwargs(self) -> dict[str, Any]:
|
|
191
211
|
"""Define extra keyword arguments to pass to the wavelength calibration fitter."""
|
|
192
|
-
|
|
212
|
+
doc_dict = self._find_most_recent_past_value("visp_solar_vignette_wavecal_fit_kwargs")
|
|
213
|
+
rng_kwarg = dict()
|
|
214
|
+
fitting_method = doc_dict.get("method", False)
|
|
215
|
+
if fitting_method in ["basinhopping", "differential_evolution", "dual_annealing"]:
|
|
216
|
+
rng = randint(1, 1_000_000)
|
|
217
|
+
rng_kwarg["rng"] = rng
|
|
218
|
+
|
|
219
|
+
# The order here allows us to override `rng` in a parameter value
|
|
220
|
+
fit_kwargs = rng_kwarg | doc_dict
|
|
221
|
+
return fit_kwargs
|
|
193
222
|
|
|
194
223
|
@property
|
|
195
224
|
def solar_vignette_spectral_poly_fit_order(self) -> int:
|
|
@@ -228,6 +257,13 @@ class VispParameters(ParameterBase, ParameterWavelengthMixin, ParameterArmIdMixi
|
|
|
228
257
|
config_dict = self._find_most_recent_past_value("visp_wavecal_atlas_download_config")
|
|
229
258
|
return DownloadConfig.model_validate(config_dict)
|
|
230
259
|
|
|
260
|
+
@property
|
|
261
|
+
def wavecal_init_crval_guess_normalization_percentile(self) -> float | None:
|
|
262
|
+
"""Define the CDF percentage used to normalize the Atlas to the input spectrum level when computing an initial CRVAL guess."""
|
|
263
|
+
return self._find_most_recent_past_value(
|
|
264
|
+
"visp_wavecal_init_crval_guess_normalization_percentile"
|
|
265
|
+
)
|
|
266
|
+
|
|
231
267
|
@property
|
|
232
268
|
def wavecal_init_resolving_power(self) -> int:
|
|
233
269
|
"""Define the initial guess for ViSP resolving power in wavecal fits."""
|
|
@@ -274,7 +274,12 @@ class GeometricCalibration(
|
|
|
274
274
|
self.prep_input_solar_gain()
|
|
275
275
|
|
|
276
276
|
def prep_lamp_gain(self):
|
|
277
|
-
"""
|
|
277
|
+
"""
|
|
278
|
+
Create average, dark-corrected lamp gain images for each modstate from INPUT lamp gains.
|
|
279
|
+
|
|
280
|
+
This is different from the results of the `~dkist_processing_visp.tasks.lamp.LampCalibration` task because in
|
|
281
|
+
that task the hairlines are masked out, but here we *need* the hairlines to compute the rotation angle.
|
|
282
|
+
"""
|
|
278
283
|
for readout_exp_time in self.constants.lamp_readout_exp_times:
|
|
279
284
|
for beam in range(1, self.constants.num_beams + 1):
|
|
280
285
|
logger.info(
|
|
@@ -70,6 +70,7 @@ class WavelengthCalibrationParametersWithContinuum(WavelengthCalibrationParamete
|
|
|
70
70
|
|
|
71
71
|
continuum_poly_fit_order: int
|
|
72
72
|
normalized_abscissa: np.ndarray
|
|
73
|
+
zeroth_order_continuum_coefficient: float
|
|
73
74
|
|
|
74
75
|
@property
|
|
75
76
|
def continuum_function(self) -> Callable[[np.ndarray, Parameters], np.ndarray]:
|
|
@@ -93,16 +94,26 @@ class WavelengthCalibrationParametersWithContinuum(WavelengthCalibrationParamete
|
|
|
93
94
|
# dynamically create the required number of "poly_coeff_{o:02n}" fields. Sorry if this bites you!
|
|
94
95
|
params = super().lmfit_parameters
|
|
95
96
|
for o in range(self.continuum_poly_fit_order + 1):
|
|
97
|
+
# `np.polyval` uses its input coefficient list "backwards", so `poly_coeff_{self.continuum_poly_fit_order}`
|
|
98
|
+
# is the 0th order polynomial term.
|
|
96
99
|
params.add(
|
|
97
100
|
f"poly_coeff_{o:02n}",
|
|
98
101
|
vary=True,
|
|
99
|
-
value=
|
|
102
|
+
value=(
|
|
103
|
+
self.zeroth_order_continuum_coefficient
|
|
104
|
+
if o == self.continuum_poly_fit_order
|
|
105
|
+
else 0
|
|
106
|
+
),
|
|
100
107
|
min=-1,
|
|
101
108
|
max=1,
|
|
102
109
|
)
|
|
103
110
|
|
|
104
|
-
params[f"poly_coeff_{self.continuum_poly_fit_order:02n}"].min =
|
|
105
|
-
|
|
111
|
+
params[f"poly_coeff_{self.continuum_poly_fit_order:02n}"].min = (
|
|
112
|
+
self.zeroth_order_continuum_coefficient * 0.5
|
|
113
|
+
)
|
|
114
|
+
params[f"poly_coeff_{self.continuum_poly_fit_order:02n}"].max = (
|
|
115
|
+
self.zeroth_order_continuum_coefficient * 1.5
|
|
116
|
+
)
|
|
106
117
|
|
|
107
118
|
# Remove the default continuum parameterization
|
|
108
119
|
del params["continuum_level"]
|
|
@@ -551,9 +562,11 @@ class SolarCalibration(
|
|
|
551
562
|
|
|
552
563
|
fitter = WavelengthCalibrationFitter(input_parameters=init_parameters, atlas=atlas)
|
|
553
564
|
with self.telemetry_span("Fit atlas and continuum"):
|
|
565
|
+
extra_kwargs = self.parameters.solar_vignette_wavecal_fit_kwargs
|
|
566
|
+
logger.info(f"Calling fitter with extra kwargs: {extra_kwargs}")
|
|
554
567
|
fit_result = fitter(
|
|
555
568
|
input_spectrum=representative_spectrum,
|
|
556
|
-
**
|
|
569
|
+
**extra_kwargs,
|
|
557
570
|
)
|
|
558
571
|
|
|
559
572
|
return fit_result
|
|
@@ -610,6 +623,7 @@ class SolarCalibration(
|
|
|
610
623
|
negative_limit=-wavelength_range / 2,
|
|
611
624
|
positive_limit=wavelength_range / 2,
|
|
612
625
|
num_steps=500,
|
|
626
|
+
normalization_percentile=self.parameters.wavecal_init_crval_guess_normalization_percentile,
|
|
613
627
|
)
|
|
614
628
|
|
|
615
629
|
logger.info(f"{crval_init = !s}")
|
|
@@ -627,18 +641,22 @@ class SolarCalibration(
|
|
|
627
641
|
resolving_power = self.parameters.wavecal_init_resolving_power
|
|
628
642
|
opacity_factor = self.parameters.wavecal_init_opacity_factor
|
|
629
643
|
straylight_faction = self.parameters.wavecal_init_straylight_fraction
|
|
644
|
+
relative_atlas_scaling = self.estimate_relative_continuum_level(
|
|
645
|
+
crval_init=crval_init,
|
|
646
|
+
wavelength_range=wavelength_range,
|
|
647
|
+
atlas=atlas,
|
|
648
|
+
representative_spectrum=representative_spectrum,
|
|
649
|
+
)
|
|
650
|
+
logger.info(f"0th order coefficient initial guess: {relative_atlas_scaling}")
|
|
630
651
|
|
|
631
|
-
|
|
632
|
-
# them parameters.
|
|
633
|
-
wavelength_search_width = wavelength_range * 0.15
|
|
652
|
+
wavelength_search_width = dispersion * self.parameters.solar_vignette_crval_bounds_px
|
|
634
653
|
bounds = BoundsModel(
|
|
635
|
-
# An alternative for the crval bounds would be `[input_wavelength_vector.min(), input_wavelength_vector.max()]`
|
|
636
654
|
crval=LengthBoundRange(
|
|
637
655
|
min=crval_init - wavelength_search_width, max=crval_init + wavelength_search_width
|
|
638
656
|
),
|
|
639
657
|
dispersion=DispersionBoundRange(
|
|
640
|
-
min=dispersion *
|
|
641
|
-
max=dispersion * 1.
|
|
658
|
+
min=dispersion * (1 - self.parameters.solar_vignette_dispersion_bounds_fraction),
|
|
659
|
+
max=dispersion * (1 + self.parameters.solar_vignette_dispersion_bounds_fraction),
|
|
642
660
|
),
|
|
643
661
|
incident_light_angle=AngleBoundRange(
|
|
644
662
|
min=incident_light_angle - 1 * u.deg, max=incident_light_angle + 1 * u.deg
|
|
@@ -646,7 +664,6 @@ class SolarCalibration(
|
|
|
646
664
|
resolving_power=UnitlessBoundRange(min=1e5, max=5e5),
|
|
647
665
|
opacity_factor=UnitlessBoundRange(min=1.0, max=10),
|
|
648
666
|
straylight_fraction=UnitlessBoundRange(min=0.0, max=0.8),
|
|
649
|
-
continuum_level=UnitlessBoundRange(min=0.99, max=1.1),
|
|
650
667
|
)
|
|
651
668
|
|
|
652
669
|
init_params = WavelengthCalibrationParametersWithContinuum(
|
|
@@ -656,7 +673,7 @@ class SolarCalibration(
|
|
|
656
673
|
grating_constant=grating_constant,
|
|
657
674
|
doppler_velocity=doppler_velocity,
|
|
658
675
|
order=spectral_order,
|
|
659
|
-
continuum_level=1
|
|
676
|
+
continuum_level=1,
|
|
660
677
|
resolving_power=resolving_power,
|
|
661
678
|
opacity_factor=opacity_factor,
|
|
662
679
|
straylight_fraction=straylight_faction,
|
|
@@ -664,10 +681,44 @@ class SolarCalibration(
|
|
|
664
681
|
bounds=bounds,
|
|
665
682
|
continuum_poly_fit_order=self.parameters.solar_vignette_initial_continuum_poly_fit_order,
|
|
666
683
|
normalized_abscissa=normalized_abscissa,
|
|
684
|
+
zeroth_order_continuum_coefficient=relative_atlas_scaling,
|
|
667
685
|
)
|
|
668
686
|
|
|
669
687
|
return init_params
|
|
670
688
|
|
|
689
|
+
def estimate_relative_continuum_level(
|
|
690
|
+
self,
|
|
691
|
+
*,
|
|
692
|
+
crval_init: Quantity,
|
|
693
|
+
wavelength_range: Quantity,
|
|
694
|
+
atlas: Atlas,
|
|
695
|
+
representative_spectrum: np.ndarray,
|
|
696
|
+
) -> float:
|
|
697
|
+
"""
|
|
698
|
+
Estimate the multiplicative scaling between the representative spectrum and atlas solar transmission.
|
|
699
|
+
|
|
700
|
+
This scaling is used to set the initial guess of 0th-order polynomial fit coefficient. We estimate the scaling
|
|
701
|
+
factor by comparing the values of the two spectra at a given percent of the CDF. This percent is taken from
|
|
702
|
+
the `~dkist_processing_visp.models.parameters.VispParameters.wavecal_init_crval_guess_normalization_percentile`
|
|
703
|
+
pipeline parameter.
|
|
704
|
+
"""
|
|
705
|
+
wave_min = crval_init - wavelength_range / 2
|
|
706
|
+
wave_max = crval_init + wavelength_range / 2
|
|
707
|
+
|
|
708
|
+
atlas_idx = np.where(
|
|
709
|
+
(atlas.solar_atlas_wavelength >= wave_min) & (atlas.solar_atlas_wavelength <= wave_max)
|
|
710
|
+
)
|
|
711
|
+
atlas_norm = np.nanpercentile(
|
|
712
|
+
atlas.solar_atlas_transmission[atlas_idx],
|
|
713
|
+
self.parameters.wavecal_init_crval_guess_normalization_percentile,
|
|
714
|
+
)
|
|
715
|
+
spec_norm = np.nanpercentile(
|
|
716
|
+
representative_spectrum,
|
|
717
|
+
self.parameters.wavecal_init_crval_guess_normalization_percentile,
|
|
718
|
+
)
|
|
719
|
+
|
|
720
|
+
return spec_norm / atlas_norm
|
|
721
|
+
|
|
671
722
|
def compute_final_vignette_estimate(self, init_vignette_correction: np.ndarray) -> np.ndarray:
|
|
672
723
|
"""
|
|
673
724
|
Fit the spectral shape of continuum residuals for each spatial pixel.
|
|
@@ -149,6 +149,8 @@ class VispInputDatasetParameterValues:
|
|
|
149
149
|
)
|
|
150
150
|
visp_solar_characteristic_spatial_normalization_percentile: float = 90.0
|
|
151
151
|
visp_solar_vignette_initial_continuum_poly_fit_order: int = 6
|
|
152
|
+
visp_solar_vignette_crval_bounds_px: float = 7
|
|
153
|
+
visp_solar_vignette_dispersion_bounds_fraction: float = 0.02
|
|
152
154
|
visp_solar_vignette_wavecal_fit_kwargs: dict[str, Any] = field(
|
|
153
155
|
default_factory=lambda: {
|
|
154
156
|
"method": "differential_evolution",
|
|
@@ -184,6 +186,7 @@ class VispInputDatasetParameterValues:
|
|
|
184
186
|
"solar_reference_atlas_hash_id": "md5:84ab4c50689ef235fe5ed4f7ee905ca0",
|
|
185
187
|
}
|
|
186
188
|
)
|
|
189
|
+
visp_wavecal_init_crval_guess_normalization_percentile: float = 95
|
|
187
190
|
visp_wavecal_init_resolving_power: int = 150000
|
|
188
191
|
visp_wavecal_init_straylight_fraction: float = 0.2
|
|
189
192
|
visp_wavecal_init_opacity_factor: float = 5.0
|
|
@@ -34,6 +34,7 @@ def arm_parameter_names() -> list[str]:
|
|
|
34
34
|
@pytest.fixture(scope="session")
|
|
35
35
|
def unit_parameter_names_and_units() -> dict[str, u.Unit | list[u.Unit]]:
|
|
36
36
|
return {
|
|
37
|
+
"solar_vignette_crval_bounds_px": u.pix,
|
|
37
38
|
"wavecal_camera_lens_parameters": [u.m, u.m / u.nm, u.m / u.nm**2],
|
|
38
39
|
"wavecal_pixel_pitch_micron_per_pix": u.um / u.pix,
|
|
39
40
|
}
|
|
@@ -102,7 +103,11 @@ def test_non_wave_parameters(
|
|
|
102
103
|
pn = f"{pn}_{arm_id}"
|
|
103
104
|
pv = expected[pn]
|
|
104
105
|
is_wavelength_param = isinstance(pv, dict) and "wavelength" in pv
|
|
105
|
-
if
|
|
106
|
+
if (
|
|
107
|
+
parameter_name not in parse_parameter_names
|
|
108
|
+
and not is_wavelength_param
|
|
109
|
+
and parameter_name != "solar_vignette_wavecal_fit_kwargs"
|
|
110
|
+
):
|
|
106
111
|
param_obj_value = getattr(task_param_attr, parameter_name)
|
|
107
112
|
if isinstance(pv, tuple):
|
|
108
113
|
pv = list(pv)
|
|
@@ -170,3 +175,47 @@ def test_wave_parameters(
|
|
|
170
175
|
is_wavelength_param = isinstance(pv, dict) and "wavelength" in pv
|
|
171
176
|
if is_wavelength_param and property_name not in parse_parameter_names + arm_parameter_names:
|
|
172
177
|
assert getattr(task_param_attr, property_name) == pv["values"][idx]
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
class AnyInt:
|
|
181
|
+
pass
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
@pytest.mark.parametrize("arm_id", [pytest.param("1")])
|
|
185
|
+
@pytest.mark.parametrize(
|
|
186
|
+
"db_value, expected",
|
|
187
|
+
[
|
|
188
|
+
pytest.param({"method": "nelder"}, {"method": "nelder"}, id="non_rng_method"),
|
|
189
|
+
pytest.param(
|
|
190
|
+
{"method": "basinhopping"}, {"method": "basinhopping", "rng": AnyInt}, id="random_rng"
|
|
191
|
+
),
|
|
192
|
+
pytest.param(
|
|
193
|
+
{"method": "differential_evolution", "rng": 6.28},
|
|
194
|
+
{"method": "differential_evolution", "rng": 6.28},
|
|
195
|
+
id="override_rng",
|
|
196
|
+
),
|
|
197
|
+
pytest.param(dict(), dict(), id="no_kwargs"),
|
|
198
|
+
],
|
|
199
|
+
)
|
|
200
|
+
def test_fit_kwarg_parameters(
|
|
201
|
+
basic_science_task_with_parameter_mixin,
|
|
202
|
+
db_value,
|
|
203
|
+
expected,
|
|
204
|
+
):
|
|
205
|
+
"""
|
|
206
|
+
Given: A Science task with the parameter mixin
|
|
207
|
+
When: Accessing properties for parameters that do not depend on wavelength
|
|
208
|
+
Then: The correct value is returned
|
|
209
|
+
"""
|
|
210
|
+
task, _ = next(
|
|
211
|
+
basic_science_task_with_parameter_mixin(
|
|
212
|
+
VispInputDatasetParameterValues(visp_solar_vignette_wavecal_fit_kwargs=db_value)
|
|
213
|
+
)
|
|
214
|
+
)
|
|
215
|
+
kwarg_dict = task.parameters.solar_vignette_wavecal_fit_kwargs
|
|
216
|
+
assert kwarg_dict.keys() == expected.keys()
|
|
217
|
+
for k in expected.keys():
|
|
218
|
+
if expected[k] is AnyInt:
|
|
219
|
+
assert type(kwarg_dict[k]) is int
|
|
220
|
+
else:
|
|
221
|
+
assert expected[k] == kwarg_dict[k]
|
|
@@ -311,7 +311,10 @@ def solar_gain_task(
|
|
|
311
311
|
|
|
312
312
|
@pytest.mark.parametrize(
|
|
313
313
|
"background_on",
|
|
314
|
-
[
|
|
314
|
+
[
|
|
315
|
+
pytest.param(True, id="background_on"),
|
|
316
|
+
pytest.param(False, id="background_off"),
|
|
317
|
+
],
|
|
315
318
|
)
|
|
316
319
|
def test_solar_gain_task(
|
|
317
320
|
solar_gain_task,
|
|
@@ -447,8 +450,10 @@ def test_continuum_wavecal_parameters():
|
|
|
447
450
|
Then: The polynomial coefficients are present
|
|
448
451
|
"""
|
|
449
452
|
order = 3
|
|
453
|
+
zeroth_order = 6.28
|
|
450
454
|
param_object = WavelengthCalibrationParametersWithContinuum(
|
|
451
455
|
continuum_poly_fit_order=order,
|
|
456
|
+
zeroth_order_continuum_coefficient=zeroth_order,
|
|
452
457
|
crval=400 * u.nm,
|
|
453
458
|
dispersion=3 * u.nm / u.pix,
|
|
454
459
|
incident_light_angle=4 * u.deg,
|
|
@@ -456,6 +461,7 @@ def test_continuum_wavecal_parameters():
|
|
|
456
461
|
doppler_velocity=0 * u.km / u.s,
|
|
457
462
|
order=1,
|
|
458
463
|
normalized_abscissa=np.arange(10),
|
|
464
|
+
continuum_level=99999.9,
|
|
459
465
|
)
|
|
460
466
|
lmfit_params = param_object.lmfit_parameters
|
|
461
467
|
|
|
@@ -464,13 +470,13 @@ def test_continuum_wavecal_parameters():
|
|
|
464
470
|
assert "poly_coeff_01" in lmfit_params
|
|
465
471
|
assert "poly_coeff_00" in lmfit_params
|
|
466
472
|
|
|
467
|
-
assert lmfit_params["poly_coeff_03"].
|
|
468
|
-
assert lmfit_params["poly_coeff_02"].
|
|
469
|
-
assert lmfit_params["poly_coeff_01"].
|
|
470
|
-
assert lmfit_params["poly_coeff_00"].
|
|
473
|
+
assert lmfit_params["poly_coeff_03"].init_value == zeroth_order
|
|
474
|
+
assert lmfit_params["poly_coeff_02"].init_value == 0
|
|
475
|
+
assert lmfit_params["poly_coeff_01"].init_value == 0
|
|
476
|
+
assert lmfit_params["poly_coeff_00"].init_value == 0
|
|
471
477
|
|
|
472
|
-
assert lmfit_params["poly_coeff_03"].min == 0.
|
|
473
|
-
assert lmfit_params["poly_coeff_03"].max == 1.
|
|
478
|
+
assert lmfit_params["poly_coeff_03"].min == zeroth_order * 0.5
|
|
479
|
+
assert lmfit_params["poly_coeff_03"].max == zeroth_order * 1.5
|
|
474
480
|
assert lmfit_params["poly_coeff_02"].min == -1
|
|
475
481
|
assert lmfit_params["poly_coeff_02"].max == 1
|
|
476
482
|
assert lmfit_params["poly_coeff_01"].min == -1
|
|
@@ -41,8 +41,13 @@ l0_pipeline.add_node(
|
|
|
41
41
|
task=SolarCalibration,
|
|
42
42
|
upstreams=[LampCalibration, GeometricCalibration, BackgroundLightCalibration],
|
|
43
43
|
)
|
|
44
|
-
l0_pipeline.add_node(
|
|
45
|
-
|
|
44
|
+
l0_pipeline.add_node(
|
|
45
|
+
task=InstrumentPolarizationCalibration,
|
|
46
|
+
upstreams=[BackgroundLightCalibration, GeometricCalibration],
|
|
47
|
+
)
|
|
48
|
+
l0_pipeline.add_node(
|
|
49
|
+
task=ScienceCalibration, upstreams=[SolarCalibration, InstrumentPolarizationCalibration]
|
|
50
|
+
)
|
|
46
51
|
l0_pipeline.add_node(task=VispWriteL1Frame, upstreams=ScienceCalibration)
|
|
47
52
|
|
|
48
53
|
# Movie flow
|
|
@@ -43,8 +43,13 @@ full_trial_pipeline.add_node(
|
|
|
43
43
|
task=SolarCalibration,
|
|
44
44
|
upstreams=[LampCalibration, GeometricCalibration, BackgroundLightCalibration],
|
|
45
45
|
)
|
|
46
|
-
full_trial_pipeline.add_node(
|
|
47
|
-
|
|
46
|
+
full_trial_pipeline.add_node(
|
|
47
|
+
task=InstrumentPolarizationCalibration,
|
|
48
|
+
upstreams=[BackgroundLightCalibration, GeometricCalibration],
|
|
49
|
+
)
|
|
50
|
+
full_trial_pipeline.add_node(
|
|
51
|
+
task=ScienceCalibration, upstreams=[SolarCalibration, InstrumentPolarizationCalibration]
|
|
52
|
+
)
|
|
48
53
|
full_trial_pipeline.add_node(task=VispWriteL1Frame, upstreams=ScienceCalibration)
|
|
49
54
|
|
|
50
55
|
# Movie flow
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dkist-processing-visp
|
|
3
|
-
Version: 5.0
|
|
3
|
+
Version: 5.1.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,14 +13,14 @@ 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.8.
|
|
16
|
+
Requires-Dist: dkist-processing-common==11.8.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
|
|
20
20
|
Requires-Dist: dkist-fits-specifications==4.17.0
|
|
21
21
|
Requires-Dist: dkist-service-configuration==4.1.7
|
|
22
22
|
Requires-Dist: dkist-spectral-lines==3.0.0
|
|
23
|
-
Requires-Dist: solar-wavelength-calibration==2.0.
|
|
23
|
+
Requires-Dist: solar-wavelength-calibration==2.0.0
|
|
24
24
|
Requires-Dist: astropy==7.0.2
|
|
25
25
|
Requires-Dist: numpy==2.2.5
|
|
26
26
|
Requires-Dist: sunpy==6.1.1
|
|
@@ -95,44 +95,44 @@ Requires-Dist: aiohappyeyeballs==2.6.1; extra == "frozen"
|
|
|
95
95
|
Requires-Dist: aiohttp==3.13.2; extra == "frozen"
|
|
96
96
|
Requires-Dist: aiosignal==1.4.0; extra == "frozen"
|
|
97
97
|
Requires-Dist: aiosmtplib==5.0.0; extra == "frozen"
|
|
98
|
-
Requires-Dist: alembic==1.17.
|
|
98
|
+
Requires-Dist: alembic==1.17.2; extra == "frozen"
|
|
99
99
|
Requires-Dist: amqp==5.3.1; extra == "frozen"
|
|
100
100
|
Requires-Dist: annotated-types==0.7.0; extra == "frozen"
|
|
101
|
-
Requires-Dist: anyio==4.
|
|
101
|
+
Requires-Dist: anyio==4.12.0; extra == "frozen"
|
|
102
102
|
Requires-Dist: apache-airflow==2.11.0; extra == "frozen"
|
|
103
|
-
Requires-Dist: apache-airflow-providers-celery==3.
|
|
104
|
-
Requires-Dist: apache-airflow-providers-common-compat==1.
|
|
105
|
-
Requires-Dist: apache-airflow-providers-common-io==1.
|
|
106
|
-
Requires-Dist: apache-airflow-providers-common-sql==1.
|
|
103
|
+
Requires-Dist: apache-airflow-providers-celery==3.14.0; extra == "frozen"
|
|
104
|
+
Requires-Dist: apache-airflow-providers-common-compat==1.10.0; extra == "frozen"
|
|
105
|
+
Requires-Dist: apache-airflow-providers-common-io==1.7.0; extra == "frozen"
|
|
106
|
+
Requires-Dist: apache-airflow-providers-common-sql==1.30.0; extra == "frozen"
|
|
107
107
|
Requires-Dist: apache-airflow-providers-fab==1.5.3; extra == "frozen"
|
|
108
|
-
Requires-Dist: apache-airflow-providers-ftp==3.
|
|
109
|
-
Requires-Dist: apache-airflow-providers-http==5.
|
|
110
|
-
Requires-Dist: apache-airflow-providers-imap==3.
|
|
111
|
-
Requires-Dist: apache-airflow-providers-postgres==6.
|
|
112
|
-
Requires-Dist: apache-airflow-providers-smtp==2.
|
|
113
|
-
Requires-Dist: apache-airflow-providers-sqlite==4.
|
|
114
|
-
Requires-Dist: apispec==6.
|
|
108
|
+
Requires-Dist: apache-airflow-providers-ftp==3.14.0; extra == "frozen"
|
|
109
|
+
Requires-Dist: apache-airflow-providers-http==5.6.0; extra == "frozen"
|
|
110
|
+
Requires-Dist: apache-airflow-providers-imap==3.10.0; extra == "frozen"
|
|
111
|
+
Requires-Dist: apache-airflow-providers-postgres==6.5.0; extra == "frozen"
|
|
112
|
+
Requires-Dist: apache-airflow-providers-smtp==2.4.0; extra == "frozen"
|
|
113
|
+
Requires-Dist: apache-airflow-providers-sqlite==4.2.0; extra == "frozen"
|
|
114
|
+
Requires-Dist: apispec==6.9.0; extra == "frozen"
|
|
115
115
|
Requires-Dist: argcomplete==3.6.3; extra == "frozen"
|
|
116
116
|
Requires-Dist: asdf==3.5.0; extra == "frozen"
|
|
117
117
|
Requires-Dist: asdf_standard==1.4.0; extra == "frozen"
|
|
118
118
|
Requires-Dist: asdf_transform_schemas==0.6.0; extra == "frozen"
|
|
119
|
-
Requires-Dist: asgiref==3.
|
|
119
|
+
Requires-Dist: asgiref==3.11.0; extra == "frozen"
|
|
120
120
|
Requires-Dist: asteval==1.0.7; extra == "frozen"
|
|
121
121
|
Requires-Dist: astropy==7.0.2; extra == "frozen"
|
|
122
|
-
Requires-Dist: astropy-iers-data==0.2025.
|
|
123
|
-
Requires-Dist: asyncpg==0.
|
|
122
|
+
Requires-Dist: astropy-iers-data==0.2025.12.1.0.45.12; extra == "frozen"
|
|
123
|
+
Requires-Dist: asyncpg==0.31.0; extra == "frozen"
|
|
124
124
|
Requires-Dist: attrs==25.4.0; extra == "frozen"
|
|
125
125
|
Requires-Dist: babel==2.17.0; extra == "frozen"
|
|
126
|
-
Requires-Dist: billiard==4.2.
|
|
126
|
+
Requires-Dist: billiard==4.2.4; extra == "frozen"
|
|
127
127
|
Requires-Dist: blinker==1.9.0; extra == "frozen"
|
|
128
|
-
Requires-Dist: boto3==1.
|
|
129
|
-
Requires-Dist: botocore==1.
|
|
128
|
+
Requires-Dist: boto3==1.42.1; extra == "frozen"
|
|
129
|
+
Requires-Dist: botocore==1.42.1; extra == "frozen"
|
|
130
130
|
Requires-Dist: cachelib==0.13.0; extra == "frozen"
|
|
131
|
-
Requires-Dist: celery==5.
|
|
131
|
+
Requires-Dist: celery==5.6.0; extra == "frozen"
|
|
132
132
|
Requires-Dist: certifi==2025.11.12; extra == "frozen"
|
|
133
133
|
Requires-Dist: cffi==2.0.0; extra == "frozen"
|
|
134
134
|
Requires-Dist: charset-normalizer==3.4.4; extra == "frozen"
|
|
135
|
-
Requires-Dist: click==8.3.
|
|
135
|
+
Requires-Dist: click==8.3.1; extra == "frozen"
|
|
136
136
|
Requires-Dist: click-didyoumean==0.3.1; extra == "frozen"
|
|
137
137
|
Requires-Dist: click-plugins==1.1.1.2; extra == "frozen"
|
|
138
138
|
Requires-Dist: click-repl==0.3.0; extra == "frozen"
|
|
@@ -149,21 +149,22 @@ Requires-Dist: dacite==1.9.2; extra == "frozen"
|
|
|
149
149
|
Requires-Dist: decorator==5.2.1; extra == "frozen"
|
|
150
150
|
Requires-Dist: dill==0.4.0; extra == "frozen"
|
|
151
151
|
Requires-Dist: dkist-header-validator==5.2.1; extra == "frozen"
|
|
152
|
-
Requires-Dist: dkist-processing-common==11.8.
|
|
152
|
+
Requires-Dist: dkist-processing-common==11.8.1; extra == "frozen"
|
|
153
153
|
Requires-Dist: dkist-processing-core==6.0.0; extra == "frozen"
|
|
154
154
|
Requires-Dist: dkist-processing-math==2.2.1; extra == "frozen"
|
|
155
155
|
Requires-Dist: dkist-processing-pac==3.1.1; extra == "frozen"
|
|
156
|
-
Requires-Dist: dkist-processing-visp==5.0
|
|
156
|
+
Requires-Dist: dkist-processing-visp==5.1.0; extra == "frozen"
|
|
157
157
|
Requires-Dist: dkist-service-configuration==4.1.7; extra == "frozen"
|
|
158
158
|
Requires-Dist: dkist-spectral-lines==3.0.0; extra == "frozen"
|
|
159
159
|
Requires-Dist: dkist_fits_specifications==4.17.0; extra == "frozen"
|
|
160
160
|
Requires-Dist: dnspython==2.8.0; extra == "frozen"
|
|
161
161
|
Requires-Dist: email-validator==2.3.0; extra == "frozen"
|
|
162
|
+
Requires-Dist: exceptiongroup==1.3.1; extra == "frozen"
|
|
162
163
|
Requires-Dist: fastjsonschema==2.21.2; extra == "frozen"
|
|
163
164
|
Requires-Dist: flower==2.0.1; extra == "frozen"
|
|
164
|
-
Requires-Dist: fonttools==4.
|
|
165
|
+
Requires-Dist: fonttools==4.61.0; extra == "frozen"
|
|
165
166
|
Requires-Dist: frozenlist==1.8.0; extra == "frozen"
|
|
166
|
-
Requires-Dist: fsspec==2025.
|
|
167
|
+
Requires-Dist: fsspec==2025.12.0; extra == "frozen"
|
|
167
168
|
Requires-Dist: globus-sdk==3.65.0; extra == "frozen"
|
|
168
169
|
Requires-Dist: google-re2==1.1.20251105; extra == "frozen"
|
|
169
170
|
Requires-Dist: googleapis-common-protos==1.72.0; extra == "frozen"
|
|
@@ -186,7 +187,7 @@ Requires-Dist: jsonschema==4.25.1; extra == "frozen"
|
|
|
186
187
|
Requires-Dist: jsonschema-specifications==2025.9.1; extra == "frozen"
|
|
187
188
|
Requires-Dist: jupyter_core==5.9.1; extra == "frozen"
|
|
188
189
|
Requires-Dist: kiwisolver==1.4.9; extra == "frozen"
|
|
189
|
-
Requires-Dist: kombu==5.6.
|
|
190
|
+
Requires-Dist: kombu==5.6.1; extra == "frozen"
|
|
190
191
|
Requires-Dist: lazy-object-proxy==1.12.0; extra == "frozen"
|
|
191
192
|
Requires-Dist: lazy_loader==0.4; extra == "frozen"
|
|
192
193
|
Requires-Dist: limits==5.6.0; extra == "frozen"
|
|
@@ -206,33 +207,33 @@ Requires-Dist: more-itertools==10.8.0; extra == "frozen"
|
|
|
206
207
|
Requires-Dist: moviepy==2.1.2; extra == "frozen"
|
|
207
208
|
Requires-Dist: multidict==6.7.0; extra == "frozen"
|
|
208
209
|
Requires-Dist: nbformat==5.10.4; extra == "frozen"
|
|
209
|
-
Requires-Dist: networkx==3.
|
|
210
|
+
Requires-Dist: networkx==3.6; extra == "frozen"
|
|
210
211
|
Requires-Dist: numpy==2.2.5; extra == "frozen"
|
|
211
212
|
Requires-Dist: object-clerk==1.0.0; extra == "frozen"
|
|
212
|
-
Requires-Dist: opentelemetry-api==1.
|
|
213
|
-
Requires-Dist: opentelemetry-exporter-otlp==1.
|
|
214
|
-
Requires-Dist: opentelemetry-exporter-otlp-proto-common==1.
|
|
215
|
-
Requires-Dist: opentelemetry-exporter-otlp-proto-grpc==1.
|
|
216
|
-
Requires-Dist: opentelemetry-exporter-otlp-proto-http==1.
|
|
217
|
-
Requires-Dist: opentelemetry-instrumentation==0.
|
|
218
|
-
Requires-Dist: opentelemetry-instrumentation-aiohttp-client==0.
|
|
219
|
-
Requires-Dist: opentelemetry-instrumentation-asgi==0.
|
|
220
|
-
Requires-Dist: opentelemetry-instrumentation-botocore==0.
|
|
221
|
-
Requires-Dist: opentelemetry-instrumentation-celery==0.
|
|
222
|
-
Requires-Dist: opentelemetry-instrumentation-dbapi==0.
|
|
223
|
-
Requires-Dist: opentelemetry-instrumentation-fastapi==0.
|
|
224
|
-
Requires-Dist: opentelemetry-instrumentation-pika==0.
|
|
225
|
-
Requires-Dist: opentelemetry-instrumentation-psycopg2==0.
|
|
226
|
-
Requires-Dist: opentelemetry-instrumentation-pymongo==0.
|
|
227
|
-
Requires-Dist: opentelemetry-instrumentation-redis==0.
|
|
228
|
-
Requires-Dist: opentelemetry-instrumentation-requests==0.
|
|
229
|
-
Requires-Dist: opentelemetry-instrumentation-sqlalchemy==0.
|
|
230
|
-
Requires-Dist: opentelemetry-instrumentation-system-metrics==0.
|
|
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"
|
|
231
232
|
Requires-Dist: opentelemetry-propagator-aws-xray==1.0.2; extra == "frozen"
|
|
232
|
-
Requires-Dist: opentelemetry-proto==1.
|
|
233
|
-
Requires-Dist: opentelemetry-sdk==1.
|
|
234
|
-
Requires-Dist: opentelemetry-semantic-conventions==0.
|
|
235
|
-
Requires-Dist: opentelemetry-util-http==0.
|
|
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"
|
|
236
237
|
Requires-Dist: ordered-set==4.1.0; extra == "frozen"
|
|
237
238
|
Requires-Dist: packaging==25.0; extra == "frozen"
|
|
238
239
|
Requires-Dist: pandas==2.3.3; extra == "frozen"
|
|
@@ -251,11 +252,11 @@ Requires-Dist: proglog==0.1.12; extra == "frozen"
|
|
|
251
252
|
Requires-Dist: prometheus_client==0.23.1; extra == "frozen"
|
|
252
253
|
Requires-Dist: prompt_toolkit==3.0.52; extra == "frozen"
|
|
253
254
|
Requires-Dist: propcache==0.4.1; extra == "frozen"
|
|
254
|
-
Requires-Dist: protobuf==6.33.
|
|
255
|
+
Requires-Dist: protobuf==6.33.1; extra == "frozen"
|
|
255
256
|
Requires-Dist: psutil==7.1.3; extra == "frozen"
|
|
256
257
|
Requires-Dist: psycopg2-binary==2.9.11; extra == "frozen"
|
|
257
258
|
Requires-Dist: pycparser==2.23; extra == "frozen"
|
|
258
|
-
Requires-Dist: pydantic==2.12.
|
|
259
|
+
Requires-Dist: pydantic==2.12.5; extra == "frozen"
|
|
259
260
|
Requires-Dist: pydantic-settings==2.12.0; extra == "frozen"
|
|
260
261
|
Requires-Dist: pydantic_core==2.41.5; extra == "frozen"
|
|
261
262
|
Requires-Dist: pyerfa==2.0.1.5; extra == "frozen"
|
|
@@ -273,18 +274,17 @@ Requires-Dist: requests-toolbelt==1.0.0; extra == "frozen"
|
|
|
273
274
|
Requires-Dist: rfc3339-validator==0.1.4; extra == "frozen"
|
|
274
275
|
Requires-Dist: rich==13.9.4; extra == "frozen"
|
|
275
276
|
Requires-Dist: rich-argparse==1.7.2; extra == "frozen"
|
|
276
|
-
Requires-Dist: rpds-py==0.
|
|
277
|
-
Requires-Dist: s3transfer==0.
|
|
277
|
+
Requires-Dist: rpds-py==0.30.0; extra == "frozen"
|
|
278
|
+
Requires-Dist: s3transfer==0.16.0; extra == "frozen"
|
|
278
279
|
Requires-Dist: scikit-image==0.25.2; extra == "frozen"
|
|
279
280
|
Requires-Dist: scikit-learn==1.6.1; extra == "frozen"
|
|
280
281
|
Requires-Dist: scipy==1.15.3; extra == "frozen"
|
|
281
282
|
Requires-Dist: semantic-version==2.10.0; extra == "frozen"
|
|
282
283
|
Requires-Dist: setproctitle==1.3.7; extra == "frozen"
|
|
283
284
|
Requires-Dist: six==1.17.0; extra == "frozen"
|
|
284
|
-
Requires-Dist:
|
|
285
|
-
Requires-Dist: solar-wavelength-calibration==2.0.0rc3; extra == "frozen"
|
|
285
|
+
Requires-Dist: solar-wavelength-calibration==2.0.0; extra == "frozen"
|
|
286
286
|
Requires-Dist: sqids==0.5.1; extra == "frozen"
|
|
287
|
-
Requires-Dist: sqlparse==0.5.
|
|
287
|
+
Requires-Dist: sqlparse==0.5.4; extra == "frozen"
|
|
288
288
|
Requires-Dist: sunpy==6.1.1; extra == "frozen"
|
|
289
289
|
Requires-Dist: tabulate==0.9.0; extra == "frozen"
|
|
290
290
|
Requires-Dist: talus==1.3.4; extra == "frozen"
|
|
@@ -299,16 +299,17 @@ Requires-Dist: traitlets==5.14.3; extra == "frozen"
|
|
|
299
299
|
Requires-Dist: typing-inspection==0.4.2; extra == "frozen"
|
|
300
300
|
Requires-Dist: typing_extensions==4.15.0; extra == "frozen"
|
|
301
301
|
Requires-Dist: tzdata==2025.2; extra == "frozen"
|
|
302
|
+
Requires-Dist: tzlocal==5.3.1; extra == "frozen"
|
|
302
303
|
Requires-Dist: uc-micro-py==1.0.3; extra == "frozen"
|
|
303
304
|
Requires-Dist: uncertainties==3.2.3; extra == "frozen"
|
|
304
|
-
Requires-Dist: universal_pathlib==0.3.
|
|
305
|
+
Requires-Dist: universal_pathlib==0.3.7; extra == "frozen"
|
|
305
306
|
Requires-Dist: urllib3==2.5.0; extra == "frozen"
|
|
306
307
|
Requires-Dist: vine==5.1.0; extra == "frozen"
|
|
307
308
|
Requires-Dist: voluptuous==0.15.2; extra == "frozen"
|
|
308
309
|
Requires-Dist: wcwidth==0.2.14; extra == "frozen"
|
|
309
310
|
Requires-Dist: wirerope==1.0.0; extra == "frozen"
|
|
310
311
|
Requires-Dist: wrapt==1.17.3; extra == "frozen"
|
|
311
|
-
Requires-Dist: yamale==6.
|
|
312
|
+
Requires-Dist: yamale==6.1.0; extra == "frozen"
|
|
312
313
|
Requires-Dist: yarl==1.22.0; extra == "frozen"
|
|
313
314
|
Requires-Dist: zipp==3.23.0; extra == "frozen"
|
|
314
315
|
|
|
@@ -1,14 +1,4 @@
|
|
|
1
1
|
changelog/.gitempty,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
changelog/246.doc.2.rst,sha256=aMYmvTOBLplNlXZ7gRD2OmFX14TCCwaOj_M1j8ijOGk,148
|
|
3
|
-
changelog/246.doc.rst,sha256=dXzSxCuheJqeYXqnBbuNsSMp24mGUNK9QuhQXDphc-o,172
|
|
4
|
-
changelog/246.feature.2.rst,sha256=LYK8AoaioElU_ILGwPGJLQvb1OHFzXmIzwXv-jSoT6U,122
|
|
5
|
-
changelog/246.feature.3.rst,sha256=rbn-Hn2PEn_WKoifdGLZZtvngvQtQLPBtvc7rY4b2LA,104
|
|
6
|
-
changelog/246.feature.4.rst,sha256=S__oemHaB_Wnf_L8edCuLdaruWepXyPUWpLa6ajXqkE,101
|
|
7
|
-
changelog/246.feature.rst,sha256=hO8FiaYcp6ZDV8HmYoLSxV2g8DVgXO2yVL1je3NZmVg,491
|
|
8
|
-
changelog/246.misc.2.rst,sha256=5yrvGHyNSvN_GgOF6Ehv7K863T_iGIU58X_1DvkRrsA,136
|
|
9
|
-
changelog/246.misc.3.rst,sha256=RRQLj5etEC-GRufQp8vqRB4yheA3-IcMnm2HRsv8v0E,126
|
|
10
|
-
changelog/246.misc.rst,sha256=uXE0Fnyqa9BE1WLd6yUaBqJLwBFPLoVWyaRSCD_WR5I,158
|
|
11
|
-
changelog/246.science.rst,sha256=FJxC9yaS_qB_WMqetuA4NyMvrpmZBecD2dXgq4Yv8sY,1189
|
|
12
2
|
dkist_processing_visp/__init__.py,sha256=LC8o31oTIro4F7IgwoWalX1W3KcPU27yJhlDUeGqcwA,351
|
|
13
3
|
dkist_processing_visp/config.py,sha256=GMr0CreW4qavbueTtsH_Gx5P52v4yZd2PNKyPmxBKQE,478
|
|
14
4
|
dkist_processing_visp/fonts/Lato-Regular.ttf,sha256=1jbkaDIx-THtoiLViOlE0IK_0726AvkovuRhwPGFslE,656568
|
|
@@ -16,7 +6,7 @@ dkist_processing_visp/models/__init__.py,sha256=z2nFVvvIzirxklQ9i5-F1nR-WOgcDttY
|
|
|
16
6
|
dkist_processing_visp/models/constants.py,sha256=TP9ZefMdJxu-JWePICMZ6riC4bH1Mz4NJY0hAcWAPQ0,6749
|
|
17
7
|
dkist_processing_visp/models/fits_access.py,sha256=8uKaUgtapyED-WgJCeswrIqEGy4Ob6ekBmiyBqF6yIE,573
|
|
18
8
|
dkist_processing_visp/models/metric_code.py,sha256=L_VJ-l5RXsYgcEIOO6hsez1a5oL5FqTnoVKZ0z7NKng,266
|
|
19
|
-
dkist_processing_visp/models/parameters.py,sha256=
|
|
9
|
+
dkist_processing_visp/models/parameters.py,sha256=ynPzU9Clv15tuI_h7OFH4bgngeGP-WJ0I3814lnaKMw,15070
|
|
20
10
|
dkist_processing_visp/models/tags.py,sha256=RKtDlNA9O3LMinUP7BJ3tXWn6CWAARaKhXIVB1EHtg0,3055
|
|
21
11
|
dkist_processing_visp/models/task_name.py,sha256=ykLXcmCBWYguopdBlg_G0X_u-0o_Ugh2117XrCqdbFk,187
|
|
22
12
|
dkist_processing_visp/parsers/__init__.py,sha256=z2nFVvvIzirxklQ9i5-F1nR-WOgcDttYtog_jx4yN5I,12
|
|
@@ -32,7 +22,7 @@ dkist_processing_visp/tasks/__init__.py,sha256=qlPlahiM9_sCsaIj_wzQpzWkMITJ1dPdT
|
|
|
32
22
|
dkist_processing_visp/tasks/assemble_movie.py,sha256=8UujniXlV_sSGeuISud8wMHihLy6Gc5fKZpwkXLUQB8,3330
|
|
33
23
|
dkist_processing_visp/tasks/background_light.py,sha256=qQ3r1LR5qaOz2qNHnO5_QK8l1zbVP0GaCS3aLqJfNYY,16201
|
|
34
24
|
dkist_processing_visp/tasks/dark.py,sha256=VVitrat08U7e5L1-NVnNNJI_KIx791_DvKEJokvCqXE,4334
|
|
35
|
-
dkist_processing_visp/tasks/geometric.py,sha256=
|
|
25
|
+
dkist_processing_visp/tasks/geometric.py,sha256=FL9LVnI9XvAQeDFXnD1nwj67ExosuZjBSW2M3CrlCB4,48893
|
|
36
26
|
dkist_processing_visp/tasks/instrument_polarization.py,sha256=uj7iyzM3CiJcbQeF4eKpk_KCoheXaM4FpDI83GYDld4,25854
|
|
37
27
|
dkist_processing_visp/tasks/l1_output_data.py,sha256=vl_c52noozeu4N-BbfpsIHFc5q6JATQ9r4iLa3MDtDI,8347
|
|
38
28
|
dkist_processing_visp/tasks/lamp.py,sha256=HTBob-4Am1ps5ucmX8nSzxV3BqX2ytMcHZ5iyDrljq0,5132
|
|
@@ -40,7 +30,7 @@ dkist_processing_visp/tasks/make_movie_frames.py,sha256=fw25ksKiJJNS57XV5a7rHpYG
|
|
|
40
30
|
dkist_processing_visp/tasks/parse.py,sha256=Fe_2svvMSKBup--Ulxbu0uaNW3dzPxQreafMEw0CY6E,7897
|
|
41
31
|
dkist_processing_visp/tasks/quality_metrics.py,sha256=Pw55-PXW0cl39FuNkEQCGGhvI_zMDimwmh-swVPVBD4,8133
|
|
42
32
|
dkist_processing_visp/tasks/science.py,sha256=eQZ5MDJhOD8hhp2huksOkl8Btm8EL15no-LX3o6zBXE,34550
|
|
43
|
-
dkist_processing_visp/tasks/solar.py,sha256=
|
|
33
|
+
dkist_processing_visp/tasks/solar.py,sha256=YJFHmpmdV-FSIrjFKMH3eLXZ8KTdZWcZo-_XFf-u9Gs,47624
|
|
44
34
|
dkist_processing_visp/tasks/visp_base.py,sha256=-yC-PVP9AqFeZJshJ_nqZpSyRsZyHWUlugWvkeWkPKA,1412
|
|
45
35
|
dkist_processing_visp/tasks/write_l1.py,sha256=bsDZ0BwoqpTtS_f_rAzUn7Ra8UvYb-kINQhX6BwwFQw,8796
|
|
46
36
|
dkist_processing_visp/tasks/mixin/__init__.py,sha256=z2nFVvvIzirxklQ9i5-F1nR-WOgcDttYtog_jx4yN5I,12
|
|
@@ -49,7 +39,7 @@ dkist_processing_visp/tasks/mixin/corrections.py,sha256=FhLFgD9ZYLZd3SaC3PFF-szr
|
|
|
49
39
|
dkist_processing_visp/tasks/mixin/downsample.py,sha256=SvKzY6HJRn-FeyG7O6HPvyOS5dmMu6uPoWkfnpPXpVw,1344
|
|
50
40
|
dkist_processing_visp/tests/README.rst,sha256=rnedwwg25c0lB9Me7cT7QNZA17FYlqCu9ZnjQxR5hi0,12502
|
|
51
41
|
dkist_processing_visp/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
52
|
-
dkist_processing_visp/tests/conftest.py,sha256=
|
|
42
|
+
dkist_processing_visp/tests/conftest.py,sha256=h5K8OyKFKmV6emjDywrS_ZTeWburIyBnZw_3L8uJmnY,18652
|
|
53
43
|
dkist_processing_visp/tests/header_models.py,sha256=80IZgVsEoGbWOG8kvh7BjC2gHqZq9QSEDcjcmW5B4gA,21126
|
|
54
44
|
dkist_processing_visp/tests/test_assemble_movie.py,sha256=T5EZzdB3sNY4HcSkN2W1ZBDaI4a68ZUNqPB-JpANSQ0,2247
|
|
55
45
|
dkist_processing_visp/tests/test_assemble_quality.py,sha256=C5djCoi2aHUCUiaMnyIOB3DVDSCAT1gUx_Q19c_-Q8Q,4280
|
|
@@ -62,11 +52,11 @@ dkist_processing_visp/tests/test_instrument_polarization.py,sha256=ZsYSyXUKfs0dv
|
|
|
62
52
|
dkist_processing_visp/tests/test_lamp.py,sha256=19mRN8drAg0tqQGwSbSUDlpryqYjMvmfv1DCsttxuXk,5124
|
|
63
53
|
dkist_processing_visp/tests/test_make_movie_frames.py,sha256=huQ5n0YneHByKumM_Ye9tekqKeh-F-e6MQoudOP3S-g,2628
|
|
64
54
|
dkist_processing_visp/tests/test_map_repeats.py,sha256=9g3NnvSfn1OqxxYYxTFoOIi1UsCOa6mZjiuGkbxUvTg,7611
|
|
65
|
-
dkist_processing_visp/tests/test_parameters.py,sha256=
|
|
55
|
+
dkist_processing_visp/tests/test_parameters.py,sha256=MBSddKsFmRC4zDZEgpA3y3_sRKriETiPEIhcVoSchTo,8053
|
|
66
56
|
dkist_processing_visp/tests/test_parse.py,sha256=XyH8oCk5C0CWl4ndNIyVjgXLoMg0679s4dj1MGlJs0c,23363
|
|
67
57
|
dkist_processing_visp/tests/test_quality.py,sha256=YW24VjEHoILseFIXZBp4-o7egT26mfT1lafzajVjXu8,6905
|
|
68
58
|
dkist_processing_visp/tests/test_science.py,sha256=KpOYvL86xhSnTCOcVDveE-enDxcj_G4IrUw_wa375tI,23893
|
|
69
|
-
dkist_processing_visp/tests/test_solar.py,sha256=
|
|
59
|
+
dkist_processing_visp/tests/test_solar.py,sha256=xuKeUrnAeTQoWbL6pUTiRr09jw0O4jYL6-MSCmyF_k4,16789
|
|
70
60
|
dkist_processing_visp/tests/test_trial_create_quality_report.py,sha256=t3de9LMJOqrRaFXAvKV_5sotAfzDR8fZVIrFNRB2I_A,2779
|
|
71
61
|
dkist_processing_visp/tests/test_visp_constants.py,sha256=y2x42Y-dK2lrCPufLAV1KHpu2fQ-FRpe8tSIhfHJEw8,3134
|
|
72
62
|
dkist_processing_visp/tests/test_workflows.py,sha256=qyWxagIDv-MmVN0u3KFswa5HdaHC6uGeJpvgxvPE30E,287
|
|
@@ -78,9 +68,9 @@ dkist_processing_visp/tests/local_trial_workflows/l0_solar_gain_as_science.py,sh
|
|
|
78
68
|
dkist_processing_visp/tests/local_trial_workflows/l0_to_l1.py,sha256=cwEdvUGqqSpp4htrxlmyRN2sZBBvVOjomd66DEqTmTA,15191
|
|
79
69
|
dkist_processing_visp/tests/local_trial_workflows/local_trial_helpers.py,sha256=UYGDwvCqzyCzyp44T-vys_JdKuMVRVS7bpWG9gvwnSE,28250
|
|
80
70
|
dkist_processing_visp/workflows/__init__.py,sha256=1-GP9tOzjCxLJtyq0ry_x4dPdArfSso8Hxu65ydPpXQ,103
|
|
81
|
-
dkist_processing_visp/workflows/l0_processing.py,sha256=
|
|
71
|
+
dkist_processing_visp/workflows/l0_processing.py,sha256=bzjvoxwjAwUz-k0ebr6dOt9agpMqbfz2RlH11iN2ia4,3333
|
|
82
72
|
dkist_processing_visp/workflows/single_task_workflows.py,sha256=LK4dsshM0-lwy79WaMoTplyCxUyINnP9RU74MG_dhyc,33
|
|
83
|
-
dkist_processing_visp/workflows/trial_workflows.py,sha256=
|
|
73
|
+
dkist_processing_visp/workflows/trial_workflows.py,sha256=3F7LTsjMmL68F8rmFst9tRFWWEBJVSy_F4-a8KnVzfE,3802
|
|
84
74
|
docs/Makefile,sha256=qnlVz6PuBqE39NfHWuUnHhNEA-EFgT2-WJNNNy9ttfk,4598
|
|
85
75
|
docs/background_light.rst,sha256=FWj8KH7H51BtoqPCJ1A_VIWJkjaXD8-dwM9RdY1rkIc,5147
|
|
86
76
|
docs/changelog.rst,sha256=ZpZPJIyl4nI0Eicku6uSrLdiinNOF2GcZwrvTEsb-Zs,346
|
|
@@ -98,7 +88,7 @@ docs/requirements_table.rst,sha256=_HIbwFpDooM5n0JjiDAbFozGfJuX13smtcoujLFN4Gk,2
|
|
|
98
88
|
docs/science_calibration.rst,sha256=VN_g7xSjN-nbXhlBaFnPCbNcsc_Qu0207jEUfRAjnBE,2939
|
|
99
89
|
docs/scientific_changelog.rst,sha256=01AWBSHg8zElnodCgAq-hMxhk9CkX5rtEENx4iz0sjI,300
|
|
100
90
|
licenses/LICENSE.rst,sha256=piZaQplkzOMmH1NXg6QIdo9wwo9pPCoHkvm2-DmH76E,1462
|
|
101
|
-
dkist_processing_visp-5.0.
|
|
102
|
-
dkist_processing_visp-5.0.
|
|
103
|
-
dkist_processing_visp-5.0.
|
|
104
|
-
dkist_processing_visp-5.0.
|
|
91
|
+
dkist_processing_visp-5.1.0.dist-info/METADATA,sha256=MEjotieqyNCNxNKxpLORh99UNBNmVeMm8MLnVBCYDOQ,29229
|
|
92
|
+
dkist_processing_visp-5.1.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
93
|
+
dkist_processing_visp-5.1.0.dist-info/top_level.txt,sha256=9GHSn-ZMGQxaRNGrPP3HNc5ZkE7ftzluO74Jz5vUSTE,46
|
|
94
|
+
dkist_processing_visp-5.1.0.dist-info/RECORD,,
|
changelog/246.doc.2.rst
DELETED
changelog/246.doc.rst
DELETED
changelog/246.feature.2.rst
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
Only compute a single lamp gain for each beam. In the past a single map gain was also computed for each modulation state.
|
changelog/246.feature.3.rst
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
Add Buds to parse the spectrograph setup into pipeline constants to be used when fitting a solar atlas.
|
changelog/246.feature.4.rst
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
Add quality report metrics that show the quality of the vignette estimation in the Solar Gain tasks.
|
changelog/246.feature.rst
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
Update the Solar Gain task to measure vignetting signal, compute a single gain for each beam (as opposed to for each beam and modulator state),
|
|
2
|
-
and stop applying residual spectral shifts to the characteristic spectra before removing from the input gain array.
|
|
3
|
-
See the `Science Changelog <https://docs.dkist.nso.edu/projects/visp/en/stable/scientific_changelog.html>`_ and
|
|
4
|
-
`gain algorithm docs <https://docs.dkist.nso.edu/projects/visp/en/stable/gain_correction.html>`_ for more information.
|
changelog/246.misc.2.rst
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
Remove the `LineZonesMixin` and move its methods directly to the Geometric calibration task, which is now the only task that uses them.
|
changelog/246.misc.3.rst
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
Rename the ``solar_spectral_avg_window`` to ``solar_spatial_median_filter_width_px`` to more accurately capture what it does.
|
changelog/246.misc.rst
DELETED
changelog/246.science.rst
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
Major update to the gain algorithm to mitigate polarization artifacts in L1 science frames. This change can be split into
|
|
2
|
-
three parts. See the `gain correction <https://docs.dkist.nso.edu/projects/visp/en/stable/gain_correction.html>`_ page for more information.
|
|
3
|
-
|
|
4
|
-
#. Compute a single gain correction image for each beam. In the past we had computed a separate gain image for each modstate as well, but this was found to couple residual polarization structure into the final science frames.
|
|
5
|
-
|
|
6
|
-
#. Stop "refining" (i.e., applying small spectral offsets to) the characteristic solar spectrum on a per-spatial-pixel basis. This was initially done to minimize line residuals in Telluric lines but was found to have a more-negative on polarimetric residuals.
|
|
7
|
-
|
|
8
|
-
#. Separate vignetting caused by aperture masks from the solar signal used to remove spectral lines in the final gain image. This is done by fitting a solar atlas and taking the deviation in continuum to be the vignetting signal.
|
|
9
|
-
|
|
10
|
-
Computing a single gain per beam will greatly reduce the polarization artifacts in L1 data. Measuring the vignette
|
|
11
|
-
signal directly will further reduce these artifacts and improve flatness across the array.
|
|
File without changes
|
{dkist_processing_visp-5.0.0rc2.dist-info → dkist_processing_visp-5.1.0.dist-info}/top_level.txt
RENAMED
|
File without changes
|