dkist-processing-trend 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. changelog/.gitempty +0 -0
  2. dkist_processing_trend/__init__.py +10 -0
  3. dkist_processing_trend/config.py +11 -0
  4. dkist_processing_trend/models/__init__.py +1 -0
  5. dkist_processing_trend/models/constants.py +143 -0
  6. dkist_processing_trend/models/fit_options.py +15 -0
  7. dkist_processing_trend/models/fits_access.py +65 -0
  8. dkist_processing_trend/models/instrument.py +35 -0
  9. dkist_processing_trend/models/instrument_options.py +35 -0
  10. dkist_processing_trend/models/parameters.py +134 -0
  11. dkist_processing_trend/models/tags.py +117 -0
  12. dkist_processing_trend/models/task_name.py +20 -0
  13. dkist_processing_trend/parsers/__init__.py +1 -0
  14. dkist_processing_trend/parsers/arm_id.py +103 -0
  15. dkist_processing_trend/parsers/instrument_unique_bud.py +40 -0
  16. dkist_processing_trend/parsers/time.py +27 -0
  17. dkist_processing_trend/parsers/trend_l0_fits_access.py +123 -0
  18. dkist_processing_trend/tasks/__init__.py +27 -0
  19. dkist_processing_trend/tasks/arm_task_factory.py +57 -0
  20. dkist_processing_trend/tasks/dark.py +56 -0
  21. dkist_processing_trend/tasks/gain.py +74 -0
  22. dkist_processing_trend/tasks/initialize_arm_tasks.py +50 -0
  23. dkist_processing_trend/tasks/parse.py +169 -0
  24. dkist_processing_trend/tasks/prepare_fit_data_base.py +257 -0
  25. dkist_processing_trend/tasks/run_pac_fitter.py +392 -0
  26. dkist_processing_trend/tasks/trend_base.py +97 -0
  27. dkist_processing_trend/tasks/trend_output_data.py +167 -0
  28. dkist_processing_trend/tasks/visp/__init__.py +6 -0
  29. dkist_processing_trend/tasks/visp/visp_dmpd.py +410 -0
  30. dkist_processing_trend/tasks/visp/visp_extract_beam.py +14 -0
  31. dkist_processing_trend/tasks/visp/visp_geometric.py +260 -0
  32. dkist_processing_trend/tasks/visp/visp_prep_fit_data.py +162 -0
  33. dkist_processing_trend/tasks/visp/visp_process_demod.py +236 -0
  34. dkist_processing_trend/tasks/write_trend.py +663 -0
  35. dkist_processing_trend/tests/__init__.py +1 -0
  36. dkist_processing_trend/tests/conftest.py +718 -0
  37. dkist_processing_trend/tests/local_trial_workflows/__init__.py +0 -0
  38. dkist_processing_trend/tests/local_trial_workflows/l0_to_trend_visp_polcal.py +294 -0
  39. dkist_processing_trend/tests/local_trial_workflows/local_trial_helpers.py +488 -0
  40. dkist_processing_trend/tests/test_arm_task_factory.py +82 -0
  41. dkist_processing_trend/tests/test_base_tasks.py +86 -0
  42. dkist_processing_trend/tests/test_constants.py +120 -0
  43. dkist_processing_trend/tests/test_dark.py +97 -0
  44. dkist_processing_trend/tests/test_gain.py +135 -0
  45. dkist_processing_trend/tests/test_parameters.py +149 -0
  46. dkist_processing_trend/tests/test_parse.py +276 -0
  47. dkist_processing_trend/tests/test_prep_fit_data_base.py +233 -0
  48. dkist_processing_trend/tests/test_publish_catalog_messages.py +45 -0
  49. dkist_processing_trend/tests/test_run_pac_fitter.py +371 -0
  50. dkist_processing_trend/tests/test_stems.py +75 -0
  51. dkist_processing_trend/tests/test_transfer_output_data.py +76 -0
  52. dkist_processing_trend/tests/test_trend_fits_access.py +173 -0
  53. dkist_processing_trend/tests/test_visp.py +874 -0
  54. dkist_processing_trend/tests/test_workflows.py +10 -0
  55. dkist_processing_trend/tests/test_write_trend.py +460 -0
  56. dkist_processing_trend/workflows/__init__.py +3 -0
  57. dkist_processing_trend/workflows/visp.py +58 -0
  58. dkist_processing_trend-0.1.0.dist-info/METADATA +549 -0
  59. dkist_processing_trend-0.1.0.dist-info/RECORD +66 -0
  60. dkist_processing_trend-0.1.0.dist-info/WHEEL +5 -0
  61. dkist_processing_trend-0.1.0.dist-info/top_level.txt +3 -0
  62. docs/conf.py +57 -0
  63. docs/index.rst +10 -0
  64. docs/l0_to_trend_visp_polcal.rst +4 -0
  65. docs/landing_page.rst +11 -0
  66. docs/requirements_table.rst +8 -0
