2020 EVENT_FIELD_RANGES ,
2121 RATES_KEYS ,
2222 ULTRA_ENERGY_RATES ,
23+ ULTRA_ENERGY_EVENTS ,
24+ ULTRA_EVENTS ,
2325 ULTRA_RATES ,
2426 ULTRA_TOF ,
2527)
@@ -139,93 +141,29 @@ def get_event_id(shcoarse: NDArray) -> NDArray:
139141 return np .array (event_ids , dtype = np .int64 )
140142
141143
142- def process_ultra_events (ds : xr .Dataset ) -> xr .Dataset :
144+ def process_ultra_events (ds : xr .Dataset , apid : int ) -> xr .Dataset :
143145 """
144146 Unpack and decode Ultra EVENTS packets.
145147
146148 Parameters
147149 ----------
148150 ds : xarray.Dataset
149151 Events dataset.
152+ apid : int
153+ APID of the events dataset.
150154
151155 Returns
152156 -------
153157 ds : xarray.Dataset
154158 Dataset containing the decoded and decompressed data.
155159 """
156- all_events = []
157- all_indices = []
158-
159- attrs = ImapCdfAttributes ()
160- attrs .add_instrument_variable_attrs ("ultra" , level = "l1a" )
161-
162- empty_event = {
163- field : attrs .get_variable_attributes (field ).get (
164- "FILLVAL" , np .iinfo (np .int64 ).min
165- )
166- for field in EVENT_FIELD_RANGES
167- }
168-
169- counts = ds ["count" ].values
170- eventdata_array = ds ["eventdata" ].values
171-
172- for i , count in enumerate (counts ):
173- if count == 0 :
174- all_events .append (empty_event )
175- all_indices .append (i )
176- else :
177- # Here there are multiple images in a single packet,
178- # so we need to loop through each image and decompress it.
179- event_data_list = read_image_raw_events_binary (eventdata_array [i ], count )
180- all_events .extend (event_data_list )
181- # Keep track of how many times does the event occurred at this epoch.
182- all_indices .extend ([i ] * count )
160+ if apid in ULTRA_EVENTS .apid :
161+ field_ranges = EVENT_FIELD_RANGES
162+ elif apid in ULTRA_ENERGY_EVENTS .apid :
163+ field_ranges = ENERGY_EVENT_FIELD_RANGES
164+ else :
165+ logger .error (f"APID { apid } not recognized for Ultra events processing." )
183166
184- # Now we have the event data, we need to create the xarray dataset.
185- # We cannot append to the existing dataset (sorted_packets)
186- # because there are multiple events for each epoch.
187- idx = np .array (all_indices )
188-
189- # Expand the existing dataset so that it is the same length as the event data.
190- expanded_data = {
191- var : ds [var ].values [idx ] for var in ds .data_vars if var != "eventdata"
192- }
193-
194- # Add the event data to the expanded dataset.
195- for key in EVENT_FIELD_RANGES :
196- expanded_data [key ] = np .array ([event [key ] for event in all_events ])
197-
198- event_ids = get_event_id (expanded_data ["shcoarse" ])
199-
200- coords = {
201- "epoch" : ds ["epoch" ].values [idx ],
202- "event_id" : ("epoch" , event_ids ),
203- }
204-
205- dataset = xr .Dataset (coords = coords )
206- for key , data in expanded_data .items ():
207- dataset [key ] = xr .DataArray (
208- data ,
209- dims = ["epoch" ],
210- )
211-
212- return dataset
213-
214-
215- def process_ultra_energy_events (ds : xr .Dataset ) -> xr .Dataset :
216- """
217- Unpack and decode Ultra ENERGY EVENTS packets.
218-
219- Parameters
220- ----------
221- ds : xarray.Dataset
222- Events dataset.
223-
224- Returns
225- -------
226- ds : xarray.Dataset
227- Dataset containing the decoded and decompressed data.
228- """
229167 all_events = []
230168 all_indices = []
231169
@@ -236,7 +174,7 @@ def process_ultra_energy_events(ds: xr.Dataset) -> xr.Dataset:
236174 field : attrs .get_variable_attributes (field ).get (
237175 "FILLVAL" , np .iinfo (np .int64 ).min
238176 )
239- for field in ENERGY_EVENT_FIELD_RANGES
177+ for field in field_ranges
240178 }
241179
242180 counts = ds ["count" ].values
@@ -249,7 +187,9 @@ def process_ultra_energy_events(ds: xr.Dataset) -> xr.Dataset:
249187 else :
250188 # Here there are multiple images in a single packet,
251189 # so we need to loop through each image and decompress it.
252- event_data_list = read_image_raw_events_binary (eventdata_array [i ], count )
190+ event_data_list = read_image_raw_events_binary (
191+ eventdata_array [i ], count , field_ranges
192+ )
253193 all_events .extend (event_data_list )
254194 # Keep track of how many times does the event occurred at this epoch.
255195 all_indices .extend ([i ] * count )
@@ -265,7 +205,7 @@ def process_ultra_energy_events(ds: xr.Dataset) -> xr.Dataset:
265205 }
266206
267207 # Add the event data to the expanded dataset.
268- for key in EVENT_FIELD_RANGES :
208+ for key in field_ranges :
269209 expanded_data [key ] = np .array ([event [key ] for event in all_events ])
270210
271211 event_ids = get_event_id (expanded_data ["shcoarse" ])
0 commit comments