imap-processing 0.19.2__py3-none-any.whl → 0.19.3__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 imap-processing might be problematic. Click here for more details.
- imap_processing/_version.py +2 -2
- imap_processing/cdf/config/imap_enamaps_l2-common_variable_attrs.yaml +44 -0
- imap_processing/cdf/config/imap_enamaps_l2-healpix_variable_attrs.yaml +29 -0
- imap_processing/cdf/config/imap_enamaps_l2-rectangular_variable_attrs.yaml +32 -0
- imap_processing/cdf/config/imap_ultra_global_cdf_attrs.yaml +8 -8
- imap_processing/ialirt/l0/ialirt_spice.py +1 -2
- imap_processing/ialirt/l0/parse_mag.py +18 -4
- imap_processing/ialirt/l0/process_hit.py +9 -4
- imap_processing/ialirt/l0/process_swapi.py +9 -4
- imap_processing/ialirt/l0/process_swe.py +9 -4
- imap_processing/spice/geometry.py +0 -2
- imap_processing/ultra/l0/decom_tools.py +58 -46
- imap_processing/ultra/l0/decom_ultra.py +21 -9
- imap_processing/ultra/l0/ultra_utils.py +4 -4
- imap_processing/ultra/l2/ultra_l2.py +25 -12
- {imap_processing-0.19.2.dist-info → imap_processing-0.19.3.dist-info}/METADATA +2 -2
- {imap_processing-0.19.2.dist-info → imap_processing-0.19.3.dist-info}/RECORD +20 -20
- {imap_processing-0.19.2.dist-info → imap_processing-0.19.3.dist-info}/LICENSE +0 -0
- {imap_processing-0.19.2.dist-info → imap_processing-0.19.3.dist-info}/WHEEL +0 -0
- {imap_processing-0.19.2.dist-info → imap_processing-0.19.3.dist-info}/entry_points.txt +0 -0
imap_processing/_version.py
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
# These version placeholders will be replaced later during substitution.
|
|
2
|
-
__version__ = "0.19.
|
|
3
|
-
__version_tuple__ = (0, 19,
|
|
2
|
+
__version__ = "0.19.3"
|
|
3
|
+
__version_tuple__ = (0, 19, 3)
|
|
@@ -207,6 +207,50 @@ exposure_factor: &exposure_factor
|
|
|
207
207
|
DISPLAY_TYPE: no_plot
|
|
208
208
|
DICT_KEY: SPASE>TemporalDescription:Exposure,Qualifier:Directional,CoordinateSystemName:HAE,CoordinateRepresentation:Spherical
|
|
209
209
|
|
|
210
|
+
geometric_function:
|
|
211
|
+
<<: *default_float32
|
|
212
|
+
CATDESC: The geometric function calculated from multiple pointing sets.
|
|
213
|
+
FIELDNAM: geometric_function
|
|
214
|
+
UNITS: cm^2 sr
|
|
215
|
+
DEPEND_0: epoch
|
|
216
|
+
VAR_TYPE: data
|
|
217
|
+
LABLAXIS: Geometric Factor
|
|
218
|
+
DISPLAY_TYPE: no_plot
|
|
219
|
+
DICT_KEY: SPASE>Particle>ParticleType:Atom,ParticleQuantity:GeometricFactor,Qualifier:Directional,CoordinateSystemName:HAE,CoordinateRepresentation:Spherical
|
|
220
|
+
|
|
221
|
+
efficiency:
|
|
222
|
+
<<: *default_float32
|
|
223
|
+
CATDESC: Event efficiency calculated from multiple pointing sets.
|
|
224
|
+
FIELDNAM: efficiency
|
|
225
|
+
UNITS: " "
|
|
226
|
+
DEPEND_0: epoch
|
|
227
|
+
VAR_TYPE: data
|
|
228
|
+
LABLAXIS: Efficiency
|
|
229
|
+
DISPLAY_TYPE: no_plot
|
|
230
|
+
DICT_KEY: SPASE>Particle>ParticleType:Atom,ParticleQuantity:Other
|
|
231
|
+
|
|
232
|
+
positional_uncert_theta:
|
|
233
|
+
<<: *default_float32
|
|
234
|
+
CATDESC: Positional uncertainty in theta direction calculated from multiple pointing sets.
|
|
235
|
+
FIELDNAM: positional_uncertainty_theta
|
|
236
|
+
UNITS: degrees
|
|
237
|
+
DEPEND_0: epoch
|
|
238
|
+
VAR_TYPE: data
|
|
239
|
+
LABLAXIS: Position Uncertainty Theta
|
|
240
|
+
DISPLAY_TYPE: no_plot
|
|
241
|
+
DICT_KEY: SPASE>Particle>ParticleType:Atom,ParticleQuantity:ArrivalDirection,Qualifier:Uncertainty,CoordinateSystemName:HAE,CoordinateRepresentation:Spherical
|
|
242
|
+
|
|
243
|
+
positional_uncert_phi:
|
|
244
|
+
<<: *default_float32
|
|
245
|
+
CATDESC: Positional uncertainty in phi direction calculated from multiple pointing sets.
|
|
246
|
+
FIELDNAM: positional_uncertainty_phi
|
|
247
|
+
UNITS: degrees
|
|
248
|
+
DEPEND_0: epoch
|
|
249
|
+
VAR_TYPE: data
|
|
250
|
+
LABLAXIS: Position Uncertainty Phi
|
|
251
|
+
DISPLAY_TYPE: no_plot
|
|
252
|
+
DICT_KEY: SPASE>Particle>ParticleType:Atom,ParticleQuantity:ArrivalDirection,Qualifier:Uncertainty,CoordinateSystemName:HAE,CoordinateRepresentation:Spherical
|
|
253
|
+
|
|
210
254
|
obs_date: &obs_date
|
|
211
255
|
<<: *default_int64
|
|
212
256
|
datatype: int64
|
|
@@ -72,6 +72,29 @@ sensitivity:
|
|
|
72
72
|
LABL_PTR_1: energy_label
|
|
73
73
|
LABL_PTR_2: pixel_index_label
|
|
74
74
|
|
|
75
|
+
efficiency:
|
|
76
|
+
DEPEND_1: energy
|
|
77
|
+
DEPEND_2: pixel_index
|
|
78
|
+
LABL_PTR_1: energy_label
|
|
79
|
+
LABL_PTR_2: pixel_index_label
|
|
80
|
+
|
|
81
|
+
geometric_function:
|
|
82
|
+
DEPEND_1: energy
|
|
83
|
+
DEPEND_2: pixel_index
|
|
84
|
+
LABL_PTR_1: energy_label
|
|
85
|
+
LABL_PTR_2: pixel_index_label
|
|
86
|
+
|
|
87
|
+
positional_uncert_theta:
|
|
88
|
+
DEPEND_1: energy
|
|
89
|
+
DEPEND_2: pixel_index
|
|
90
|
+
LABL_PTR_1: energy_label
|
|
91
|
+
LABL_PTR_2: pixel_index_label
|
|
92
|
+
|
|
93
|
+
positional_uncert_phi:
|
|
94
|
+
DEPEND_1: energy
|
|
95
|
+
DEPEND_2: pixel_index
|
|
96
|
+
LABL_PTR_1: energy_label
|
|
97
|
+
LABL_PTR_2: pixel_index_label
|
|
75
98
|
# These data variables will have an extra (energy) dimension
|
|
76
99
|
# only if the energy dimension is present in the L1C data.
|
|
77
100
|
# The default is energy-independent.
|
|
@@ -99,6 +122,12 @@ obs_date:
|
|
|
99
122
|
LABL_PTR_1: energy_label
|
|
100
123
|
LABL_PTR_2: pixel_index_label
|
|
101
124
|
|
|
125
|
+
obs_date_range:
|
|
126
|
+
DEPEND_1: energy
|
|
127
|
+
DEPEND_2: pixel_index
|
|
128
|
+
LABL_PTR_1: energy_label
|
|
129
|
+
LABL_PTR_2: pixel_index_label
|
|
130
|
+
|
|
102
131
|
solid_angle:
|
|
103
132
|
DEPEND_1: pixel_index
|
|
104
133
|
LABL_PTR_1: pixel_index_label
|
|
@@ -134,6 +134,38 @@ exposure_factor:
|
|
|
134
134
|
LABL_PTR_2: longitude_label
|
|
135
135
|
LABL_PTR_3: latitude_label
|
|
136
136
|
|
|
137
|
+
efficiency:
|
|
138
|
+
DEPEND_1: energy
|
|
139
|
+
DEPEND_2: longitude
|
|
140
|
+
DEPEND_3: latitude
|
|
141
|
+
LABL_PTR_1: energy_label
|
|
142
|
+
LABL_PTR_2: longitude_label
|
|
143
|
+
LABL_PTR_3: latitude_label
|
|
144
|
+
|
|
145
|
+
geometric_function:
|
|
146
|
+
DEPEND_1: energy
|
|
147
|
+
DEPEND_2: longitude
|
|
148
|
+
DEPEND_3: latitude
|
|
149
|
+
LABL_PTR_1: energy_label
|
|
150
|
+
LABL_PTR_2: longitude_label
|
|
151
|
+
LABL_PTR_3: latitude_label
|
|
152
|
+
|
|
153
|
+
positional_uncert_theta:
|
|
154
|
+
DEPEND_1: energy
|
|
155
|
+
DEPEND_2: longitude
|
|
156
|
+
DEPEND_3: latitude
|
|
157
|
+
LABL_PTR_1: energy_label
|
|
158
|
+
LABL_PTR_2: longitude_label
|
|
159
|
+
LABL_PTR_3: latitude_label
|
|
160
|
+
|
|
161
|
+
positional_uncert_phi:
|
|
162
|
+
DEPEND_1: energy
|
|
163
|
+
DEPEND_2: longitude
|
|
164
|
+
DEPEND_3: latitude
|
|
165
|
+
LABL_PTR_1: energy_label
|
|
166
|
+
LABL_PTR_2: longitude_label
|
|
167
|
+
LABL_PTR_3: latitude_label
|
|
168
|
+
|
|
137
169
|
obs_date:
|
|
138
170
|
DEPEND_1: energy
|
|
139
171
|
DEPEND_2: longitude
|
|
@@ -68,28 +68,28 @@ imap_ultra_l1a_90sensor-histogram-ena-extof-hi-ang:
|
|
|
68
68
|
Logical_source: imap_ultra_l1a_90sensor-histogram-ena-extof-hi-ang
|
|
69
69
|
Logical_source_description: IMAP-Ultra Instrument Level-1A ExTOF Hi Angular Data.
|
|
70
70
|
|
|
71
|
-
imap_ultra_l1a_45sensor-histogram-
|
|
71
|
+
imap_ultra_l1a_45sensor-histogram-ion-extof-hi-time:
|
|
72
72
|
<<: *instrument_base
|
|
73
73
|
Data_type: L1A_Histogram>Level-1A ExTOF
|
|
74
|
-
Logical_source: imap_ultra_l1a_45sensor-histogram-
|
|
74
|
+
Logical_source: imap_ultra_l1a_45sensor-histogram-ion-extof-hi-time
|
|
75
75
|
Logical_source_description: IMAP-Ultra Instrument Level-1A ExTOF Hi Time Data.
|
|
76
76
|
|
|
77
|
-
imap_ultra_l1a_90sensor-histogram-
|
|
77
|
+
imap_ultra_l1a_90sensor-histogram-ion-extof-hi-time:
|
|
78
78
|
<<: *instrument_base
|
|
79
79
|
Data_type: L1A_Histogram>Level-1A ExTOF
|
|
80
|
-
Logical_source: imap_ultra_l1a_90sensor-histogram-
|
|
80
|
+
Logical_source: imap_ultra_l1a_90sensor-histogram-ion-extof-hi-time
|
|
81
81
|
Logical_source_description: IMAP-Ultra Instrument Level-1A ExTOF Hi Time Data.
|
|
82
82
|
|
|
83
|
-
imap_ultra_l1a_45sensor-histogram-
|
|
83
|
+
imap_ultra_l1a_45sensor-histogram-ion-extof-hi-nrg:
|
|
84
84
|
<<: *instrument_base
|
|
85
85
|
Data_type: L1A_Histogram>Level-1A ExTOF
|
|
86
|
-
Logical_source: imap_ultra_l1a_45sensor-histogram-
|
|
86
|
+
Logical_source: imap_ultra_l1a_45sensor-histogram-ion-extof-hi-nrg
|
|
87
87
|
Logical_source_description: IMAP-Ultra Instrument Level-1A ExTOF Hi Energy Data.
|
|
88
88
|
|
|
89
|
-
imap_ultra_l1a_90sensor-histogram-
|
|
89
|
+
imap_ultra_l1a_90sensor-histogram-ion-extof-hi-nrg:
|
|
90
90
|
<<: *instrument_base
|
|
91
91
|
Data_type: L1A_Histogram>Level-1A ExTOF
|
|
92
|
-
Logical_source: imap_ultra_l1a_90sensor-histogram-
|
|
92
|
+
Logical_source: imap_ultra_l1a_90sensor-histogram-ion-extof-hi-nrg
|
|
93
93
|
Logical_source_description: IMAP-Ultra Instrument Level-1A ExTOF Hi Energy Data.
|
|
94
94
|
|
|
95
95
|
imap_ultra_l1a_45sensor-rates:
|
|
@@ -133,8 +133,7 @@ def transform_instrument_vectors_to_inertial(
|
|
|
133
133
|
spin_phase: NDArray,
|
|
134
134
|
sc_inertial_right: NDArray,
|
|
135
135
|
sc_inertial_decline: NDArray,
|
|
136
|
-
|
|
137
|
-
instrument_frame: SpiceFrame = SpiceFrame.IMAP_MAG,
|
|
136
|
+
instrument_frame: SpiceFrame,
|
|
138
137
|
spacecraft_frame: SpiceFrame = SpiceFrame.IMAP_SPACECRAFT,
|
|
139
138
|
) -> NDArray:
|
|
140
139
|
"""
|
|
@@ -268,6 +268,9 @@ def calculate_l1b(
|
|
|
268
268
|
retrieve_matrix_from_single_l1b_calibration(calibration_dataset, is_mago=False)
|
|
269
269
|
)
|
|
270
270
|
|
|
271
|
+
logger.info(f"calibration_matrix_mago shape: {calibration_matrix_mago.shape}.")
|
|
272
|
+
logger.info(f"calibration_matrix_magi shape: {calibration_matrix_magi.shape}.")
|
|
273
|
+
|
|
271
274
|
# Get time values for each group.
|
|
272
275
|
time_data = get_time(
|
|
273
276
|
grouped_data, group, pkt_counter, time_shift_mago, time_shift_magi
|
|
@@ -392,6 +395,7 @@ def transform_to_inertial(
|
|
|
392
395
|
attitude_time: np.ndarray,
|
|
393
396
|
target_time: float,
|
|
394
397
|
mag_vector: np.ndarray,
|
|
398
|
+
instrument_frame: SpiceFrame,
|
|
395
399
|
) -> np.ndarray:
|
|
396
400
|
"""
|
|
397
401
|
Transform vector to ECLIPJ2000.
|
|
@@ -415,6 +419,8 @@ def transform_to_inertial(
|
|
|
415
419
|
Example: time_data['primary_epoch'].
|
|
416
420
|
mag_vector : numpy.ndarray
|
|
417
421
|
Vector, shape (3).
|
|
422
|
+
instrument_frame : SpiceFrame
|
|
423
|
+
SPICE frame of the instrument.
|
|
418
424
|
|
|
419
425
|
Returns
|
|
420
426
|
-------
|
|
@@ -478,6 +484,7 @@ def transform_to_inertial(
|
|
|
478
484
|
np.array([spin_phase_deg]),
|
|
479
485
|
np.array([ra_deg]),
|
|
480
486
|
np.array([dec_deg]),
|
|
487
|
+
instrument_frame,
|
|
481
488
|
)[0]
|
|
482
489
|
|
|
483
490
|
return inertial_vector
|
|
@@ -570,6 +577,7 @@ def process_packet(
|
|
|
570
577
|
mago_times_all = []
|
|
571
578
|
magi_vectors_all = []
|
|
572
579
|
magi_times_all = []
|
|
580
|
+
incomplete_groups = []
|
|
573
581
|
|
|
574
582
|
for group in unique_groups:
|
|
575
583
|
# Get status values for each group.
|
|
@@ -581,10 +589,7 @@ def process_packet(
|
|
|
581
589
|
]
|
|
582
590
|
|
|
583
591
|
if not np.array_equal(pkt_counter, np.arange(4)):
|
|
584
|
-
|
|
585
|
-
f"Group {group} does not contain all values from 0 to "
|
|
586
|
-
f"3 without duplicates."
|
|
587
|
-
)
|
|
592
|
+
incomplete_groups.append(group)
|
|
588
593
|
continue
|
|
589
594
|
|
|
590
595
|
# Get decoded status data.
|
|
@@ -648,6 +653,7 @@ def process_packet(
|
|
|
648
653
|
attitude_time,
|
|
649
654
|
time_data["primary_epoch"],
|
|
650
655
|
mago_out,
|
|
656
|
+
SpiceFrame.IMAP_MAG_O,
|
|
651
657
|
)
|
|
652
658
|
magi_inertial_vector = transform_to_inertial(
|
|
653
659
|
sc_spin_phase_rad.values,
|
|
@@ -656,6 +662,7 @@ def process_packet(
|
|
|
656
662
|
attitude_time,
|
|
657
663
|
time_data["secondary_epoch"],
|
|
658
664
|
magi_out,
|
|
665
|
+
SpiceFrame.IMAP_MAG_I,
|
|
659
666
|
)
|
|
660
667
|
|
|
661
668
|
met = grouped_data["met"][(grouped_data["group"] == group).values]
|
|
@@ -665,6 +672,13 @@ def process_packet(
|
|
|
665
672
|
magi_vectors_all.append(magi_inertial_vector)
|
|
666
673
|
magi_times_all.append(time_data["secondary_epoch"])
|
|
667
674
|
|
|
675
|
+
if incomplete_groups:
|
|
676
|
+
logger.info(
|
|
677
|
+
f"The following mag groups were skipped due to "
|
|
678
|
+
f"missing or duplicate pkt_counter values: "
|
|
679
|
+
f"{incomplete_groups}"
|
|
680
|
+
)
|
|
681
|
+
|
|
668
682
|
mago_corrected, magnitude = apply_gradiometry_correction(
|
|
669
683
|
np.array(mago_vectors_all),
|
|
670
684
|
np.array(mago_times_all),
|
|
@@ -127,6 +127,7 @@ def process_hit(xarray_data: xr.Dataset) -> list[dict]:
|
|
|
127
127
|
Dictionary final data product.
|
|
128
128
|
"""
|
|
129
129
|
hit_data = []
|
|
130
|
+
incomplete_groups = []
|
|
130
131
|
|
|
131
132
|
# Subsecond time conversion specified in 7516-9054 GSW-FSW ICD.
|
|
132
133
|
# Value of SCLK subseconds, unsigned, (LSB = 1/256 sec)
|
|
@@ -148,10 +149,7 @@ def process_hit(xarray_data: xr.Dataset) -> list[dict]:
|
|
|
148
149
|
|
|
149
150
|
# Ensure no duplicates and all values from 0 to 59 are present
|
|
150
151
|
if not np.array_equal(subcom_values, np.arange(60)):
|
|
151
|
-
|
|
152
|
-
f"Group {group} does not contain all values from 0 to "
|
|
153
|
-
f"59 without duplicates."
|
|
154
|
-
)
|
|
152
|
+
incomplete_groups.append(group)
|
|
155
153
|
continue
|
|
156
154
|
|
|
157
155
|
fast_rate_1 = grouped_data["hit_fast_rate_1"][
|
|
@@ -187,4 +185,11 @@ def process_hit(xarray_data: xr.Dataset) -> list[dict]:
|
|
|
187
185
|
}
|
|
188
186
|
)
|
|
189
187
|
|
|
188
|
+
if incomplete_groups:
|
|
189
|
+
logger.info(
|
|
190
|
+
f"The following hit groups were skipped due to "
|
|
191
|
+
f"missing or duplicate pkt_counter values: "
|
|
192
|
+
f"{incomplete_groups}"
|
|
193
|
+
)
|
|
194
|
+
|
|
190
195
|
return hit_data
|
|
@@ -158,6 +158,7 @@ def process_swapi_ialirt(
|
|
|
158
158
|
# Add required parameters.
|
|
159
159
|
sci_dataset["met"] = met
|
|
160
160
|
met_values = []
|
|
161
|
+
incomplete_groups = []
|
|
161
162
|
|
|
162
163
|
grouped_dataset = find_groups(sci_dataset, (0, 11), "swapi_seq_number", "met")
|
|
163
164
|
|
|
@@ -179,12 +180,16 @@ def process_swapi_ialirt(
|
|
|
179
180
|
|
|
180
181
|
# Ensure no duplicates and all values from 0 to 11 are present
|
|
181
182
|
if not np.array_equal(seq_values.astype(int), np.arange(12)):
|
|
182
|
-
|
|
183
|
-
f"SWAPI group {group} does not contain all sequence values from 0 to "
|
|
184
|
-
f"11 without duplicates."
|
|
185
|
-
)
|
|
183
|
+
incomplete_groups.append(group)
|
|
186
184
|
continue
|
|
187
185
|
|
|
186
|
+
if incomplete_groups:
|
|
187
|
+
logger.info(
|
|
188
|
+
f"The following swapi groups were skipped due to "
|
|
189
|
+
f"missing or duplicate pkt_counter values: "
|
|
190
|
+
f"{incomplete_groups}"
|
|
191
|
+
)
|
|
192
|
+
|
|
188
193
|
raw_coin_count = process_sweep_data(grouped_dataset, "swapi_coin_cnt")
|
|
189
194
|
raw_coin_rate = raw_coin_count / SWAPI_LIVETIME
|
|
190
195
|
count_rate_error = np.sqrt(raw_coin_count) / SWAPI_LIVETIME
|
|
@@ -478,6 +478,7 @@ def process_swe(accumulated_data: xr.Dataset, in_flight_cal_files: list) -> list
|
|
|
478
478
|
grouped_data = find_groups(accumulated_data, (0, 59), "swe_seq", "time_seconds")
|
|
479
479
|
unique_groups = np.unique(grouped_data["group"])
|
|
480
480
|
swe_data: list[dict] = []
|
|
481
|
+
incomplete_groups = []
|
|
481
482
|
|
|
482
483
|
for group in unique_groups:
|
|
483
484
|
# Sequence values for the group should be 0-59 with no duplicates.
|
|
@@ -485,10 +486,7 @@ def process_swe(accumulated_data: xr.Dataset, in_flight_cal_files: list) -> list
|
|
|
485
486
|
|
|
486
487
|
# Ensure no duplicates and all values from 0 to 59 are present
|
|
487
488
|
if not np.array_equal(seq_values, np.arange(60)):
|
|
488
|
-
|
|
489
|
-
f"Group {group} does not contain all values from 0 to "
|
|
490
|
-
f"59 without duplicates."
|
|
491
|
-
)
|
|
489
|
+
incomplete_groups.append(group)
|
|
492
490
|
continue
|
|
493
491
|
# Prepare raw counts array just for this group
|
|
494
492
|
# (8 energy steps, 7 CEMs, 30 phi bins)
|
|
@@ -570,4 +568,11 @@ def process_swe(accumulated_data: xr.Dataset, in_flight_cal_files: list) -> list
|
|
|
570
568
|
},
|
|
571
569
|
)
|
|
572
570
|
|
|
571
|
+
if incomplete_groups:
|
|
572
|
+
logger.info(
|
|
573
|
+
f"The following swe groups were skipped due to "
|
|
574
|
+
f"missing or duplicate pkt_counter values: "
|
|
575
|
+
f"{incomplete_groups}"
|
|
576
|
+
)
|
|
577
|
+
|
|
573
578
|
return swe_data
|
|
@@ -50,8 +50,6 @@ class SpiceFrame(IntEnum):
|
|
|
50
50
|
IMAP_HI_90 = -43160
|
|
51
51
|
IMAP_ULTRA_45 = -43200
|
|
52
52
|
IMAP_ULTRA_90 = -43210
|
|
53
|
-
# TODO: remove IMAP_MAG frame once all usages have been removed
|
|
54
|
-
IMAP_MAG = -43999
|
|
55
53
|
IMAP_MAG_BOOM = -43250
|
|
56
54
|
IMAP_MAG_I = -43251
|
|
57
55
|
IMAP_MAG_O = -43252
|
|
@@ -157,6 +157,7 @@ def decompress_image(
|
|
|
157
157
|
pixel0: int,
|
|
158
158
|
binary_data: str,
|
|
159
159
|
packet_props: PacketProperties,
|
|
160
|
+
planes_per_packet: int = 1,
|
|
160
161
|
) -> NDArray:
|
|
161
162
|
"""
|
|
162
163
|
Will decompress a binary string representing an image into a matrix of pixel values.
|
|
@@ -174,11 +175,15 @@ def decompress_image(
|
|
|
174
175
|
packet_props : PacketProperties
|
|
175
176
|
Properties of the packet, including width bit, mantissa bit length and pixel
|
|
176
177
|
window dimensions.
|
|
178
|
+
planes_per_packet : int
|
|
179
|
+
Number of image planes in the packet. Default is 1.
|
|
177
180
|
|
|
178
181
|
Returns
|
|
179
182
|
-------
|
|
180
|
-
|
|
181
|
-
A
|
|
183
|
+
planes : NDArray
|
|
184
|
+
A 3D numpy array representing pixel values.
|
|
185
|
+
The last two dimensions correspond to the image dimensions, and the first
|
|
186
|
+
is the number of image planes.
|
|
182
187
|
Each pixel is stored as an unsigned 16-bit integer (uint16).
|
|
183
188
|
|
|
184
189
|
Notes
|
|
@@ -199,51 +204,58 @@ def decompress_image(
|
|
|
199
204
|
)
|
|
200
205
|
|
|
201
206
|
blocks_per_row = cols // pixels_per_block
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
# Decompressed pixel matrix
|
|
206
|
-
p_decom = np.zeros((rows, cols), dtype=np.int16)
|
|
207
|
-
|
|
207
|
+
current_pixel0 = pixel0 # Use the parameter for first plane
|
|
208
|
+
planes = []
|
|
209
|
+
plane_num = 0
|
|
208
210
|
pos = 0 # Starting position in the binary string
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
211
|
+
while plane_num < planes_per_packet:
|
|
212
|
+
# Compressed pixel matrix
|
|
213
|
+
p = np.zeros((rows, cols), dtype=np.uint16)
|
|
214
|
+
# Decompressed pixel matrix
|
|
215
|
+
p_decom = np.zeros((rows, cols), dtype=np.int16)
|
|
216
|
+
|
|
217
|
+
for i in range(rows):
|
|
218
|
+
for j in range(blocks_per_row):
|
|
219
|
+
# Read the width for the block.
|
|
220
|
+
w, pos = read_and_advance(binary_data, width_bit, pos)
|
|
221
|
+
for k in range(pixels_per_block):
|
|
222
|
+
# Handle the special case in which the width is 0
|
|
223
|
+
if w == 0:
|
|
224
|
+
value = 0
|
|
225
|
+
else:
|
|
226
|
+
# Find the value of each pixel in the block
|
|
227
|
+
value, pos = read_and_advance(binary_data, w, pos)
|
|
228
|
+
|
|
229
|
+
# if the least significant bit of value is set (odd)
|
|
230
|
+
if value & 0x01:
|
|
231
|
+
# value >> 1: shifts bits of value one place to the right
|
|
232
|
+
# ~: bitwise NOT operator (flips bits)
|
|
233
|
+
delta_f = ~(value >> 1)
|
|
234
|
+
else:
|
|
235
|
+
delta_f = value >> 1
|
|
236
|
+
|
|
237
|
+
# Calculate the new pixel value and update pixel0
|
|
238
|
+
column_index = j * pixels_per_block + k
|
|
239
|
+
# 0xff is the hexadecimal representation of the number 255,
|
|
240
|
+
# Keeps only the last 8 bits of the result of pixel0 - delta_f
|
|
241
|
+
# This operation ensures that the result is within the range
|
|
242
|
+
# of an 8-bit byte (0-255)
|
|
243
|
+
# Use np.int16 for the arithmetic operation to avoid overflow
|
|
244
|
+
# Then implicitly cast back to the p's uint16 dtype for storage
|
|
245
|
+
p[i][column_index] = np.int16(current_pixel0) - delta_f
|
|
246
|
+
# Perform logarithmic decompression on the pixel value
|
|
247
|
+
p_decom[i][column_index] = log_decompression(
|
|
248
|
+
p[i][column_index], mantissa_bit_length
|
|
249
|
+
)
|
|
250
|
+
current_pixel0 = p[i][column_index]
|
|
251
|
+
current_pixel0 = p[i][0]
|
|
252
|
+
planes.append(p_decom)
|
|
253
|
+
plane_num += 1
|
|
254
|
+
# Read P00 for the next plane (if not the last plane)
|
|
255
|
+
if plane_num < planes_per_packet:
|
|
256
|
+
current_pixel0, pos = read_and_advance(binary_data, 8, pos)
|
|
257
|
+
|
|
258
|
+
return np.stack(planes)
|
|
247
259
|
|
|
248
260
|
|
|
249
261
|
def read_image_raw_events_binary(
|
|
@@ -81,54 +81,66 @@ def process_ultra_tof(ds: xr.Dataset, packet_props: PacketProperties) -> xr.Data
|
|
|
81
81
|
decom_data: defaultdict[str, list[np.ndarray]] = defaultdict(list)
|
|
82
82
|
decom_data["packetdata"] = []
|
|
83
83
|
valid_epoch = []
|
|
84
|
-
|
|
85
84
|
for val, group in ds.groupby("epoch"):
|
|
86
85
|
if set(group["sid"].values) >= set(
|
|
87
86
|
np.arange(0, image_planes, planes_per_packet)
|
|
88
87
|
):
|
|
88
|
+
plane_count = 0
|
|
89
89
|
valid_epoch.append(val)
|
|
90
90
|
group.sortby("sid")
|
|
91
91
|
|
|
92
92
|
for key in scalar_keys:
|
|
93
|
-
|
|
93
|
+
# Repeat the scalar values for each image plane. There may be cases
|
|
94
|
+
# where the last packet has fewer planes than the planes_per_packet, so
|
|
95
|
+
# we slice to ensure the correct length.
|
|
96
|
+
decom_data[key].append(
|
|
97
|
+
np.tile(group[key].values, planes_per_packet)[:image_planes]
|
|
98
|
+
)
|
|
94
99
|
|
|
95
100
|
image = []
|
|
96
101
|
for i in range(num_image_packets):
|
|
97
102
|
binary = convert_to_binary_string(group["packetdata"].values[i])
|
|
103
|
+
# Determine how many planes to decompress in this packet.
|
|
104
|
+
# the last packet might have fewer planes than planes_per_packet.
|
|
105
|
+
# Take the minimum of the remaining planes or the max planes per packet
|
|
106
|
+
# value.
|
|
107
|
+
planes_in_packet = min(image_planes - plane_count, planes_per_packet)
|
|
98
108
|
decompressed = decompress_image(
|
|
99
109
|
group["p00"].values[i],
|
|
100
110
|
binary,
|
|
101
111
|
packet_props,
|
|
112
|
+
planes_in_packet,
|
|
102
113
|
)
|
|
103
114
|
image.append(decompressed)
|
|
115
|
+
plane_count += planes_in_packet
|
|
104
116
|
|
|
105
|
-
decom_data["packetdata"].append(np.
|
|
117
|
+
decom_data["packetdata"].append(np.concatenate(image, axis=0))
|
|
106
118
|
|
|
107
119
|
for key in scalar_keys:
|
|
108
|
-
decom_data[key] = np.stack(decom_data[key])
|
|
120
|
+
decom_data[key] = np.stack(decom_data[key], axis=0)
|
|
109
121
|
|
|
110
|
-
decom_data["packetdata"] = np.stack(decom_data["packetdata"])
|
|
122
|
+
decom_data["packetdata"] = np.stack(decom_data["packetdata"], axis=0)
|
|
111
123
|
|
|
112
124
|
coords = {
|
|
113
125
|
"epoch": np.array(valid_epoch, dtype=np.uint64),
|
|
114
|
-
"
|
|
126
|
+
"plane": xr.DataArray(np.arange(image_planes), dims=["plane"], name="plane"),
|
|
115
127
|
"row": xr.DataArray(np.arange(rows), dims=["row"], name="row"),
|
|
116
128
|
"column": xr.DataArray(np.arange(cols), dims=["column"], name="column"),
|
|
117
129
|
}
|
|
118
130
|
|
|
119
131
|
dataset = xr.Dataset(coords=coords)
|
|
120
132
|
|
|
121
|
-
# Add scalar keys (2D: epoch x
|
|
133
|
+
# Add scalar keys (2D: epoch x packets)
|
|
122
134
|
for key in scalar_keys:
|
|
123
135
|
dataset[key] = xr.DataArray(
|
|
124
136
|
decom_data[key],
|
|
125
|
-
dims=["epoch", "
|
|
137
|
+
dims=["epoch", "plane"],
|
|
126
138
|
)
|
|
127
139
|
|
|
128
140
|
# Add PACKETDATA (4D: epoch x sid x row x column)
|
|
129
141
|
dataset["packetdata"] = xr.DataArray(
|
|
130
142
|
decom_data["packetdata"],
|
|
131
|
-
dims=["epoch", "
|
|
143
|
+
dims=["epoch", "plane", "row", "column"],
|
|
132
144
|
)
|
|
133
145
|
|
|
134
146
|
return dataset
|
|
@@ -137,8 +137,8 @@ ULTRA_EXTOF_HIGH_ANGULAR = PacketProperties(
|
|
|
137
137
|
ULTRA_EXTOF_HIGH_TIME = PacketProperties(
|
|
138
138
|
apid=[888, 952],
|
|
139
139
|
logical_source=[
|
|
140
|
-
"imap_ultra_l1a_45sensor-histogram-
|
|
141
|
-
"imap_ultra_l1a_90sensor-histogram-
|
|
140
|
+
"imap_ultra_l1a_45sensor-histogram-ion-extof-hi-time",
|
|
141
|
+
"imap_ultra_l1a_90sensor-histogram-ion-extof-hi-time",
|
|
142
142
|
],
|
|
143
143
|
addition_to_logical_desc="Energy By Time of Flight High Time Images",
|
|
144
144
|
width=4,
|
|
@@ -153,8 +153,8 @@ ULTRA_EXTOF_HIGH_TIME = PacketProperties(
|
|
|
153
153
|
ULTRA_EXTOF_HIGH_ENERGY = PacketProperties(
|
|
154
154
|
apid=[887, 951],
|
|
155
155
|
logical_source=[
|
|
156
|
-
"imap_ultra_l1a_45sensor-histogram-
|
|
157
|
-
"imap_ultra_l1a_90sensor-histogram-
|
|
156
|
+
"imap_ultra_l1a_45sensor-histogram-ion-extof-hi-nrg",
|
|
157
|
+
"imap_ultra_l1a_90sensor-histogram-ion-extof-hi-nrg",
|
|
158
158
|
],
|
|
159
159
|
addition_to_logical_desc="Energy By Time of Flight High Energy Images",
|
|
160
160
|
width=4,
|
|
@@ -75,6 +75,10 @@ VARIABLES_TO_WEIGHT_BY_POINTING_SET_EXPOSURE_TIMES_SOLID_ANGLE = [
|
|
|
75
75
|
"sensitivity",
|
|
76
76
|
"background_rates",
|
|
77
77
|
"obs_date",
|
|
78
|
+
"geometric_function",
|
|
79
|
+
"efficiency",
|
|
80
|
+
"scatter_theta",
|
|
81
|
+
"scatter_phi",
|
|
78
82
|
]
|
|
79
83
|
|
|
80
84
|
# These variables are dropped after they are used to
|
|
@@ -310,15 +314,17 @@ def generate_ultra_healpix_skymap(
|
|
|
310
314
|
pointing_set.data["exposure_factor"] * pointing_set.solid_angle
|
|
311
315
|
)
|
|
312
316
|
|
|
317
|
+
# Get variables that should be weighted by exposure and solid angle
|
|
318
|
+
existing_vars_to_weight = []
|
|
319
|
+
for var in VARIABLES_TO_WEIGHT_BY_POINTING_SET_EXPOSURE_TIMES_SOLID_ANGLE:
|
|
320
|
+
if var in pointing_set.data:
|
|
321
|
+
existing_vars_to_weight.append(var)
|
|
322
|
+
|
|
313
323
|
# Initial processing for weighted quantities at PSET level
|
|
314
324
|
# Weight the values by exposure and solid angle
|
|
315
325
|
# Ensure only valid pointing set pixels contribute to the weighted mean.
|
|
316
|
-
pointing_set.data[
|
|
317
|
-
|
|
318
|
-
] = (
|
|
319
|
-
pointing_set.data[
|
|
320
|
-
VARIABLES_TO_WEIGHT_BY_POINTING_SET_EXPOSURE_TIMES_SOLID_ANGLE
|
|
321
|
-
]
|
|
326
|
+
pointing_set.data[existing_vars_to_weight] = (
|
|
327
|
+
pointing_set.data[existing_vars_to_weight]
|
|
322
328
|
* pointing_set.data["pointing_set_exposure_times_solid_angle"]
|
|
323
329
|
).where(good_pixel_mask)
|
|
324
330
|
|
|
@@ -339,9 +345,9 @@ def generate_ultra_healpix_skymap(
|
|
|
339
345
|
)
|
|
340
346
|
|
|
341
347
|
# Subsequent processing for weighted quantities at SkyMap level
|
|
342
|
-
skymap.data_1d[
|
|
343
|
-
|
|
344
|
-
|
|
348
|
+
skymap.data_1d[existing_vars_to_weight] /= skymap.data_1d[
|
|
349
|
+
"pointing_set_exposure_times_solid_angle"
|
|
350
|
+
]
|
|
345
351
|
|
|
346
352
|
# Background rates must be scaled by the ratio of the solid angles of the
|
|
347
353
|
# map pixel / pointing set pixel
|
|
@@ -404,11 +410,10 @@ def generate_ultra_healpix_skymap(
|
|
|
404
410
|
skymap.data_1d = skymap.data_1d.drop_vars(
|
|
405
411
|
VARIABLES_TO_DROP_AFTER_INTENSITY_CALCULATION,
|
|
406
412
|
)
|
|
407
|
-
|
|
408
413
|
return skymap, np.array(all_pset_epochs)
|
|
409
414
|
|
|
410
415
|
|
|
411
|
-
def ultra_l2(
|
|
416
|
+
def ultra_l2( # noqa: PLR0912
|
|
412
417
|
data_dict: dict[str, xr.Dataset | str | Path],
|
|
413
418
|
output_map_structure: (
|
|
414
419
|
ena_maps.RectangularSkyMap | ena_maps.HealpixSkyMap
|
|
@@ -511,6 +516,7 @@ def ultra_l2(
|
|
|
511
516
|
map_dataset = healpix_skymap.to_dataset()
|
|
512
517
|
# Add attributes related to the map
|
|
513
518
|
map_attrs = {
|
|
519
|
+
"HEALPix_solid_angle": str(healpix_skymap.solid_angle),
|
|
514
520
|
"HEALPix_nside": str(output_map_structure.nside),
|
|
515
521
|
"HEALPix_nest": str(output_map_structure.nested),
|
|
516
522
|
}
|
|
@@ -585,6 +591,11 @@ def ultra_l2(
|
|
|
585
591
|
# to "energy" for all instruments.
|
|
586
592
|
map_dataset = map_dataset.rename({"energy_bin_geometric_mean": "energy"})
|
|
587
593
|
|
|
594
|
+
# Rename positional uncertainty variables if present
|
|
595
|
+
if "scatter_theta" in map_dataset and "scatter_phi" in map_dataset:
|
|
596
|
+
map_dataset = map_dataset.rename({"scatter_theta": "positional_uncert_theta"})
|
|
597
|
+
map_dataset = map_dataset.rename({"scatter_phi": "positional_uncert_phi"})
|
|
598
|
+
|
|
588
599
|
# Add the defined attributes to the map's global attrs
|
|
589
600
|
map_dataset.attrs.update(map_attrs)
|
|
590
601
|
|
|
@@ -650,6 +661,8 @@ def ultra_l2(
|
|
|
650
661
|
)
|
|
651
662
|
)
|
|
652
663
|
|
|
653
|
-
# Adjust the dtype of
|
|
664
|
+
# Adjust the dtype of obs dates to be int64
|
|
654
665
|
map_dataset["obs_date"] = map_dataset["obs_date"].astype(np.int64)
|
|
666
|
+
map_dataset["obs_date_range"] = map_dataset["obs_date_range"].astype(np.int64)
|
|
667
|
+
|
|
655
668
|
return [map_dataset]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: imap-processing
|
|
3
|
-
Version: 0.19.
|
|
3
|
+
Version: 0.19.3
|
|
4
4
|
Summary: IMAP Science Operations Center Processing
|
|
5
5
|
License: MIT
|
|
6
6
|
Keywords: IMAP,SDC,SOC,Science Operations
|
|
@@ -30,7 +30,7 @@ Provides-Extra: tools
|
|
|
30
30
|
Requires-Dist: astropy-healpix (>=1.0)
|
|
31
31
|
Requires-Dist: cdflib (>=1.3.6,<2.0.0)
|
|
32
32
|
Requires-Dist: healpy (>=1.18.0,<2.0.0) ; extra == "map-visualization"
|
|
33
|
-
Requires-Dist: imap-data-access (>=0.
|
|
33
|
+
Requires-Dist: imap-data-access (>=0.35.0)
|
|
34
34
|
Requires-Dist: mypy (==1.10.1) ; extra == "dev"
|
|
35
35
|
Requires-Dist: netcdf4 (>=1.7.2,<2.0.0) ; extra == "test"
|
|
36
36
|
Requires-Dist: numpy (<=3)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
imap_processing/__init__.py,sha256=b9xHlf8_0OtN_OyhPlrC6ayahYR0QTt_e713NjxZObw,1305
|
|
2
|
-
imap_processing/_version.py,sha256=
|
|
2
|
+
imap_processing/_version.py,sha256=caBJZAzVH0Oe2UY0UwvflCwyLfJGNXhd9_hNJUMQpUE,127
|
|
3
3
|
imap_processing/ancillary/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
4
|
imap_processing/ancillary/ancillary_dataset_combiner.py,sha256=dSNmfVAvfFxB2lgVMRHWgow93SBZgQIPOMka7AIbYvY,16004
|
|
5
5
|
imap_processing/ccsds/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -12,9 +12,9 @@ imap_processing/cdf/config/imap_codice_l1b_variable_attrs.yaml,sha256=9bxQBpyORB
|
|
|
12
12
|
imap_processing/cdf/config/imap_codice_l2_variable_attrs.yaml,sha256=zui2KLTXQN5IZ7Ne3on5vLI2XbYpo5qLHO0Wddlmc6w,44137
|
|
13
13
|
imap_processing/cdf/config/imap_constant_attrs.yaml,sha256=DcX5USOf8dNe7ZIB3WaNTjDj4FFLxKoYMKgSbtQFRqk,1176
|
|
14
14
|
imap_processing/cdf/config/imap_default_global_cdf_attrs.yaml,sha256=3622EmoIdv9Kvb6eQ5JRv0GmA1-SFZaRBleuCMFhEUs,987
|
|
15
|
-
imap_processing/cdf/config/imap_enamaps_l2-common_variable_attrs.yaml,sha256=
|
|
16
|
-
imap_processing/cdf/config/imap_enamaps_l2-healpix_variable_attrs.yaml,sha256=
|
|
17
|
-
imap_processing/cdf/config/imap_enamaps_l2-rectangular_variable_attrs.yaml,sha256=
|
|
15
|
+
imap_processing/cdf/config/imap_enamaps_l2-common_variable_attrs.yaml,sha256=ywlCC_nZexEIhMcqw1MJiTDqiw97_1Oy_aTA3ZtLjTI,10056
|
|
16
|
+
imap_processing/cdf/config/imap_enamaps_l2-healpix_variable_attrs.yaml,sha256=_iuF1Q7xuAAxP2NfEzYcs7Awj8soF9bw6zYNG5vGvCE,3346
|
|
17
|
+
imap_processing/cdf/config/imap_enamaps_l2-rectangular_variable_attrs.yaml,sha256=zdmL_OdGojYt9KXH3dnIAT3ELNDvt6aXdVNyM04jizg,4299
|
|
18
18
|
imap_processing/cdf/config/imap_glows_global_cdf_attrs.yaml,sha256=MkGQVokzjXmJRas0PsFHfeU5VQkThQSXK65EOs2mw6A,1854
|
|
19
19
|
imap_processing/cdf/config/imap_glows_l1a_variable_attrs.yaml,sha256=aJCTUSEKKGl8W2c_PuFh0Pr-EEEV07F2h3_BrKxtSeY,13675
|
|
20
20
|
imap_processing/cdf/config/imap_glows_l1b_variable_attrs.yaml,sha256=0twYoQwL9o-uSAdrExf9DUbDuKdX98-PCqgtCy_UgQA,19760
|
|
@@ -50,7 +50,7 @@ imap_processing/cdf/config/imap_swe_global_cdf_attrs.yaml,sha256=iWWXclloqkDHOb6
|
|
|
50
50
|
imap_processing/cdf/config/imap_swe_l1a_variable_attrs.yaml,sha256=ZNQvNQOOaX82tUsM0AbNLUWQX7GZ0LZ-yndalxKpewM,5397
|
|
51
51
|
imap_processing/cdf/config/imap_swe_l1b_variable_attrs.yaml,sha256=reAoX4LlgceBtka1res6j0wj_P7OM5OlZuPfNbM5xuM,7761
|
|
52
52
|
imap_processing/cdf/config/imap_swe_l2_variable_attrs.yaml,sha256=bHG6c6n11KszlDXXtKeKtKBYmq6ikkb7ZeTUZSV1EKQ,7651
|
|
53
|
-
imap_processing/cdf/config/imap_ultra_global_cdf_attrs.yaml,sha256=
|
|
53
|
+
imap_processing/cdf/config/imap_ultra_global_cdf_attrs.yaml,sha256=rezLAI6AJopkDe7ynT4INZPxRx7ZfjH0LuFSbTqgz7M,21330
|
|
54
54
|
imap_processing/cdf/config/imap_ultra_l1a_variable_attrs.yaml,sha256=ylzIoJOfoU0NF-QnFvGEe_BySsGtVelo4IsStadHXCk,94698
|
|
55
55
|
imap_processing/cdf/config/imap_ultra_l1b_variable_attrs.yaml,sha256=IetyCiGlF_Y3x9B47DqnDlSZMJjA8uFsokLYWn2byMg,12456
|
|
56
56
|
imap_processing/cdf/config/imap_ultra_l1c_variable_attrs.yaml,sha256=Ooqha84ziw0fFmZMOVYfG3zYxu_N2LWSruCK-eNzKjU,4907
|
|
@@ -126,13 +126,13 @@ imap_processing/ialirt/calculate_ingest.py,sha256=oUGEDFafmE0KqsurczWOAWhYnbRY9S
|
|
|
126
126
|
imap_processing/ialirt/constants.py,sha256=LH6ivNh6Ry0I3WSL6jQ4eBlKJ57g6xlkOtm9715Dnac,2299
|
|
127
127
|
imap_processing/ialirt/generate_coverage.py,sha256=APdzKr5XbGxBbqK7DBIV69NoQJtKcOj1MCoGqfj7wJo,6419
|
|
128
128
|
imap_processing/ialirt/l0/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
129
|
-
imap_processing/ialirt/l0/ialirt_spice.py,sha256=
|
|
129
|
+
imap_processing/ialirt/l0/ialirt_spice.py,sha256=T-B5ydWF67WJmnJbWYcRHXVyZZMmAoSO_2iwD531GpY,5689
|
|
130
130
|
imap_processing/ialirt/l0/mag_l0_ialirt_data.py,sha256=vgIerXkk4ZoOxxVaNEgvM1ESWVkGusSZ-3k73-Cl_tI,5276
|
|
131
|
-
imap_processing/ialirt/l0/parse_mag.py,sha256=
|
|
131
|
+
imap_processing/ialirt/l0/parse_mag.py,sha256=DNihOVuY6MYhBkiWlVkRJp9KbJYVME3CrWIZDIHmuYU,23551
|
|
132
132
|
imap_processing/ialirt/l0/process_codice.py,sha256=-gjxJltAGqqnIflvs5-wrZ2sS-1BjHYk0cMGxxhRdi0,1935
|
|
133
|
-
imap_processing/ialirt/l0/process_hit.py,sha256=
|
|
134
|
-
imap_processing/ialirt/l0/process_swapi.py,sha256=
|
|
135
|
-
imap_processing/ialirt/l0/process_swe.py,sha256=
|
|
133
|
+
imap_processing/ialirt/l0/process_hit.py,sha256=x2ABROi9CNePsd6n5LrvYuIbmfcyL1PAFj5s3YdPInI,5598
|
|
134
|
+
imap_processing/ialirt/l0/process_swapi.py,sha256=bL_TnV8Ao6edZCjBDb6lPNJmBMBBAN-4x33yJbwcrcU,8295
|
|
135
|
+
imap_processing/ialirt/l0/process_swe.py,sha256=i3TRiuPxlf9Ece-jZpoYfMLo88ZBG6Z1gJeVl8PXuj4,18599
|
|
136
136
|
imap_processing/ialirt/packet_definitions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
137
137
|
imap_processing/ialirt/packet_definitions/ialirt.xml,sha256=-hlT16Mr2Q6uCUfJ3jdpw0mPdeGCcZiWiorbkiEanwA,40784
|
|
138
138
|
imap_processing/ialirt/packet_definitions/ialirt_codicehi.xml,sha256=PwzGTJj4dROXJBqbT32UZ6swaPbjvXdXXn7E_Lxch2A,11367
|
|
@@ -203,7 +203,7 @@ imap_processing/spacecraft/packet_definitions/scid_x252.xml,sha256=vkeMi_r_nM0R4
|
|
|
203
203
|
imap_processing/spacecraft/quaternions.py,sha256=VdW0R76i5QWnENPtewnnkf6oq6uQ6yhFVc_MLDtiRUs,4271
|
|
204
204
|
imap_processing/spice/__init__.py,sha256=t5dNkU59mun7nZh-BDMApSC-Jie29-2ocFo_Qeu-2nk,17
|
|
205
205
|
imap_processing/spice/config.py,sha256=UR0M6lrLeYVLj3cx9Rj6Q9-Bdb0NDlmNq8vXIV1k5l8,224
|
|
206
|
-
imap_processing/spice/geometry.py,sha256=
|
|
206
|
+
imap_processing/spice/geometry.py,sha256=GcCAP-eSN4QshAnZSS9qTd3HqTmgnZNHqgXFC851rx8,22101
|
|
207
207
|
imap_processing/spice/pointing_frame.py,sha256=1YY4WvoKBZZ8qBg9p-dSZkT5btRK1BXt-J95fBD6C98,13592
|
|
208
208
|
imap_processing/spice/repoint.py,sha256=MOf8Syu9eD-sHsLHwfq6BWlG1NOHpA757VUpJW7S_3o,9959
|
|
209
209
|
imap_processing/spice/spin.py,sha256=qVEKe9GSc8RRewc9YtcvF9pgyVZ3LmBH8F0yCqNtaeg,10736
|
|
@@ -230,9 +230,9 @@ imap_processing/swe/utils/swe_utils.py,sha256=ztBWk4xZXzsOtJcztX3kK8zrDdsXKAN8qc
|
|
|
230
230
|
imap_processing/ultra/__init__.py,sha256=Ga6Ioj68HnQ4moi7SxJdOyYmGHcRvKOh4uZUEPJZHl4,20
|
|
231
231
|
imap_processing/ultra/constants.py,sha256=NzSGa-3umBkHJLXaCpHbOnIqSiHyhHoTUTumR05bQbA,4130
|
|
232
232
|
imap_processing/ultra/l0/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
233
|
-
imap_processing/ultra/l0/decom_tools.py,sha256=
|
|
234
|
-
imap_processing/ultra/l0/decom_ultra.py,sha256=
|
|
235
|
-
imap_processing/ultra/l0/ultra_utils.py,sha256=
|
|
233
|
+
imap_processing/ultra/l0/decom_tools.py,sha256=sbYT16wJnQj07pctXEflFe9GQOu_ZnIF9H2t79R5R-Q,10091
|
|
234
|
+
imap_processing/ultra/l0/decom_ultra.py,sha256=A7blZgzb5dfXXDW5usFs7vyZoPPHWgI8CKpmzE2Bi_g,14126
|
|
235
|
+
imap_processing/ultra/l0/ultra_utils.py,sha256=EM6GtbD5It384VOW7wpw2Ef5mcJNEmGWs4mJw5F8m4s,18905
|
|
236
236
|
imap_processing/ultra/l1a/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
237
237
|
imap_processing/ultra/l1a/ultra_l1a.py,sha256=em0bzciCTT1xPchDT_30B2--swaw9opocyI2DhXgg6w,6702
|
|
238
238
|
imap_processing/ultra/l1b/badtimes.py,sha256=eOpSACoQ4WwqLHOd3xeStkvn81YRAvmrIOdEE_qDL4E,3586
|
|
@@ -252,15 +252,15 @@ imap_processing/ultra/l1c/ultra_l1c.py,sha256=qfW4nNhu6O10quG6rPr12Dy0vtCbclp9nN
|
|
|
252
252
|
imap_processing/ultra/l1c/ultra_l1c_culling.py,sha256=g6wzSiTmoLuWl8ohWzYaNFVzCDEEVdTLMWcILqycGM4,3140
|
|
253
253
|
imap_processing/ultra/l1c/ultra_l1c_pset_bins.py,sha256=FZttQdjMLFNE4U0ClAU_X8gMUCvuQYhIG7GLXoHcQgc,28231
|
|
254
254
|
imap_processing/ultra/l2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
255
|
-
imap_processing/ultra/l2/ultra_l2.py,sha256=
|
|
255
|
+
imap_processing/ultra/l2/ultra_l2.py,sha256=s-qemQtLaVluuSaVYnDNcemy8nCVJPOmrO5WhAfxKMk,26936
|
|
256
256
|
imap_processing/ultra/packet_definitions/README.md,sha256=Iam1bd6UVkRLayApXlHG_y4DyHRWfUFPMcEINZyA8qk,1450
|
|
257
257
|
imap_processing/ultra/packet_definitions/ULTRA_SCI_COMBINED.xml,sha256=CYxYC93oqmVD1dZ6R6GRBxEOB5HP7wMNapUcYRWjFSk,939289
|
|
258
258
|
imap_processing/ultra/packet_definitions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
259
259
|
imap_processing/ultra/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
260
260
|
imap_processing/ultra/utils/ultra_l1_utils.py,sha256=jFZts5If193WHRfYT1jRqNrTpfXB6CvJaBCkGFcgOx8,6576
|
|
261
261
|
imap_processing/utils.py,sha256=B7TNQHUCK9Fz6whYmIiXZSEFlduvF9-EgDufg2omcH0,13931
|
|
262
|
-
imap_processing-0.19.
|
|
263
|
-
imap_processing-0.19.
|
|
264
|
-
imap_processing-0.19.
|
|
265
|
-
imap_processing-0.19.
|
|
266
|
-
imap_processing-0.19.
|
|
262
|
+
imap_processing-0.19.3.dist-info/LICENSE,sha256=F2rxhvc6auEI0Dk9IGjglQSQQk60EvTe8M1dORMZPOg,1098
|
|
263
|
+
imap_processing-0.19.3.dist-info/METADATA,sha256=Zucs1Pp6pU4pO4z5Xq3BD3LEoIfINOjJD-7xqLPT9bI,9102
|
|
264
|
+
imap_processing-0.19.3.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
|
265
|
+
imap_processing-0.19.3.dist-info/entry_points.txt,sha256=5r8ijLImHSNJxr-SGDC8kJy81BtXjmeUOmNfWSfLuRs,104
|
|
266
|
+
imap_processing-0.19.3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|