dkist-processing-visp 5.0.0__tar.gz → 5.0.0rc2__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.
Files changed (118) hide show
  1. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/CHANGELOG.rst +0 -33
  2. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/PKG-INFO +38 -39
  3. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/SCIENCE_CHANGELOG.rst +0 -19
  4. dkist_processing_visp-5.0.0rc2/changelog/246.doc.2.rst +2 -0
  5. dkist_processing_visp-5.0.0rc2/changelog/246.doc.rst +2 -0
  6. dkist_processing_visp-5.0.0rc2/changelog/246.feature.2.rst +1 -0
  7. dkist_processing_visp-5.0.0rc2/changelog/246.feature.3.rst +1 -0
  8. dkist_processing_visp-5.0.0rc2/changelog/246.feature.4.rst +1 -0
  9. dkist_processing_visp-5.0.0rc2/changelog/246.feature.rst +4 -0
  10. dkist_processing_visp-5.0.0rc2/changelog/246.misc.2.rst +1 -0
  11. dkist_processing_visp-5.0.0rc2/changelog/246.misc.3.rst +1 -0
  12. dkist_processing_visp-5.0.0rc2/changelog/246.misc.rst +2 -0
  13. dkist_processing_visp-5.0.0rc2/changelog/246.science.rst +11 -0
  14. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/models/parameters.py +1 -37
  15. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tasks/solar.py +12 -63
  16. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tests/conftest.py +0 -3
  17. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tests/test_parameters.py +1 -50
  18. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tests/test_solar.py +7 -13
  19. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp.egg-info/PKG-INFO +38 -39
  20. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp.egg-info/SOURCES.txt +10 -0
  21. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp.egg-info/requires.txt +37 -38
  22. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/pyproject.toml +39 -40
  23. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/.gitignore +0 -0
  24. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/.pre-commit-config.yaml +0 -0
  25. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/.readthedocs.yml +0 -0
  26. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/.snyk +0 -0
  27. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/README.rst +0 -0
  28. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/bitbucket-pipelines.yml +0 -0
  29. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/changelog/.gitempty +0 -0
  30. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/__init__.py +0 -0
  31. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/config.py +0 -0
  32. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/fonts/Lato-Regular.ttf +0 -0
  33. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/models/__init__.py +0 -0
  34. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/models/constants.py +0 -0
  35. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/models/fits_access.py +0 -0
  36. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/models/metric_code.py +0 -0
  37. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/models/tags.py +0 -0
  38. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/models/task_name.py +0 -0
  39. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/parsers/__init__.py +0 -0
  40. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/parsers/map_repeats.py +0 -0
  41. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/parsers/modulator_states.py +0 -0
  42. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/parsers/polarimeter_mode.py +0 -0
  43. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/parsers/raster_step.py +0 -0
  44. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/parsers/spectrograph_configuration.py +0 -0
  45. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/parsers/time.py +0 -0
  46. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/parsers/visp_l0_fits_access.py +0 -0
  47. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/parsers/visp_l1_fits_access.py +0 -0
  48. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tasks/__init__.py +0 -0
  49. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tasks/assemble_movie.py +0 -0
  50. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tasks/background_light.py +0 -0
  51. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tasks/dark.py +0 -0
  52. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tasks/geometric.py +0 -0
  53. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tasks/instrument_polarization.py +0 -0
  54. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tasks/l1_output_data.py +0 -0
  55. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tasks/lamp.py +0 -0
  56. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tasks/make_movie_frames.py +0 -0
  57. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tasks/mixin/__init__.py +0 -0
  58. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tasks/mixin/beam_access.py +0 -0
  59. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tasks/mixin/corrections.py +0 -0
  60. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tasks/mixin/downsample.py +0 -0
  61. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tasks/parse.py +0 -0
  62. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tasks/quality_metrics.py +0 -0
  63. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tasks/science.py +0 -0
  64. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tasks/visp_base.py +0 -0
  65. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tasks/write_l1.py +0 -0
  66. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tests/README.rst +0 -0
  67. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tests/__init__.py +0 -0
  68. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tests/header_models.py +0 -0
  69. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tests/local_trial_workflows/__init__.py +0 -0
  70. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tests/local_trial_workflows/l0_cals_only.py +0 -0
  71. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tests/local_trial_workflows/l0_polcals_as_science.py +0 -0
  72. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tests/local_trial_workflows/l0_solar_gain_as_science.py +0 -0
  73. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tests/local_trial_workflows/l0_to_l1.py +0 -0
  74. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tests/local_trial_workflows/local_trial_helpers.py +0 -0
  75. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tests/test_assemble_movie.py +0 -0
  76. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tests/test_assemble_quality.py +0 -0
  77. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tests/test_background_light.py +0 -0
  78. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tests/test_dark.py +0 -0
  79. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tests/test_downsample.py +0 -0
  80. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tests/test_fits_access.py +0 -0
  81. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tests/test_geometric.py +0 -0
  82. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tests/test_instrument_polarization.py +0 -0
  83. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tests/test_lamp.py +0 -0
  84. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tests/test_make_movie_frames.py +0 -0
  85. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tests/test_map_repeats.py +0 -0
  86. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tests/test_parse.py +0 -0
  87. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tests/test_quality.py +0 -0
  88. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tests/test_science.py +0 -0
  89. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tests/test_trial_create_quality_report.py +0 -0
  90. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tests/test_visp_constants.py +0 -0
  91. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tests/test_workflows.py +0 -0
  92. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/tests/test_write_l1.py +0 -0
  93. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/workflows/__init__.py +0 -0
  94. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/workflows/l0_processing.py +0 -0
  95. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/workflows/single_task_workflows.py +0 -0
  96. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp/workflows/trial_workflows.py +0 -0
  97. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp.egg-info/dependency_links.txt +0 -0
  98. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/dkist_processing_visp.egg-info/top_level.txt +0 -0
  99. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/docs/Makefile +0 -0
  100. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/docs/background_light.rst +0 -0
  101. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/docs/changelog.rst +0 -0
  102. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/docs/conf.py +0 -0
  103. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/docs/gain_correction.rst +0 -0
  104. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/docs/geometric.rst +0 -0
  105. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/docs/index.rst +0 -0
  106. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/docs/l0_to_l1_visp.rst +0 -0
  107. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/docs/l0_to_l1_visp_full-trial.rst +0 -0
  108. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/docs/landing_page.rst +0 -0
  109. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/docs/make.bat +0 -0
  110. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/docs/polarization_calibration.rst +0 -0
  111. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/docs/requirements.txt +0 -0
  112. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/docs/requirements_table.rst +0 -0
  113. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/docs/science_calibration.rst +0 -0
  114. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/docs/scientific_changelog.rst +0 -0
  115. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/licenses/LICENSE.rst +0 -0
  116. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/science_towncrier.sh +0 -0
  117. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/setup.cfg +0 -0
  118. {dkist_processing_visp-5.0.0 → dkist_processing_visp-5.0.0rc2}/towncrier_science.toml +0 -0
