dkist-processing-vbi 1.28.5__tar.gz → 1.28.6__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 (81) hide show
  1. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/CHANGELOG.rst +15 -0
  2. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/PKG-INFO +10 -10
  3. dkist_processing_vbi-1.28.6/dkist_processing_vbi/tasks/quality_metrics.py +29 -0
  4. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/tests/local_trial_workflows/l0_to_l1.py +0 -2
  5. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/tests/test_quality_metrics.py +0 -46
  6. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/workflows/l0_processing.py +1 -5
  7. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/workflows/summit_data_processing.py +1 -5
  8. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/workflows/trial_workflows.py +2 -7
  9. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi.egg-info/PKG-INFO +10 -10
  10. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi.egg-info/requires.txt +9 -9
  11. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/pyproject.toml +11 -11
  12. dkist_processing_vbi-1.28.5/dkist_processing_vbi/tasks/quality_metrics.py +0 -71
  13. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/.gitignore +0 -0
  14. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/.pre-commit-config.yaml +0 -0
  15. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/.readthedocs.yml +0 -0
  16. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/.snyk +0 -0
  17. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/README.rst +0 -0
  18. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/SCIENCE_CHANGELOG.rst +0 -0
  19. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/bitbucket-pipelines.yml +0 -0
  20. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/changelog/.gitempty +0 -0
  21. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/__init__.py +0 -0
  22. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/config.py +0 -0
  23. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/models/__init__.py +0 -0
  24. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/models/constants.py +0 -0
  25. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/models/filter.py +0 -0
  26. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/models/fits_access.py +0 -0
  27. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/models/parameters.py +0 -0
  28. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/models/tags.py +0 -0
  29. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/parsers/__init__.py +0 -0
  30. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/parsers/mosaic_repeats.py +0 -0
  31. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/parsers/spatial_step_pattern.py +0 -0
  32. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/parsers/vbi_l0_fits_access.py +0 -0
  33. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/parsers/vbi_l1_fits_access.py +0 -0
  34. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/tasks/__init__.py +0 -0
  35. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/tasks/assemble_movie.py +0 -0
  36. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/tasks/dark.py +0 -0
  37. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/tasks/gain.py +0 -0
  38. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/tasks/make_movie_frames.py +0 -0
  39. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/tasks/parse.py +0 -0
  40. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/tasks/process_summit_processed.py +0 -0
  41. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/tasks/science.py +0 -0
  42. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/tasks/vbi_base.py +0 -0
  43. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/tasks/write_l1.py +0 -0
  44. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/tests/__init__.py +0 -0
  45. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/tests/conftest.py +0 -0
  46. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/tests/local_trial_workflows/__init__.py +0 -0
  47. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/tests/test_assemble_movie.py +0 -0
  48. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/tests/test_dark.py +0 -0
  49. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/tests/test_fits_access.py +0 -0
  50. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/tests/test_gain.py +0 -0
  51. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/tests/test_make_movie_frames.py +0 -0
  52. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/tests/test_parse_l0.py +0 -0
  53. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/tests/test_parse_summit.py +0 -0
  54. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/tests/test_process_summit.py +0 -0
  55. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/tests/test_science.py +0 -0
  56. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/tests/test_spatial_step_pattern.py +0 -0
  57. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/tests/test_vbi_base.py +0 -0
  58. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/tests/test_vbi_constants.py +0 -0
  59. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/tests/test_workflows.py +0 -0
  60. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/tests/test_write_l1.py +0 -0
  61. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi/workflows/__init__.py +0 -0
  62. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi.egg-info/SOURCES.txt +0 -0
  63. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi.egg-info/dependency_links.txt +0 -0
  64. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/dkist_processing_vbi.egg-info/top_level.txt +0 -0
  65. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/docs/Makefile +0 -0
  66. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/docs/changelog.rst +0 -0
  67. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/docs/conf.py +0 -0
  68. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/docs/index.rst +0 -0
  69. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/docs/l0_to_l1_vbi_no-speckle-full-trial.rst +0 -0
  70. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/docs/l0_to_l1_vbi_no-speckle.rst +0 -0
  71. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/docs/l0_to_l1_vbi_summit-calibrated-full-trial.rst +0 -0
  72. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/docs/l0_to_l1_vbi_summit-calibrated.rst +0 -0
  73. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/docs/landing_page.rst +0 -0
  74. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/docs/make.bat +0 -0
  75. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/docs/requirements.txt +0 -0
  76. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/docs/requirements_table.rst +0 -0
  77. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/docs/scientific_changelog.rst +0 -0
  78. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/licenses/LICENSE.rst +0 -0
  79. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/science_towncrier.sh +0 -0
  80. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/setup.cfg +0 -0
  81. {dkist_processing_vbi-1.28.5 → dkist_processing_vbi-1.28.6}/towncrier_science.toml +0 -0