@@ -0,0 +1,294 @@
1
+ import argparse
2
+ import sys
3
+ from pathlib import Path
4
+
5
+ from dkist_processing_common.manual import ManualProcessing
6
+ from dkist_service_configuration.logging import logger
7
+
8
+ from dkist_processing_trend.models.tags import TrendTag
9
+ from dkist_processing_trend.tasks import DarkCalibration
10
+ from dkist_processing_trend.tasks import GainCalibration
11
+ from dkist_processing_trend.tasks import ParseL0TrendInputData
12
+ from dkist_processing_trend.tasks import RunPacFitter
13
+ from dkist_processing_trend.tasks.visp import VispDemodulatedPolcalData
14
+ from dkist_processing_trend.tasks.visp import VispGeometricCalibration
15
+ from dkist_processing_trend.tasks.visp import VispPrepareFitData
16
+ from dkist_processing_trend.tasks.visp import VispProcessDemodulationMatrices
17
+ from dkist_processing_trend.tasks.write_trend import WriteTrendOutputs
18
+ from dkist_processing_trend.tests.conftest import TrendInputDatasetParameterValues
19
+ from dkist_processing_trend.tests.local_trial_workflows.local_trial_helpers import get_arm_id_list
20
+ from dkist_processing_trend.tests.local_trial_workflows.local_trial_helpers import (
21
+ input_dataset_parameter_task,
22
+ )
23
+ from dkist_processing_trend.tests.local_trial_workflows.local_trial_helpers import (
24
+ load_dark_cal_task,
25
+ )
26
+ from dkist_processing_trend.tests.local_trial_workflows.local_trial_helpers import load_dmpd_task
27
+ from dkist_processing_trend.tests.local_trial_workflows.local_trial_helpers import (
28
+ load_gain_cal_task,
29
+ )
30
+ from dkist_processing_trend.tests.local_trial_workflows.local_trial_helpers import load_pac_fit_task
31
+ from dkist_processing_trend.tests.local_trial_workflows.local_trial_helpers import load_parsing_task
32
+ from dkist_processing_trend.tests.local_trial_workflows.local_trial_helpers import (
33
+ load_prepped_cal_task,
34
+ )
35
+ from dkist_processing_trend.tests.local_trial_workflows.local_trial_helpers import (
36
+ load_processed_demod_cal_task,
37
+ )
38
+ from dkist_processing_trend.tests.local_trial_workflows.local_trial_helpers import (
39
+ load_visp_geo_cal_task,
40
+ )
41
+ from dkist_processing_trend.tests.local_trial_workflows.local_trial_helpers import (
42
+ save_dark_cal_task,
43
+ )
44
+ from dkist_processing_trend.tests.local_trial_workflows.local_trial_helpers import save_dmpd_task
45
+ from dkist_processing_trend.tests.local_trial_workflows.local_trial_helpers import (
46
+ save_gain_cal_task,
47
+ )
48
+ from dkist_processing_trend.tests.local_trial_workflows.local_trial_helpers import save_pac_fit_task
49
+ from dkist_processing_trend.tests.local_trial_workflows.local_trial_helpers import save_parsing_task
50
+ from dkist_processing_trend.tests.local_trial_workflows.local_trial_helpers import (
51
+ save_prepped_cal_task,
52
+ )
53
+ from dkist_processing_trend.tests.local_trial_workflows.local_trial_helpers import (
54
+ save_processed_demod_cal_task,
55
+ )
56
+ from dkist_processing_trend.tests.local_trial_workflows.local_trial_helpers import (
57
+ save_visp_geo_cal_task,
58
+ )
59
+ from dkist_processing_trend.tests.local_trial_workflows.local_trial_helpers import tag_inputs_task
60
+ from dkist_processing_trend.tests.local_trial_workflows.local_trial_helpers import translate_task
61
+ from dkist_processing_trend.workflows.arm_class_factory import arm_class_factory
62
+
63
+
64
+ def main(
65
+ scratch_path: str,
66
+ suffix: str = "FITS",
67
+ recipe_run_id: int = 2,
68
+ skip_translation: bool = False,
69
+ only_translate: bool = False,
70
+ load_input_parsing: bool = False,
71
+ load_dark: bool = False,
72
+ load_gain: bool = False,
73
+ load_geometric: bool = False,
74
+ load_prepped: bool = False,
75
+ load_pac_fit: bool = False,
76
+ load_processed_demod: bool = False,
77
+ load_dmpd: bool = False,
78
+ ):
79
+ with ManualProcessing(
80
+ workflow_path=Path(scratch_path),
81
+ recipe_run_id=recipe_run_id,
82
+ testing=True,
83
+ workflow_name="visp-l0-to-trend-polcal",
84
+ workflow_version="GROGU",
85
+ ) as manual_processing_run:
86
+ if not skip_translation:
87
+ manual_processing_run.run_task(task=translate_task(instrument="visp", suffix=suffix))
88
+ if only_translate:
89
+ return
90
+
91
+ manual_processing_run.run_task(task=tag_inputs_task(suffix))
92
+
93
+ parameter_values = TrendInputDatasetParameterValues(
94
+ trend_fit_options_list=[
95
+ {
96
+ "name": "standard",
97
+ "remove_I_trend": True,
98
+ "fit_mode_name": "use_M12_I_sys_per_step",
99
+ "init_set_name": "OCCal_VIS",
100
+ }
101
+ ],
102
+ trend_instrument_processing_options_visp=[
103
+ {
104
+ "name": "full_spatial",
105
+ "num_spatial_px": 256,
106
+ "num_spectral_px": 1,
107
+ "spatial_smoothing_fit_order": 17,
108
+ },
109
+ {
110
+ "name": "single_point",
111
+ "num_spatial_px": 1,
112
+ "num_spectral_px": 1,
113
+ "spatial_smoothing_fit_order": 1,
114
+ },
115
+ ],
116
+ )
117
+ manual_processing_run.run_task(task=input_dataset_parameter_task(parameter_values))
118
+
119
+ if load_input_parsing:
120
+ manual_processing_run.run_task(task=load_parsing_task(save_file="input_parsing.asdf"))
121
+ else:
122
+ manual_processing_run.run_task(task=ParseL0TrendInputData)
123
+ manual_processing_run.run_task(
124
+ task=save_parsing_task(
125
+ tag_list=[TrendTag.input()],
126
+ save_file="input_parsing.asdf",
127
+ )
128
+ )
129
+
130
+ arm_id_list = get_arm_id_list(
131
+ workflow_base_path=Path(scratch_path) / str(recipe_run_id),
132
+ parsing_file_name="input_parsing.asdf",
133
+ )
134
+
135
+ logger.info(f"Found {arm_id_list = }")
136
+
137
+ for arm_id in arm_id_list:
138
+ logger.info(f"Working on {arm_id = }")
139
+ dark_task = arm_class_factory(DarkCalibration, arm_id=arm_id)
140
+ gain_task = arm_class_factory(GainCalibration, arm_id=arm_id)
141
+ geo_task = arm_class_factory(VispGeometricCalibration, arm_id=arm_id)
142
+ prep_data_task = arm_class_factory(VispPrepareFitData, arm_id=arm_id)
143
+ run_fit_task = arm_class_factory(RunPacFitter, arm_id=arm_id)
144
+ process_demod_task = arm_class_factory(VispProcessDemodulationMatrices, arm_id=arm_id)
145
+ dmpd_task = arm_class_factory(VispDemodulatedPolcalData, arm_id=arm_id)
146
+
147
+ if load_dark:
148
+ manual_processing_run.run_task(load_dark_cal_task(arm_id=arm_id))
149
+ else:
150
+ manual_processing_run.run_task(dark_task)
151
+ manual_processing_run.run_task(save_dark_cal_task(arm_id=arm_id))
152
+
153
+ if load_gain:
154
+ manual_processing_run.run_task(load_gain_cal_task(arm_id=arm_id))
155
+ else:
156
+ manual_processing_run.run_task(gain_task)
157
+ manual_processing_run.run_task(save_gain_cal_task(arm_id=arm_id))
158
+
159
+ if load_geometric:
160
+ manual_processing_run.run_task(load_visp_geo_cal_task(arm_id=arm_id))
161
+ else:
162
+ manual_processing_run.run_task(geo_task)
163
+ manual_processing_run.run_task(save_visp_geo_cal_task(arm_id=arm_id))
164
+
165
+ if load_prepped:
166
+ manual_processing_run.run_task(load_prepped_cal_task(arm_id=arm_id))
167
+ else:
168
+ manual_processing_run.run_task(prep_data_task)
169
+ manual_processing_run.run_task(save_prepped_cal_task(arm_id=arm_id))
170
+
171
+ if load_pac_fit:
172
+ manual_processing_run.run_task(load_pac_fit_task(arm_id=arm_id))
173
+ else:
174
+ manual_processing_run.run_task(run_fit_task)
175
+ manual_processing_run.run_task(save_pac_fit_task(arm_id=arm_id))
176
+
177
+ if load_processed_demod:
178
+ manual_processing_run.run_task(load_processed_demod_cal_task(arm_id=arm_id))
179
+ else:
180
+ manual_processing_run.run_task(process_demod_task)
181
+ manual_processing_run.run_task(save_processed_demod_cal_task(arm_id=arm_id))
182
+
183
+ if load_dmpd:
184
+ manual_processing_run.run_task(load_dmpd_task(arm_id=arm_id))
185
+ else:
186
+ manual_processing_run.run_task(dmpd_task)
187
+ manual_processing_run.run_task(save_dmpd_task(arm_id=arm_id))
188
+
189
+ manual_processing_run.run_task(WriteTrendOutputs)
190
+ if any(
191
+ [
192
+ load_dark,
193
+ load_gain,
194
+ load_geometric,
195
+ load_prepped,
196
+ load_pac_fit,
197
+ load_processed_demod,
198
+ load_dmpd,
199
+ ]
200
+ ):
201
+ logger.info("NOT counting provenance records because some tasks were skipped")
202
+ else:
203
+ manual_processing_run.count_provenance()
204
+
205
+
206
+ if __name__ == "__main__":
207
+ parser = argparse.ArgumentParser(
208
+ description="Run an end-to-end test of the DLNirsp DC Science pipeline"
209
+ )
210
+ parser.add_argument("scratch_path", help="Location to use as the DC 'scratch' disk")
211
+ parser.add_argument(
212
+ "-i",
213
+ "--run-id",
214
+ help="Which subdir to use. This will become the recipe run id",
215
+ type=int,
216
+ default=4,
217
+ )
218
+ parser.add_argument("--suffix", help="File suffix to treat as INPUT frames", default="FITS")
219
+ parser.add_argument(
220
+ "-T",
221
+ "--skip-translation",
222
+ help="Skip the translation of raw 122 l0 frames to 214 l0",
223
+ action="store_true",
224
+ )
225
+ parser.add_argument(
226
+ "-t", "--only-translate", help="Do ONLY the translation step", action="store_true"
227
+ )
228
+ parser.add_argument(
229
+ "-I",
230
+ "--load-input-parsing",
231
+ help="Load tags and constants on input files",
232
+ action="store_true",
233
+ )
234
+ parser.add_argument(
235
+ "-D",
236
+ "--load-dark",
237
+ help="Load dark calibration from previously saved run",
238
+ action="store_true",
239
+ )
240
+ parser.add_argument(
241
+ "-G",
242
+ "--load-gain",
243
+ help="Load gain calibration from previously saved run",
244
+ action="store_true",
245
+ )
246
+ parser.add_argument(
247
+ "-C",
248
+ "--load-geometric",
249
+ help="Load geometric calibration from previously saved run",
250
+ action="store_true",
251
+ )
252
+ parser.add_argument(
253
+ "-P",
254
+ "--load-prepped",
255
+ help="Load prepped fit data from previously saved run",
256
+ action="store_true",
257
+ )
258
+ parser.add_argument(
259
+ "-F",
260
+ "--load-pac-fit",
261
+ help="Load pac fit data from previously saved run",
262
+ action="store_true",
263
+ )
264
+ parser.add_argument(
265
+ "-E",
266
+ "--load-processed-demod",
267
+ help="Load processed demod data from previously saved run",
268
+ action="store_true",
269
+ )
270
+ parser.add_argument(
271
+ "-M",
272
+ "--load-dmpd",
273
+ help="Load DMPD data from previously saved run",
274
+ action="store_true",
275
+ )
276
+
277
+ args = parser.parse_args()
278
+ sys.exit(
279
+ main(
280
+ scratch_path=args.scratch_path,
281
+ suffix=args.suffix,
282
+ recipe_run_id=args.run_id,
283
+ skip_translation=args.skip_translation,
284
+ only_translate=args.only_translate,
285
+ load_input_parsing=args.load_input_parsing,
286
+ load_dark=args.load_dark,
287
+ load_gain=args.load_gain,
288
+ load_geometric=args.load_geometric,
289
+ load_prepped=args.load_prepped,
290
+ load_pac_fit=args.load_pac_fit,
291
+ load_processed_demod=args.load_processed_demod,
292
+ load_dmpd=args.load_dmpd,
293
+ )
294
+ )