@@ -1,36 +1,3 @@
1
- v5.0.0 (2025-12-02)
2
- ===================
3
-
4
- Features
5
- --------
6
-
7
- - Only compute a single lamp gain for each beam. In the past a single map gain was also computed for each modulation state. (`#246 <https://bitbucket.org/dkistdc/dkist-processing-visp/pull-requests/246>`__)
8
- - Add quality report metrics that show the quality of the vignette estimation in the Solar Gain tasks. (`#246 <https://bitbucket.org/dkistdc/dkist-processing-visp/pull-requests/246>`__)
9
- - 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),
10
- and stop applying residual spectral shifts to the characteristic spectra before removing from the input gain array.
11
- See the `Science Changelog <https://docs.dkist.nso.edu/projects/visp/en/stable/scientific_changelog.html>`_ and
12
- `gain algorithm docs <https://docs.dkist.nso.edu/projects/visp/en/stable/gain_correction.html>`_ for more information. (`#246 <https://bitbucket.org/dkistdc/dkist-processing-visp/pull-requests/246>`__)
13
- - Add Buds to parse the spectrograph setup into pipeline constants to be used when fitting a solar atlas. (`#246 <https://bitbucket.org/dkistdc/dkist-processing-visp/pull-requests/246>`__)
14
-
15
-
16
- Misc
17
- ----
18
-
19
- - Remove the `LineZonesMixin` and move its methods directly to the Geometric calibration task, which is now the only task that uses them. (`#246 <https://bitbucket.org/dkistdc/dkist-processing-visp/pull-requests/246>`__)
20
- - Rename the ``solar_spectral_avg_window`` to ``solar_spatial_median_filter_width_px`` to more accurately capture what it does. (`#246 <https://bitbucket.org/dkistdc/dkist-processing-visp/pull-requests/246>`__)
21
- - Rename all line-zone parameters to be "geo*" parameters instead of "solar*" parameters. These parameters are now only used in the
22
- Geometric calibration task. (`#246 <https://bitbucket.org/dkistdc/dkist-processing-visp/pull-requests/246>`__)
23
-
24
-
25
- Documentation
26
- -------------
27
-
28
- - Update the online doc page for `gain calibration <https://docs.dkist.nso.edu/projects/visp/en/stable/gain_correction.html>`_
29
- to reflect the updates to the Solar Gain task. (`#246 <https://bitbucket.org/dkistdc/dkist-processing-visp/pull-requests/246>`__)
30
- - Add intersphinx mappings for `lmfit <https://lmfit.github.io/lmfit-py/>`_ and `scikit-learn <https://scikit-learn.org/stable/>`_
31
- for linking bliss. (`#246 <https://bitbucket.org/dkistdc/dkist-processing-visp/pull-requests/246>`__)
32
-
33
-
34
1
  v4.0.0 (2025-11-12)