@@ -1,3 +1,18 @@
1
+ v1.28.6 (2026-04-20)
2
+ ====================
3
+
4
+ Features
5
+ --------
6
+
7
+ - Remove `VbiQualityL1Metrics` workflow task. (`#196 <https://bitbucket.org/dkistdc/dkist-processing-vbi/pull-requests/196>`__)
8
+
9
+
10
+ Misc
11
+ ----
12
+
13
+ - Update dkist-processing-common to 13.0.5, which removes 4 unused quality metric codes: RANGE, NOISE, SENSITIVITY, HISTORICAL. (`#196 <https://bitbucket.org/dkistdc/dkist-processing-vbi/pull-requests/196>`__)
14
+
15
+
1
16
  v1.28.5 (2026-04-17)
2
17
  ====================
3
18
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dkist-processing-vbi
3
- Version: 1.28.5
3
+ Version: 1.28.6
4
4
  Summary: Processing code for the VBI instrument on DKIST
5
5
  Author-email: NSO / AURA <dkistdc@nso.edu>
6
6
  License: BSD-3-Clause
@@ -13,7 +13,7 @@ Classifier: Programming Language :: Python :: 3
13
13
  Classifier: Programming Language :: Python :: 3.13
14
14
  Requires-Python: >=3.13
15
15
  Description-Content-Type: text/x-rst
16
- Requires-Dist: dkist-processing-common==13.0.4
16
+ Requires-Dist: dkist-processing-common==13.0.5
17
17
  Requires-Dist: dkist-processing-math==2.2.2
18
18
  Requires-Dist: dkist-header-validator==5.3.1
19
19
  Requires-Dist: dkist-fits-specifications==4.24.1
@@ -96,13 +96,13 @@ Requires-Dist: asdf_transform_schemas==0.6.0; extra == "frozen"
96
96
  Requires-Dist: asgiref==3.11.1; extra == "frozen"
97
97
  Requires-Dist: asteval==1.0.8; extra == "frozen"
98
98
  Requires-Dist: astropy==7.0.2; extra == "frozen"
99
- Requires-Dist: astropy-iers-data==0.2026.4.13.0.58.2; extra == "frozen"
99
+ Requires-Dist: astropy-iers-data==0.2026.4.20.0.58.15; extra == "frozen"
100
100
  Requires-Dist: asyncpg==0.31.0; extra == "frozen"
101
101
  Requires-Dist: attrs==26.1.0; extra == "frozen"
102
102
  Requires-Dist: babel==2.18.0; extra == "frozen"
103
103
  Requires-Dist: billiard==4.2.4; extra == "frozen"
104
- Requires-Dist: boto3==1.42.91; extra == "frozen"
105
- Requires-Dist: botocore==1.42.91; extra == "frozen"
104
+ Requires-Dist: boto3==1.42.92; extra == "frozen"
105
+ Requires-Dist: botocore==1.42.92; extra == "frozen"
106
106
  Requires-Dist: cadwyn==5.4.6; extra == "frozen"
107
107
  Requires-Dist: celery==5.6.3; extra == "frozen"
108
108
  Requires-Dist: certifi==2026.2.25; extra == "frozen"
@@ -122,11 +122,11 @@ Requires-Dist: dacite==1.9.2; extra == "frozen"
122
122
  Requires-Dist: decorator==5.2.1; extra == "frozen"
123
123
  Requires-Dist: dill==0.4.1; extra == "frozen"
124
124
  Requires-Dist: dkist-header-validator==5.3.1; extra == "frozen"
125
- Requires-Dist: dkist-processing-common==13.0.4; extra == "frozen"
125
+ Requires-Dist: dkist-processing-common==13.0.5; extra == "frozen"
126
126
  Requires-Dist: dkist-processing-core==7.2.1; extra == "frozen"
