1818 ENERGY_EVENT_FIELD_RANGES ,
1919 EVENT_FIELD_RANGES ,
2020 RATES_KEYS ,
21+ ULTRA_ENERGY_EVENTS ,
22+ ULTRA_EVENTS ,
2123 ULTRA_RATES ,
2224 ULTRA_TOF ,
2325)
@@ -137,93 +139,29 @@ def get_event_id(shcoarse: NDArray) -> NDArray:
137139 return np .array (event_ids , dtype = np .int64 )
138140
139141
140- def process_ultra_events (ds : xr .Dataset ) -> xr .Dataset :
142+ def process_ultra_events (ds : xr .Dataset , apid : int ) -> xr .Dataset :
141143 """
142144 Unpack and decode Ultra EVENTS packets.
143145
144146 Parameters
145147 ----------
146148 ds : xarray.Dataset
147149 Events dataset.
150+ apid : int
151+ APID of the events dataset.
148152
149153 Returns
150154 -------
151155 ds : xarray.Dataset
152156 Dataset containing the decoded and decompressed data.
153157 """
154- all_events = []
155- all_indices = []
156-
157- attrs = ImapCdfAttributes ()
158- attrs .add_instrument_variable_attrs ("ultra" , level = "l1a" )
159-
160- empty_event = {
161- field : attrs .get_variable_attributes (field ).get (
162- "FILLVAL" , np .iinfo (np .int64 ).min
163- )
164- for field in EVENT_FIELD_RANGES
165- }
166-
167- counts = ds ["count" ].values
168- eventdata_array = ds ["eventdata" ].values
169-
170- for i , count in enumerate (counts ):
171- if count == 0 :
172- all_events .append (empty_event )
173- all_indices .append (i )
174- else :
175- # Here there are multiple images in a single packet,
176- # so we need to loop through each image and decompress it.
177- event_data_list = read_image_raw_events_binary (eventdata_array [i ], count )
178- all_events .extend (event_data_list )
179- # Keep track of how many times does the event occurred at this epoch.
180- all_indices .extend ([i ] * count )
158+ if apid in ULTRA_EVENTS .apid :
159+ field_ranges = EVENT_FIELD_RANGES
160+ elif apid in ULTRA_ENERGY_EVENTS .apid :
161+ field_ranges = ENERGY_EVENT_FIELD_RANGES
162+ else :
163+ logger .error (f"APID { apid } not recognized for Ultra events processing." )
181164
182- # Now we have the event data, we need to create the xarray dataset.
183- # We cannot append to the existing dataset (sorted_packets)
184- # because there are multiple events for each epoch.
185- idx = np .array (all_indices )
186-
187- # Expand the existing dataset so that it is the same length as the event data.
188- expanded_data = {
189- var : ds [var ].values [idx ] for var in ds .data_vars if var != "eventdata"
190- }
191-
192- # Add the event data to the expanded dataset.
193- for key in EVENT_FIELD_RANGES :
194- expanded_data [key ] = np .array ([event [key ] for event in all_events ])
195-
196- event_ids = get_event_id (expanded_data ["shcoarse" ])
197-
198- coords = {
199- "epoch" : ds ["epoch" ].values [idx ],
200- "event_id" : ("epoch" , event_ids ),
201- }
202-
203- dataset = xr .Dataset (coords = coords )
204- for key , data in expanded_data .items ():
205- dataset [key ] = xr .DataArray (
206- data ,
207- dims = ["epoch" ],
208- )
209-
210- return dataset
211-
212-
213- def process_ultra_energy_events (ds : xr .Dataset ) -> xr .Dataset :
214- """
215- Unpack and decode Ultra ENERGY EVENTS packets.
216-
217- Parameters
218- ----------
219- ds : xarray.Dataset
220- Events dataset.
221-
222- Returns
223- -------
224- ds : xarray.Dataset
225- Dataset containing the decoded and decompressed data.
226- """
227165 all_events = []
228166 all_indices = []
229167
@@ -234,7 +172,7 @@ def process_ultra_energy_events(ds: xr.Dataset) -> xr.Dataset:
234172 field : attrs .get_variable_attributes (field ).get (
235173 "FILLVAL" , np .iinfo (np .int64 ).min
236174 )
237- for field in ENERGY_EVENT_FIELD_RANGES
175+ for field in field_ranges
238176 }
239177
240178 counts = ds ["count" ].values
@@ -247,7 +185,9 @@ def process_ultra_energy_events(ds: xr.Dataset) -> xr.Dataset:
247185 else :
248186 # Here there are multiple images in a single packet,
249187 # so we need to loop through each image and decompress it.
250- event_data_list = read_image_raw_events_binary (eventdata_array [i ], count )
188+ event_data_list = read_image_raw_events_binary (
189+ eventdata_array [i ], count , field_ranges
190+ )
251191 all_events .extend (event_data_list )
252192 # Keep track of how many times does the event occurred at this epoch.
253193 all_indices .extend ([i ] * count )
@@ -263,7 +203,7 @@ def process_ultra_energy_events(ds: xr.Dataset) -> xr.Dataset:
263203 }
264204
265205 # Add the event data to the expanded dataset.
266- for key in EVENT_FIELD_RANGES :
206+ for key in field_ranges :
267207 expanded_data [key ] = np .array ([event [key ] for event in all_events ])
268208
269209 event_ids = get_event_id (expanded_data ["shcoarse" ])
0 commit comments