35
2
  ===================
36
3
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dkist-processing-visp
3
- Version: 5.0.0
3
+ Version: 5.0.0rc2
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.1
16
+ Requires-Dist: dkist-processing-common==11.8.1rc2
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.0
23
+ Requires-Dist: solar-wavelength-calibration==2.0.0rc3
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.2; extra == "frozen"
98
+ Requires-Dist: alembic==1.17.1; 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.12.0; extra == "frozen"
101
+ Requires-Dist: anyio==4.11.0; extra == "frozen"
102
102
  Requires-Dist: apache-airflow==2.11.0; extra == "frozen"
103
- Requires-Dist: apache-airflow-providers-celery==3.13.1; 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.29.0; extra == "frozen"
103
+ Requires-Dist: apache-airflow-providers-celery==3.10.0; extra == "frozen"
104
+ Requires-Dist: apache-airflow-providers-common-compat==1.8.0; extra == "frozen"
105
+ Requires-Dist: apache-airflow-providers-common-io==1.6.4; extra == "frozen"
106
+ Requires-Dist: apache-airflow-providers-common-sql==1.28.2; extra == "frozen"
107
107
  Requires-Dist: apache-airflow-providers-fab==1.5.3; extra == "frozen"
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"
108
+ Requires-Dist: apache-airflow-providers-ftp==3.13.2; extra == "frozen"
109
+ Requires-Dist: apache-airflow-providers-http==5.4.0; extra == "frozen"
110
+ Requires-Dist: apache-airflow-providers-imap==3.9.3; extra == "frozen"
111
+ Requires-Dist: apache-airflow-providers-postgres==6.4.0; extra == "frozen"
112
+ Requires-Dist: apache-airflow-providers-smtp==2.3.1; extra == "frozen"
113
+ Requires-Dist: apache-airflow-providers-sqlite==4.1.2; extra == "frozen"
114
+ Requires-Dist: apispec==6.8.4; 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.11.0; extra == "frozen"
119
+ Requires-Dist: asgiref==3.10.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.12.1.0.45.12; extra == "frozen"
123
- Requires-Dist: asyncpg==0.31.0; extra == "frozen"
122
+ Requires-Dist: astropy-iers-data==0.2025.11.10.0.38.31; extra == "frozen"
123
+ Requires-Dist: asyncpg==0.30.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.4; extra == "frozen"
126
+ Requires-Dist: billiard==4.2.2; extra == "frozen"
127
127
  Requires-Dist: blinker==1.9.0; extra == "frozen"