127
127
  Requires-Dist: dkist-processing-math==2.2.2; extra == "frozen"
128
128
  Requires-Dist: dkist-processing-pac==3.1.1; extra == "frozen"
129
- Requires-Dist: dkist-processing-vbi==1.28.5; extra == "frozen"
129
+ Requires-Dist: dkist-processing-vbi==1.28.6; extra == "frozen"
130
130
  Requires-Dist: dkist-service-configuration==4.3.0; extra == "frozen"
131
131
  Requires-Dist: dkist-spectral-lines==3.0.1; extra == "frozen"
132
132
  Requires-Dist: dkist_fits_specifications==4.24.1; extra == "frozen"
@@ -224,9 +224,9 @@ Requires-Dist: protobuf==6.33.6; extra == "frozen"
224
224
  Requires-Dist: psutil==7.2.2; extra == "frozen"
225
225
  Requires-Dist: psycopg2-binary==2.9.11; extra == "frozen"
226
226
  Requires-Dist: pycparser==3.0; extra == "frozen"
227
- Requires-Dist: pydantic==2.13.2; extra == "frozen"
228
- Requires-Dist: pydantic-settings==2.13.1; extra == "frozen"
229
- Requires-Dist: pydantic_core==2.46.2; extra == "frozen"
227
+ Requires-Dist: pydantic==2.13.3; extra == "frozen"
228
+ Requires-Dist: pydantic-settings==2.14.0; extra == "frozen"
229
+ Requires-Dist: pydantic_core==2.46.3; extra == "frozen"
230
230
  Requires-Dist: pyerfa==2.0.1.5; extra == "frozen"
231
231
  Requires-Dist: pygtrie==2.5.0; extra == "frozen"
232
232
  Requires-Dist: pyparsing==3.3.2; extra == "frozen"
@@ -0,0 +1,29 @@
1
+ """VBI specific quality metrics."""
2
+
3
+ from typing import Iterable
4
+
5
+ from dkist_processing_common.tasks.quality_metrics import QualityL0Metrics
6
+
7
+ __all__ = ["VbiQualityL0Metrics"]
8
+
9
+
10
+ class VbiQualityL0Metrics(QualityL0Metrics):
11
+ """
12
+ Task class for collecting VBI L0 quality metrics.
13
+
14
+ Parameters
15
+ ----------
16
+ recipe_run_id : int
17
+ id of the recipe run used to identify the workflow run this task is part of
18
+ workflow_name : str
19
+ name of the workflow to which this instance of the task belongs
20
+ workflow_version : str
21
+ version of the workflow to which this instance of the task belongs
22
+
23
+ """
24
+
25
+ @property
26
+ def modstate_list(self) -> Iterable[int] | None:
27
+ """Define modstates over which to compute L0 metrics. VBI has none because it is not polarimetric."""
28
+ # Yes, this is just the default, but by explicitly calling it out here we're resistant to any upstream change.
29
+ return None
@@ -28,7 +28,6 @@ from dkist_processing_vbi.tasks.make_movie_frames import MakeVbiMovieFrames
28
28
  from dkist_processing_vbi.tasks.parse import ParseL0VbiInputData
29
29
  from dkist_processing_vbi.tasks.process_summit_processed import GenerateL1SummitData
30
30
  from dkist_processing_vbi.tasks.quality_metrics import VbiQualityL0Metrics
31
- from dkist_processing_vbi.tasks.quality_metrics import VbiQualityL1Metrics
32
31
  from dkist_processing_vbi.tasks.science import ScienceCalibration
33
32
  from dkist_processing_vbi.tasks.vbi_base import VbiTaskBase
34
33
  from dkist_processing_vbi.tasks.write_l1 import VbiWriteL1Frame
