dkist-processing-dlnirsp 0.32.9__py3-none-any.whl → 0.33.0rc1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. changelog/120.feature.rst +2 -0
  2. changelog/121.misc.rst +2 -0
  3. changelog/124.feature.rst +2 -0
  4. changelog/124.science.rst +5 -0
  5. dkist_processing_dlnirsp/models/constants.py +6 -0
  6. dkist_processing_dlnirsp/models/parameters.py +33 -3
  7. dkist_processing_dlnirsp/parsers/task.py +2 -25
  8. dkist_processing_dlnirsp/parsers/time.py +2 -2
  9. dkist_processing_dlnirsp/tasks/__init__.py +1 -2
  10. dkist_processing_dlnirsp/tasks/movie.py +1121 -0
  11. dkist_processing_dlnirsp/tasks/parse.py +13 -8
  12. dkist_processing_dlnirsp/tasks/solar.py +129 -30
  13. dkist_processing_dlnirsp/tests/conftest.py +43 -6
  14. dkist_processing_dlnirsp/tests/local_trial_workflows/l0_polcals_as_science.py +21 -18
  15. dkist_processing_dlnirsp/tests/local_trial_workflows/l0_solar_gain_as_science.py +21 -18
  16. dkist_processing_dlnirsp/tests/local_trial_workflows/l0_to_l1.py +21 -18
  17. dkist_processing_dlnirsp/tests/local_trial_workflows/local_trial_dev_mockers.py +1 -1
  18. dkist_processing_dlnirsp/tests/test_dlnirsp_constants.py +2 -0
  19. dkist_processing_dlnirsp/tests/test_movie.py +141 -0
  20. dkist_processing_dlnirsp/tests/test_parameters.py +8 -0
  21. dkist_processing_dlnirsp/tests/test_parse.py +10 -0
  22. dkist_processing_dlnirsp/tests/test_science.py +0 -9
  23. dkist_processing_dlnirsp/tests/test_solar.py +114 -17
  24. dkist_processing_dlnirsp/workflows/l0_processing.py +6 -8
  25. dkist_processing_dlnirsp/workflows/trial_workflow.py +7 -7
  26. {dkist_processing_dlnirsp-0.32.9.dist-info → dkist_processing_dlnirsp-0.33.0rc1.dist-info}/METADATA +40 -23
  27. {dkist_processing_dlnirsp-0.32.9.dist-info → dkist_processing_dlnirsp-0.33.0rc1.dist-info}/RECORD +31 -29
  28. docs/gain.rst +7 -3
  29. dkist_processing_dlnirsp/tasks/assemble_movie.py +0 -150
  30. dkist_processing_dlnirsp/tasks/make_movie_frames.py +0 -156
  31. dkist_processing_dlnirsp/tests/test_assemble_movie.py +0 -169
  32. dkist_processing_dlnirsp/tests/test_make_movie_frames.py +0 -98
  33. {dkist_processing_dlnirsp-0.32.9.dist-info → dkist_processing_dlnirsp-0.33.0rc1.dist-info}/WHEEL +0 -0
  34. {dkist_processing_dlnirsp-0.32.9.dist-info → dkist_processing_dlnirsp-0.33.0rc1.dist-info}/entry_points.txt +0 -0
  35. {dkist_processing_dlnirsp-0.32.9.dist-info → dkist_processing_dlnirsp-0.33.0rc1.dist-info}/top_level.txt +0 -0
@@ -16,7 +16,6 @@ from dkist_processing_common.tasks import TrialTeardown
16
16
  from dkist_processing_core import ResourceQueue
17
17
  from dkist_processing_core import Workflow
18
18
 
19
- from dkist_processing_dlnirsp.tasks import AssembleDlnirspMovie
20
19
  from dkist_processing_dlnirsp.tasks import BadPixelCalibration
21
20
  from dkist_processing_dlnirsp.tasks import DarkCalibration
22
21
  from dkist_processing_dlnirsp.tasks import DlnirspAssembleQualityData
@@ -28,7 +27,7 @@ from dkist_processing_dlnirsp.tasks import IfuDriftCalibration
28
27
  from dkist_processing_dlnirsp.tasks import InstrumentPolarizationCalibration
29
28
  from dkist_processing_dlnirsp.tasks import LampCalibration
30
29
  from dkist_processing_dlnirsp.tasks import LinearityCorrection
31
- from dkist_processing_dlnirsp.tasks import MakeDlnirspMovieFrames
30
+ from dkist_processing_dlnirsp.tasks import MakeDlnirspMovie
32
31
  from dkist_processing_dlnirsp.tasks import ParseL0DlnirspLinearizedData
33
32
  from dkist_processing_dlnirsp.tasks import ParseL0DlnirspRampData
34
33
  from dkist_processing_dlnirsp.tasks import ScienceCalibration
@@ -55,22 +54,23 @@ trial_pipeline.add_node(task=LampCalibration, upstreams=DarkCalibration)
55
54
  trial_pipeline.add_node(task=BadPixelCalibration, upstreams=[LampCalibration, IfuDriftCalibration])
56
55
  trial_pipeline.add_node(task=GeometricCalibration, upstreams=[IfuDriftCalibration, LampCalibration])
57
56
  trial_pipeline.add_node(task=WavelengthCalibration, upstreams=GeometricCalibration)
58
- trial_pipeline.add_node(task=SolarCalibration, upstreams=GeometricCalibration)
59
57
  trial_pipeline.add_node(
60
58
  task=InstrumentPolarizationCalibration,
61
59
  resource_queue=ResourceQueue.HIGH_MEMORY,
62
60
  upstreams=BadPixelCalibration,
63
61
  )
64
62
  trial_pipeline.add_node(
65
- task=ScienceCalibration, upstreams=[InstrumentPolarizationCalibration, SolarCalibration]
63
+ task=SolarCalibration, upstreams=[GeometricCalibration, InstrumentPolarizationCalibration]
66
64
  )
65
+ trial_pipeline.add_node(task=ScienceCalibration, upstreams=SolarCalibration)
67
66
  trial_pipeline.add_node(
68
67
  task=DlnirspWriteL1Frame, upstreams=[WavelengthCalibration, ScienceCalibration]
69
68
  )
70
69
 
71
70
  # Movie flow
72
- trial_pipeline.add_node(task=MakeDlnirspMovieFrames, upstreams=ScienceCalibration)
73
- trial_pipeline.add_node(task=AssembleDlnirspMovie, upstreams=MakeDlnirspMovieFrames)
71
+ trial_pipeline.add_node(
72
+ task=MakeDlnirspMovie, upstreams=[ScienceCalibration, WavelengthCalibration]
73
+ )
74
74
 
75
75
  # Quality flow
76
76
  trial_pipeline.add_node(task=DlnirspL0QualityMetrics, upstreams=ParseL0DlnirspLinearizedData)