128
- Requires-Dist: boto3==1.42.1; extra == "frozen"
129
- Requires-Dist: botocore==1.42.1; extra == "frozen"
128
+ Requires-Dist: boto3==1.40.72; extra == "frozen"
129
+ Requires-Dist: botocore==1.40.72; extra == "frozen"
130
130
  Requires-Dist: cachelib==0.13.0; extra == "frozen"
131
- Requires-Dist: celery==5.6.0; extra == "frozen"
131
+ Requires-Dist: celery==5.3.1; 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.1; extra == "frozen"
135
+ Requires-Dist: click==8.3.0; 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,20 +149,19 @@ 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.1; extra == "frozen"
152
+ Requires-Dist: dkist-processing-common==11.8.1rc2; 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.0; extra == "frozen"
156
+ Requires-Dist: dkist-processing-visp==5.0.0rc2; 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"
163
162
  Requires-Dist: fastjsonschema==2.21.2; extra == "frozen"
164
163
  Requires-Dist: flower==2.0.1; extra == "frozen"
165
- Requires-Dist: fonttools==4.61.0; extra == "frozen"
164
+ Requires-Dist: fonttools==4.60.1; extra == "frozen"
166
165
  Requires-Dist: frozenlist==1.8.0; extra == "frozen"
167
166
  Requires-Dist: fsspec==2025.10.0; extra == "frozen"
168
167
  Requires-Dist: globus-sdk==3.65.0; extra == "frozen"
@@ -187,7 +186,7 @@ Requires-Dist: jsonschema==4.25.1; extra == "frozen"
187
186
  Requires-Dist: jsonschema-specifications==2025.9.1; extra == "frozen"
188
187
  Requires-Dist: jupyter_core==5.9.1; extra == "frozen"
189
188
  Requires-Dist: kiwisolver==1.4.9; extra == "frozen"
190
- Requires-Dist: kombu==5.6.1; extra == "frozen"
189
+ Requires-Dist: kombu==5.6.0; extra == "frozen"
191
190
  Requires-Dist: lazy-object-proxy==1.12.0; extra == "frozen"
192
191
  Requires-Dist: lazy_loader==0.4; extra == "frozen"
193
192
  Requires-Dist: limits==5.6.0; extra == "frozen"
@@ -207,7 +206,7 @@ Requires-Dist: more-itertools==10.8.0; extra == "frozen"
207
206
  Requires-Dist: moviepy==2.1.2; extra == "frozen"
208
207
  Requires-Dist: multidict==6.7.0; extra == "frozen"
209
208
  Requires-Dist: nbformat==5.10.4; extra == "frozen"
210
- Requires-Dist: networkx==3.6; extra == "frozen"
209
+ Requires-Dist: networkx==3.5; extra == "frozen"
211
210
  Requires-Dist: numpy==2.2.5; extra == "frozen"
212
211
  Requires-Dist: object-clerk==1.0.0; extra == "frozen"
213
212
  Requires-Dist: opentelemetry-api==1.38.0; extra == "frozen"
@@ -252,11 +251,11 @@ Requires-Dist: proglog==0.1.12; extra == "frozen"
252
251
  Requires-Dist: prometheus_client==0.23.1; extra == "frozen"
253
252
  Requires-Dist: prompt_toolkit==3.0.52; extra == "frozen"
254
253
  Requires-Dist: propcache==0.4.1; extra == "frozen"
255
- Requires-Dist: protobuf==6.33.1; extra == "frozen"
254
+ Requires-Dist: protobuf==6.33.0; extra == "frozen"
256
255
  Requires-Dist: psutil==7.1.3; extra == "frozen"
257
256
  Requires-Dist: psycopg2-binary==2.9.11; extra == "frozen"
258
257
  Requires-Dist: pycparser==2.23; extra == "frozen"
259
- Requires-Dist: pydantic==2.12.5; extra == "frozen"
258
+ Requires-Dist: pydantic==2.12.4; extra == "frozen"
260
259
  Requires-Dist: pydantic-settings==2.12.0; extra == "frozen"
261
260
  Requires-Dist: pydantic_core==2.41.5; extra == "frozen"