@@ -192,7 +191,6 @@ def main(
192
191
  science_workflow(manual_processing_run)
193
192
  manual_processing_run.run_task(task=VbiWriteL1Frame)
194
193
  manual_processing_run.run_task(task=QualityL1Metrics)
195
- manual_processing_run.run_task(task=VbiQualityL1Metrics)
196
194
  manual_processing_run.run_task(task=AssembleQualityData)
197
195
  manual_processing_run.run_task(task=ValidateL1Output)
198
196
 
@@ -1,9 +1,7 @@
1
- import json
2
1
  from pathlib import Path
3
2
 
4
3
  import numpy as np
5
4
  import pytest
6
- from astropy.io import fits
7
5
  from dkist_data_simulator.spec122 import Spec122Dataset
8
6
  from dkist_processing_common._util.scratch import WorkflowFileSystem
9
7
  from dkist_processing_common.codecs.basemodel import basemodel_decoder
@@ -14,8 +12,6 @@ from dkist_processing_common.models.task_name import TaskName
14
12
 
15
13
  from dkist_processing_vbi.models.tags import VbiTag
16
14
  from dkist_processing_vbi.tasks.quality_metrics import VbiQualityL0Metrics
17
- from dkist_processing_vbi.tasks.quality_metrics import VbiQualityL1Metrics
18
- from dkist_processing_vbi.tests.conftest import VbiConstantsDb
19
15
 
20
16
 
21
17
  class BaseSpec214Dataset(Spec122Dataset):
@@ -124,45 +120,3 @@ def test_l0_quality_task(
124
120
  for facet in l0_quality_task_types:
125
121
  # make sure two facets of each type
126
122
  assert len([metric for metric in frame_metrics if metric.facet == facet]) == 2
127
-
128
-
129
- @pytest.fixture
130
- def vbi_l1_quality_task(tmp_path, recipe_run_id, init_vbi_constants_db):
131
- constants_db = VbiConstantsDb()
132
- init_vbi_constants_db(recipe_run_id, constants_db)
133
- with VbiQualityL1Metrics(
134
- recipe_run_id=recipe_run_id,
135
- workflow_name="workflow_name",
136
- workflow_version="workflow_version",
137
- ) as task:
138
- task.scratch = WorkflowFileSystem(scratch_base_path=tmp_path, recipe_run_id=recipe_run_id)
139
- for i in range(10):
140
- header_dict = [
141
- d.header(required_only=False, expected_only=False) for d in BaseSpec214Dataset()
142
- ][0]
143
- data = np.ones(shape=BaseSpec214Dataset().array_shape)
144
- task.write(
145
- data=data,
146
- header=fits.Header(header_dict),
147
- tags=[Tag.calibrated(), Tag.frame()],
148
- encoder=fits_array_encoder,
149
- )
150
- yield task
151
- task._purge()
152
-
153
-
154
- def test_noise(vbi_l1_quality_task):
155
- """
156
- Given: a task with the VbiQualityL1Metrics class
157
- When: checking that the noise metric was created and stored correctly
158
- Then: the metric is encoded as a json object, which when opened contains a dictionary with the expected schema
159
- """
160
- task = vbi_l1_quality_task
161
- task()
162
- files = list(task.read(tags=Tag.quality("NOISE")))
163
- for file in files:
164
- with file.open() as f:
165
- data = json.load(f)
166
- assert isinstance(data, dict)
167
- assert all(isinstance(item, str) for item in data["x_values"])
168
- assert all(isinstance(item, float) for item in data["y_values"])
@@ -27,7 +27,6 @@ from dkist_processing_vbi.tasks import MakeVbiMovieFrames
27
27
  from dkist_processing_vbi.tasks import ParseL0VbiInputData
28
28
  from dkist_processing_vbi.tasks import ScienceCalibration
29
29
  from dkist_processing_vbi.tasks import VbiQualityL0Metrics
30
- from dkist_processing_vbi.tasks import VbiQualityL1Metrics
31
30
  from dkist_processing_vbi.tasks import VbiWriteL1Frame
32
31
 
33
32
  l0_pipeline = Workflow(
@@ -54,10 +53,7 @@ l0_pipeline.add_node(task=AssembleVbiMovie, upstreams=MakeVbiMovieFrames)
54
53
  # Quality flow
55
54
  l0_pipeline.add_node(task=VbiQualityL0Metrics, upstreams=ParseL0VbiInputData)
56
55
  l0_pipeline.add_node(task=QualityL1Metrics, upstreams=ScienceCalibration)
57
- l0_pipeline.add_node(task=VbiQualityL1Metrics, upstreams=ScienceCalibration)
58
- l0_pipeline.add_node(
59
- task=AssembleQualityData, upstreams=[VbiQualityL0Metrics, QualityL1Metrics, VbiQualityL1Metrics]
60
- )
56
+ l0_pipeline.add_node(task=AssembleQualityData, upstreams=[VbiQualityL0Metrics, QualityL1Metrics])
61
57
 
62
58
  # Output flow
63
59
  l0_pipeline.add_node(
@@ -24,7 +24,6 @@ from dkist_processing_vbi.tasks import AssembleVbiMovie
24
24
  from dkist_processing_vbi.tasks import GenerateL1SummitData
25
25
  from dkist_processing_vbi.tasks import MakeVbiMovieFrames
26
26
  from dkist_processing_vbi.tasks import ParseL0VbiInputData
27
- from dkist_processing_vbi.tasks import VbiQualityL1Metrics
28
27
  from dkist_processing_vbi.tasks import VbiWriteL1Frame
29
28
 
30
29
  summit_processed_data = Workflow(
@@ -46,11 +45,8 @@ summit_processed_data.add_node(task=MakeVbiMovieFrames, upstreams=GenerateL1Summ
46
45
  summit_processed_data.add_node(task=AssembleVbiMovie, upstreams=MakeVbiMovieFrames)
47
46
 
48
47
  # Quality flow
49
- summit_processed_data.add_node(task=VbiQualityL1Metrics, upstreams=GenerateL1SummitData)
50
48
  summit_processed_data.add_node(task=QualityL1Metrics, upstreams=GenerateL1SummitData)
51
- summit_processed_data.add_node(
52
- task=AssembleQualityData, upstreams=[VbiQualityL1Metrics, QualityL1Metrics]
53
- )
49
+ summit_processed_data.add_node(task=AssembleQualityData, upstreams=QualityL1Metrics)
54
50
 
55
51
  # Output flow
56
52
  summit_processed_data.add_node(
@@ -23,7 +23,6 @@ from dkist_processing_vbi.tasks import MakeVbiMovieFrames
23
23
  from dkist_processing_vbi.tasks import ParseL0VbiInputData
24
24
  from dkist_processing_vbi.tasks import ScienceCalibration
25
25
  from dkist_processing_vbi.tasks import VbiQualityL0Metrics
26
- from dkist_processing_vbi.tasks import VbiQualityL1Metrics
27
26
  from dkist_processing_vbi.tasks import VbiWriteL1Frame
28
27
 
29
28
  # Summit-calibrated pipeline
@@ -46,11 +45,8 @@ full_trial_summit_pipeline.add_node(task=MakeVbiMovieFrames, upstreams=GenerateL
46
45
  full_trial_summit_pipeline.add_node(task=AssembleVbiMovie, upstreams=MakeVbiMovieFrames)
47
46
 
48
47
  # Quality flow
49
- full_trial_summit_pipeline.add_node(task=VbiQualityL1Metrics, upstreams=GenerateL1SummitData)
50
48
  full_trial_summit_pipeline.add_node(task=QualityL1Metrics, upstreams=GenerateL1SummitData)
51
- full_trial_summit_pipeline.add_node(
52
- task=AssembleQualityData, upstreams=[VbiQualityL1Metrics, QualityL1Metrics]
53
- )
49
+ full_trial_summit_pipeline.add_node(task=AssembleQualityData, upstreams=QualityL1Metrics)
54
50
 
55
51
  # Output flow
56
52
  full_trial_summit_pipeline.add_node(
@@ -102,9 +98,8 @@ full_trial_no_speckle_pipeline.add_node(task=AssembleVbiMovie, upstreams=MakeVbi
102
98
  # Quality flow
103
99
  full_trial_no_speckle_pipeline.add_node(task=VbiQualityL0Metrics, upstreams=ParseL0VbiInputData)
104
100
  full_trial_no_speckle_pipeline.add_node(task=QualityL1Metrics, upstreams=ScienceCalibration)
105
- full_trial_no_speckle_pipeline.add_node(task=VbiQualityL1Metrics, upstreams=ScienceCalibration)
106
101
  full_trial_no_speckle_pipeline.add_node(
107
- task=AssembleQualityData, upstreams=[VbiQualityL0Metrics, QualityL1Metrics, VbiQualityL1Metrics]
102
+ task=AssembleQualityData, upstreams=[VbiQualityL0Metrics, QualityL1Metrics]
108
103
  )
109
104
 
110
105
  # Output flow
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dkist-processing-vbi
3
- Version: 1.28.5
3
+ Version: 1.28.6
4
4
  Summary: Processing code for the VBI instrument on DKIST
5
5
  Author-email: NSO / AURA <dkistdc@nso.edu>
6
6
  License: BSD-3-Clause
@@ -13,7 +13,7 @@ Classifier: Programming Language :: Python :: 3
13
13
  Classifier: Programming Language :: Python :: 3.13
14
14
  Requires-Python: >=3.13
15
15
  Description-Content-Type: text/x-rst
16
- Requires-Dist: dkist-processing-common==13.0.4
16
+ Requires-Dist: dkist-processing-common==13.0.5
17
17
  Requires-Dist: dkist-processing-math==2.2.2
18
18
  Requires-Dist: dkist-header-validator==5.3.1
19
19
  Requires-Dist: dkist-fits-specifications==4.24.1
@@ -96,13 +96,13 @@ Requires-Dist: asdf_transform_schemas==0.6.0; extra == "frozen"
96
96
  Requires-Dist: asgiref==3.11.1; extra == "frozen"
97
97
  Requires-Dist: asteval==1.0.8; extra == "frozen"
98
98
  Requires-Dist: astropy==7.0.2; extra == "frozen"
99
- Requires-Dist: astropy-iers-data==0.2026.4.13.0.58.2; extra == "frozen"
99
+ Requires-Dist: astropy-iers-data==0.2026.4.20.0.58.15; extra == "frozen"
100
100
  Requires-Dist: asyncpg==0.31.0; extra == "frozen"
101
101
  Requires-Dist: attrs==26.1.0; extra == "frozen"
102
102
  Requires-Dist: babel==2.18.0; extra == "frozen"
103
103
  Requires-Dist: billiard==4.2.4; extra == "frozen"
104
- Requires-Dist: boto3==1.42.91; extra == "frozen"
105
- Requires-Dist: botocore==1.42.91; extra == "frozen"
104
+ Requires-Dist: boto3==1.42.92; extra == "frozen"
105
+ Requires-Dist: botocore==1.42.92; extra == "frozen"
106
106
  Requires-Dist: cadwyn==5.4.6; extra == "frozen"
107
107
  Requires-Dist: celery==5.6.3; extra == "frozen"
108
108
  Requires-Dist: certifi==2026.2.25; extra == "frozen"
@@ -122,11 +122,11 @@ Requires-Dist: dacite==1.9.2; extra == "frozen"
122
122
  Requires-Dist: decorator==5.2.1; extra == "frozen"
123
123
  Requires-Dist: dill==0.4.1; extra == "frozen"
124
124
  Requires-Dist: dkist-header-validator==5.3.1; extra == "frozen"
125
- Requires-Dist: dkist-processing-common==13.0.4; extra == "frozen"
125
+ Requires-Dist: dkist-processing-common==13.0.5; extra == "frozen"
126
126
  Requires-Dist: dkist-processing-core==7.2.1; extra == "frozen"
127
127
  Requires-Dist: dkist-processing-math==2.2.2; extra == "frozen"
128
128
  Requires-Dist: dkist-processing-pac==3.1.1; extra == "frozen"
129
- Requires-Dist: dkist-processing-vbi==1.28.5; extra == "frozen"
129
+ Requires-Dist: dkist-processing-vbi==1.28.6; extra == "frozen"
130
130
  Requires-Dist: dkist-service-configuration==4.3.0; extra == "frozen"
131
131
  Requires-Dist: dkist-spectral-lines==3.0.1; extra == "frozen"
132
132
  Requires-Dist: dkist_fits_specifications==4.24.1; extra == "frozen"
@@ -224,9 +224,9 @@ Requires-Dist: protobuf==6.33.6; extra == "frozen"
224
224
  Requires-Dist: psutil==7.2.2; extra == "frozen"
225
225
  Requires-Dist: psycopg2-binary==2.9.11; extra == "frozen"
226
226
  Requires-Dist: pycparser==3.0; extra == "frozen"
227
- Requires-Dist: pydantic==2.13.2; extra == "frozen"
228
- Requires-Dist: pydantic-settings==2.13.1; extra == "frozen"
229
- Requires-Dist: pydantic_core==2.46.2; extra == "frozen"
227
+ Requires-Dist: pydantic==2.13.3; extra == "frozen"
228
+ Requires-Dist: pydantic-settings==2.14.0; extra == "frozen"
229
+ Requires-Dist: pydantic_core==2.46.3; extra == "frozen"
230
230
  Requires-Dist: pyerfa==2.0.1.5; extra == "frozen"
231
231
  Requires-Dist: pygtrie==2.5.0; extra == "frozen"
232
232
  Requires-Dist: pyparsing==3.3.2; extra == "frozen"
@@ -1,4 +1,4 @@
1
- dkist-processing-common==13.0.4
1
+ dkist-processing-common==13.0.5
2
2
  dkist-processing-math==2.2.2
3
3
  dkist-header-validator==5.3.1
4
4
  dkist-fits-specifications==4.24.1
@@ -66,13 +66,13 @@ asdf_transform_schemas==0.6.0
66
66
  asgiref==3.11.1
67
67
  asteval==1.0.8
68
68
  astropy==7.0.2
69
- astropy-iers-data==0.2026.4.13.0.58.2
69
+ astropy-iers-data==0.2026.4.20.0.58.15
70
70
  asyncpg==0.31.0
71
71
  attrs==26.1.0
72
72
  babel==2.18.0
73
73
  billiard==4.2.4
74
- boto3==1.42.91
75
- botocore==1.42.91
74
+ boto3==1.42.92
75
+ botocore==1.42.92
76
76
  cadwyn==5.4.6
77
77
  celery==5.6.3
78
78
  certifi==2026.2.25
@@ -92,11 +92,11 @@ dacite==1.9.2
92
92
  decorator==5.2.1
93
93
  dill==0.4.1
94
94
  dkist-header-validator==5.3.1
95
- dkist-processing-common==13.0.4
95
+ dkist-processing-common==13.0.5
96
96
  dkist-processing-core==7.2.1
97
97
  dkist-processing-math==2.2.2
98
98
  dkist-processing-pac==3.1.1
99
- dkist-processing-vbi==1.28.5
99
+ dkist-processing-vbi==1.28.6
100
100
  dkist-service-configuration==4.3.0
101
101
  dkist-spectral-lines==3.0.1
102
102
  dkist_fits_specifications==4.24.1
@@ -194,9 +194,9 @@ protobuf==6.33.6
194
194
  psutil==7.2.2
195
195
  psycopg2-binary==2.9.11
196
196
  pycparser==3.0
197
- pydantic==2.13.2
198
- pydantic-settings==2.13.1
199
- pydantic_core==2.46.2
197
+ pydantic==2.13.3
198
+ pydantic-settings==2.14.0
199
+ pydantic_core==2.46.3
200
200
  pyerfa==2.0.1.5
201
201
  pygtrie==2.5.0
202
202
  pyparsing==3.3.2
@@ -9,8 +9,8 @@ exclude = ["build*"]
9
9
 
10
10
  [tool.dkist-dev-tools]
11
11
  # Most recently frozen version by dkist-dev-tools
12
- version = "1.28.5"
13
- date = 2026-04-17T16:15:10.562792
12
+ version = "1.28.6"
13
+ date = 2026-04-20T15:15:36.940870
14
14
 
15
15
  [project]
16
16
  dynamic = ["version"]
@@ -26,7 +26,7 @@ classifiers = [
26
26
  "Programming Language :: Python :: 3.13",
27
27
  ]
28
28
  dependencies = [
29
- "dkist-processing-common == 13.0.4",
29
+ "dkist-processing-common == 13.0.5",
30
30
  "dkist-processing-math == 2.2.2",
31
31
  "dkist-header-validator == 5.3.1",
32
32
  "dkist-fits-specifications == 4.24.1",
@@ -124,13 +124,13 @@ frozen = [
124
124
  "asgiref == 3.11.1",
125
125
  "asteval == 1.0.8",
126
126
  "astropy == 7.0.2",
127
- "astropy-iers-data == 0.2026.4.13.0.58.2",
127
+ "astropy-iers-data == 0.2026.4.20.0.58.15",
128
128
  "asyncpg == 0.31.0",
129
129
  "attrs == 26.1.0",
130
130
  "babel == 2.18.0",
131
131
  "billiard == 4.2.4",
132
- "boto3 == 1.42.91",
133
- "botocore == 1.42.91",
132
+ "boto3 == 1.42.92",
133
+ "botocore == 1.42.92",
134
134
  "cadwyn == 5.4.6",
135
135
  "celery == 5.6.3",
136
136
  "certifi == 2026.2.25",
@@ -150,11 +150,11 @@ frozen = [
150
150
  "decorator == 5.2.1",
151
151
  "dill == 0.4.1",
152
152
  "dkist-header-validator == 5.3.1",
153
- "dkist-processing-common == 13.0.4",
153
+ "dkist-processing-common == 13.0.5",
154
154
  "dkist-processing-core == 7.2.1",
155
155
  "dkist-processing-math == 2.2.2",
156
156
  "dkist-processing-pac == 3.1.1",
157
- "dkist-processing-vbi == 1.28.5",
157
+ "dkist-processing-vbi == 1.28.6",
158
158
  "dkist-service-configuration == 4.3.0",
159
159
  "dkist-spectral-lines == 3.0.1",
160
160
  "dkist_fits_specifications == 4.24.1",
@@ -252,9 +252,9 @@ frozen = [
252
252
  "psutil == 7.2.2",
253
253
  "psycopg2-binary == 2.9.11",
254
254
  "pycparser == 3.0",
255
- "pydantic == 2.13.2",
256
- "pydantic-settings == 2.13.1",
257
- "pydantic_core == 2.46.2",
255
+ "pydantic == 2.13.3",
256
+ "pydantic-settings == 2.14.0",
257
+ "pydantic_core == 2.46.3",
258
258
  "pyerfa == 2.0.1.5",
259
259
  "pygtrie == 2.5.0",
260
260
  "pyparsing == 3.3.2",
@@ -1,71 +0,0 @@
1
- """VBI specific quality metrics."""
2
-
3
- from typing import Iterable
4
-
5
- from dkist_processing_common.codecs.fits import fits_access_decoder
6
- from dkist_processing_common.parsers.quality import L1QualityFitsAccess
7
- from dkist_processing_common.tasks.mixin.quality import QualityMixin
8
- from dkist_processing_common.tasks.quality_metrics import QualityL0Metrics
9
-
10
- from dkist_processing_vbi.models.tags import VbiTag
11
- from dkist_processing_vbi.tasks.vbi_base import VbiTaskBase
12
-
13
- __all__ = ["VbiQualityL0Metrics", "VbiQualityL1Metrics"]
14
-
15
-
16
- class VbiQualityL0Metrics(QualityL0Metrics):
17
- """
18
- Task class for collecting VBI L0 quality metrics.
19
-
20
- Parameters
21
- ----------
22
- recipe_run_id : int
23
- id of the recipe run used to identify the workflow run this task is part of
24
- workflow_name : str
25
- name of the workflow to which this instance of the task belongs
26
- workflow_version : str
27
- version of the workflow to which this instance of the task belongs
28
-
29
- """
30
-
31
- @property
32
- def modstate_list(self) -> Iterable[int] | None:
33
- """Define modstates over which to compute L0 metrics. VBI has none because it is not polarimetric."""
34
- # Yes, this is just the default, but by explicitly calling it out here we're resistant to any upstream change.
35
- return None
36
-
37
-
38
- class VbiQualityL1Metrics(VbiTaskBase, QualityMixin):
39
- """
40
- Task class for collecting VBI L1 quality metrics.
41
-
42
- Parameters
43
- ----------
44
- recipe_run_id : int
45
- id of the recipe run used to identify the workflow run this task is part of
46
- workflow_name : str
47
- name of the workflow to which this instance of the task belongs
48
- workflow_version : str
49
- version of the workflow to which this instance of the task belongs
50
-
51
- """
52
-
53
- def run(self):
54
- """Calculate L1 metrics for VBI data."""
55
- frames = self.read(
56
- tags=[
57
- VbiTag.calibrated(),
58
- VbiTag.frame(),
59
- ],
60
- decoder=fits_access_decoder,
61
- fits_access_class=L1QualityFitsAccess,
62
- )
63
- datetimes = []
64
- noise_values = []
65
- with self.telemetry_span("Calculating VBI L1 quality metrics"):
66
- for frame in frames:
67
- datetimes.append(frame.time_obs)
68
- noise_values.append(self.avg_noise(frame.data))
69
-
70
- with self.telemetry_span("Sending lists for storage"):
71
- self.quality_store_noise(datetimes=datetimes, values=noise_values)