dkist-processing-visp 5.2.1__tar.gz → 5.2.2__tar.gz
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-5.2.1 → dkist_processing_visp-5.2.2}/CHANGELOG.rst +24 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/PKG-INFO +5 -4
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tasks/__init__.py +1 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tasks/solar.py +3 -34
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tasks/wavelength_calibration.py +44 -3
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/workflows/l0_processing.py +1 -1
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/workflows/trial_workflows.py +1 -1
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp.egg-info/PKG-INFO +5 -4
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp.egg-info/requires.txt +4 -3
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/pyproject.toml +6 -5
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/.gitignore +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/.pre-commit-config.yaml +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/.readthedocs.yml +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/.snyk +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/README.rst +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/SCIENCE_CHANGELOG.rst +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/bitbucket-pipelines.yml +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/changelog/.gitempty +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/__init__.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/config.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/fonts/Lato-Regular.ttf +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/models/__init__.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/models/constants.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/models/fits_access.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/models/metric_code.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/models/parameters.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/models/tags.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/models/task_name.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/parsers/__init__.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/parsers/map_repeats.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/parsers/modulator_states.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/parsers/polarimeter_mode.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/parsers/raster_step.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/parsers/spectrograph_configuration.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/parsers/time.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/parsers/visp_l0_fits_access.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/parsers/visp_l1_fits_access.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tasks/assemble_movie.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tasks/background_light.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tasks/dark.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tasks/geometric.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tasks/instrument_polarization.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tasks/l1_output_data.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tasks/lamp.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tasks/make_movie_frames.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tasks/mixin/__init__.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tasks/mixin/beam_access.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tasks/mixin/corrections.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tasks/mixin/downsample.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tasks/parse.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tasks/quality_metrics.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tasks/science.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tasks/visp_base.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tasks/write_l1.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tests/README.rst +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tests/__init__.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tests/conftest.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tests/header_models.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tests/local_trial_workflows/__init__.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tests/local_trial_workflows/l0_cals_only.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tests/local_trial_workflows/l0_polcals_as_science.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tests/local_trial_workflows/l0_solar_gain_as_science.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tests/local_trial_workflows/l0_to_l1.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tests/local_trial_workflows/local_trial_helpers.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tests/test_assemble_movie.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tests/test_assemble_quality.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tests/test_background_light.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tests/test_dark.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tests/test_downsample.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tests/test_fits_access.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tests/test_geometric.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tests/test_instrument_polarization.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tests/test_lamp.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tests/test_make_movie_frames.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tests/test_map_repeats.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tests/test_parameters.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tests/test_parse.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tests/test_quality.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tests/test_science.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tests/test_solar.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tests/test_trial_create_quality_report.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tests/test_visp_constants.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tests/test_wavelength_calibration.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tests/test_workflows.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tests/test_write_l1.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/workflows/__init__.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/workflows/single_task_workflows.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp.egg-info/SOURCES.txt +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp.egg-info/dependency_links.txt +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp.egg-info/top_level.txt +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/docs/Makefile +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/docs/background_light.rst +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/docs/changelog.rst +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/docs/conf.py +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/docs/gain_correction.rst +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/docs/geometric.rst +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/docs/index.rst +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/docs/l0_to_l1_visp.rst +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/docs/l0_to_l1_visp_full-trial.rst +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/docs/landing_page.rst +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/docs/make.bat +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/docs/polarization_calibration.rst +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/docs/requirements.txt +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/docs/requirements_table.rst +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/docs/science_calibration.rst +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/docs/scientific_changelog.rst +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/docs/wavelength_calibration.rst +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/licenses/LICENSE.rst +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/science_towncrier.sh +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/setup.cfg +0 -0
- {dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/towncrier_science.toml +0 -0
|
@@ -1,3 +1,27 @@
|
|
|
1
|
+
v5.2.2 (2025-12-17)
|
|
2
|
+
===================
|
|
3
|
+
|
|
4
|
+
Bugfixes
|
|
5
|
+
--------
|
|
6
|
+
|
|
7
|
+
- Normalize atlas and input spectrum when computing an initial CRVAL guess in the `WavelengthCalibration` task. This fixes
|
|
8
|
+
failing fits caused by very poor initial guesses caused by large continuum offsets. (`#255 <https://bitbucket.org/dkistdc/dkist-processing-visp/pull-requests/255>`__)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
Misc
|
|
12
|
+
----
|
|
13
|
+
|
|
14
|
+
- Move the `estimate_relative_continuum_level` method from `SolarCalibration` class to be a module-level function in
|
|
15
|
+
"wavelength_calibration.py" so it can be used by both the `SolarCalibration` and `WavelengthCalibration` tasks. (`#255 <https://bitbucket.org/dkistdc/dkist-processing-visp/pull-requests/255>`__)
|
|
16
|
+
- Import the `WavelengthCalibration` task into the top-level `tasks` package and use that import path in workflow definitions. (`#255 <https://bitbucket.org/dkistdc/dkist-processing-visp/pull-requests/255>`__)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
Documentation
|
|
20
|
+
-------------
|
|
21
|
+
|
|
22
|
+
- Fix issue that prevented module-level functions in the wavelength calibration module from rendering in API docs. (`#255 <https://bitbucket.org/dkistdc/dkist-processing-visp/pull-requests/255>`__)
|
|
23
|
+
|
|
24
|
+
|
|
1
25
|
v5.2.1 (2025-12-16)
|
|
2
26
|
===================
|
|
3
27
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dkist-processing-visp
|
|
3
|
-
Version: 5.2.
|
|
3
|
+
Version: 5.2.2
|
|
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
|
|
@@ -126,8 +126,8 @@ Requires-Dist: attrs==25.4.0; extra == "frozen"
|
|
|
126
126
|
Requires-Dist: babel==2.17.0; extra == "frozen"
|
|
127
127
|
Requires-Dist: billiard==4.2.4; extra == "frozen"
|
|
128
128
|
Requires-Dist: blinker==1.9.0; extra == "frozen"
|
|
129
|
-
Requires-Dist: boto3==1.42.
|
|
130
|
-
Requires-Dist: botocore==1.42.
|
|
129
|
+
Requires-Dist: boto3==1.42.11; extra == "frozen"
|
|
130
|
+
Requires-Dist: botocore==1.42.11; extra == "frozen"
|
|
131
131
|
Requires-Dist: cachelib==0.13.0; extra == "frozen"
|
|
132
132
|
Requires-Dist: celery==5.6.0; extra == "frozen"
|
|
133
133
|
Requires-Dist: certifi==2025.11.12; extra == "frozen"
|
|
@@ -154,7 +154,7 @@ Requires-Dist: dkist-processing-common==11.9.1; extra == "frozen"
|
|
|
154
154
|
Requires-Dist: dkist-processing-core==6.0.1; extra == "frozen"
|
|
155
155
|
Requires-Dist: dkist-processing-math==2.2.1; extra == "frozen"
|
|
156
156
|
Requires-Dist: dkist-processing-pac==3.1.1; extra == "frozen"
|
|
157
|
-
Requires-Dist: dkist-processing-visp==5.2.
|
|
157
|
+
Requires-Dist: dkist-processing-visp==5.2.2; extra == "frozen"
|
|
158
158
|
Requires-Dist: dkist-service-configuration==4.1.13; extra == "frozen"
|
|
159
159
|
Requires-Dist: dkist-spectral-lines==3.0.0; extra == "frozen"
|
|
160
160
|
Requires-Dist: dkist_fits_specifications==4.19.0; extra == "frozen"
|
|
@@ -170,6 +170,7 @@ Requires-Dist: globus-sdk==4.2.0; extra == "frozen"
|
|
|
170
170
|
Requires-Dist: google-re2==1.1.20251105; extra == "frozen"
|
|
171
171
|
Requires-Dist: googleapis-common-protos==1.72.0; extra == "frozen"
|
|
172
172
|
Requires-Dist: gqlclient==1.2.3; extra == "frozen"
|
|
173
|
+
Requires-Dist: greenlet==3.3.0; extra == "frozen"
|
|
173
174
|
Requires-Dist: grpcio==1.76.0; extra == "frozen"
|
|
174
175
|
Requires-Dist: gunicorn==23.0.0; extra == "frozen"
|
|
175
176
|
Requires-Dist: h11==0.16.0; extra == "frozen"
|
{dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tasks/__init__.py
RENAMED
|
@@ -12,4 +12,5 @@ from dkist_processing_visp.tasks.parse import *
|
|
|
12
12
|
from dkist_processing_visp.tasks.quality_metrics import *
|
|
13
13
|
from dkist_processing_visp.tasks.science import *
|
|
14
14
|
from dkist_processing_visp.tasks.solar import *
|
|
15
|
+
from dkist_processing_visp.tasks.wavelength_calibration import WavelengthCalibration
|
|
15
16
|
from dkist_processing_visp.tasks.write_l1 import *
|
{dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tasks/solar.py
RENAMED
|
@@ -46,6 +46,7 @@ from dkist_processing_visp.tasks.visp_base import VispTaskBase
|
|
|
46
46
|
from dkist_processing_visp.tasks.wavelength_calibration import compute_initial_dispersion
|
|
47
47
|
from dkist_processing_visp.tasks.wavelength_calibration import compute_input_wavelength_vector
|
|
48
48
|
from dkist_processing_visp.tasks.wavelength_calibration import compute_order
|
|
49
|
+
from dkist_processing_visp.tasks.wavelength_calibration import estimate_relative_continuum_level
|
|
49
50
|
from dkist_processing_visp.tasks.wavelength_calibration import get_doppler_velocity
|
|
50
51
|
|
|
51
52
|
__all__ = [
|
|
@@ -638,11 +639,12 @@ class SolarCalibration(
|
|
|
638
639
|
resolving_power = self.parameters.wavecal_init_resolving_power
|
|
639
640
|
opacity_factor = self.parameters.wavecal_init_opacity_factor
|
|
640
641
|
straylight_faction = self.parameters.wavecal_init_straylight_fraction
|
|
641
|
-
relative_atlas_scaling =
|
|
642
|
+
relative_atlas_scaling = estimate_relative_continuum_level(
|
|
642
643
|
crval_init=crval_init,
|
|
643
644
|
wavelength_range=wavelength_range,
|
|
644
645
|
atlas=atlas,
|
|
645
646
|
representative_spectrum=representative_spectrum,
|
|
647
|
+
normalization_percentile=self.parameters.wavecal_init_crval_guess_normalization_percentile,
|
|
646
648
|
)
|
|
647
649
|
logger.info(f"0th order coefficient initial guess: {relative_atlas_scaling}")
|
|
648
650
|
|
|
@@ -683,39 +685,6 @@ class SolarCalibration(
|
|
|
683
685
|
|
|
684
686
|
return init_params
|
|
685
687
|
|
|
686
|
-
def estimate_relative_continuum_level(
|
|
687
|
-
self,
|
|
688
|
-
*,
|
|
689
|
-
crval_init: Quantity,
|
|
690
|
-
wavelength_range: Quantity,
|
|
691
|
-
atlas: Atlas,
|
|
692
|
-
representative_spectrum: np.ndarray,
|
|
693
|
-
) -> float:
|
|
694
|
-
"""
|
|
695
|
-
Estimate the multiplicative scaling between the representative spectrum and atlas solar transmission.
|
|
696
|
-
|
|
697
|
-
This scaling is used to set the initial guess of 0th-order polynomial fit coefficient. We estimate the scaling
|
|
698
|
-
factor by comparing the values of the two spectra at a given percent of the CDF. This percent is taken from
|
|
699
|
-
the `~dkist_processing_visp.models.parameters.VispParameters.wavecal_init_crval_guess_normalization_percentile`
|
|
700
|
-
pipeline parameter.
|
|
701
|
-
"""
|
|
702
|
-
wave_min = crval_init - wavelength_range / 2
|
|
703
|
-
wave_max = crval_init + wavelength_range / 2
|
|
704
|
-
|
|
705
|
-
atlas_idx = np.where(
|
|
706
|
-
(atlas.solar_atlas_wavelength >= wave_min) & (atlas.solar_atlas_wavelength <= wave_max)
|
|
707
|
-
)
|
|
708
|
-
atlas_norm = np.nanpercentile(
|
|
709
|
-
atlas.solar_atlas_transmission[atlas_idx],
|
|
710
|
-
self.parameters.wavecal_init_crval_guess_normalization_percentile,
|
|
711
|
-
)
|
|
712
|
-
spec_norm = np.nanpercentile(
|
|
713
|
-
representative_spectrum,
|
|
714
|
-
self.parameters.wavecal_init_crval_guess_normalization_percentile,
|
|
715
|
-
)
|
|
716
|
-
|
|
717
|
-
return spec_norm / atlas_norm
|
|
718
|
-
|
|
719
688
|
def compute_final_vignette_estimate(self, init_vignette_correction: np.ndarray) -> np.ndarray:
|
|
720
689
|
"""
|
|
721
690
|
Fit the spectral shape of continuum residuals for each spatial pixel.
|
|
@@ -26,8 +26,6 @@ from sunpy.coordinates import HeliocentricInertial
|
|
|
26
26
|
from dkist_processing_visp.models.tags import VispTag
|
|
27
27
|
from dkist_processing_visp.tasks.visp_base import VispTaskBase
|
|
28
28
|
|
|
29
|
-
__all__ = ["WavelengthCalibration"]
|
|
30
|
-
|
|
31
29
|
|
|
32
30
|
class WavelengthCalibration(VispTaskBase, QualityMixin):
|
|
33
31
|
"""Task class for correcting the dispersion axis wavelength values.
|
|
@@ -125,6 +123,7 @@ class WavelengthCalibration(VispTaskBase, QualityMixin):
|
|
|
125
123
|
negative_limit=-wavelength_range / 2,
|
|
126
124
|
positive_limit=wavelength_range / 2,
|
|
127
125
|
num_steps=550,
|
|
126
|
+
normalization_percentile=self.parameters.wavecal_init_crval_guess_normalization_percentile,
|
|
128
127
|
)
|
|
129
128
|
logger.info(f"{crval_initial_guess = !s}")
|
|
130
129
|
|
|
@@ -135,6 +134,15 @@ class WavelengthCalibration(VispTaskBase, QualityMixin):
|
|
|
135
134
|
resolving_power = self.parameters.wavecal_init_resolving_power
|
|
136
135
|
logger.info(f"{resolving_power = }")
|
|
137
136
|
|
|
137
|
+
init_continuum_level = estimate_relative_continuum_level(
|
|
138
|
+
crval_init=crval_initial_guess,
|
|
139
|
+
wavelength_range=wavelength_range,
|
|
140
|
+
atlas=atlas,
|
|
141
|
+
representative_spectrum=input_spectrum,
|
|
142
|
+
normalization_percentile=self.parameters.wavecal_init_crval_guess_normalization_percentile,
|
|
143
|
+
)
|
|
144
|
+
logger.info(f"{init_continuum_level = !s}")
|
|
145
|
+
|
|
138
146
|
logger.info("Setting bounds")
|
|
139
147
|
wavelength_search_width = dispersion * self.parameters.wavecal_crval_bounds_px
|
|
140
148
|
bounds = BoundsModel(
|
|
@@ -158,7 +166,9 @@ class WavelengthCalibration(VispTaskBase, QualityMixin):
|
|
|
158
166
|
),
|
|
159
167
|
opacity_factor=UnitlessBoundRange(min=0.0, max=10.0),
|
|
160
168
|
straylight_fraction=UnitlessBoundRange(min=0.0, max=0.4),
|
|
161
|
-
continuum_level=UnitlessBoundRange(
|
|
169
|
+
continuum_level=UnitlessBoundRange(
|
|
170
|
+
min=init_continuum_level * 0.7, max=init_continuum_level * 1.3
|
|
171
|
+
),
|
|
162
172
|
)
|
|
163
173
|
|
|
164
174
|
fit_flags = FitFlagsModel(
|
|
@@ -180,6 +190,7 @@ class WavelengthCalibration(VispTaskBase, QualityMixin):
|
|
|
180
190
|
opacity_factor=self.parameters.wavecal_init_opacity_factor,
|
|
181
191
|
straylight_fraction=self.parameters.wavecal_init_straylight_fraction,
|
|
182
192
|
grating_constant=self.constants.grating_constant_inverse_mm,
|
|
193
|
+
continuum_level=init_continuum_level,
|
|
183
194
|
doppler_velocity=doppler_velocity,
|
|
184
195
|
order=order,
|
|
185
196
|
bounds=bounds,
|
|
@@ -428,3 +439,33 @@ def compute_initial_dispersion(
|
|
|
428
439
|
dispersion = pixel_pitch / linear_dispersion
|
|
429
440
|
|
|
430
441
|
return dispersion.to(u.nm / u.pix)
|
|
442
|
+
|
|
443
|
+
|
|
444
|
+
def estimate_relative_continuum_level(
|
|
445
|
+
*,
|
|
446
|
+
crval_init: Quantity,
|
|
447
|
+
wavelength_range: Quantity,
|
|
448
|
+
atlas: Atlas,
|
|
449
|
+
representative_spectrum: np.ndarray,
|
|
450
|
+
normalization_percentile: float,
|
|
451
|
+
) -> float:
|
|
452
|
+
"""
|
|
453
|
+
Estimate the multiplicative scaling between the representative spectrum and atlas solar transmission.
|
|
454
|
+
|
|
455
|
+
This scaling is used to set the initial guess of 0th-order continuum scaling. We estimate the scaling factor by
|
|
456
|
+
comparing the values of the two spectra at a given percent of the CDF. This percent is taken from the
|
|
457
|
+
`~dkist_processing_visp.models.parameters.VispParameters.wavecal_init_crval_guess_normalization_percentile`
|
|
458
|
+
pipeline parameter.
|
|
459
|
+
"""
|
|
460
|
+
wave_min = crval_init - wavelength_range / 2
|
|
461
|
+
wave_max = crval_init + wavelength_range / 2
|
|
462
|
+
|
|
463
|
+
atlas_idx = np.where(
|
|
464
|
+
(atlas.solar_atlas_wavelength >= wave_min) & (atlas.solar_atlas_wavelength <= wave_max)
|
|
465
|
+
)
|
|
466
|
+
atlas_norm = np.nanpercentile(
|
|
467
|
+
atlas.solar_atlas_transmission[atlas_idx], normalization_percentile
|
|
468
|
+
)
|
|
469
|
+
spec_norm = np.nanpercentile(representative_spectrum, normalization_percentile)
|
|
470
|
+
|
|
471
|
+
return spec_norm / atlas_norm
|
|
@@ -22,7 +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
|
|
25
|
+
from dkist_processing_visp.tasks import WavelengthCalibration
|
|
26
26
|
|
|
27
27
|
l0_pipeline = Workflow(
|
|
28
28
|
category="visp",
|
|
@@ -23,7 +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
|
|
26
|
+
from dkist_processing_visp.tasks import WavelengthCalibration
|
|
27
27
|
|
|
28
28
|
full_trial_pipeline = Workflow(
|
|
29
29
|
category="visp",
|
{dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp.egg-info/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dkist-processing-visp
|
|
3
|
-
Version: 5.2.
|
|
3
|
+
Version: 5.2.2
|
|
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
|
|
@@ -126,8 +126,8 @@ Requires-Dist: attrs==25.4.0; extra == "frozen"
|
|
|
126
126
|
Requires-Dist: babel==2.17.0; extra == "frozen"
|
|
127
127
|
Requires-Dist: billiard==4.2.4; extra == "frozen"
|
|
128
128
|
Requires-Dist: blinker==1.9.0; extra == "frozen"
|
|
129
|
-
Requires-Dist: boto3==1.42.
|
|
130
|
-
Requires-Dist: botocore==1.42.
|
|
129
|
+
Requires-Dist: boto3==1.42.11; extra == "frozen"
|
|
130
|
+
Requires-Dist: botocore==1.42.11; extra == "frozen"
|
|
131
131
|
Requires-Dist: cachelib==0.13.0; extra == "frozen"
|
|
132
132
|
Requires-Dist: celery==5.6.0; extra == "frozen"
|
|
133
133
|
Requires-Dist: certifi==2025.11.12; extra == "frozen"
|
|
@@ -154,7 +154,7 @@ Requires-Dist: dkist-processing-common==11.9.1; extra == "frozen"
|
|
|
154
154
|
Requires-Dist: dkist-processing-core==6.0.1; extra == "frozen"
|
|
155
155
|
Requires-Dist: dkist-processing-math==2.2.1; extra == "frozen"
|
|
156
156
|
Requires-Dist: dkist-processing-pac==3.1.1; extra == "frozen"
|
|
157
|
-
Requires-Dist: dkist-processing-visp==5.2.
|
|
157
|
+
Requires-Dist: dkist-processing-visp==5.2.2; extra == "frozen"
|
|
158
158
|
Requires-Dist: dkist-service-configuration==4.1.13; extra == "frozen"
|
|
159
159
|
Requires-Dist: dkist-spectral-lines==3.0.0; extra == "frozen"
|
|
160
160
|
Requires-Dist: dkist_fits_specifications==4.19.0; extra == "frozen"
|
|
@@ -170,6 +170,7 @@ Requires-Dist: globus-sdk==4.2.0; extra == "frozen"
|
|
|
170
170
|
Requires-Dist: google-re2==1.1.20251105; extra == "frozen"
|
|
171
171
|
Requires-Dist: googleapis-common-protos==1.72.0; extra == "frozen"
|
|
172
172
|
Requires-Dist: gqlclient==1.2.3; extra == "frozen"
|
|
173
|
+
Requires-Dist: greenlet==3.3.0; extra == "frozen"
|
|
173
174
|
Requires-Dist: grpcio==1.76.0; extra == "frozen"
|
|
174
175
|
Requires-Dist: gunicorn==23.0.0; extra == "frozen"
|
|
175
176
|
Requires-Dist: h11==0.16.0; extra == "frozen"
|
|
@@ -92,8 +92,8 @@ attrs==25.4.0
|
|
|
92
92
|
babel==2.17.0
|
|
93
93
|
billiard==4.2.4
|
|
94
94
|
blinker==1.9.0
|
|
95
|
-
boto3==1.42.
|
|
96
|
-
botocore==1.42.
|
|
95
|
+
boto3==1.42.11
|
|
96
|
+
botocore==1.42.11
|
|
97
97
|
cachelib==0.13.0
|
|
98
98
|
celery==5.6.0
|
|
99
99
|
certifi==2025.11.12
|
|
@@ -120,7 +120,7 @@ dkist-processing-common==11.9.1
|
|
|
120
120
|
dkist-processing-core==6.0.1
|
|
121
121
|
dkist-processing-math==2.2.1
|
|
122
122
|
dkist-processing-pac==3.1.1
|
|
123
|
-
dkist-processing-visp==5.2.
|
|
123
|
+
dkist-processing-visp==5.2.2
|
|
124
124
|
dkist-service-configuration==4.1.13
|
|
125
125
|
dkist-spectral-lines==3.0.0
|
|
126
126
|
dkist_fits_specifications==4.19.0
|
|
@@ -136,6 +136,7 @@ globus-sdk==4.2.0
|
|
|
136
136
|
google-re2==1.1.20251105
|
|
137
137
|
googleapis-common-protos==1.72.0
|
|
138
138
|
gqlclient==1.2.3
|
|
139
|
+
greenlet==3.3.0
|
|
139
140
|
grpcio==1.76.0
|
|
140
141
|
gunicorn==23.0.0
|
|
141
142
|
h11==0.16.0
|
|
@@ -9,8 +9,8 @@ find = {}
|
|
|
9
9
|
|
|
10
10
|
[tool.dkist-dev-tools]
|
|
11
11
|
# Most recently frozen version by dkist-dev-tools
|
|
12
|
-
version = "5.2.
|
|
13
|
-
date = 2025-12-
|
|
12
|
+
version = "5.2.2"
|
|
13
|
+
date = 2025-12-17T09:12:25.459200
|
|
14
14
|
|
|
15
15
|
[project]
|
|
16
16
|
dynamic = ["version"]
|
|
@@ -154,8 +154,8 @@ frozen = [
|
|
|
154
154
|
"babel == 2.17.0",
|
|
155
155
|
"billiard == 4.2.4",
|
|
156
156
|
"blinker == 1.9.0",
|
|
157
|
-
"boto3 == 1.42.
|
|
158
|
-
"botocore == 1.42.
|
|
157
|
+
"boto3 == 1.42.11",
|
|
158
|
+
"botocore == 1.42.11",
|
|
159
159
|
"cachelib == 0.13.0",
|
|
160
160
|
"celery == 5.6.0",
|
|
161
161
|
"certifi == 2025.11.12",
|
|
@@ -182,7 +182,7 @@ frozen = [
|
|
|
182
182
|
"dkist-processing-core == 6.0.1",
|
|
183
183
|
"dkist-processing-math == 2.2.1",
|
|
184
184
|
"dkist-processing-pac == 3.1.1",
|
|
185
|
-
"dkist-processing-visp == 5.2.
|
|
185
|
+
"dkist-processing-visp == 5.2.2",
|
|
186
186
|
"dkist-service-configuration == 4.1.13",
|
|
187
187
|
"dkist-spectral-lines == 3.0.0",
|
|
188
188
|
"dkist_fits_specifications == 4.19.0",
|
|
@@ -198,6 +198,7 @@ frozen = [
|
|
|
198
198
|
"google-re2 == 1.1.20251105",
|
|
199
199
|
"googleapis-common-protos == 1.72.0",
|
|
200
200
|
"gqlclient == 1.2.3",
|
|
201
|
+
"greenlet == 3.3.0",
|
|
201
202
|
"grpcio == 1.76.0",
|
|
202
203
|
"gunicorn == 23.0.0",
|
|
203
204
|
"h11 == 0.16.0",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/models/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/models/tags.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/parsers/time.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tasks/dark.py
RENAMED
|
File without changes
|
{dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tasks/geometric.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tasks/lamp.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tasks/parse.py
RENAMED
|
File without changes
|
|
File without changes
|
{dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tasks/science.py
RENAMED
|
File without changes
|
{dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tasks/visp_base.py
RENAMED
|
File without changes
|
{dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tasks/write_l1.py
RENAMED
|
File without changes
|
{dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tests/README.rst
RENAMED
|
File without changes
|
{dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tests/__init__.py
RENAMED
|
File without changes
|
{dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tests/conftest.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tests/test_dark.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/dkist_processing_visp/tests/test_lamp.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/docs/l0_to_l1_visp_full-trial.rst
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dkist_processing_visp-5.2.1 → dkist_processing_visp-5.2.2}/docs/polarization_calibration.rst
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|