262
261
  Requires-Dist: pyerfa==2.0.1.5; extra == "frozen"
@@ -274,17 +273,18 @@ Requires-Dist: requests-toolbelt==1.0.0; extra == "frozen"
274
273
  Requires-Dist: rfc3339-validator==0.1.4; extra == "frozen"
275
274
  Requires-Dist: rich==13.9.4; extra == "frozen"
276
275
  Requires-Dist: rich-argparse==1.7.2; extra == "frozen"
277
- Requires-Dist: rpds-py==0.30.0; extra == "frozen"
278
- Requires-Dist: s3transfer==0.16.0; extra == "frozen"
276
+ Requires-Dist: rpds-py==0.28.0; extra == "frozen"
277
+ Requires-Dist: s3transfer==0.14.0; extra == "frozen"
279
278
  Requires-Dist: scikit-image==0.25.2; extra == "frozen"
280
279
  Requires-Dist: scikit-learn==1.6.1; extra == "frozen"
281
280
  Requires-Dist: scipy==1.15.3; extra == "frozen"
282
281
  Requires-Dist: semantic-version==2.10.0; extra == "frozen"
283
282
  Requires-Dist: setproctitle==1.3.7; extra == "frozen"
284
283
  Requires-Dist: six==1.17.0; extra == "frozen"
285
- Requires-Dist: solar-wavelength-calibration==2.0.0; extra == "frozen"
284
+ Requires-Dist: sniffio==1.3.1; extra == "frozen"
285
+ Requires-Dist: solar-wavelength-calibration==2.0.0rc3; extra == "frozen"
286
286
  Requires-Dist: sqids==0.5.1; extra == "frozen"
287
- Requires-Dist: sqlparse==0.5.4; extra == "frozen"
287
+ Requires-Dist: sqlparse==0.5.3; 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,17 +299,16 @@ 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"
303
302
  Requires-Dist: uc-micro-py==1.0.3; extra == "frozen"
304
303
  Requires-Dist: uncertainties==3.2.3; extra == "frozen"
305
- Requires-Dist: universal_pathlib==0.3.6; extra == "frozen"
304
+ Requires-Dist: universal_pathlib==0.3.5; extra == "frozen"
306
305
  Requires-Dist: urllib3==2.5.0; extra == "frozen"
307
306
  Requires-Dist: vine==5.1.0; extra == "frozen"
308
307
  Requires-Dist: voluptuous==0.15.2; extra == "frozen"
309
308
  Requires-Dist: wcwidth==0.2.14; extra == "frozen"
310
309
  Requires-Dist: wirerope==1.0.0; extra == "frozen"
311
310
  Requires-Dist: wrapt==1.17.3; extra == "frozen"
312
- Requires-Dist: yamale==6.1.0; extra == "frozen"
311
+ Requires-Dist: yamale==6.0.0; extra == "frozen"
313
312
  Requires-Dist: yarl==1.22.0; extra == "frozen"
314
313
  Requires-Dist: zipp==3.23.0; extra == "frozen"
315
314
 
@@ -1,22 +1,3 @@
1
- v5.0.0 (2025-12-02)
2
- ===================
3
-
4
-
5
-
6
-
7
- - Major update to the gain algorithm to mitigate polarization artifacts in L1 science frames. This change can be split into
8
- three parts. See the `gain correction <https://docs.dkist.nso.edu/projects/visp/en/stable/gain_correction.html>`_ page for more information.
9
-
10
- #. 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.
11
-
12
- #. 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.
13
-
14
- #. 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.
15
-
16
- Computing a single gain per beam will greatly reduce the polarization artifacts in L1 data. Measuring the vignette
17
- signal directly will further reduce these artifacts and improve flatness across the array. (`#246 <https://bitbucket.org/dkistdc/dkist-processing-visp/pull-requests/246>`__)
18
-
19
-
20
1
  v4.0.0 (2025-11-12)
21
2
  ===================
22
3
 
