dkist-processing-cryonirsp 1.13.0__py3-none-any.whl → 1.14.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.

Potentially problematic release.


This version of dkist-processing-cryonirsp might be problematic. Click here for more details.

@@ -49,11 +49,11 @@ class BadPixelMapCalibration(CryonirspTaskBase):
49
49
  None
50
50
 
51
51
  """
52
- with self.apm_task_step(f"Compute average uncorrected solar gain image"):
52
+ with self.telemetry_span(f"Compute average uncorrected solar gain image"):
53
53
  average_solar_gain_array = self.compute_average_gain_array()
54
54
 
55
- with self.apm_task_step(f"Compute the bad pixel map"):
56
- with self.apm_processing_step("Smooth array with median filter"):
55
+ with self.telemetry_span(f"Compute the bad pixel map"):
56
+ with self.telemetry_span("Smooth array with median filter"):
57
57
  filter_size = self.parameters.bad_pixel_map_median_filter_size
58
58
  filtered_array = spnd.median_filter(
59
59
  average_solar_gain_array,
@@ -62,7 +62,7 @@ class BadPixelMapCalibration(CryonirspTaskBase):
62
62
  cval=np.nanmedian(average_solar_gain_array),
63
63
  )
64
64
 
65
- with self.apm_processing_step("Identify bad pixels"):
65
+ with self.telemetry_span("Identify bad pixels"):
66
66
  thresh = self.parameters.bad_pixel_map_threshold_factor
67
67
 
68
68
  diff = filtered_array - average_solar_gain_array
@@ -72,7 +72,7 @@ class BadPixelMapCalibration(CryonirspTaskBase):
72
72
  zeros = np.where(average_solar_gain_array == 0.0)
73
73
  bad_pixel_map[zeros] = 1
74
74
 
75
- with self.apm_writing_step("Writing bad pixel map"):
75
+ with self.telemetry_span("Writing bad pixel map"):
76
76
  self.write(
77
77
  data=bad_pixel_map,
78
78
  tags=[CryonirspTag.intermediate_frame(), CryonirspTag.task_bad_pixel_map()],
@@ -62,11 +62,11 @@ class BeamBoundariesCalibrationBase(CryonirspTaskBase):
62
62
 
63
63
  """
64
64
  # Step 1:
65
- with self.apm_processing_step(f"Compute average solar gain image"):
65
+ with self.telemetry_span(f"Compute average solar gain image"):
66
66
  average_solar_gain_array = self.compute_average_gain_array()
67
67
 
68
68
  # Step 2:
69
- with self.apm_task_step(f"Retrieve bad pixel map"):
69
+ with self.telemetry_span(f"Retrieve bad pixel map"):
70
70
  bad_pixel_map = next(
71
71
  self.read(
72
72
  tags=[CryonirspTag.intermediate_frame(), CryonirspTag.task_bad_pixel_map()],
@@ -78,21 +78,19 @@ class BeamBoundariesCalibrationBase(CryonirspTaskBase):
78
78
  )
79
79
 
80
80
  # Step 3
81
- with self.apm_processing_step(f"Smooth the array to get good segmentation"):
81
+ with self.telemetry_span(f"Smooth the array to get good segmentation"):
82
82
  smoothed_solar_gain_array = self.smooth_gain_array(corrected_solar_gain_array)
83
83
 
84
84
  # Step 4
85
- with self.apm_processing_step(f"Split the beam horizontally"):
85
+ with self.telemetry_span(f"Split the beam horizontally"):
86
86
  split_beams = self.split_beams(smoothed_solar_gain_array)
87
87
 
88
88
  # Step 5
89
- with self.apm_processing_step(
90
- f"Segment the beams into illuminated and non-illuminated pixels"
91
- ):
89
+ with self.telemetry_span(f"Segment the beams into illuminated and non-illuminated pixels"):
92
90
  segmented_beams = self.segment_arrays(split_beams)
93
91
 
94
92
  # Step 6:
95
- with self.apm_processing_step(
93
+ with self.telemetry_span(
96
94
  f"Compute the inscribed rectangular extents of the illuminated portions of the sensor"
97
95
  ):
98
96
  illuminated_boundaries = self.compute_boundaries_of_beam_illumination_regions(
@@ -100,14 +98,14 @@ class BeamBoundariesCalibrationBase(CryonirspTaskBase):
100
98
  )
101
99
 
102
100
  # Steps 7 - 9:
103
- with self.apm_processing_step(f"Compute the boundaries of the illuminated beams"):
101
+ with self.telemetry_span(f"Compute the boundaries of the illuminated beams"):
104
102
  split_beams_float = [split_beam.astype(float) for split_beam in split_beams]
105
103
  boundaries = self.compute_final_beam_boundaries(
106
104
  split_beams_float, illuminated_boundaries
107
105
  )
108
106
 
109
107
  # Step 10:
110
- with self.apm_writing_step("Writing beam boundaries"):
108
+ with self.telemetry_span("Writing beam boundaries"):
111
109
  for beam, bounds in enumerate(boundaries, start=1):
112
110
  self.write(
113
111
  data=bounds.beam_boundaries_array,
@@ -58,7 +58,7 @@ class DarkCalibration(CryonirspTaskBase):
58
58
  )
59
59
 
60
60
  logger.info(f"{target_exposure_conditions = }")
61
- with self.apm_task_step(
61
+ with self.telemetry_span(
62
62
  f"Calculating dark frames for {self.constants.num_beams} beams and {len(target_exposure_conditions)} exp times"
63
63
  ):
64
64
  total_dark_frames_used = 0
@@ -90,12 +90,12 @@ class DarkCalibration(CryonirspTaskBase):
90
90
  beam_boundary=beam_boundary,
91
91
  )
92
92
 
93
- with self.apm_processing_step(
93
+ with self.telemetry_span(
94
94
  f"Calculating dark for {exposure_conditions = } and {beam = }"
95
95
  ):
96
96
  averaged_dark_array = average_numpy_arrays(linearized_dark_arrays)
97
97
 
98
- with self.apm_writing_step(
98
+ with self.telemetry_span(
99
99
  f"Writing dark for {exposure_conditions = } {beam = }"
100
100
  ):
101
101
  self.write(
@@ -109,7 +109,7 @@ class DarkCalibration(CryonirspTaskBase):
109
109
  encoder=fits_array_encoder,
110
110
  )
111
111
 
112
- with self.apm_processing_step("Computing and logging quality metrics"):
112
+ with self.telemetry_span("Computing and logging quality metrics"):
113
113
  no_of_raw_dark_frames: int = self.scratch.count_all(
114
114
  tags=[
115
115
  CryonirspTag.linearized_frame(),
@@ -81,7 +81,7 @@ class GainCalibrationBase(CryonirspTaskBase):
81
81
  target_exposure_conditions = self.exposure_conditions
82
82
 
83
83
  logger.info(f"{target_exposure_conditions = }")
84
- with self.apm_task_step(
84
+ with self.telemetry_span(
85
85
  f"Generate {self.gain_type} for {len(target_exposure_conditions)} exposure times"
86
86
  ):
87
87
  for beam in range(1, self.constants.num_beams + 1):
@@ -96,7 +96,7 @@ class GainCalibrationBase(CryonirspTaskBase):
96
96
 
97
97
  for exposure_conditions in target_exposure_conditions:
98
98
  apm_str = f"{beam = } and {exposure_conditions = }"
99
- with self.apm_processing_step(f"Remove dark signal for {apm_str}"):
99
+ with self.telemetry_span(f"Remove dark signal for {apm_str}"):
100
100
  dark_array = next(
101
101
  self.read(
102
102
  tags=[
@@ -117,7 +117,7 @@ class GainCalibrationBase(CryonirspTaskBase):
117
117
  subtract_array_from_arrays(avg_gain_array, dark_array)
118
118
  )
119
119
 
120
- with self.apm_processing_step(f"Correct bad pixels for {apm_str}"):
120
+ with self.telemetry_span(f"Correct bad pixels for {apm_str}"):
121
121
  bad_pixel_map = next(
122
122
  self.read(
123
123
  tags=[
@@ -133,12 +133,12 @@ class GainCalibrationBase(CryonirspTaskBase):
133
133
  )
134
134
 
135
135
  if self.normalize_gain_switch:
136
- with self.apm_processing_step(f"Normalize final gain for {apm_str}"):
136
+ with self.telemetry_span(f"Normalize final gain for {apm_str}"):
137
137
  normalized_gain_array = self.normalize_gain(bad_pixel_corrected_array)
138
138
  else:
139
139
  normalized_gain_array = bad_pixel_corrected_array
140
140
 
141
- with self.apm_writing_step(
141
+ with self.telemetry_span(
142
142
  f"Writing gain array for {beam = } and {exposure_conditions = }"
143
143
  ):
144
144
  self.write(
@@ -152,7 +152,7 @@ class GainCalibrationBase(CryonirspTaskBase):
152
152
  encoder=fits_array_encoder,
153
153
  )
154
154
 
155
- with self.apm_processing_step("Computing and logging quality metrics"):
155
+ with self.telemetry_span("Computing and logging quality metrics"):
156
156
  no_of_raw_gain_frames: int = self.scratch.count_all(
157
157
  tags=[
158
158
  CryonirspTag.linearized_frame(),
@@ -88,10 +88,10 @@ class InstrumentPolarizationCalibrationBase(CryonirspTaskBase, ABC):
88
88
  f"Demodulation matrices will span FOV with shape {(self.parameters.polcal_num_spatial_bins, self.parameters.polcal_num_spatial_bins)}"
89
89
  )
90
90
  for beam in range(1, self.constants.num_beams + 1):
91
- with self.apm_processing_step(f"Reducing CS steps for {beam = }"):
91
+ with self.telemetry_span(f"Reducing CS steps for {beam = }"):
92
92
  local_reduced_arrays, global_reduced_arrays = self.reduce_cs_steps(beam)
93
93
 
94
- with self.apm_processing_step(f"Fit CU parameters for {beam = }"):
94
+ with self.telemetry_span(f"Fit CU parameters for {beam = }"):
95
95
  local_dresser = Dresser()
96
96
  local_dresser.add_drawer(Drawer(local_reduced_arrays))
97
97
  global_dresser = Dresser()
@@ -104,7 +104,7 @@ class InstrumentPolarizationCalibrationBase(CryonirspTaskBase, ABC):
104
104
  fit_TM=False,
105
105
  )
106
106
 
107
- with self.apm_processing_step(f"Resampling demodulation matrices for {beam = }"):
107
+ with self.telemetry_span(f"Resampling demodulation matrices for {beam = }"):
108
108
  demod_matrices = pac_fitter.demodulation_matrices
109
109
  # Reshaping the demodulation matrix to get rid of unit length dimensions
110
110
  logger.info(f"Resampling demodulation matrices for {beam = }")
@@ -113,7 +113,7 @@ class InstrumentPolarizationCalibrationBase(CryonirspTaskBase, ABC):
113
113
  f"Shape of resampled demodulation matrices for {beam = }: {demod_matrices.shape}"
114
114
  )
115
115
 
116
- with self.apm_writing_step(f"Writing demodulation matrices for {beam = }"):
116
+ with self.telemetry_span(f"Writing demodulation matrices for {beam = }"):
117
117
  self.write(
118
118
  data=demod_matrices,
119
119
  tags=[
@@ -123,10 +123,10 @@ class InstrumentPolarizationCalibrationBase(CryonirspTaskBase, ABC):
123
123
  encoder=fits_array_encoder,
124
124
  )
125
125
 
126
- with self.apm_processing_step("Computing and recording polcal quality metrics"):
126
+ with self.telemetry_span("Computing and recording polcal quality metrics"):
127
127
  self.record_polcal_quality_metrics(beam, polcal_fitter=pac_fitter)
128
128
 
129
- with self.apm_processing_step("Computing and logging quality metrics"):
129
+ with self.telemetry_span("Computing and logging quality metrics"):
130
130
  no_of_raw_polcal_frames: int = self.scratch.count_all(
131
131
  tags=[
132
132
  CryonirspTag.linearized_frame(),
@@ -271,11 +271,11 @@ class InstrumentPolarizationCalibrationBase(CryonirspTaskBase, ABC):
271
271
  avg_inst_pol_cal_header = next(pol_cal_headers)
272
272
  avg_inst_pol_cal_array = average_numpy_arrays(pol_cal_arrays)
273
273
 
274
- with self.apm_processing_step(f"Apply basic corrections for {apm_str}"):
274
+ with self.telemetry_span(f"Apply basic corrections for {apm_str}"):
275
275
  dark_corrected_array = subtract_array_from_arrays(avg_inst_pol_cal_array, dark_array)
276
276
  gain_corrected_array = next(divide_arrays_by_array(dark_corrected_array, gain_array))
277
277
 
278
- with self.apm_processing_step(f"Extract macro pixels from {apm_str}"):
278
+ with self.telemetry_span(f"Extract macro pixels from {apm_str}"):
279
279
  self.set_original_beam_size(gain_corrected_array)
280
280
  output_shape = (
281
281
  self.parameters.polcal_num_spatial_bins,
@@ -284,7 +284,7 @@ class InstrumentPolarizationCalibrationBase(CryonirspTaskBase, ABC):
284
284
  local_binned_array = next(resize_arrays(gain_corrected_array, output_shape))
285
285
  global_binned_array = next(resize_arrays(gain_corrected_array, (1, 1)))
286
286
 
287
- with self.apm_processing_step(f"Create reduced CryonirspL0FitsAccess for {apm_str}"):
287
+ with self.telemetry_span(f"Create reduced CryonirspL0FitsAccess for {apm_str}"):
288
288
  local_result = CryonirspL0FitsAccess(
289
289
  fits.ImageHDU(local_binned_array[:, :], avg_inst_pol_cal_header),
290
290
  auto_squeeze=False,
@@ -349,7 +349,7 @@ class InstrumentPolarizationCalibrationBase(CryonirspTaskBase, ABC):
349
349
  self, target_exposure_conditions_list: [ExposureConditions]
350
350
  ):
351
351
  """Compute the polcal dark calibration."""
352
- with self.apm_task_step(
352
+ with self.telemetry_span(
353
353
  f"Calculating dark frames for {len(target_exposure_conditions_list)} exp times"
354
354
  ):
355
355
  for beam in range(1, self.constants.num_beams + 1):
@@ -361,7 +361,7 @@ class InstrumentPolarizationCalibrationBase(CryonirspTaskBase, ABC):
361
361
  )
362
362
  beam_boundary = BeamBoundary(*beam_array)
363
363
  for exposure_conditions in target_exposure_conditions_list:
364
- with self.apm_processing_step(
364
+ with self.telemetry_span(
365
365
  f"Calculating polcal dark array(s) for {exposure_conditions = } and {beam = }"
366
366
  ):
367
367
  linearized_dark_arrays = self.read(
@@ -376,7 +376,7 @@ class InstrumentPolarizationCalibrationBase(CryonirspTaskBase, ABC):
376
376
  beam_boundary=beam_boundary,
377
377
  )
378
378
  averaged_dark_array = average_numpy_arrays(linearized_dark_arrays)
379
- with self.apm_writing_step(
379
+ with self.telemetry_span(
380
380
  f"Writing dark for {exposure_conditions = } and {beam = }"
381
381
  ):
382
382
  self.write(
@@ -392,7 +392,7 @@ class InstrumentPolarizationCalibrationBase(CryonirspTaskBase, ABC):
392
392
 
393
393
  def generate_polcal_gain_calibration(self, exposure_conditions_list: [ExposureConditions]):
394
394
  """Compute the polcal gain calibration."""
395
- with self.apm_task_step(
395
+ with self.telemetry_span(
396
396
  f"Generate gains for {len(exposure_conditions_list)} exposure conditions"
397
397
  ):
398
398
  for beam in range(1, self.constants.num_beams + 1):
@@ -423,7 +423,7 @@ class InstrumentPolarizationCalibrationBase(CryonirspTaskBase, ABC):
423
423
  raise ValueError(
424
424
  f"No matching polcal dark found for {exposure_conditions = } s and {beam = }"
425
425
  ) from e
426
- with self.apm_processing_step(
426
+ with self.telemetry_span(
427
427
  f"Calculating polcal gain array(s) for {exposure_conditions = } and {beam = }"
428
428
  ):
429
429
  linearized_gain_arrays = self.read(
@@ -460,7 +460,7 @@ class InstrumentPolarizationCalibrationBase(CryonirspTaskBase, ABC):
460
460
  bad_pixel_corrected_array
461
461
  )
462
462
 
463
- with self.apm_writing_step(
463
+ with self.telemetry_span(
464
464
  f"Writing gain array for exposure time {exposure_conditions} and {beam = }"
465
465
  ):
466
466
  self.write(
@@ -23,10 +23,10 @@ class MakeCryonirspMovieFramesBase(CryonirspTaskBase, ABC):
23
23
  def run(self):
24
24
  """Create movie frames using all stokes states if they exist, otherwise only use intensity."""
25
25
  if self.constants.correct_for_polarization:
26
- with self.apm_task_step("Make full stokes movie"):
26
+ with self.telemetry_span("Make full stokes movie"):
27
27
  self.make_full_stokes_movie_frames()
28
28
  else:
29
- with self.apm_task_step("Make intensity only movie"):
29
+ with self.telemetry_span("Make intensity only movie"):
30
30
  self.make_intensity_movie_frames()
31
31
 
32
32
  @abstractmethod
@@ -108,26 +108,26 @@ class CryonirspL1QualityMetrics(CryonirspTaskBase, QualityMixin):
108
108
  def run(self) -> None:
109
109
  """Calculate sensitivity and noise quality metrics."""
110
110
  if self.constants.correct_for_polarization:
111
- with self.apm_processing_step(
112
- "Calculating L1 Sensitivity metrics for all stokes states"
113
- ):
111
+ with self.telemetry_span("Calculating L1 Sensitivity metrics for all stokes states"):
114
112
  self.compute_full_stokes_sensitivity()
115
- with self.apm_task_step("Calculating L1 Cryonirsp noise metrics for all stokes states"):
113
+ with self.telemetry_span(
114
+ "Calculating L1 Cryonirsp noise metrics for all stokes states"
115
+ ):
116
116
  self.compute_full_stokes_noise()
117
117
  else:
118
- with self.apm_processing_step("Calculating L1 Sensitivity metrics for intensity only"):
118
+ with self.telemetry_span("Calculating L1 Sensitivity metrics for intensity only"):
119
119
  self.compute_intensity_only_sensitivity()
120
- with self.apm_task_step("Calculating L1 Cryonirsp noise metrics for intensity only"):
120
+ with self.telemetry_span("Calculating L1 Cryonirsp noise metrics for intensity only"):
121
121
  self.compute_intensity_only_noise()
122
122
 
123
123
  def compute_full_stokes_sensitivity(self):
124
124
  """Compute the sensitivities of each map scan for each stokes state."""
125
125
  for stokes_state in self.constants.stokes_params:
126
- with self.apm_processing_step(f"Calculating sensitivity for stokes = {stokes_state}"):
126
+ with self.telemetry_span(f"Calculating sensitivity for stokes = {stokes_state}"):
127
127
  quality_data = self.calculate_sensitivity_for_stokes_state(
128
128
  stokes_state=stokes_state
129
129
  )
130
- with self.apm_writing_step(f"Writing sensitivity data for stokes = {stokes_state}"):
130
+ with self.telemetry_span(f"Writing sensitivity data for stokes = {stokes_state}"):
131
131
  self.quality_store_sensitivity(
132
132
  stokes=stokes_state,
133
133
  datetimes=quality_data.datetimes,
@@ -136,9 +136,9 @@ class CryonirspL1QualityMetrics(CryonirspTaskBase, QualityMixin):
136
136
 
137
137
  def compute_intensity_only_sensitivity(self):
138
138
  """Compute the sensitivities of each map scan for the intensity stokes state only."""
139
- with self.apm_processing_step(f"Calculating sensitivity for intensity only"):
139
+ with self.telemetry_span(f"Calculating sensitivity for intensity only"):
140
140
  quality_data = self.calculate_sensitivity_for_stokes_state(stokes_state="I")
141
- with self.apm_writing_step("Writing sensitivity data for intensity only"):
141
+ with self.telemetry_span("Writing sensitivity data for intensity only"):
142
142
  self.quality_store_sensitivity(
143
143
  stokes="I", datetimes=quality_data.datetimes, values=quality_data.values
144
144
  )
@@ -146,9 +146,9 @@ class CryonirspL1QualityMetrics(CryonirspTaskBase, QualityMixin):
146
146
  def compute_full_stokes_noise(self):
147
147
  """Compute noise in data broken down by each stokes state."""
148
148
  for stokes in self.constants.stokes_params:
149
- with self.apm_processing_step(f"Compile noise values for {stokes=}"):
149
+ with self.telemetry_span(f"Compile noise values for {stokes=}"):
150
150
  noise_data = self.compile_noise_data(stokes=stokes)
151
- with self.apm_writing_step(f"Write noise values for {stokes=}"):
151
+ with self.telemetry_span(f"Write noise values for {stokes=}"):
152
152
  self.quality_store_noise(
153
153
  datetimes=noise_data.datetimes, values=noise_data.values, stokes=stokes
154
154
  )
@@ -156,9 +156,9 @@ class CryonirspL1QualityMetrics(CryonirspTaskBase, QualityMixin):
156
156
  def compute_intensity_only_noise(self):
157
157
  """Compute noise in data for the intensity stokes state only."""
158
158
  stokes = "I"
159
- with self.apm_processing_step(f"Compile noise values for {stokes=}"):
159
+ with self.telemetry_span(f"Compile noise values for {stokes=}"):
160
160
  noise_data = self.compile_noise_data(stokes=stokes)
161
- with self.apm_writing_step(f"Write noise values for {stokes=}"):
161
+ with self.telemetry_span(f"Write noise values for {stokes=}"):
162
162
  self.quality_store_noise(
163
163
  datetimes=noise_data.datetimes, values=noise_data.values, stokes=stokes
164
164
  )
@@ -70,17 +70,17 @@ class ScienceCalibrationBase(CryonirspTaskBase, ABC):
70
70
  None
71
71
 
72
72
  """
73
- with self.apm_task_step("Loading calibration objects"):
73
+ with self.telemetry_span("Loading calibration objects"):
74
74
  calibrations = self.collect_calibration_objects()
75
75
 
76
- with self.apm_task_step(
76
+ with self.telemetry_span(
77
77
  f"Calibrating Science Frames for "
78
78
  f"{self.constants.num_map_scans} map scans and "
79
79
  f"{self.constants.num_scan_steps} scan steps"
80
80
  ):
81
81
  self.calibrate_and_write_frames(calibrations=calibrations)
82
82
 
83
- with self.apm_processing_step("Computing and logging quality metrics"):
83
+ with self.telemetry_span("Computing and logging quality metrics"):
84
84
  no_of_raw_science_frames: int = self.scratch.count_all(
85
85
  tags=[
86
86
  CryonirspTag.linearized_frame(),
@@ -227,7 +227,7 @@ class ScienceCalibrationBase(CryonirspTaskBase, ABC):
227
227
  array_stack = np.zeros(array_shape + (self.constants.num_modstates,))
228
228
  header_stack = []
229
229
 
230
- with self.apm_processing_step(f"Correcting {self.constants.num_modstates} modstates"):
230
+ with self.telemetry_span(f"Correcting {self.constants.num_modstates} modstates"):
231
231
  for modstate in range(1, self.constants.num_modstates + 1):
232
232
  # Correct the arrays
233
233
  corrected_array, corrected_header = self.apply_basic_corrections(
@@ -243,7 +243,7 @@ class ScienceCalibrationBase(CryonirspTaskBase, ABC):
243
243
  array_stack[:, :, modstate - 1] = corrected_array
244
244
  header_stack.append(corrected_header)
245
245
 
246
- with self.apm_processing_step("Applying instrument polarization correction"):
246
+ with self.telemetry_span("Applying instrument polarization correction"):
247
247
  intermediate_array = self.polarization_correction(
248
248
  array_stack, calibrations.demod_matrices[CryonirspTag.beam(beam)]
249
249
  )
@@ -71,39 +71,39 @@ class SPGeometricCalibration(CryonirspTaskBase, ShiftMeasurementsMixin):
71
71
  """
72
72
  # The basic corrections are done outside the loop structure below as it makes these loops much
73
73
  # simpler than they would be otherwise. See the comments in do_basic_corrections for more details.
74
- with self.apm_processing_step("Basic corrections"):
74
+ with self.telemetry_span("Basic corrections"):
75
75
  self.do_basic_corrections()
76
76
 
77
77
  for beam in range(1, self.constants.num_beams + 1):
78
- with self.apm_task_step(f"Generating geometric calibrations for {beam = }"):
79
- with self.apm_processing_step(f"Computing and writing angle for {beam = }"):
78
+ with self.telemetry_span(f"Generating geometric calibrations for {beam = }"):
79
+ with self.telemetry_span(f"Computing and writing angle for {beam = }"):
80
80
  angle = self.compute_beam_angle(beam=beam)
81
81
  self.write_angle(angle=angle, beam=beam)
82
82
 
83
- with self.apm_processing_step(f"Removing angle from {beam = }"):
83
+ with self.telemetry_span(f"Removing angle from {beam = }"):
84
84
  angle_corr_array = self.remove_beam_angle(angle=angle, beam=beam)
85
85
 
86
- with self.apm_processing_step(f"Computing offset for {beam = }"):
86
+ with self.telemetry_span(f"Computing offset for {beam = }"):
87
87
  beam_offset = self.compute_offset(
88
88
  array=angle_corr_array,
89
89
  beam=beam,
90
90
  )
91
91
  self.write_beam_offset(offset=beam_offset, beam=beam)
92
92
 
93
- with self.apm_processing_step(f"Removing offset for {beam = }"):
93
+ with self.telemetry_span(f"Removing offset for {beam = }"):
94
94
  self.remove_beam_offset(
95
95
  array=angle_corr_array,
96
96
  offset=beam_offset,
97
97
  beam=beam,
98
98
  )
99
99
 
100
- with self.apm_processing_step(f"Computing spectral shifts for {beam = }"):
100
+ with self.telemetry_span(f"Computing spectral shifts for {beam = }"):
101
101
  spec_shifts = self.compute_spectral_shifts(beam=beam)
102
102
 
103
- with self.apm_writing_step(f"Writing spectral shifts for {beam = }"):
103
+ with self.telemetry_span(f"Writing spectral shifts for {beam = }"):
104
104
  self.write_spectral_shifts(shifts=spec_shifts, beam=beam)
105
105
 
106
- with self.apm_processing_step("Computing and logging quality metrics"):
106
+ with self.telemetry_span("Computing and logging quality metrics"):
107
107
  no_of_raw_geo_frames: int = self.scratch.count_all(
108
108
  tags=[
109
109
  CryonirspTag.linearized_frame(),
@@ -60,29 +60,31 @@ class SPSolarGainCalibration(CryonirspTaskBase):
60
60
  """
61
61
  target_exposure_conditions = self.constants.solar_gain_exposure_conditions_list
62
62
 
63
- with self.apm_step(f"Computing SP gain calibrations for {target_exposure_conditions=}"):
63
+ with self.telemetry_span(
64
+ f"Computing SP gain calibrations for {target_exposure_conditions=}"
65
+ ):
64
66
  for exposure_conditions in target_exposure_conditions:
65
67
  for beam in range(1, self.constants.num_beams + 1):
66
- with self.apm_processing_step(
68
+ with self.telemetry_span(
67
69
  f"Perform initial corrections for {beam = } and {exposure_conditions = }"
68
70
  ):
69
71
  spectral_corrected_solar_array = self.do_initial_corrections(
70
72
  beam=beam, exposure_conditions=exposure_conditions
71
73
  )
72
74
 
73
- with self.apm_processing_step(
75
+ with self.telemetry_span(
74
76
  f"Compute the characteristic spectrum for {beam = } and {exposure_conditions = }"
75
77
  ):
76
78
  char_spectrum = self.compute_char_spectrum(
77
79
  array=spectral_corrected_solar_array, beam=beam
78
80
  )
79
81
 
80
- with self.apm_processing_step(
82
+ with self.telemetry_span(
81
83
  f"Re-apply the spectral and geometric distortions for {beam = } and {exposure_conditions = }"
82
84
  ):
83
85
  distorted_char_spectrum = self.distort_char_spectrum(char_spectrum)
84
86
 
85
- with self.apm_processing_step(
87
+ with self.telemetry_span(
86
88
  f"Remove the solar spectrum for {beam = } and {exposure_conditions = }"
87
89
  ):
88
90
  # This is the final gain image, as we do not normalize
@@ -93,7 +95,7 @@ class SPSolarGainCalibration(CryonirspTaskBase):
93
95
  )
94
96
 
95
97
  if self.parameters.fringe_correction_on:
96
- with self.apm_processing_step(
98
+ with self.telemetry_span(
97
99
  f"Computing final solar gain based on fringe-corrected flux-scaled lamp gain for {beam = } and {exposure_conditions = }"
98
100
  ):
99
101
  # Compute a solar gain based on a fringe-corrected lamp gain
@@ -101,7 +103,7 @@ class SPSolarGainCalibration(CryonirspTaskBase):
101
103
  beam, exposure_conditions
102
104
  )
103
105
 
104
- with self.apm_writing_step(
106
+ with self.telemetry_span(
105
107
  f"Writing the final solar gain array for {beam = } and {exposure_conditions = }"
106
108
  ):
107
109
  self.write_solar_gain_calibration(
@@ -109,7 +111,7 @@ class SPSolarGainCalibration(CryonirspTaskBase):
109
111
  beam=beam,
110
112
  )
111
113
 
112
- with self.apm_processing_step("Computing and logging quality metrics"):
114
+ with self.telemetry_span("Computing and logging quality metrics"):
113
115
  no_of_raw_solar_frames: int = self.scratch.count_all(
114
116
  tags=[
115
117
  CryonirspTag.linearized_frame(),
@@ -449,18 +451,18 @@ class SPSolarGainCalibration(CryonirspTaskBase):
449
451
  """
450
452
  apm_str = f"{beam = } and {exposure_conditions = }"
451
453
 
452
- with self.apm_processing_step(f"Perform initial corrections for {apm_str}"):
454
+ with self.telemetry_span(f"Perform initial corrections for {apm_str}"):
453
455
  corrected_solar_array = self.do_dark_and_bad_pixel_corrections(
454
456
  beam=beam, exposure_conditions=exposure_conditions
455
457
  )
456
458
 
457
- with self.apm_processing_step(f"Compute the flux-scaled lamp gain for {apm_str}"):
459
+ with self.telemetry_span(f"Compute the flux-scaled lamp gain for {apm_str}"):
458
460
  scaled_lamp_array = self.compute_flux_scaled_lamp_gain(corrected_solar_array, beam)
459
461
 
460
- with self.apm_processing_step(f"Apply spectral filtering for {apm_str}"):
462
+ with self.telemetry_span(f"Apply spectral filtering for {apm_str}"):
461
463
  filtered_lamp_array = self.apply_spectral_and_spatial_filtering(scaled_lamp_array)
462
464
 
463
- with self.apm_processing_step(f"Isolate and remove fringes for {apm_str}"):
465
+ with self.telemetry_span(f"Isolate and remove fringes for {apm_str}"):
464
466
  final_gain_array = self.isolate_and_remove_fringes(
465
467
  filtered_lamp_array, scaled_lamp_array
466
468
  )
@@ -62,7 +62,7 @@ class SPWavelengthCalibration(CryonirspTaskBase):
62
62
  -------
63
63
  None
64
64
  """
65
- with self.apm_processing_step("Load input spectrum and wavelength"):
65
+ with self.telemetry_span("Load input spectrum and wavelength"):
66
66
  logger.info("Loading input spectrum")
67
67
  input_spectrum = next(
68
68
  self.read(
@@ -99,7 +99,7 @@ class SPWavelengthCalibration(CryonirspTaskBase):
99
99
  resolving_power = self.get_resolving_power()
100
100
  logger.info(f"{resolving_power = }")
101
101
 
102
- with self.apm_processing_step("Compute brute-force CRVAL initial guess"):
102
+ with self.telemetry_span("Compute brute-force CRVAL initial guess"):
103
103
  atlas = Atlas(config=self.parameters.wavecal_atlas_download_config)
104
104
  crval = calculate_initial_crval_guess(
105
105
  input_wavelength_vector=input_wavelength_vector,
@@ -111,7 +111,7 @@ class SPWavelengthCalibration(CryonirspTaskBase):
111
111
  )
112
112
  logger.info(f"{crval = !s}")
113
113
 
114
- with self.apm_task_step("Set up wavelength fit"):
114
+ with self.telemetry_span("Set up wavelength fit"):
115
115
  logger.info("Setting bounds")
116
116
  bounds = BoundsModel(
117
117
  crval=LengthBoundRange(min=crval - (5 * u.nm), max=crval + (5 * u.nm)),
@@ -158,14 +158,14 @@ class SPWavelengthCalibration(CryonirspTaskBase):
158
158
 
159
159
  logger.info(f"Input parameters: {input_parameters.lmfit_parameters.pretty_repr()}")
160
160
 
161
- with self.apm_processing_step("Run wavelength solution fit"):
161
+ with self.telemetry_span("Run wavelength solution fit"):
162
162
  fit_result = fitter(
163
163
  input_wavelength_vector=input_wavelength_vector,
164
164
  input_spectrum=input_spectrum,
165
165
  spectral_weights=weights,
166
166
  )
167
167
 
168
- with self.apm_writing_step("Save wavelength solution and quality metrics"):
168
+ with self.telemetry_span("Save wavelength solution and quality metrics"):
169
169
  self.write(
170
170
  data=fit_result.wavelength_parameters.to_header(
171
171
  axis_num=1, add_alternate_keys=True
@@ -1,5 +1,4 @@
1
1
  import argparse
2
- import json
3
2
  import os
4
3
  import sys
5
4
  from datetime import datetime
@@ -170,21 +169,6 @@ def spoof_obs_lin_parsed_constants(
170
169
  return SetCalOnlyConstants
171
170
 
172
171
 
173
- def setup_APM_config() -> None:
174
- mesh_config = {
175
- "system-monitoring-log-apm": {
176
- "mesh_address": "system-monitoring-log-apm.service.sim.consul",
177
- "mesh_port": 8200,
178
- },
179
- "automated-processing-scratch-inventory": {"mesh_address": "localhost", "mesh_port": 6379},
180
- "internal-api-gateway": {"mesh_address": "localhost", "mesh_port": 80},
181
- }
182
- apm_options = {"TRANSACTION_MAX_SPANS": 10000}
183
- os.environ["MESH_CONFIG"] = json.dumps(mesh_config)
184
- os.environ["ELASTIC_APM_ENABLED"] = "true"
185
- os.environ["ELASTIC_APM_OTHER_OPTIONS"] = json.dumps(apm_options)
186
-
187
-
188
172
  def CI_workflow(
189
173
  manual_processing_run: ManualProcessing,
190
174
  load_beam_boundaries: bool = False,
@@ -289,13 +273,10 @@ def main(
289
273
  load_solar: bool = False,
290
274
  load_wavelength_correction: bool = False,
291
275
  load_inst_pol: bool = False,
292
- use_apm: bool = False,
293
276
  param_path: Path = None,
294
277
  dummy_wavelength: float = 1083.0,
295
278
  polarimetric: bool = True,
296
279
  ):
297
- if use_apm:
298
- setup_APM_config()
299
280
  with ManualProcessing(
300
281
  workflow_path=Path(scratch_path),
301
282
  recipe_run_id=recipe_run_id,
@@ -491,7 +472,6 @@ if __name__ == "__main__":
491
472
  help="Load instrument polarization calibration from previously saved run",
492
473
  action="store_true",
493
474
  )
494
- parser.add_argument("-A", "--use-apm", help="Send APM spans to SIM", action="store_true")
495
475
  parser.add_argument(
496
476
  "-p",
497
477
  "--param-path",
@@ -526,7 +506,6 @@ if __name__ == "__main__":
526
506
  load_solar=args.load_solar,
527
507
  load_wavelength_correction=args.load_wavelength_correction,
528
508
  load_inst_pol=args.load_inst_pol,
529
- use_apm=args.use_apm,
530
509
  param_path=Path(args.param_path),
531
510
  polarimetric=not args.intensity_only,
532
511
  )
@@ -191,21 +191,6 @@ class ValidateL1Output(CryonirspTaskBase):
191
191
  spec214_validator.validate(f, extra=False)
192
192
 
193
193
 
194
- def setup_APM_config() -> None:
195
- mesh_config = {
196
- "system-monitoring-log-apm": {
197
- "mesh_address": "system-monitoring-log-apm.service.sim.consul",
198
- "mesh_port": 8200,
199
- },
200
- "automated-processing-scratch-inventory": {"mesh_address": "localhost", "mesh_port": 6379},
201
- "internal-api-gateway": {"mesh_address": "localhost", "mesh_port": 80},
202
- }
203
- apm_options = {"TRANSACTION_MAX_SPANS": 10000}
204
- os.environ["MESH_CONFIG"] = json.dumps(mesh_config)
205
- os.environ["ELASTIC_APM_ENABLED"] = "true"
206
- os.environ["ELASTIC_APM_OTHER_OPTIONS"] = json.dumps(apm_options)
207
-
208
-
209
194
  def CI_workflow(
210
195
  manual_processing_run: ManualProcessing,
211
196
  load_beam_boundaries: bool = False,
@@ -322,12 +307,9 @@ def main(
322
307
  load_solar: bool = False,
323
308
  load_inst_pol: bool = False,
324
309
  load_wavelength_calibration: bool = False,
325
- use_apm: bool = False,
326
310
  param_path: Path = None,
327
311
  transfer_trial_data: str | None = None,
328
312
  ):
329
- if use_apm:
330
- setup_APM_config()
331
313
  with ManualProcessing(
332
314
  workflow_path=Path(scratch_path),
333
315
  recipe_run_id=recipe_run_id,
@@ -573,7 +555,6 @@ if __name__ == "__main__":
573
555
  help="Load instrument polarization calibration from previously saved run",
574
556
  action="store_true",
575
557
  )
576
- parser.add_argument("-A", "--use-apm", help="Send APM spans to SIM", action="store_true")
577
558
  parser.add_argument(
578
559
  "-p",
579
560
  "--param-path",
@@ -603,7 +584,6 @@ if __name__ == "__main__":
603
584
  load_solar=args.load_solar,
604
585
  load_wavelength_calibration=args.load_wavelength_calibration,
605
586
  load_inst_pol=args.load_inst_pol,
606
- use_apm=args.use_apm,
607
587
  param_path=Path(args.param_path),
608
588
  transfer_trial_data=args.transfer_trial_data,
609
589
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dkist-processing-cryonirsp
3
- Version: 1.13.0
3
+ Version: 1.14.0
4
4
  Summary: Science processing code for the Cryo-NIRSP instrument on DKIST
5
5
  Author-email: NSO / AURA <dkistdc@nso.edu>
6
6
  License: BSD-3-Clause
@@ -17,12 +17,12 @@ Requires-Dist: Pillow==10.4.0
17
17
  Requires-Dist: astropy==7.0.2
18
18
  Requires-Dist: dkist-fits-specifications==4.17.0
19
19
  Requires-Dist: dkist-header-validator==5.2.1
20
- Requires-Dist: dkist-processing-common==11.5.0
20
+ Requires-Dist: dkist-processing-common==11.6.0
21
21
  Requires-Dist: dkist-processing-math==2.2.1
22
22
  Requires-Dist: dkist-processing-pac==3.1.1
23
23
  Requires-Dist: dkist-spectral-lines==3.0.0
24
24
  Requires-Dist: largestinteriorrectangle==0.2.1
25
- Requires-Dist: dkist-service-configuration==2.2
25
+ Requires-Dist: dkist-service-configuration==4.1.7
26
26
  Requires-Dist: moviepy==2.1.2
27
27
  Requires-Dist: numba==0.61.2
28
28
  Requires-Dist: numpy==2.2.5
@@ -70,7 +70,7 @@ Requires-Dist: Flask-AppBuilder==4.5.3; extra == "frozen"
70
70
  Requires-Dist: Flask-Babel==2.0.0; extra == "frozen"
71
71
  Requires-Dist: Flask-Caching==2.3.1; extra == "frozen"
72
72
  Requires-Dist: Flask-JWT-Extended==4.7.1; extra == "frozen"
73
- Requires-Dist: Flask-Limiter==3.12; extra == "frozen"
73
+ Requires-Dist: Flask-Limiter==3.13; extra == "frozen"
74
74
  Requires-Dist: Flask-Login==0.6.3; extra == "frozen"
75
75
  Requires-Dist: Flask-SQLAlchemy==2.5.1; extra == "frozen"
76
76
  Requires-Dist: Flask-Session==0.5.0; extra == "frozen"
@@ -80,55 +80,56 @@ Requires-Dist: Mako==1.3.10; extra == "frozen"
80
80
  Requires-Dist: MarkupSafe==3.0.2; extra == "frozen"
81
81
  Requires-Dist: PeakUtils==1.3.5; extra == "frozen"
82
82
  Requires-Dist: PyJWT==2.10.1; extra == "frozen"
83
- Requires-Dist: PyYAML==6.0.2; extra == "frozen"
83
+ Requires-Dist: PyYAML==6.0.3; extra == "frozen"
84
84
  Requires-Dist: Pygments==2.19.2; extra == "frozen"
85
85
  Requires-Dist: SQLAlchemy==1.4.54; extra == "frozen"
86
86
  Requires-Dist: SQLAlchemy-JSONField==1.0.2; extra == "frozen"
87
87
  Requires-Dist: SQLAlchemy-Utils==0.42.0; extra == "frozen"
88
88
  Requires-Dist: WTForms==3.2.1; extra == "frozen"
89
89
  Requires-Dist: Werkzeug==2.2.3; extra == "frozen"
90
- Requires-Dist: aioftp==0.26.2; extra == "frozen"
90
+ Requires-Dist: aioftp==0.27.2; extra == "frozen"
91
91
  Requires-Dist: aiohappyeyeballs==2.6.1; extra == "frozen"
92
92
  Requires-Dist: aiohttp==3.12.15; extra == "frozen"
93
93
  Requires-Dist: aiosignal==1.4.0; extra == "frozen"
94
+ Requires-Dist: aiosmtplib==4.0.2; extra == "frozen"
94
95
  Requires-Dist: alembic==1.16.5; extra == "frozen"
95
96
  Requires-Dist: amqp==5.3.1; extra == "frozen"
96
97
  Requires-Dist: annotated-types==0.7.0; extra == "frozen"
97
- Requires-Dist: anyio==4.10.0; extra == "frozen"
98
+ Requires-Dist: anyio==4.11.0; extra == "frozen"
98
99
  Requires-Dist: apache-airflow==2.11.0; extra == "frozen"
99
- Requires-Dist: apache-airflow-providers-celery==3.12.2; extra == "frozen"
100
- Requires-Dist: apache-airflow-providers-common-compat==1.7.3; extra == "frozen"
101
- Requires-Dist: apache-airflow-providers-common-io==1.6.2; extra == "frozen"
102
- Requires-Dist: apache-airflow-providers-common-sql==1.27.5; extra == "frozen"
100
+ Requires-Dist: apache-airflow-providers-celery==3.10.0; extra == "frozen"
101
+ Requires-Dist: apache-airflow-providers-common-compat==1.7.4; extra == "frozen"
102
+ Requires-Dist: apache-airflow-providers-common-io==1.6.3; extra == "frozen"
103
+ Requires-Dist: apache-airflow-providers-common-sql==1.28.1; extra == "frozen"
103
104
  Requires-Dist: apache-airflow-providers-fab==1.5.3; extra == "frozen"
104
105
  Requires-Dist: apache-airflow-providers-ftp==3.13.2; extra == "frozen"
105
- Requires-Dist: apache-airflow-providers-http==5.3.3; extra == "frozen"
106
+ Requires-Dist: apache-airflow-providers-http==5.3.4; extra == "frozen"
106
107
  Requires-Dist: apache-airflow-providers-imap==3.9.2; extra == "frozen"
107
- Requires-Dist: apache-airflow-providers-postgres==6.2.3; extra == "frozen"
108
- Requires-Dist: apache-airflow-providers-smtp==2.2.0; extra == "frozen"
108
+ Requires-Dist: apache-airflow-providers-postgres==6.3.0; extra == "frozen"
109
+ Requires-Dist: apache-airflow-providers-smtp==2.3.0; extra == "frozen"
109
110
  Requires-Dist: apache-airflow-providers-sqlite==4.1.2; extra == "frozen"
110
- Requires-Dist: apispec==6.8.3; extra == "frozen"
111
+ Requires-Dist: apispec==6.8.4; extra == "frozen"
111
112
  Requires-Dist: argcomplete==3.6.2; extra == "frozen"
112
113
  Requires-Dist: asdf==3.5.0; extra == "frozen"
113
114
  Requires-Dist: asdf_standard==1.4.0; extra == "frozen"
114
115
  Requires-Dist: asdf_transform_schemas==0.6.0; extra == "frozen"
115
- Requires-Dist: asgiref==3.9.1; extra == "frozen"
116
+ Requires-Dist: asgiref==3.9.2; extra == "frozen"
116
117
  Requires-Dist: asteval==1.0.6; extra == "frozen"
117
118
  Requires-Dist: astropy==7.0.2; extra == "frozen"
118
- Requires-Dist: astropy-iers-data==0.2025.9.8.0.36.17; extra == "frozen"
119
+ Requires-Dist: astropy-iers-data==0.2025.9.22.0.37.25; extra == "frozen"
119
120
  Requires-Dist: asyncpg==0.30.0; extra == "frozen"
120
121
  Requires-Dist: attrs==25.3.0; extra == "frozen"
121
122
  Requires-Dist: babel==2.17.0; extra == "frozen"
122
- Requires-Dist: billiard==4.2.1; extra == "frozen"
123
+ Requires-Dist: billiard==4.2.2; extra == "frozen"
123
124
  Requires-Dist: blinker==1.9.0; extra == "frozen"
124
- Requires-Dist: boto3==1.40.25; extra == "frozen"
125
- Requires-Dist: botocore==1.40.25; extra == "frozen"
125
+ Requires-Dist: boto3==1.40.39; extra == "frozen"
126
+ Requires-Dist: botocore==1.40.39; extra == "frozen"
126
127
  Requires-Dist: cachelib==0.13.0; extra == "frozen"
127
- Requires-Dist: celery==5.5.3; extra == "frozen"
128
+ Requires-Dist: celery==5.3.1; extra == "frozen"
128
129
  Requires-Dist: certifi==2025.8.3; extra == "frozen"
129
- Requires-Dist: cffi==1.17.1; extra == "frozen"
130
+ Requires-Dist: cffi==2.0.0; extra == "frozen"
130
131
  Requires-Dist: charset-normalizer==3.4.3; extra == "frozen"
131
- Requires-Dist: click==8.2.1; extra == "frozen"
132
+ Requires-Dist: click==8.3.0; extra == "frozen"
132
133
  Requires-Dist: click-didyoumean==0.3.1; extra == "frozen"
133
134
  Requires-Dist: click-plugins==1.1.1.2; extra == "frozen"
134
135
  Requires-Dist: click-repl==0.3.0; extra == "frozen"
@@ -139,34 +140,32 @@ Requires-Dist: connexion==2.14.2; extra == "frozen"
139
140
  Requires-Dist: contourpy==1.3.3; extra == "frozen"
140
141
  Requires-Dist: cron_descriptor==2.0.6; extra == "frozen"
141
142
  Requires-Dist: croniter==6.0.0; extra == "frozen"
142
- Requires-Dist: cryptography==45.0.7; extra == "frozen"
143
+ Requires-Dist: cryptography==46.0.1; extra == "frozen"
143
144
  Requires-Dist: cycler==0.12.1; extra == "frozen"
144
145
  Requires-Dist: dacite==1.9.2; extra == "frozen"
145
146
  Requires-Dist: decorator==5.2.1; extra == "frozen"
146
147
  Requires-Dist: dill==0.4.0; extra == "frozen"
147
148
  Requires-Dist: dkist-header-validator==5.2.1; extra == "frozen"
148
- Requires-Dist: dkist-processing-common==11.5.0; extra == "frozen"
149
- Requires-Dist: dkist-processing-core==5.2.1; extra == "frozen"
150
- Requires-Dist: dkist-processing-cryonirsp==1.13.0; extra == "frozen"
149
+ Requires-Dist: dkist-processing-common==11.6.0; extra == "frozen"
150
+ Requires-Dist: dkist-processing-core==6.0.0; extra == "frozen"
151
+ Requires-Dist: dkist-processing-cryonirsp==1.14.0; extra == "frozen"
151
152
  Requires-Dist: dkist-processing-math==2.2.1; extra == "frozen"
152
153
  Requires-Dist: dkist-processing-pac==3.1.1; extra == "frozen"
153
- Requires-Dist: dkist-service-configuration==2.2; extra == "frozen"
154
+ Requires-Dist: dkist-service-configuration==4.1.7; extra == "frozen"
154
155
  Requires-Dist: dkist-spectral-lines==3.0.0; extra == "frozen"
155
156
  Requires-Dist: dkist_fits_specifications==4.17.0; extra == "frozen"
156
157
  Requires-Dist: dnspython==2.8.0; extra == "frozen"
157
- Requires-Dist: ecs-logging==2.2.0; extra == "frozen"
158
- Requires-Dist: elastic-apm==6.24.0; extra == "frozen"
159
158
  Requires-Dist: email-validator==2.3.0; extra == "frozen"
160
159
  Requires-Dist: fastjsonschema==2.21.2; extra == "frozen"
161
160
  Requires-Dist: flower==2.0.1; extra == "frozen"
162
- Requires-Dist: fonttools==4.59.2; extra == "frozen"
161
+ Requires-Dist: fonttools==4.60.0; extra == "frozen"
163
162
  Requires-Dist: frozenlist==1.7.0; extra == "frozen"
164
163
  Requires-Dist: fsspec==2025.9.0; extra == "frozen"
165
- Requires-Dist: globus-sdk==3.63.0; extra == "frozen"
164
+ Requires-Dist: globus-sdk==3.64.0; extra == "frozen"
166
165
  Requires-Dist: google-re2==1.1.20250805; extra == "frozen"
167
166
  Requires-Dist: googleapis-common-protos==1.70.0; extra == "frozen"
168
167
  Requires-Dist: gqlclient==1.2.3; extra == "frozen"
169
- Requires-Dist: grpcio==1.74.0; extra == "frozen"
168
+ Requires-Dist: grpcio==1.75.1; extra == "frozen"
170
169
  Requires-Dist: gunicorn==23.0.0; extra == "frozen"
171
170
  Requires-Dist: h11==0.16.0; extra == "frozen"
172
171
  Requires-Dist: httpcore==1.0.9; extra == "frozen"
@@ -209,14 +208,30 @@ Requires-Dist: networkx==3.5; extra == "frozen"
209
208
  Requires-Dist: numba==0.61.2; extra == "frozen"
210
209
  Requires-Dist: numpy==2.2.5; extra == "frozen"
211
210
  Requires-Dist: object-clerk==1.0.0; extra == "frozen"
212
- Requires-Dist: opentelemetry-api==1.36.0; extra == "frozen"
213
- Requires-Dist: opentelemetry-exporter-otlp==1.36.0; extra == "frozen"
214
- Requires-Dist: opentelemetry-exporter-otlp-proto-common==1.36.0; extra == "frozen"
215
- Requires-Dist: opentelemetry-exporter-otlp-proto-grpc==1.36.0; extra == "frozen"
216
- Requires-Dist: opentelemetry-exporter-otlp-proto-http==1.36.0; extra == "frozen"
217
- Requires-Dist: opentelemetry-proto==1.36.0; extra == "frozen"
218
- Requires-Dist: opentelemetry-sdk==1.36.0; extra == "frozen"
219
- Requires-Dist: opentelemetry-semantic-conventions==0.57b0; extra == "frozen"
211
+ Requires-Dist: opentelemetry-api==1.37.0; extra == "frozen"
212
+ Requires-Dist: opentelemetry-exporter-otlp==1.37.0; extra == "frozen"
213
+ Requires-Dist: opentelemetry-exporter-otlp-proto-common==1.37.0; extra == "frozen"
214
+ Requires-Dist: opentelemetry-exporter-otlp-proto-grpc==1.37.0; extra == "frozen"
215
+ Requires-Dist: opentelemetry-exporter-otlp-proto-http==1.37.0; extra == "frozen"
216
+ Requires-Dist: opentelemetry-instrumentation==0.58b0; extra == "frozen"
217
+ Requires-Dist: opentelemetry-instrumentation-aiohttp-client==0.58b0; extra == "frozen"
218
+ Requires-Dist: opentelemetry-instrumentation-asgi==0.58b0; extra == "frozen"
219
+ Requires-Dist: opentelemetry-instrumentation-botocore==0.58b0; extra == "frozen"
220
+ Requires-Dist: opentelemetry-instrumentation-celery==0.58b0; extra == "frozen"
221
+ Requires-Dist: opentelemetry-instrumentation-dbapi==0.58b0; extra == "frozen"
222
+ Requires-Dist: opentelemetry-instrumentation-fastapi==0.58b0; extra == "frozen"
223
+ Requires-Dist: opentelemetry-instrumentation-pika==0.58b0; extra == "frozen"
224
+ Requires-Dist: opentelemetry-instrumentation-psycopg2==0.58b0; extra == "frozen"
225
+ Requires-Dist: opentelemetry-instrumentation-pymongo==0.58b0; extra == "frozen"
226
+ Requires-Dist: opentelemetry-instrumentation-redis==0.58b0; extra == "frozen"
227
+ Requires-Dist: opentelemetry-instrumentation-requests==0.58b0; extra == "frozen"
228
+ Requires-Dist: opentelemetry-instrumentation-sqlalchemy==0.58b0; extra == "frozen"
229
+ Requires-Dist: opentelemetry-instrumentation-system-metrics==0.58b0; extra == "frozen"
230
+ Requires-Dist: opentelemetry-propagator-aws-xray==1.0.2; extra == "frozen"
231
+ Requires-Dist: opentelemetry-proto==1.37.0; extra == "frozen"
232
+ Requires-Dist: opentelemetry-sdk==1.37.0; extra == "frozen"
233
+ Requires-Dist: opentelemetry-semantic-conventions==0.58b0; extra == "frozen"
234
+ Requires-Dist: opentelemetry-util-http==0.58b0; extra == "frozen"
220
235
  Requires-Dist: ordered-set==4.1.0; extra == "frozen"
221
236
  Requires-Dist: packaging==25.0; extra == "frozen"
222
237
  Requires-Dist: pandas==2.3.2; extra == "frozen"
@@ -231,33 +246,33 @@ Requires-Dist: pluggy==1.6.0; extra == "frozen"
231
246
  Requires-Dist: pooch==1.8.2; extra == "frozen"
232
247
  Requires-Dist: prison==0.2.1; extra == "frozen"
233
248
  Requires-Dist: proglog==0.1.12; extra == "frozen"
234
- Requires-Dist: prometheus_client==0.22.1; extra == "frozen"
249
+ Requires-Dist: prometheus_client==0.23.1; extra == "frozen"
235
250
  Requires-Dist: prompt_toolkit==3.0.52; extra == "frozen"
236
251
  Requires-Dist: propcache==0.3.2; extra == "frozen"
237
- Requires-Dist: protobuf==6.32.0; extra == "frozen"
238
- Requires-Dist: psutil==7.0.0; extra == "frozen"
252
+ Requires-Dist: protobuf==6.32.1; extra == "frozen"
253
+ Requires-Dist: psutil==7.1.0; extra == "frozen"
239
254
  Requires-Dist: psycopg2-binary==2.9.10; extra == "frozen"
240
- Requires-Dist: pycparser==2.22; extra == "frozen"
241
- Requires-Dist: pydantic==2.11.7; extra == "frozen"
242
- Requires-Dist: pydantic-settings==2.10.1; extra == "frozen"
255
+ Requires-Dist: pycparser==2.23; extra == "frozen"
256
+ Requires-Dist: pydantic==2.11.9; extra == "frozen"
257
+ Requires-Dist: pydantic-settings==2.11.0; extra == "frozen"
243
258
  Requires-Dist: pydantic_core==2.33.2; extra == "frozen"
244
259
  Requires-Dist: pyerfa==2.0.1.5; extra == "frozen"
245
- Requires-Dist: pyparsing==3.2.3; extra == "frozen"
260
+ Requires-Dist: pyparsing==3.2.5; extra == "frozen"
246
261
  Requires-Dist: python-daemon==3.1.2; extra == "frozen"
247
262
  Requires-Dist: python-dateutil==2.9.0.post0; extra == "frozen"
248
263
  Requires-Dist: python-dotenv==1.1.1; extra == "frozen"
249
264
  Requires-Dist: python-nvd3==0.16.0; extra == "frozen"
250
265
  Requires-Dist: python-slugify==8.0.4; extra == "frozen"
251
266
  Requires-Dist: pytz==2025.2; extra == "frozen"
252
- Requires-Dist: redis==4.6.0; extra == "frozen"
267
+ Requires-Dist: redis==6.4.0; extra == "frozen"
253
268
  Requires-Dist: referencing==0.36.2; extra == "frozen"
254
269
  Requires-Dist: requests==2.32.5; extra == "frozen"
255
270
  Requires-Dist: requests-toolbelt==1.0.0; extra == "frozen"
256
271
  Requires-Dist: rfc3339-validator==0.1.4; extra == "frozen"
257
- Requires-Dist: rich==13.9.4; extra == "frozen"
272
+ Requires-Dist: rich==14.1.0; extra == "frozen"
258
273
  Requires-Dist: rich-argparse==1.7.1; extra == "frozen"
259
274
  Requires-Dist: rpds-py==0.27.1; extra == "frozen"
260
- Requires-Dist: s3transfer==0.13.1; extra == "frozen"
275
+ Requires-Dist: s3transfer==0.14.0; extra == "frozen"
261
276
  Requires-Dist: scikit-image==0.25.2; extra == "frozen"
262
277
  Requires-Dist: scipy==1.15.3; extra == "frozen"
263
278
  Requires-Dist: semantic-version==2.10.0; extra == "frozen"
@@ -273,7 +288,7 @@ Requires-Dist: talus==1.3.4; extra == "frozen"
273
288
  Requires-Dist: tenacity==8.5.0; extra == "frozen"
274
289
  Requires-Dist: termcolor==3.1.0; extra == "frozen"
275
290
  Requires-Dist: text-unidecode==1.3; extra == "frozen"
276
- Requires-Dist: tifffile==2025.8.28; extra == "frozen"
291
+ Requires-Dist: tifffile==2025.9.20; extra == "frozen"
277
292
  Requires-Dist: tornado==6.5.2; extra == "frozen"
278
293
  Requires-Dist: tqdm==4.67.1; extra == "frozen"
279
294
  Requires-Dist: traitlets==5.14.3; extra == "frozen"
@@ -286,7 +301,7 @@ Requires-Dist: universal_pathlib==0.2.6; extra == "frozen"
286
301
  Requires-Dist: urllib3==2.5.0; extra == "frozen"
287
302
  Requires-Dist: vine==5.1.0; extra == "frozen"
288
303
  Requires-Dist: voluptuous==0.15.2; extra == "frozen"
289
- Requires-Dist: wcwidth==0.2.13; extra == "frozen"
304
+ Requires-Dist: wcwidth==0.2.14; extra == "frozen"
290
305
  Requires-Dist: wirerope==1.0.0; extra == "frozen"
291
306
  Requires-Dist: wrapt==1.17.3; extra == "frozen"
292
307
  Requires-Dist: yamale==6.0.0; extra == "frozen"
@@ -309,7 +324,83 @@ in their own package facilitates using the build_utils to test the integrity of
309
324
 
310
325
  Environment Variables
311
326
  ---------------------
312
- Only those specified by `dkist-processing-core <https://pypi.org/project/dkist-processing-core/>`_ and `dkist-processing-common <https://pypi.org/project/dkist-processing-common/>`_.
327
+
328
+ .. list-table::
329
+ :widths: 10 90
330
+ :header-rows: 1
331
+
332
+ * - Variable
333
+ - Field Info
334
+ * - LOGURU_LEVEL
335
+ - annotation=str required=False default='INFO' alias_priority=2 validation_alias='LOGURU_LEVEL' description='Log level for the application'
336
+ * - MESH_CONFIG
337
+ - annotation=dict[str, MeshService] required=False default_factory=dict alias_priority=2 validation_alias='MESH_CONFIG' description='Service mesh configuration' examples=[{'upstream_service_name': {'mesh_address': 'localhost', 'mesh_port': 6742}}]
338
+ * - RETRY_CONFIG
339
+ - annotation=RetryConfig required=False default_factory=RetryConfig description='Retry configuration for the service'
340
+ * - OTEL_SERVICE_NAME
341
+ - annotation=str required=False default='unknown-service-name' alias_priority=2 validation_alias='OTEL_SERVICE_NAME' description='Service name for OpenTelemetry'
342
+ * - DKIST_SERVICE_VERSION
343
+ - annotation=str required=False default='unknown-service-version' alias_priority=2 validation_alias='DKIST_SERVICE_VERSION' description='Service version for OpenTelemetry'
344
+ * - NOMAD_ALLOC_ID
345
+ - annotation=str required=False default='unknown-allocation-id' alias_priority=2 validation_alias='NOMAD_ALLOC_ID' description='Nomad allocation ID for OpenTelemetry'
346
+ * - OTEL_EXPORTER_OTLP_TRACES_INSECURE
347
+ - annotation=bool required=False default=True description='Use insecure connection for OTLP traces'
348
+ * - OTEL_EXPORTER_OTLP_METRICS_INSECURE
349
+ - annotation=bool required=False default=True description='Use insecure connection for OTLP metrics'
350
+ * - OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
351
+ - annotation=Union[str, NoneType] required=False default=None description='OTLP traces endpoint. Overrides mesh configuration' examples=['localhost:4317']
352
+ * - OTEL_EXPORTER_OTLP_METRICS_ENDPOINT
353
+ - annotation=Union[str, NoneType] required=False default=None description='OTLP metrics endpoint. Overrides mesh configuration' examples=['localhost:4317']
354
+ * - OTEL_PYTHON_DISABLED_INSTRUMENTATIONS
355
+ - annotation=list[str] required=False default_factory=list description='List of instrumentations to disable. https://opentelemetry.io/docs/zero-code/python/configuration/' examples=[['pika', 'requests']]
356
+ * - OTEL_PYTHON_FASTAPI_EXCLUDED_URLS
357
+ - annotation=str required=False default='health' description='Comma separated list of URLs to exclude from OpenTelemetry instrumentation in FastAPI.' examples=['client/.*/info,healthcheck']
358
+ * - SYSTEM_METRIC_INSTRUMENTATION_CONFIG
359
+ - annotation=Union[dict[str, bool], NoneType] required=False default=None description='Configuration for system metric instrumentation. https://opentelemetry-python-contrib.readthedocs.io/en/latest/instrumentation/system_metrics/system_metrics.html' examples=[{'system.memory.usage': ['used', 'free', 'cached'], 'system.cpu.time': ['idle', 'user', 'system', 'irq'], 'system.network.io': ['transmit', 'receive'], 'process.runtime.memory': ['rss', 'vms'], 'process.runtime.cpu.time': ['user', 'system'], 'process.runtime.context_switches': ['involuntary', 'voluntary']}]
360
+ * - ISB_USERNAME
361
+ - annotation=str required=False default='guest' description='Username for the interservice-bus.'
362
+ * - ISB_PASSWORD
363
+ - annotation=str required=False default='guest' description='Password for the interservice-bus.'
364
+ * - ISB_EXCHANGE
365
+ - annotation=str required=False default='master.direct.x' description='Exchange for the interservice-bus.'
366
+ * - ISB_QUEUE_TYPE
367
+ - annotation=str required=False default='classic' description='Queue type for the interservice-bus.' examples=['quorum', 'classic']
368
+ * - BUILD_VERSION
369
+ - annotation=str required=False default='dev' description='Fallback build version for workflow tasks.'
370
+ * - GQL_AUTH_TOKEN
371
+ - annotation=Union[str, NoneType] required=False default='dev' description='The auth token for the metadata-store-api.'
372
+ * - OBJECT_STORE_ACCESS_KEY
373
+ - annotation=Union[str, NoneType] required=False default=None description='The access key for the object store.'
374
+ * - OBJECT_STORE_SECRET_KEY
375
+ - annotation=Union[str, NoneType] required=False default=None description='The secret key for the object store.'
376
+ * - OBJECT_STORE_USE_SSL
377
+ - annotation=bool required=False default=False description='Whether to use SSL for the object store connection.'
378
+ * - MULTIPART_THRESHOLD
379
+ - annotation=Union[int, NoneType] required=False default=None description='Multipart threshold for the object store.'
380
+ * - S3_CLIENT_CONFIG
381
+ - annotation=Union[dict, NoneType] required=False default=None description='S3 client configuration for the object store.'
382
+ * - S3_UPLOAD_CONFIG
383
+ - annotation=Union[dict, NoneType] required=False default=None description='S3 upload configuration for the object store.'
384
+ * - S3_DOWNLOAD_CONFIG
385
+ - annotation=Union[dict, NoneType] required=False default=None description='S3 download configuration for the object store.'
386
+ * - GLOBUS_TRANSPORT_PARAMS
387
+ - annotation=dict required=False default_factory=dict description='Globus transfer parameters.'
388
+ * - GLOBUS_CLIENT_ID
389
+ - annotation=Union[str, NoneType] required=False default=None description='Globus client ID for inbound/outbound transfers.'
390
+ * - GLOBUS_CLIENT_SECRET
391
+ - annotation=Union[str, NoneType] required=False default=None description='Globus client secret for inbound/outbound transfers.'
392
+ * - OBJECT_STORE_ENDPOINT
393
+ - annotation=Union[str, NoneType] required=False default=None description='Object store Globus Endpoint ID.'
394
+ * - SCRATCH_ENDPOINT
395
+ - annotation=Union[str, NoneType] required=False default=None description='Scratch Globus Endpoint ID.'
396
+ * - SCRATCH_BASE_PATH
397
+ - annotation=str required=False default='scratch/' description='Base path for scratch storage.'
398
+ * - SCRATCH_INVENTORY_DB_COUNT
399
+ - annotation=int required=False default=16 description='Number of databases in the scratch inventory (redis).'
400
+ * - DOCS_BASE_URL
401
+ - annotation=str required=False default='my_test_url' description='Base URL for the documentation site.'
402
+ * - FTS_ATLAS_DATA_DIR
403
+ - annotation=Union[str, NoneType] required=False default=None description='Common cached directory for a downloaded FTS Atlas.'
313
404
 
314
405
  Development
315
406
  -----------
@@ -25,25 +25,25 @@ dkist_processing_cryonirsp/parsers/time.py,sha256=U6gCg4U1Yh5nflU-fVqxiT5Cm5o-r0
25
25
  dkist_processing_cryonirsp/parsers/wavelength.py,sha256=bGtI29AexUrCgE9uJtmbyZSfeRuW5Ng6GeAngLph4CQ,884
26
26
  dkist_processing_cryonirsp/tasks/__init__.py,sha256=QgwrMnIRPc3jUWKw8XgSpRHH9jWGhwcKAVdASoEvfY0,1058
27
27
  dkist_processing_cryonirsp/tasks/assemble_movie.py,sha256=wVPC_NuC7fEKXegYl_4ayV22JBbeWv8sRHMB0WU7WXI,7351
28
- dkist_processing_cryonirsp/tasks/bad_pixel_map.py,sha256=LUc-4WBeUGjOKUgT5inbHLs65QHgB6vL-MVRx1PVIek,3962
29
- dkist_processing_cryonirsp/tasks/beam_boundaries_base.py,sha256=RoctbbRUCSHYLLdE9UspDeMCa4O1yGkNyiNf7HHQdhY,9689
28
+ dkist_processing_cryonirsp/tasks/bad_pixel_map.py,sha256=xb6TZb6kpQvrB-oGj528DybG45_SXMW4hj6b90sbMjQ,3952
29
+ dkist_processing_cryonirsp/tasks/beam_boundaries_base.py,sha256=DkyN8xnFFV5838JXSRWrEpG-HMR3hj1tpQRU-8UJIKM,9636
30
30
  dkist_processing_cryonirsp/tasks/ci_beam_boundaries.py,sha256=Pb_Yuh4yjhCNO_12DgWmmSj69yXeR7M2k4aikJ4OoM4,1890
31
31
  dkist_processing_cryonirsp/tasks/ci_science.py,sha256=Jjx2_GOn27iK5VU7XWMulKfqGvmcpwSX1llf6L2rvhI,7367
32
32
  dkist_processing_cryonirsp/tasks/cryonirsp_base.py,sha256=Ldbsa8Kkj_XGm7ocx_BJq9xkGG0QSVflsXdex6nzgMU,1703
33
- dkist_processing_cryonirsp/tasks/dark.py,sha256=pzBwDwK_gqYGrmRojP_mtyXeGqgRhONvh8CnLRP8DJE,4937
34
- dkist_processing_cryonirsp/tasks/gain.py,sha256=Q00CtDZVvgD71jQJ9C3QiiAnxz31h64sTIIq1DhYMls,10439
35
- dkist_processing_cryonirsp/tasks/instrument_polarization.py,sha256=Q7D_x-6b7FZu0xmR_LZdycXt_gPEPKVoEoc32QTEu58,23294
33
+ dkist_processing_cryonirsp/tasks/dark.py,sha256=MRO8R1TeNstCfsaYAnGzMLBnhDwNURNbJsxB89Y4lIU,4926
34
+ dkist_processing_cryonirsp/tasks/gain.py,sha256=QVQKH1s-mMD71zrmVsmyR-CwqGZN4BpO7jXQUS4wALc,10418
35
+ dkist_processing_cryonirsp/tasks/instrument_polarization.py,sha256=1y0M-GeuZmNLWCehsiEC7-09EvU-u5LlQxGlRjnqHjw,23240
36
36
  dkist_processing_cryonirsp/tasks/l1_output_data.py,sha256=ug5pVz99jXDP9z9Ptht61pe07glLR_WLEAnKBLKjYDY,1555
37
37
  dkist_processing_cryonirsp/tasks/linearity_correction.py,sha256=HX6nVglVttYbH8jt-FZUtX9C8-TURfb4NvQRYrXWQlY,24200
38
- dkist_processing_cryonirsp/tasks/make_movie_frames.py,sha256=1qHFdR4U4GvRaALZe9rrVH5XN5BiCuTuwib9NNyaa8k,13929
38
+ dkist_processing_cryonirsp/tasks/make_movie_frames.py,sha256=VcvMV48LnE32NKWnpiV_vSjLc2_EdDFokwVrYjBLPBM,13931
39
39
  dkist_processing_cryonirsp/tasks/parse.py,sha256=Hlu0Hhv-BBfe5DkXFc6-pnIsyZSJHd_wAzbqLDdzsbc,13824
40
- dkist_processing_cryonirsp/tasks/quality_metrics.py,sha256=4PxhA8cjqBTQkaoS12LF5MmuaaCvPb2Da9wve7DSLrY,11448
41
- dkist_processing_cryonirsp/tasks/science_base.py,sha256=V1LtxTlTlHRme4oWE7EUn2Kq-J_23DMg-NSiByWToWw,18638
40
+ dkist_processing_cryonirsp/tasks/quality_metrics.py,sha256=KNCse_1DbIr45mVtDJV4ueFepQl3ECeyHJbYBXVFGq8,11412
41
+ dkist_processing_cryonirsp/tasks/science_base.py,sha256=u9cpJ1diAKjNKLNFr1PvRz3S6bdnDIpKU14igzvQ4aQ,18625
42
42
  dkist_processing_cryonirsp/tasks/sp_beam_boundaries.py,sha256=7xyQ4MieQDYDI01YO24hkfPQ21dAfk9BUyagtnzqYVg,10297
43
- dkist_processing_cryonirsp/tasks/sp_geometric.py,sha256=g6MUHTHqsWLGJJlf_6T4pIytwnsH0GA93qscfz55FJI,24388
43
+ dkist_processing_cryonirsp/tasks/sp_geometric.py,sha256=PO1PQGhm-P_VL96tQTfh5Cgz0mR_wzffxUBW2XHH-0s,24352
44
44
  dkist_processing_cryonirsp/tasks/sp_science.py,sha256=gzVI6e3WY6zrqfjuQ9TNhl7f9s1myWSdRyZ7OMuwaOw,13644
45
- dkist_processing_cryonirsp/tasks/sp_solar_gain.py,sha256=Rs0I2x7bLRLayjYM_t46DmRdZOUpOzJuKYmZJxsEb28,21025
46
- dkist_processing_cryonirsp/tasks/sp_wavelength_calibration.py,sha256=MC3jRCxBwzmKSkFkeb1_o6khbEWhy--8LoBn4jxJjUA,12844
45
+ dkist_processing_cryonirsp/tasks/sp_solar_gain.py,sha256=s5KSCukzeSYuYDIFg1Wo2pyjf__EWrTusNfUsewuq18,21001
46
+ dkist_processing_cryonirsp/tasks/sp_wavelength_calibration.py,sha256=lrGw7qP4QgBd_Hr8JnF1SvSQBUg12C_R3MWvoz-9XfQ,12828
47
47
  dkist_processing_cryonirsp/tasks/write_l1.py,sha256=ssUZ50AvySjPHzW2hc3zeMiAfZiJJbTFWDylpk9VkKc,42324
48
48
  dkist_processing_cryonirsp/tasks/mixin/__init__.py,sha256=m6UekKftTahNJ3W5K3mZSz4Y4ZZpHRxF_ZAxuaKYL7o,12
49
49
  dkist_processing_cryonirsp/tasks/mixin/corrections.py,sha256=BxPV4sqV6s79JpvkXJFH0r5g0zwe1fkp0cqIlI5B5vA,6567
@@ -77,8 +77,8 @@ dkist_processing_cryonirsp/tests/test_trial_create_quality_report.py,sha256=x8dR
77
77
  dkist_processing_cryonirsp/tests/test_workflows.py,sha256=m8PcnZqwbsedNptuSZIjaZ3tt_IzgSv2FiO-Aw2G-i0,292
78
78
  dkist_processing_cryonirsp/tests/test_write_l1.py,sha256=7mDycKre4AxCkwZITPsrIFvLwlPMxLItG5QbqVNPok8,17458
79
79
  dkist_processing_cryonirsp/tests/local_trial_workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
- dkist_processing_cryonirsp/tests/local_trial_workflows/l0_cals_only.py,sha256=rvF6-1-bD33o0kjQOOd_HKrUnscIjxfxEKERUrtFyLI,20088
81
- dkist_processing_cryonirsp/tests/local_trial_workflows/l0_to_l1.py,sha256=8PV7IlGct0nPfxilrfGFkCjPfQoLj7AJj3YvD2jiF5g,23909
80
+ dkist_processing_cryonirsp/tests/local_trial_workflows/l0_cals_only.py,sha256=tnTs18iVZCx19Deoqapa8RfAcAL9t1jzn-CC3blCKOM,19257
81
+ dkist_processing_cryonirsp/tests/local_trial_workflows/l0_to_l1.py,sha256=yx1-krt-881cYZlTqfkgrAd3Xt372yasAAjAOaKK3Mk,23090
82
82
  dkist_processing_cryonirsp/tests/local_trial_workflows/linearize_only.py,sha256=mVP9eB90lquvXfGrICBocYqoBLPg6nQGjZLB3LvqLCs,3280
83
83
  dkist_processing_cryonirsp/tests/local_trial_workflows/local_trial_helpers.py,sha256=1YXVEXtMMfs4ZtR6oqtxblgWBAz5Oaq4WBgNkxjxbg8,20980
84
84
  dkist_processing_cryonirsp/workflows/__init__.py,sha256=BODFooDHWvwHfr3TZUOuQiSk0MLqbAD9APk7u_Ihmqo,113
@@ -106,7 +106,7 @@ docs/scientific_changelog.rst,sha256=01AWBSHg8zElnodCgAq-hMxhk9CkX5rtEENx4iz0sjI
106
106
  docs/sp_science_calibration.rst,sha256=XL-H_hyzqwPHYNW3j-muItX_hGqMi-gjFRQbHp60LlU,2997
107
107
  docs/wavelength_calibration.rst,sha256=s7ds_QKlVJ68fdONSY3DOBvHHaQC0JR_D4goG_VVKWw,3457
108
108
  licenses/LICENSE.rst,sha256=piZaQplkzOMmH1NXg6QIdo9wwo9pPCoHkvm2-DmH76E,1462
109
- dkist_processing_cryonirsp-1.13.0.dist-info/METADATA,sha256=wyHPnRHDKwGDe8Lkkb6-2SvL8nNijepx0YJfLGJZM7w,21968
110
- dkist_processing_cryonirsp-1.13.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
111
- dkist_processing_cryonirsp-1.13.0.dist-info/top_level.txt,sha256=Sm9b1ddKnsF9Bh3mqDOct1Sm7k8I9aN7vGHgpmu-MlQ,51
112
- dkist_processing_cryonirsp-1.13.0.dist-info/RECORD,,
109
+ dkist_processing_cryonirsp-1.14.0.dist-info/METADATA,sha256=AUvi0qrvuyNJRw188i36AjGcTSDdX-ZApKTWthfQ-PA,29222
110
+ dkist_processing_cryonirsp-1.14.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
111
+ dkist_processing_cryonirsp-1.14.0.dist-info/top_level.txt,sha256=Sm9b1ddKnsF9Bh3mqDOct1Sm7k8I9aN7vGHgpmu-MlQ,51
112
+ dkist_processing_cryonirsp-1.14.0.dist-info/RECORD,,