@@ -96,7 +96,7 @@ trial_pipeline.add_node(
96
96
  trial_pipeline.add_node(
97
97
  task=TransferTrialData,
98
98
  upstreams=[
99
- AssembleDlnirspMovie,
99
+ MakeDlnirspMovie,
100
100
  CreateTrialDatasetInventory,
101
101
  CreateTrialAsdf,
102
102
  CreateTrialQualityReport,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dkist-processing-dlnirsp
3
- Version: 0.32.9
3
+ Version: 0.33.0rc1
4
4
  Summary: Science processing code for the DLNIRSP instrument on DKIST
5
5
  Author-email: NSO / AURA <dkistdc@nso.edu>
6
6
  License: BSD-3-Clause
@@ -26,7 +26,8 @@ Requires-Dist: numba==0.61.2
26
26
  Requires-Dist: scipy==1.15.3
27
27
  Requires-Dist: peakutils==1.3.5
28
28
  Requires-Dist: sunpy==6.1.1
29
- Requires-Dist: moviepy==2.1.2
29
+ Requires-Dist: reproject==0.19.0
30
+ Requires-Dist: imageio-ffmpeg==0.6.0
30
31
  Requires-Dist: asdf==3.5.0
31
32
  Requires-Dist: solar-wavelength-calibration==2.0.0
32
33
  Provides-Extra: test
@@ -80,7 +81,9 @@ Requires-Dist: ImageIO==2.37.2; extra == "frozen"
80
81
  Requires-Dist: Jinja2==3.1.6; extra == "frozen"
81
82
  Requires-Dist: Mako==1.3.10; extra == "frozen"
82
83
  Requires-Dist: MarkupSafe==3.0.3; extra == "frozen"
84
+ Requires-Dist: PIMS==0.7; extra == "frozen"
83
85
  Requires-Dist: PeakUtils==1.3.5; extra == "frozen"
86
+ Requires-Dist: PyAVM==0.9.8; extra == "frozen"
84
87
  Requires-Dist: PyJWT==2.10.1; extra == "frozen"
85
88
  Requires-Dist: PyYAML==6.0.3; extra == "frozen"
86
89
  Requires-Dist: Pygments==2.19.2; extra == "frozen"
@@ -91,22 +94,22 @@ Requires-Dist: WTForms==3.2.1; extra == "frozen"
91
94
  Requires-Dist: Werkzeug==2.2.3; extra == "frozen"
92
95
  Requires-Dist: aioftp==0.27.2; extra == "frozen"
93
96
  Requires-Dist: aiohappyeyeballs==2.6.1; extra == "frozen"
94
- Requires-Dist: aiohttp==3.13.2; extra == "frozen"
97
+ Requires-Dist: aiohttp==3.13.3; extra == "frozen"
95
98
  Requires-Dist: aiosignal==1.4.0; extra == "frozen"
96
99
  Requires-Dist: aiosmtplib==5.0.0; extra == "frozen"
97
100
  Requires-Dist: alembic==1.17.2; extra == "frozen"
98
101
  Requires-Dist: amqp==5.3.1; extra == "frozen"
99
102
  Requires-Dist: annotated-types==0.7.0; extra == "frozen"
100
- Requires-Dist: anyio==4.12.0; extra == "frozen"
103
+ Requires-Dist: anyio==4.12.1; extra == "frozen"
101
104
  Requires-Dist: apache-airflow==2.11.0; extra == "frozen"
102
- Requires-Dist: apache-airflow-providers-celery==3.14.1; extra == "frozen"
103
- Requires-Dist: apache-airflow-providers-common-compat==1.10.1; extra == "frozen"
105
+ Requires-Dist: apache-airflow-providers-celery==3.15.0; extra == "frozen"
106
+ Requires-Dist: apache-airflow-providers-common-compat==1.11.0; extra == "frozen"
104
107
  Requires-Dist: apache-airflow-providers-common-io==1.7.0; extra == "frozen"
105
- Requires-Dist: apache-airflow-providers-common-sql==1.30.1; extra == "frozen"
108
+ Requires-Dist: apache-airflow-providers-common-sql==1.30.2; extra == "frozen"
106
109
  Requires-Dist: apache-airflow-providers-fab==1.5.3; extra == "frozen"
107
110
  Requires-Dist: apache-airflow-providers-ftp==3.14.0; extra == "frozen"
108
- Requires-Dist: apache-airflow-providers-http==5.6.1; extra == "frozen"
109
- Requires-Dist: apache-airflow-providers-imap==3.10.1; extra == "frozen"
111
+ Requires-Dist: apache-airflow-providers-http==5.6.2; extra == "frozen"
112
+ Requires-Dist: apache-airflow-providers-imap==3.10.2; extra == "frozen"
110
113
  Requires-Dist: apache-airflow-providers-postgres==6.5.1; extra == "frozen"
111
114
  Requires-Dist: apache-airflow-providers-smtp==2.4.1; extra == "frozen"
112
115
  Requires-Dist: apache-airflow-providers-sqlite==4.2.0; extra == "frozen"
@@ -118,17 +121,18 @@ Requires-Dist: asdf_transform_schemas==0.6.0; extra == "frozen"
118
121
  Requires-Dist: asgiref==3.11.0; extra == "frozen"
119
122
  Requires-Dist: asteval==1.0.8; extra == "frozen"
120
123
  Requires-Dist: astropy==7.0.2; extra == "frozen"
121
- Requires-Dist: astropy-iers-data==0.2025.12.22.0.40.30; extra == "frozen"
124
+ Requires-Dist: astropy-iers-data==0.2026.1.5.0.43.43; extra == "frozen"
125
+ Requires-Dist: astropy_healpix==1.1.2; extra == "frozen"
122
126
  Requires-Dist: asyncpg==0.31.0; extra == "frozen"
123
127
  Requires-Dist: attrs==25.4.0; extra == "frozen"
124
128
  Requires-Dist: babel==2.17.0; extra == "frozen"
125
129
  Requires-Dist: billiard==4.2.4; extra == "frozen"
126
130
  Requires-Dist: blinker==1.9.0; extra == "frozen"
127
- Requires-Dist: boto3==1.42.14; extra == "frozen"
128
- Requires-Dist: botocore==1.42.14; extra == "frozen"
131
+ Requires-Dist: boto3==1.42.22; extra == "frozen"
132
+ Requires-Dist: botocore==1.42.22; extra == "frozen"
129
133
  Requires-Dist: cachelib==0.13.0; extra == "frozen"
130
- Requires-Dist: celery==5.6.0; extra == "frozen"
131
- Requires-Dist: certifi==2025.11.12; extra == "frozen"
134
+ Requires-Dist: celery==5.6.2; extra == "frozen"
135
+ Requires-Dist: certifi==2026.1.4; extra == "frozen"
132
136
  Requires-Dist: cffi==2.0.0; extra == "frozen"
133
137
  Requires-Dist: charset-normalizer==3.4.4; extra == "frozen"
134
138
  Requires-Dist: click==8.3.1; extra == "frozen"
@@ -136,6 +140,7 @@ Requires-Dist: click-didyoumean==0.3.1; extra == "frozen"
136
140
  Requires-Dist: click-plugins==1.1.1.2; extra == "frozen"
137
141
  Requires-Dist: click-repl==0.3.0; extra == "frozen"
138
142
  Requires-Dist: clickclick==20.10.2; extra == "frozen"
143
+ Requires-Dist: cloudpickle==3.1.2; extra == "frozen"
139
144
  Requires-Dist: colorama==0.4.6; extra == "frozen"
140
145
  Requires-Dist: colorlog==6.10.1; extra == "frozen"
141
146
  Requires-Dist: connexion==2.14.2; extra == "frozen"
@@ -145,29 +150,33 @@ Requires-Dist: croniter==6.0.0; extra == "frozen"
145
150
  Requires-Dist: cryptography==46.0.3; extra == "frozen"
146
151
  Requires-Dist: cycler==0.12.1; extra == "frozen"
147
152
  Requires-Dist: dacite==1.9.2; extra == "frozen"
153
+ Requires-Dist: dask==2025.12.0; extra == "frozen"
154
+ Requires-Dist: dask-image==2025.11.0; extra == "frozen"
148
155
  Requires-Dist: decorator==5.2.1; extra == "frozen"
149
156
  Requires-Dist: dill==0.4.0; extra == "frozen"
150
157
  Requires-Dist: dkist-header-validator==5.2.1; extra == "frozen"
151
158
  Requires-Dist: dkist-processing-common==11.9.2; extra == "frozen"
152
159
  Requires-Dist: dkist-processing-core==6.0.1; extra == "frozen"
153
- Requires-Dist: dkist-processing-dlnirsp==0.32.9; extra == "frozen"
160
+ Requires-Dist: dkist-processing-dlnirsp==0.33.0rc1; extra == "frozen"
154
161
  Requires-Dist: dkist-processing-math==2.2.1; extra == "frozen"
155
162
  Requires-Dist: dkist-processing-pac==3.1.1; extra == "frozen"
156
163
  Requires-Dist: dkist-service-configuration==4.1.13; extra == "frozen"
157
164
  Requires-Dist: dkist-spectral-lines==3.0.0; extra == "frozen"
158
165
  Requires-Dist: dkist_fits_specifications==4.19.0; extra == "frozen"
159
166
  Requires-Dist: dnspython==2.8.0; extra == "frozen"
167
+ Requires-Dist: donfig==0.8.1.post1; extra == "frozen"
160
168
  Requires-Dist: email-validator==2.3.0; extra == "frozen"
161
- Requires-Dist: exceptiongroup==1.3.1; extra == "frozen"
162
169
  Requires-Dist: fastjsonschema==2.21.2; extra == "frozen"
163
170
  Requires-Dist: flower==2.0.1; extra == "frozen"
164
171
  Requires-Dist: fonttools==4.61.1; extra == "frozen"
165
172
  Requires-Dist: frozenlist==1.8.0; extra == "frozen"
166
173
  Requires-Dist: fsspec==2025.12.0; extra == "frozen"
167
174
  Requires-Dist: globus-sdk==4.3.0; extra == "frozen"
175
+ Requires-Dist: google-crc32c==1.8.0; extra == "frozen"
168
176
  Requires-Dist: google-re2==1.1.20251105; extra == "frozen"
169
177
  Requires-Dist: googleapis-common-protos==1.72.0; extra == "frozen"
170
178
  Requires-Dist: gqlclient==1.2.3; extra == "frozen"
179
+ Requires-Dist: greenlet==3.3.0; extra == "frozen"
171
180
  Requires-Dist: grpcio==1.76.0; extra == "frozen"
172
181
  Requires-Dist: gunicorn==23.0.0; extra == "frozen"
173
182
  Requires-Dist: h11==0.16.0; extra == "frozen"
@@ -184,13 +193,14 @@ Requires-Dist: jsonschema==4.25.1; extra == "frozen"
184
193
  Requires-Dist: jsonschema-specifications==2025.9.1; extra == "frozen"
185
194
  Requires-Dist: jupyter_core==5.9.1; extra == "frozen"
186
195
  Requires-Dist: kiwisolver==1.4.9; extra == "frozen"
187
- Requires-Dist: kombu==5.6.1; extra == "frozen"
196
+ Requires-Dist: kombu==5.6.2; extra == "frozen"
188
197
  Requires-Dist: lazy-object-proxy==1.12.0; extra == "frozen"
189
198
  Requires-Dist: lazy_loader==0.4; extra == "frozen"
190
199
  Requires-Dist: limits==5.6.0; extra == "frozen"
191
200
  Requires-Dist: linkify-it-py==2.0.3; extra == "frozen"
192
201
  Requires-Dist: llvmlite==0.44.0; extra == "frozen"
193
202
  Requires-Dist: lmfit==1.3.4; extra == "frozen"
203
+ Requires-Dist: locket==1.0.0; extra == "frozen"
194
204
  Requires-Dist: lockfile==0.12.2; extra == "frozen"
195
205
  Requires-Dist: loguru==0.7.3; extra == "frozen"
196
206
  Requires-Dist: markdown-it-py==4.0.0; extra == "frozen"
@@ -202,11 +212,12 @@ Requires-Dist: mdit-py-plugins==0.5.0; extra == "frozen"
202
212
  Requires-Dist: mdurl==0.1.2; extra == "frozen"
203
213
  Requires-Dist: methodtools==0.4.7; extra == "frozen"
204
214
  Requires-Dist: more-itertools==10.8.0; extra == "frozen"
205
- Requires-Dist: moviepy==2.1.2; extra == "frozen"
215
+ Requires-Dist: moviepy==2.2.1; extra == "frozen"
206
216
  Requires-Dist: multidict==6.7.0; extra == "frozen"
207
217
  Requires-Dist: nbformat==5.10.4; extra == "frozen"
208
218
  Requires-Dist: networkx==3.6.1; extra == "frozen"
209
219
  Requires-Dist: numba==0.61.2; extra == "frozen"
220
+ Requires-Dist: numcodecs==0.16.5; extra == "frozen"
210
221
  Requires-Dist: numpy==2.2.5; extra == "frozen"
211
222
  Requires-Dist: object-clerk==1.0.0; extra == "frozen"
212
223
  Requires-Dist: opentelemetry-api==1.39.1; extra == "frozen"
@@ -237,11 +248,12 @@ Requires-Dist: ordered-set==4.1.0; extra == "frozen"
237
248
  Requires-Dist: packaging==25.0; extra == "frozen"
238
249
  Requires-Dist: pandas==2.3.3; extra == "frozen"
239
250
  Requires-Dist: parfive==2.2.0; extra == "frozen"
251
+ Requires-Dist: partd==1.4.2; extra == "frozen"
240
252
  Requires-Dist: pathlib_abc==0.5.2; extra == "frozen"
241
- Requires-Dist: pathspec==0.12.1; extra == "frozen"
253
+ Requires-Dist: pathspec==1.0.1; extra == "frozen"
242
254
  Requires-Dist: pendulum==3.1.0; extra == "frozen"
243
255
  Requires-Dist: pika==1.3.2; extra == "frozen"
244
- Requires-Dist: pillow==10.4.0; extra == "frozen"
256
+ Requires-Dist: pillow==11.3.0; extra == "frozen"
245
257
  Requires-Dist: pip==25.3; extra == "frozen"
246
258
  Requires-Dist: platformdirs==4.5.1; extra == "frozen"
247
259
  Requires-Dist: pluggy==1.6.0; extra == "frozen"
@@ -252,14 +264,15 @@ Requires-Dist: prometheus_client==0.23.1; extra == "frozen"
252
264
  Requires-Dist: prompt_toolkit==3.0.52; extra == "frozen"
253
265
  Requires-Dist: propcache==0.4.1; extra == "frozen"
254
266
  Requires-Dist: protobuf==6.33.2; extra == "frozen"
255
- Requires-Dist: psutil==7.1.3; extra == "frozen"
267
+ Requires-Dist: psutil==7.2.1; extra == "frozen"
256
268
  Requires-Dist: psycopg2-binary==2.9.11; extra == "frozen"
269
+ Requires-Dist: pyarrow==22.0.0; extra == "frozen"
257
270
  Requires-Dist: pycparser==2.23; extra == "frozen"
258
271
  Requires-Dist: pydantic==2.12.5; extra == "frozen"
259
272
  Requires-Dist: pydantic-settings==2.12.0; extra == "frozen"
260
273
  Requires-Dist: pydantic_core==2.41.5; extra == "frozen"
261
274
  Requires-Dist: pyerfa==2.0.1.5; extra == "frozen"
262
- Requires-Dist: pyparsing==3.3.0; extra == "frozen"
275
+ Requires-Dist: pyparsing==3.3.1; extra == "frozen"
263
276
  Requires-Dist: python-daemon==3.1.2; extra == "frozen"
264
277
  Requires-Dist: python-dateutil==2.9.0.post0; extra == "frozen"
265
278
  Requires-Dist: python-dotenv==1.2.1; extra == "frozen"
@@ -268,6 +281,7 @@ Requires-Dist: python-slugify==8.0.4; extra == "frozen"
268
281
  Requires-Dist: pytz==2025.2; extra == "frozen"
269
282
  Requires-Dist: redis==6.4.0; extra == "frozen"
270
283
  Requires-Dist: referencing==0.37.0; extra == "frozen"
284
+ Requires-Dist: reproject==0.19.0; extra == "frozen"
271
285
  Requires-Dist: requests==2.32.5; extra == "frozen"
272
286
  Requires-Dist: requests-toolbelt==1.0.0; extra == "frozen"
273
287
  Requires-Dist: rfc3339-validator==0.1.4; extra == "frozen"
@@ -280,6 +294,7 @@ Requires-Dist: scipy==1.15.3; extra == "frozen"
280
294
  Requires-Dist: semantic-version==2.10.0; extra == "frozen"
281
295
  Requires-Dist: setproctitle==1.3.7; extra == "frozen"
282
296
  Requires-Dist: six==1.17.0; extra == "frozen"
297
+ Requires-Dist: slicerator==1.1.0; extra == "frozen"
283
298
  Requires-Dist: solar-wavelength-calibration==2.0.0; extra == "frozen"
284
299
  Requires-Dist: sqids==0.5.1; extra == "frozen"
285
300
  Requires-Dist: sqlparse==0.5.5; extra == "frozen"
@@ -287,9 +302,10 @@ Requires-Dist: sunpy==6.1.1; extra == "frozen"
287
302
  Requires-Dist: tabulate==0.9.0; extra == "frozen"
288
303
  Requires-Dist: talus==1.3.4; extra == "frozen"
289
304
  Requires-Dist: tenacity==8.5.0; extra == "frozen"
290
- Requires-Dist: termcolor==3.2.0; extra == "frozen"
305
+ Requires-Dist: termcolor==3.3.0; extra == "frozen"
291
306
  Requires-Dist: text-unidecode==1.3; extra == "frozen"
292
307
  Requires-Dist: tifffile==2025.12.20; extra == "frozen"
308
+ Requires-Dist: toolz==1.1.0; extra == "frozen"
293
309
  Requires-Dist: tornado==6.5.4; extra == "frozen"
294
310
  Requires-Dist: tqdm==4.67.1; extra == "frozen"
295
311
  Requires-Dist: traitlets==5.14.3; extra == "frozen"
@@ -308,6 +324,7 @@ Requires-Dist: wirerope==1.0.0; extra == "frozen"
308
324
  Requires-Dist: wrapt==1.17.3; extra == "frozen"
309
325
  Requires-Dist: yamale==6.1.0; extra == "frozen"
310
326
  Requires-Dist: yarl==1.22.0; extra == "frozen"
327
+ Requires-Dist: zarr==3.1.5; extra == "frozen"
311
328
  Requires-Dist: zipp==3.23.0; extra == "frozen"
312
329
 
313
330
  dkist-processing-dlnirsp
@@ -1,24 +1,27 @@
1
1
  changelog/.gitempty,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ changelog/120.feature.rst,sha256=PJ6--Avrxw46OJOpqUCgt5T2sIBeAebDnuybo4PvFUQ,184
3
+ changelog/121.misc.rst,sha256=2Rjy98UaLdGEks632oEj8eTtlVE3ktoMw91W6X21L8E,146
4
+ changelog/124.feature.rst,sha256=MiO96m8p40ybgDhlO03EDzU4ygZYCPnMNv22Q7gagog,224
5
+ changelog/124.science.rst,sha256=OSwJhp0hoxr_f9Q9pAD-XpD56269DGaTNriiKyRh03Y,369
2
6
  dkist_processing_dlnirsp/__init__.py,sha256=GQ9EBnYhkOnt-qODclAoLS_g5YVhurxfg1tjVtI9rDI,320
3
7
  dkist_processing_dlnirsp/config.py,sha256=3jM7P00T-Xlzfnvc3jwRiFtinW5GoTczQ6qNLLpwQCo,624
4
8
  dkist_processing_dlnirsp/dev_scripts/__init__.py,sha256=tITkbcFg1a-24sdFaWK8OyLrQSQk7AI6Ycs8PHHfHEM,83
5
9
  dkist_processing_dlnirsp/dev_scripts/test_slitbeam_group_assignment.py,sha256=ac-8G-P2L_xW6m3tOooFlHs1N5_C6F_7k2VAU2a9_1A,4171
6
10
  dkist_processing_dlnirsp/models/__init__.py,sha256=ItaZgbjndT5uwEv2YDQZCVAHGbiB_sjzkX8MMbIgcSo,45
7
- dkist_processing_dlnirsp/models/constants.py,sha256=0TV_K6WbvUlDQdNRxx_qblQ_dwN7RGU7ng2iDOBQedo,6386
11
+ dkist_processing_dlnirsp/models/constants.py,sha256=y4c8boq1Rp4mqtkNJi3aj1EkhUnU7fiq013aqiFOonM,6602
8
12
  dkist_processing_dlnirsp/models/fits_access.py,sha256=5HH8NM2tAh63Aauy6oCXKJGJ2AbQPBP5L1DitVfFEs0,895
9
- dkist_processing_dlnirsp/models/parameters.py,sha256=PsaZSNE4Uyov1xGMqRqh6kb5F8NnDDm3QRHkoiDAsYY,15812
13
+ dkist_processing_dlnirsp/models/parameters.py,sha256=YD2BdQRO0Yk1sz3DJP-wNehBUJvDQ7cHqEnQP6UYo6w,17210
10
14
  dkist_processing_dlnirsp/models/tags.py,sha256=xD_XaCjMXmd70P0FoHy92XSdlabIk07RGVEyFpXpGfM,5791
11
15
  dkist_processing_dlnirsp/models/task_name.py,sha256=LmEoI_h4UecvIMGcO5U8mGTqfToPjABuFbsYkC_rZyw,506
12
16
  dkist_processing_dlnirsp/parsers/__init__.py,sha256=O6KcssCD39an60pqLISt1aHQ4u5ADg0TMNw1dB694Ug,81
13
17
  dkist_processing_dlnirsp/parsers/dlnirsp_l0_fits_access.py,sha256=ziUeSWPOiFV0HdkCCfFZGPOZB-PB1OhK2qjYbVdsAb4,4314
14
18
  dkist_processing_dlnirsp/parsers/dlnirsp_l1_fits_acess.py,sha256=K-9HRVZ02IUl0wRnhlTMnwSikTt7vYi_zSWYs0V_6-Y,878
15
19
  dkist_processing_dlnirsp/parsers/mosaic.py,sha256=0z0sTbDQFhg2hyCp6hSKFpuaS-rOSUBvuBOT6mSSadA,31061
16
- dkist_processing_dlnirsp/parsers/task.py,sha256=9_JzhqfU9os-6uUpn1FlNd2d1yWfD0dB4u0H0OruTbs,1619
17
- dkist_processing_dlnirsp/parsers/time.py,sha256=DsnGxT4coH6FjiHsLr5gimW8lGExE5y_E6zzUH89HMM,2072
20
+ dkist_processing_dlnirsp/parsers/task.py,sha256=wtg8kNuxqGHaK34dJAZ92-f29-3V1QrnLGUGRAebUUk,990
21
+ dkist_processing_dlnirsp/parsers/time.py,sha256=bdsNRXGpiKe7nBt3rOvk5gKYtqo10nFkTR9EMwbDcsg,2093
18
22
  dkist_processing_dlnirsp/parsers/wavelength.py,sha256=CHZDFqOpzErhaR0MSbzQ6NiagdmkVkZ-6HWRERH5TNY,972
19
23
  dkist_processing_dlnirsp/parsers/wcs_corrections.py,sha256=yeTLowmtAIs5sjNStIKmBTZUxttOtldJSeW_adsXFYQ,1786
20
- dkist_processing_dlnirsp/tasks/__init__.py,sha256=6N5xdCM3FeTpzmBUgUnJ5mKF2N3vBfcj-SNqVQ9ZHiw,996
21
- dkist_processing_dlnirsp/tasks/assemble_movie.py,sha256=BxUO7_Zj_QGLXqNpp87bLawyLo4G0I0DTLZPMXpi5Mo,5539
24
+ dkist_processing_dlnirsp/tasks/__init__.py,sha256=zGSL-fIB0el6PCjf4VEIHU_pOTv945D95I2G4vxHtHA,924
22
25
  dkist_processing_dlnirsp/tasks/bad_pixel_map.py,sha256=ZzG86mXped2k2PjX7okKAi3JCQGJHalBhBgFU-T8K_8,8194
23
26
  dkist_processing_dlnirsp/tasks/dark.py,sha256=rFnVULAunChEdxEXcosxNJM_iqRGslia9cUnV1FAOQQ,3580
24
27
  dkist_processing_dlnirsp/tasks/dlnirsp_base.py,sha256=dIpQGE0COLAXPAUbKn6dpLJj5VDCxfAVYFfX8fR6OSo,1519
@@ -28,25 +31,24 @@ dkist_processing_dlnirsp/tasks/instrument_polarization.py,sha256=G79qXg1080zsd8Z
28
31
  dkist_processing_dlnirsp/tasks/l1_output_data.py,sha256=Psta0476jih-cfmpdnzmquys030sW4f4VX6ksAb-g1o,465
29
32
  dkist_processing_dlnirsp/tasks/lamp.py,sha256=twoMHMnE2jm2OYxkeHFcjqcyQYVtEjSU2_z2mmn3Ybs,5390
30
33
  dkist_processing_dlnirsp/tasks/linearity_correction.py,sha256=z3MpWHp0lZYB2zrfHfH7HlcKoro6TPxwEN8rpqVv08c,22716
31
- dkist_processing_dlnirsp/tasks/make_movie_frames.py,sha256=zxyAWNnPFbG7jpUEe3ekRyJGjk706T9a-yiA3eoWi5M,6290
32
- dkist_processing_dlnirsp/tasks/parse.py,sha256=ZtqM6dyxxnnbVTAun040EuxfQZEQcnkXzZffXSBTYkk,10919
34
+ dkist_processing_dlnirsp/tasks/movie.py,sha256=IaZCRg2KIETEXDyyOe3FLoY5cd7eJOhMtjkiSYjElEU,44291
35
+ dkist_processing_dlnirsp/tasks/parse.py,sha256=WGFIssavbQg1BAbW0_jS56SoEya-X-bHkLTbxTooUFI,11218
33
36
  dkist_processing_dlnirsp/tasks/quality_metrics.py,sha256=1ScLAinv3WG-0M7u_26gnogbJ_D84K9CP7eRvEuwb9E,7346
34
37
  dkist_processing_dlnirsp/tasks/science.py,sha256=sNI4AYO10qe3JL62KWXR87MnfX9m85Jo4_PkQ0qd5TQ,35737
35
- dkist_processing_dlnirsp/tasks/solar.py,sha256=NyLYkRophfXaVtvnGuNEvkcE8JNcmCJVuobNYAZ7KjQ,11135
38
+ dkist_processing_dlnirsp/tasks/solar.py,sha256=hVOVwQkzO4kioPDgJz3GqSNcisfpEMbDPESJN-INh10,15494
36
39
  dkist_processing_dlnirsp/tasks/wavelength_calibration.py,sha256=QhFlbX8h9UqkK2vx779nK6LBksp2P2yPqhAxrwcuJ4o,16851
37
40
  dkist_processing_dlnirsp/tasks/write_l1.py,sha256=Smd9Fzp3Kx4F3nHYJJRAXqNy9n71TsYovuvFjLcUYs4,9732
38
41
  dkist_processing_dlnirsp/tasks/mixin/__init__.py,sha256=5PMbkD6K0zTfhCxv8vg2lvJCNP81qItJ_R_7Yy3Mpwc,26
39
42
  dkist_processing_dlnirsp/tasks/mixin/corrections.py,sha256=MRZXCEc0KBE-9cQUpRP-K3ioDYRH8_ORFlJcH2SsmWA,6803
40
43
  dkist_processing_dlnirsp/tasks/mixin/group_id.py,sha256=u28XLVtvZ_lmzzaSX2SuA2MOiY69GC8AJsic2Vi2OSQ,11137
41
44
  dkist_processing_dlnirsp/tests/__init__.py,sha256=UHIAs0SglAXeB7UeDgVwo1EE9QPRq3rG3BZkiCpBq7M,42
42
- dkist_processing_dlnirsp/tests/conftest.py,sha256=rg-Itu6hwzJnFrOS5REfzbjODE0Tyl02hD-Dhx3zzR0,68790
43
- dkist_processing_dlnirsp/tests/test_assemble_movie.py,sha256=hKAIHCRQu8fZwCuWsX_4WHFrDpC0bDQ9CCI9A5bRkqg,5665
45
+ dkist_processing_dlnirsp/tests/conftest.py,sha256=3-VY9HcO4NHbt40c8iz493rnBsawgUzr-d7casZWbB0,70413
44
46
  dkist_processing_dlnirsp/tests/test_assemble_quality.py,sha256=djZsVSuRGl3akH3LmYjWvYuNSUFFQfS5y0S3Op7lQIE,1327
45
47
  dkist_processing_dlnirsp/tests/test_bad_pixel_map.py,sha256=g5jWhVGSHMOtkcdiZ27G51ciud4ySjoDAjvMGLlgTIM,6093
46
48
  dkist_processing_dlnirsp/tests/test_corrections.py,sha256=hefVNm3bgwfGQ7Wn0hi077LU_fKlDXJ0eeMl6HCRogA,7569
47
49
  dkist_processing_dlnirsp/tests/test_dark.py,sha256=qv7SvUNgafzfdyIW11I6eSFeaXjw34-9X1ipnqKE1cY,3726
48
50
  dkist_processing_dlnirsp/tests/test_dlnirsp_base.py,sha256=PCFklqGEqrgIhTYcatu7RfOxr_b_XjHotc36MRbUvnk,1853
49
- dkist_processing_dlnirsp/tests/test_dlnirsp_constants.py,sha256=RFNf-Hj835NlE45vygxh01kJm8YdCJJ3UUwzJRYJHE8,6411
51
+ dkist_processing_dlnirsp/tests/test_dlnirsp_constants.py,sha256=0E7Z4LHBDTAJ8G6TqGL7EU-MGN60Iqze4uZgZJwxqRc,6487
50
52
  dkist_processing_dlnirsp/tests/test_dlnirsp_fits_access.py,sha256=5C5NPOkNigoNhIFNUKyrJvyt_mRjke1tkfXQcv1cnPI,5639
51
53
  dkist_processing_dlnirsp/tests/test_geometric.py,sha256=94RDg1mGEMTibD2oPOoCKil5yUQMp_0vO4cDWzG3644,7742
52
54
  dkist_processing_dlnirsp/tests/test_group_id.py,sha256=TpNllN6OZuYF8almsayk7pRTc4J8TcLGp1SHCBG6QAU,6279
@@ -54,32 +56,32 @@ dkist_processing_dlnirsp/tests/test_ifu_drift.py,sha256=K6ushbVQVE6AATjiP3hEgF6o
54
56
  dkist_processing_dlnirsp/tests/test_instrument_polarization_calibration.py,sha256=pPXjfzi3EcaawNqvXsz3OcCF1XITEJeCzQ8-iOjlm7U,23430
55
57
  dkist_processing_dlnirsp/tests/test_lamp.py,sha256=umy4ydYR5M3dqXTQP14qbamOleutyD1jSj3325aitl0,3940
56
58
  dkist_processing_dlnirsp/tests/test_linearity_correction.py,sha256=JkPNtsRad2JQQ2QiJjQar9tJuCi9-ksOdEYHW_-kl58,31793
57
- dkist_processing_dlnirsp/tests/test_make_movie_frames.py,sha256=fR1xJEFJMK0xUu8-EyOS_6mIX_ZO2J_nM0k3ud8xtYM,3648
58
- dkist_processing_dlnirsp/tests/test_parameters.py,sha256=KpBeisM4BIF5Kl6ZxZqk3yCozndmLMlzNgo0ij0hmYw,10328
59
- dkist_processing_dlnirsp/tests/test_parse.py,sha256=UIII4R6JruUEFIlYDRwTwiBqyf4ldYxAhCWHM-jcd6E,38005
59
+ dkist_processing_dlnirsp/tests/test_movie.py,sha256=j1ocVuy7PZCJrL-MrTczI-mFEsnECyCQ6P8uiK3mokw,4284
60
+ dkist_processing_dlnirsp/tests/test_parameters.py,sha256=bL30vGwFMwY2vP6-mQ-KPsr7I213PaXP7S1wKVPqq8g,10705
61
+ dkist_processing_dlnirsp/tests/test_parse.py,sha256=prx8K0vFGkW-YZm0YB13FBobbiMf0u1k8TuCyNF4_qE,38418
60
62
  dkist_processing_dlnirsp/tests/test_quality.py,sha256=OBWva_E6T5RfDuo73LiTdTr7uh2FO04VpBAsSOLfjVQ,6122
61
- dkist_processing_dlnirsp/tests/test_science.py,sha256=1DKqKNAEZEsVCffYz_TiEc2REG7cBIfGeig1kJK4ZtE,20902
62
- dkist_processing_dlnirsp/tests/test_solar.py,sha256=jTNnxs5fE8R_hLvmdAU9x4RXJaSpJWGQajL7kzXTxPQ,12111
63
+ dkist_processing_dlnirsp/tests/test_science.py,sha256=2dpNW8-QaFqYeTbTeXqKRSWSns1b9l1iRgfhj8UBAUw,20632
64
+ dkist_processing_dlnirsp/tests/test_solar.py,sha256=0_QpdZFUczXCalhFrXQcMf3SWErbalnVTqV9r0558Pc,15411
63
65
  dkist_processing_dlnirsp/tests/test_trial_create_quality_report.py,sha256=5wgj4PhiB-JRl7Sm7EUIvk5DDcFYpytpVLPmMbPuN_Y,2807
64
66
  dkist_processing_dlnirsp/tests/test_wavelength_calibration.py,sha256=Yp5A2I8WHrnKha56W_8o5BxVH21jervGsS0thN7ptn0,15028
65
67
  dkist_processing_dlnirsp/tests/test_workflows.py,sha256=cRw_c90B-ZXGaw0vVWymYCE-_Ll6mBeM7aHsu-uXewo,290
66
68
  dkist_processing_dlnirsp/tests/test_write_l1.py,sha256=J9D1QqCDe0IzYsphA4s_ciDEL0tUUSV1KLm8yo9mxyM,13335
67
69
  dkist_processing_dlnirsp/tests/local_trial_workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
70
  dkist_processing_dlnirsp/tests/local_trial_workflows/l0_linearize_only.py,sha256=WpO2T2PRDiglwBB3zQDV_3Cq1RSw-ufu_iFjT5aLFJk,6750
69
- dkist_processing_dlnirsp/tests/local_trial_workflows/l0_polcals_as_science.py,sha256=ZDefUSKggIH2ebzUziQWU_A2yWeX68vjqzC11MNkzJU,19338
70
- dkist_processing_dlnirsp/tests/local_trial_workflows/l0_solar_gain_as_science.py,sha256=Nv8qi-U2mUpWRn8rfx0ckn6v9OUGbfSND-fX9WVRaU0,20102
71
- dkist_processing_dlnirsp/tests/local_trial_workflows/l0_to_l1.py,sha256=MfCqHOO9RC24FRqGUKfPiTGUZh7rft9NklYKej-oM00,17757
72
- dkist_processing_dlnirsp/tests/local_trial_workflows/local_trial_dev_mockers.py,sha256=zEnx_mOTwF8QRM8BZ2Nn0MntfFIkrMVQZDUbmqCmDJk,12191
71
+ dkist_processing_dlnirsp/tests/local_trial_workflows/l0_polcals_as_science.py,sha256=Ms0a_P-d-6dmz_j1hXXQYpF7hfgJljdGjRgAnMampCw,19399
72
+ dkist_processing_dlnirsp/tests/local_trial_workflows/l0_solar_gain_as_science.py,sha256=J_Iijqxy9pYc0olA38QOGV5_pCeoKMojqWtyKAnhL1g,20163
73
+ dkist_processing_dlnirsp/tests/local_trial_workflows/l0_to_l1.py,sha256=jt8oeLKENlSUbOek6hDQAhYeq2zY3FuphmkiP44lnDk,17791
74
+ dkist_processing_dlnirsp/tests/local_trial_workflows/local_trial_dev_mockers.py,sha256=dQ5hYJUXQDx6O7x9eQn3GbKsfcjpB_ylAmQ2N2MPsDI,12198
73
75
  dkist_processing_dlnirsp/tests/local_trial_workflows/local_trial_helpers.py,sha256=5abEDqLyJ1mH6RYlV6ReHOqUkUste0vC6raENFQeDNY,21375
74
76
  dkist_processing_dlnirsp/tests/local_trial_workflows/translate_files.py,sha256=bsOqBtGE9SdOZL2ROJ-murJHjymYrE_nEPNHJgy7pDc,1882
75
77
  dkist_processing_dlnirsp/workflows/__init__.py,sha256=bDRNGCIayR8Z-dcOClvk5nTmHgKORTrZUVX9e3UpCc8,165
76
- dkist_processing_dlnirsp/workflows/l0_processing.py,sha256=m7zNXo9XoBwXzfiDQTmf4mPgJrTXY15DvqrAXwsx7Mg,4117
77
- dkist_processing_dlnirsp/workflows/trial_workflow.py,sha256=eqfRtWSuusM-5yvDjlabeCKolAswvw7rOqFEohFjOhI,4732
78
+ dkist_processing_dlnirsp/workflows/l0_processing.py,sha256=walF4jr4qNCZv_YIh2pnmyQ0BEakGtXrS8k1lkzlBNY,3976
79
+ dkist_processing_dlnirsp/workflows/trial_workflow.py,sha256=PCncn1-tDHrcqPziV3LzrCCtgk6dwJpHa4Cx3ff8lQ0,4598
78
80
  docs/Makefile,sha256=qnlVz6PuBqE39NfHWuUnHhNEA-EFgT2-WJNNNy9ttfk,4598
79
81
  docs/bad_pixel_calibration.rst,sha256=UPBJCG1XWIFMwaR8BnvvbfdEN68s1SJ2nlxsXe1viHU,3403
80
82
  docs/changelog.rst,sha256=ZpZPJIyl4nI0Eicku6uSrLdiinNOF2GcZwrvTEsb-Zs,346
81
83
  docs/conf.py,sha256=wCcGpP5TUXfMTPgumKu0ZInLxYSuKILyCGi8__Omnmo,2081
82
- docs/gain.rst,sha256=ytH5AhcCkLlXCKg4enL60p1mBquOv2Bc_T6gvq2-L3Q,4568
84
+ docs/gain.rst,sha256=XyktESmH9kVyp1wtwRdvNshYC1CqA-XBWqsMG2TyhHg,5060
83
85
  docs/geometric.rst,sha256=1iI26WJkFbFR0yG_zNbDwiZxU4i0KPtqVkUQL-aKI70,3522
84
86
  docs/ifu_drift.rst,sha256=8Hd1XmW9ay2ig__kZJ03ut1_6M6F_NnMqrbSLrIl9tQ,1997
85
87
  docs/index.rst,sha256=c2KAA_icOw7Ao3rWVv7lRBTEZ-9JWidL615Xrt6fSq4,378
@@ -94,8 +96,8 @@ docs/science_calibration.rst,sha256=JUMeS7KyIsL9cUuy-IdV2tQ-wQ2lBx6j8u_51ThJzVg,
94
96
  docs/scientific_changelog.rst,sha256=01AWBSHg8zElnodCgAq-hMxhk9CkX5rtEENx4iz0sjI,300
95
97
  docs/wavelength_calibration.rst,sha256=QGUd5Xmv5f7WQ1EKvw2CcgiMJQULjzdCW1hSQ8h8jj0,4123
96
98
  licenses/LICENSE.rst,sha256=piZaQplkzOMmH1NXg6QIdo9wwo9pPCoHkvm2-DmH76E,1462
97
- dkist_processing_dlnirsp-0.32.9.dist-info/METADATA,sha256=8tlxOIi9gl7x7ZKQhUtEGYR7rk49DFqUr6OgdMg_-gA,30061
98
- dkist_processing_dlnirsp-0.32.9.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
99
- dkist_processing_dlnirsp-0.32.9.dist-info/entry_points.txt,sha256=p4-7cpIfxmQGFUDIP5n5noE5KADHN2-JvV03e0gOx9s,140
100
- dkist_processing_dlnirsp-0.32.9.dist-info/top_level.txt,sha256=4WmLV9LQM78KTFnkHmtaOJvVHAPpz0m9ruzDS-B_cUo,49
101
- dkist_processing_dlnirsp-0.32.9.dist-info/RECORD,,
99
+ dkist_processing_dlnirsp-0.33.0rc1.dist-info/METADATA,sha256=7Gd0Cj35vwdlqKC2XAe6DsKJaLarAhNjQw-BWHfDE00,30906
100
+ dkist_processing_dlnirsp-0.33.0rc1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
101
+ dkist_processing_dlnirsp-0.33.0rc1.dist-info/entry_points.txt,sha256=p4-7cpIfxmQGFUDIP5n5noE5KADHN2-JvV03e0gOx9s,140
102
+ dkist_processing_dlnirsp-0.33.0rc1.dist-info/top_level.txt,sha256=4WmLV9LQM78KTFnkHmtaOJvVHAPpz0m9ruzDS-B_cUo,49
103
+ dkist_processing_dlnirsp-0.33.0rc1.dist-info/RECORD,,
docs/gain.rst CHANGED
@@ -14,7 +14,8 @@ polarized beams. We call a single beam from a single slit a "slitbeam"; there ar
14
14
  DLNIRSP gain calibration is performed by the `~dkist_processing_dlnirsp.tasks.solar` task using the following procedure.
15
15
  The important steps are described in more detail below.
16
16
 
17
- #. Apply dark, lamp, and geometric corrections to all solar gain frames and average them together.
17
+ #. Apply dark, lamp, and geometric corrections to all solar gain frames and average them together. For polarimetric data
18
+ the average is computed for each modstate and the result is demodulated. The Stokes I frame is then used for subsequent steps.
18
19
 
19
20
  #. Compute a single characteristic solar spectrum across all slitbeams and place it into the full array.
20
21
 
@@ -37,7 +38,9 @@ Algorithm Detail
37
38
  Apply Dark, Lamp, and Geometric Corrections
38
39
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
39
40
 
40
- This step is mostly how it sounds. Importantly, all solar gain images are divided by the average lamp gain image, which
41
+ This step is mostly how it sounds. For polarimetric data, each modstate is averaged separately and the final "average"
42
+ gain array is taken as the demodulated Stokes I signal. For intensity-mode data, a straight average over all modstates is
43
+ computed. The result (either Stokes I or full average) is then divided by the average lamp gain image, which
41
44
  ensures that system illumination differences are not misidentified as true solar signal in the following steps. After
42
45
  applying the :doc:`geometric correction </geometric>` all spectra will be on the reference wavelength grid.
43
46
 
@@ -59,7 +62,8 @@ geometric corrections. The result is a "raw" array that contains only the solar
59
62
  Remove Characteristic Solar Spectra from Raw Solar Gain Frames
60
63
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
61
64
 
62
- The re-distorted solar spectra are divided from the dark-corrected solar gain frames. Because we don't use solar gains
65
+ The re-distorted solar spectra are divided from the dark-corrected solar gain frames. For polarimetric data the solar
66
+ spectra are removed from the demodulated Stokes I dark-corrected gain signal. Because we don't use solar gains
63
67
  with a lamp correction applied, the resulting gain image includes the full optical response of the system and can be
64
68
  applied directly to the science data.
65
69
 
@@ -1,150 +0,0 @@
1
- """Task for constructing a browse movie."""
2
-
3
- from typing import Type
4
-
5
- import numpy as np
6
- from dkist_processing_common.codecs.fits import fits_array_decoder
7
- from dkist_processing_common.tasks import AssembleMovie
8
- from dkist_service_configuration.logging import logger
9
- from PIL import ImageDraw
10
- from PIL.ImageFont import FreeTypeFont
11
-
12
- from dkist_processing_dlnirsp.models.constants import DlnirspConstants
13
- from dkist_processing_dlnirsp.models.tags import DlnirspTag
14
- from dkist_processing_dlnirsp.parsers.dlnirsp_l1_fits_acess import DlnirspL1FitsAccess
15
-
16
- __all__ = ["AssembleDlnirspMovie"]
17
-
18
-
19
- class AssembleDlnirspMovie(AssembleMovie):
20
- """
21
- Assemble all DLNIRSP movie frames (tagged with DlnirspTag.movie_frame()) into an mp4 movie file.
22
-
23
- Subclassed from the `AssembleMovie` task in `dkist_processing_common` as required to add DLNIRSP specific
24
- text overlays.
25
- """
26
-
27
- constants: DlnirspConstants
28
-
29
- MPL_COLOR_MAP = "afmhot"
30
-
31
- @property
32
- def constants_model_class(self) -> Type[DlnirspConstants]:
33
- """Get DLNIRSP constants."""
34
- return DlnirspConstants
35
-
36
- @property
37
- def fits_parsing_class(self):
38
- """Parse frames as DlnirspL1FitsAccess objects."""
39
- return DlnirspL1FitsAccess
40
-
41
- def compute_frame_shape(self) -> tuple[int, int]:
42
- """Dynamically set the dimensions of the movie based on L1 file shape."""
43
- movie_frame_arrays = self.read(tags=[DlnirspTag.movie_frame()], decoder=fits_array_decoder)
44
- random_frame = next(movie_frame_arrays)
45
- raw_L1_shape = random_frame.shape
46
- flipped_shape = raw_L1_shape[::-1]
47
-
48
- standard_HD_num_pix = 1920 * 1080
49
- frame_num_pix = np.prod(flipped_shape)
50
- scale_factor = np.sqrt(standard_HD_num_pix / frame_num_pix)
51
- scaled_shape = tuple(int(i * scale_factor) for i in flipped_shape)
52
-
53
- return scaled_shape
54
-
55
- def pre_run(self) -> None:
56
- """Set the movie frame shape prior to running."""
57
- super().pre_run()
58
- frame_shape = self.compute_frame_shape()
59
- logger.info(f"Setting movie shape to {frame_shape}")
60
- self.MOVIE_FRAME_SHAPE = frame_shape
61
-
62
- @property
63
- def num_images(self) -> int:
64
- """
65
- Total number of images in final movie.
66
-
67
- Overloaded from `dkist-processing-common` so we can handle all the levels of instrument looping.
68
- """
69
- return (
70
- self.constants.num_mosaic_repeats
71
- * self.constants.num_dither_steps
72
- * self.constants.num_mosaic_tiles
73
- )
74
-
75
- def tags_for_image_n(self, n: int) -> list[str]:
76
- """Return tags that grab the n'th movie image.
77
-
78
- Overloaded from `dkist-processing-common` so we can handle all the levels of instrument looping.
79
- """
80
- mosaic_num = n // (self.constants.num_dither_steps * self.constants.num_mosaic_tiles)
81
- dither_step = (n // self.constants.num_mosaic_tiles) % self.constants.num_dither_steps
82
- tile_num = n % self.constants.num_mosaic_tiles
83
- X_tile, Y_tile = np.unravel_index(
84
- tile_num, (self.constants.num_mosaic_tiles_x, self.constants.num_mosaic_tiles_y)
85
- )
86
- # mosaic tile nums are 1-indexed
87
- X_tile += 1
88
- Y_tile += 1
89
-
90
- tags = [
91
- DlnirspTag.mosaic_num(mosaic_num),
92
- DlnirspTag.dither_step(dither_step),
93
- DlnirspTag.mosaic_tile_x(X_tile),
94
- DlnirspTag.mosaic_tile_y(Y_tile),
95
- ]
96
- logger.info(f"AssembleMovie.tags_for_image_n: {tags = }")
97
- return tags
98
-
99
- def write_overlay(self, draw: ImageDraw, fits_obj: DlnirspL1FitsAccess) -> None:
100
- """
101
- Mark each movie frame the instrument, wavelength, and observe time.
102
-
103
- Additionally, add labels for the 4 Stokes sub-frames if the data are polarimetric.
104
- """
105
- self.write_line(
106
- draw=draw,
107
- text=f"INSTRUMENT: {self.constants.instrument}",
108
- line=3,
109
- column="right",
110
- font=self.font_36,
111
- )
112
- self.write_line(
113
- draw=draw,
114
- text=f"WAVELENGTH: {fits_obj.wavelength} nm",
115
- line=2,
116
- column="right",
117
- font=self.font_36,
118
- )
119
- self.write_line(
120
- draw=draw,
121
- text=f"OBS TIME: {fits_obj.time_obs}",
122
- line=1,
123
- column="right",
124
- font=self.font_36,
125
- )
126
-
127
- if self.constants.correct_for_polarization:
128
- # The `line` on which an item is drawn is a multiple of the height of that line.
129
- IQ_line = self.get_middle_line(draw=draw, text="I Q", font=self.font_36)
130
-
131
- # Subtract 1 from the UV line so that it's below IQ_line
132
- UV_line = IQ_line - 1
133
-
134
- self.write_line(
135
- draw=draw, text="I Q", line=IQ_line, column="middle", font=self.font_36
136
- )
137
- self.write_line(
138
- draw=draw, text="U V", line=UV_line, column="middle", font=self.font_36
139
- )
140
-
141
- def get_middle_line(self, draw: ImageDraw, text: str, font: FreeTypeFont) -> int:
142
- """
143
- Get the line number for the middle of the frame.
144
-
145
- We need to compute this in real time because the frame size is dynamically based on the L1 file shape.
146
- """
147
- _, _, _, text_height = draw.textbbox(xy=(0, 0), text=text, font=font)
148
- # See `write_line` in `dkist-processing-common` for why this is the expression.
149
- line = (self.MOVIE_FRAME_SHAPE[1] // 2) / (self.TEXT_MARGIN_PX + text_height)
150
- return line