@@ -0,0 +1,2 @@
1
+ Add intersphinx mappings for `lmfit <https://lmfit.github.io/lmfit-py/>`_ and `scikit-learn <https://scikit-learn.org/stable/>`_
2
+ for linking bliss.
@@ -0,0 +1,2 @@
1
+ Update the online doc page for `gain calibration <https://docs.dkist.nso.edu/projects/visp/en/stable/gain_correction.html>`_
2
+ to reflect the updates to the Solar Gain task.
@@ -0,0 +1 @@
1
+ Only compute a single lamp gain for each beam. In the past a single map gain was also computed for each modulation state.
@@ -0,0 +1 @@
1
+ Add Buds to parse the spectrograph setup into pipeline constants to be used when fitting a solar atlas.
@@ -0,0 +1 @@
1
+ Add quality report metrics that show the quality of the vignette estimation in the Solar Gain tasks.
@@ -0,0 +1,4 @@
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.
@@ -0,0 +1 @@
1
+ Remove the `LineZonesMixin` and move its methods directly to the Geometric calibration task, which is now the only task that uses them.
@@ -0,0 +1 @@
1
+ Rename the ``solar_spectral_avg_window`` to ``solar_spatial_median_filter_width_px`` to more accurately capture what it does.
@@ -0,0 +1,2 @@
1
+ Rename all line-zone parameters to be "geo_" parameters instead of "solar_" parameters. These parameters are now only used in the
2
+ Geometric calibration task.
@@ -0,0 +1,11 @@
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.
@@ -1,7 +1,6 @@
1
1
  """Visp calibration pipeline parameters."""
2
2
 
3
3
  from datetime import datetime
4
- from random import randint
5
4
  from typing import Any
6
5
 
7
6
  import astropy.units as u
@@ -187,38 +186,10 @@ class VispParameters(ParameterBase, ParameterWavelengthMixin, ParameterArmIdMixi
187
186
  "visp_solar_vignette_initial_continuum_poly_fit_order"
188
187
  )
189
188
 
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
-
209
189
  @property
210
190
  def solar_vignette_wavecal_fit_kwargs(self) -> dict[str, Any]:
211
191
  """Define extra keyword arguments to pass to the wavelength calibration fitter."""
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
192
+ return self._find_most_recent_past_value("visp_solar_vignette_wavecal_fit_kwargs")
222
193
 
223
194
  @property
224
195
  def solar_vignette_spectral_poly_fit_order(self) -> int:
@@ -257,13 +228,6 @@ class VispParameters(ParameterBase, ParameterWavelengthMixin, ParameterArmIdMixi
257
228
  config_dict = self._find_most_recent_past_value("visp_wavecal_atlas_download_config")
258
229
  return DownloadConfig.model_validate(config_dict)
259
230
 
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
-
267
231
  @property
268
232
  def wavecal_init_resolving_power(self) -> int:
269
233
  """Define the initial guess for ViSP resolving power in wavecal fits."""
@@ -70,7 +70,6 @@ class WavelengthCalibrationParametersWithContinuum(WavelengthCalibrationParamete
70
70
 
71
71
  continuum_poly_fit_order: int
72
72
  normalized_abscissa: np.ndarray
73
- zeroth_order_continuum_coefficient: float
74
73
 
75
74
  @property
76
75
  def continuum_function(self) -> Callable[[np.ndarray, Parameters], np.ndarray]:
@@ -94,26 +93,16 @@ class WavelengthCalibrationParametersWithContinuum(WavelengthCalibrationParamete
94
93
  # dynamically create the required number of "poly_coeff_{o:02n}" fields. Sorry if this bites you!
95
94
  params = super().lmfit_parameters
96
95
  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.
99
96
  params.add(
100
97
  f"poly_coeff_{o:02n}",
101
98
  vary=True,
102
- value=(
103
- self.zeroth_order_continuum_coefficient
104
- if o == self.continuum_poly_fit_order
105
- else 0
106
- ),
99
+ value=o // self.continuum_poly_fit_order,
107
100
  min=-1,
108
101
  max=1,
109
102
  )
110
103
 
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
- )
104
+ params[f"poly_coeff_{self.continuum_poly_fit_order:02n}"].min = 0.7
105
+ params[f"poly_coeff_{self.continuum_poly_fit_order:02n}"].max = 1.3
117
106
 
118
107
  # Remove the default continuum parameterization
119
108
  del params["continuum_level"]
@@ -562,11 +551,9 @@ class SolarCalibration(
562
551
 
563
552
  fitter = WavelengthCalibrationFitter(input_parameters=init_parameters, atlas=atlas)
564
553
  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}")
567
554
  fit_result = fitter(
568
555
  input_spectrum=representative_spectrum,
569
- **extra_kwargs,
556
+ **self.parameters.solar_vignette_wavecal_fit_kwargs,
570
557
  )
571
558
 
572
559
  return fit_result
@@ -623,7 +610,6 @@ class SolarCalibration(
623
610
  negative_limit=-wavelength_range / 2,
624
611
  positive_limit=wavelength_range / 2,
625
612
  num_steps=500,
626
- normalization_percentile=self.parameters.wavecal_init_crval_guess_normalization_percentile,
627
613
  )
628
614
 
629
615
  logger.info(f"{crval_init = !s}")
@@ -641,22 +627,18 @@ class SolarCalibration(
641
627
  resolving_power = self.parameters.wavecal_init_resolving_power
642
628
  opacity_factor = self.parameters.wavecal_init_opacity_factor
643
629
  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}")
651
630
 
652
- wavelength_search_width = dispersion * self.parameters.solar_vignette_crval_bounds_px
631
+ # The first time we have to change these ranges (which may never happen!) we should at least consider making
632
+ # them parameters.
633
+ wavelength_search_width = wavelength_range * 0.15
653
634
  bounds = BoundsModel(
635
+ # An alternative for the crval bounds would be `[input_wavelength_vector.min(), input_wavelength_vector.max()]`
654
636
  crval=LengthBoundRange(
655
637
  min=crval_init - wavelength_search_width, max=crval_init + wavelength_search_width
656
638
  ),
657
639
  dispersion=DispersionBoundRange(
658
- min=dispersion * (1 - self.parameters.solar_vignette_dispersion_bounds_fraction),
659
- max=dispersion * (1 + self.parameters.solar_vignette_dispersion_bounds_fraction),
640
+ min=dispersion * 0.96,
641
+ max=dispersion * 1.04,
660
642
  ),
661
643
  incident_light_angle=AngleBoundRange(
662
644
  min=incident_light_angle - 1 * u.deg, max=incident_light_angle + 1 * u.deg
@@ -664,6 +646,7 @@ class SolarCalibration(
664
646
  resolving_power=UnitlessBoundRange(min=1e5, max=5e5),
665
647
  opacity_factor=UnitlessBoundRange(min=1.0, max=10),
666
648
  straylight_fraction=UnitlessBoundRange(min=0.0, max=0.8),
649
+ continuum_level=UnitlessBoundRange(min=0.99, max=1.1),
667
650
  )
668
651
 
669
652
  init_params = WavelengthCalibrationParametersWithContinuum(
@@ -673,7 +656,7 @@ class SolarCalibration(
673
656
  grating_constant=grating_constant,
674
657
  doppler_velocity=doppler_velocity,
675
658
  order=spectral_order,
676
- continuum_level=1,
659
+ continuum_level=1.0,
677
660
  resolving_power=resolving_power,
678
661
  opacity_factor=opacity_factor,
679
662
  straylight_fraction=straylight_faction,
@@ -681,44 +664,10 @@ class SolarCalibration(
681
664
  bounds=bounds,
682
665
  continuum_poly_fit_order=self.parameters.solar_vignette_initial_continuum_poly_fit_order,
683
666
  normalized_abscissa=normalized_abscissa,
684
- zeroth_order_continuum_coefficient=relative_atlas_scaling,
685
667
  )
686
668
 
687
669
  return init_params
688
670
 
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
-
722
671
  def compute_final_vignette_estimate(self, init_vignette_correction: np.ndarray) -> np.ndarray:
723
672
  """
724
673
  Fit the spectral shape of continuum residuals for each spatial pixel.
@@ -149,8 +149,6 @@ 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
154
152
  visp_solar_vignette_wavecal_fit_kwargs: dict[str, Any] = field(
155
153
  default_factory=lambda: {
156
154
  "method": "differential_evolution",
@@ -186,7 +184,6 @@ class VispInputDatasetParameterValues:
186
184
  "solar_reference_atlas_hash_id": "md5:84ab4c50689ef235fe5ed4f7ee905ca0",
187
185
  }
188
186
  )
189
- visp_wavecal_init_crval_guess_normalization_percentile: float = 95
190
187
  visp_wavecal_init_resolving_power: int = 150000
191
188
  visp_wavecal_init_straylight_fraction: float = 0.2
192
189
  visp_wavecal_init_opacity_factor: float = 5.0
@@ -34,7 +34,6 @@ 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,
38
37
  "wavecal_camera_lens_parameters": [u.m, u.m / u.nm, u.m / u.nm**2],
39
38
  "wavecal_pixel_pitch_micron_per_pix": u.um / u.pix,
40
39
  }
@@ -103,11 +102,7 @@ def test_non_wave_parameters(
103
102
  pn = f"{pn}_{arm_id}"
104
103
  pv = expected[pn]
105
104
  is_wavelength_param = isinstance(pv, dict) and "wavelength" in pv
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
- ):
105
+ if parameter_name not in parse_parameter_names and not is_wavelength_param:
111
106
  param_obj_value = getattr(task_param_attr, parameter_name)
112
107
  if isinstance(pv, tuple):
113
108
  pv = list(pv)
@@ -175,47 +170,3 @@ def test_wave_parameters(
175
170
  is_wavelength_param = isinstance(pv, dict) and "wavelength" in pv
176
171
  if is_wavelength_param and property_name not in parse_parameter_names + arm_parameter_names:
177
172
  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,10 +311,7 @@ def solar_gain_task(
311
311
 
312
312
  @pytest.mark.parametrize(
313
313
  "background_on",
314
- [
315
- pytest.param(True, id="background_on"),
316
- pytest.param(False, id="background_off"),
317
- ],
314
+ [pytest.param(True, id="background_on"), pytest.param(False, id="background_off")],
318
315
  )
319
316
  def test_solar_gain_task(
320
317
  solar_gain_task,
@@ -450,10 +447,8 @@ def test_continuum_wavecal_parameters():
450
447
  Then: The polynomial coefficients are present
451
448
  """
452
449
  order = 3
453
- zeroth_order = 6.28
454
450
  param_object = WavelengthCalibrationParametersWithContinuum(
455
451
  continuum_poly_fit_order=order,
456
- zeroth_order_continuum_coefficient=zeroth_order,
457
452
  crval=400 * u.nm,
458
453
  dispersion=3 * u.nm / u.pix,
459
454
  incident_light_angle=4 * u.deg,
@@ -461,7 +456,6 @@ def test_continuum_wavecal_parameters():
461
456
  doppler_velocity=0 * u.km / u.s,
462
457
  order=1,
463
458
  normalized_abscissa=np.arange(10),
464
- continuum_level=99999.9,
465
459
  )
466
460
  lmfit_params = param_object.lmfit_parameters
467
461
 
@@ -470,13 +464,13 @@ def test_continuum_wavecal_parameters():
470
464
  assert "poly_coeff_01" in lmfit_params
471
465
  assert "poly_coeff_00" in lmfit_params
472
466
 
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
467
+ assert lmfit_params["poly_coeff_03"].value == 1
468
+ assert lmfit_params["poly_coeff_02"].value == 0
469
+ assert lmfit_params["poly_coeff_01"].value == 0
470
+ assert lmfit_params["poly_coeff_00"].value == 0
477
471
 
478
- assert lmfit_params["poly_coeff_03"].min == zeroth_order * 0.5
479
- assert lmfit_params["poly_coeff_03"].max == zeroth_order * 1.5
472
+ assert lmfit_params["poly_coeff_03"].min == 0.7
473
+ assert lmfit_params["poly_coeff_03"].max == 1.3
480
474
  assert lmfit_params["poly_coeff_02"].min == -1
481
475
  assert lmfit_params["poly_coeff_02"].max == 1
482
476
  assert lmfit_params["poly_coeff_01"].min == -1