@@ -254,34 +254,46 @@ def _sss_ctc_ch_name_clean(tag_data):
254254_sss_cal_writers = (write_int_matrix , write_float_matrix )
255255_sss_cal_casters = (np .array , np .array )
256256
257+ _io_map = dict (
258+ sss_ctc = dict (
259+ keys = _sss_ctc_keys ,
260+ ids = _sss_ctc_ids ,
261+ casters = _sss_ctc_casters ,
262+ writers = _sss_ctc_writers ,
263+ block = FIFF .FIFFB_CHANNEL_DECOUPLER ,
264+ ),
265+ sss_cal = dict (
266+ keys = _sss_cal_keys ,
267+ ids = _sss_cal_ids ,
268+ casters = _sss_cal_casters ,
269+ writers = _sss_cal_writers ,
270+ block = FIFF .FIFFB_SSS_CAL ,
271+ ),
272+ sss_info = dict (
273+ keys = _sss_info_keys ,
274+ ids = _sss_info_ids ,
275+ casters = _sss_info_casters ,
276+ writers = _sss_info_writers ,
277+ block = FIFF .FIFFB_SSS_INFO ,
278+ ),
279+ max_st = dict (
280+ keys = _max_st_keys ,
281+ ids = _max_st_ids ,
282+ casters = _max_st_casters ,
283+ writers = _max_st_writers ,
284+ block = FIFF .FIFFB_SSS_ST_INFO ,
285+ ),
286+ )
287+
257288
258- def _write_mf_data (fid , info , * , kind ):
259- this_data = info .get (kind , None )
289+ def _write_mf_data (fid , info , * , kind , key = None ):
290+ key = kind if key is None else key
291+ this_data = info .get (key , dict ())
260292 if not this_data : # empty or None
261293 return
294+ del info , key
262295 logger .debug ("Writing %s info with keys: %s" , kind , list (this_data ))
263- del info
264- if kind == "cross_talk" :
265- keys = _sss_ctc_keys
266- ids = _sss_ctc_ids
267- writers = _sss_ctc_writers
268- block = FIFF .FIFFB_CHANNEL_DECOUPLER
269- elif kind == "fine_calibration" :
270- keys = _sss_cal_keys
271- ids = _sss_cal_ids
272- writers = _sss_cal_writers
273- block = FIFF .FIFFB_SSS_CAL
274- elif kind == "max_st" :
275- keys = _max_st_keys
276- ids = _max_st_ids
277- writers = _max_st_writers
278- block = FIFF .FIFFB_SSS_ST_INFO
279- else :
280- assert kind == "sss_info"
281- keys = _sss_info_keys
282- ids = _sss_info_ids
283- writers = _sss_info_writers
284- block = FIFF .FIFFB_SSS_INFO
296+ keys , ids , _ , writers , block = _io_map [kind ].values ()
285297 start_block (fid , block )
286298 for key , id_ , writer in zip (keys , ids , writers ):
287299 if key in this_data :
@@ -294,7 +306,7 @@ def _read_ctc(fname):
294306 fname = _check_fname (fname , overwrite = "read" , must_exist = True )
295307 f , tree , _ = fiff_open (fname )
296308 with f as fid :
297- sss_ctc = _read_mf_data (fid , tree , kind = "cross_talk " )
309+ sss_ctc = _read_mf_data (fid , tree , kind = "sss_ctc " )
298310 bad_str = f"Invalid cross-talk FIF: { fname } "
299311 if len (sss_ctc ) == 0 :
300312 raise ValueError (bad_str )
@@ -310,40 +322,14 @@ def _read_ctc(fname):
310322def _read_maxfilter_record (fid , tree ):
311323 """Read maxfilter processing record from file."""
312324 max_info = dict ()
313- for key , kind in (
314- ("sss_info" , "sss_info" ),
315- ("sss_ctc" , "cross_talk" ),
316- ("sss_cal" , "fine_calibration" ),
317- ("max_st" , "max_st" ),
318- ):
319- this_data = _read_mf_data (fid , tree , kind = kind )
320- if this_data :
321- max_info [key ] = this_data
325+ for key in _io_map :
326+ this_data = _read_mf_data (fid , tree , kind = key )
327+ max_info [key ] = this_data or dict () # always add, even if empty
322328 return max_info
323329
324330
325331def _read_mf_data (fid , tree , * , kind ):
326- if kind == "cross_talk" :
327- block = FIFF .FIFFB_CHANNEL_DECOUPLER # 501
328- keys = _sss_ctc_keys
329- ids = _sss_ctc_ids
330- casters = _sss_ctc_casters
331- elif kind == "fine_calibration" :
332- block = FIFF .FIFFB_SSS_CAL # 503
333- keys = _sss_cal_keys
334- ids = _sss_cal_ids
335- casters = _sss_cal_casters
336- elif kind == "max_st" :
337- block = FIFF .FIFFB_SSS_ST_INFO # 504
338- keys = _max_st_keys
339- ids = _max_st_ids
340- casters = _max_st_casters
341- else :
342- assert kind == "sss_info"
343- block = FIFF .FIFFB_SSS_INFO # 502
344- keys = _sss_info_keys
345- ids = _sss_info_ids
346- casters = _sss_info_casters
332+ keys , ids , casters , _ , block = _io_map [kind ].values ()
347333 sss_kind_block = dir_tree_find (tree , block )
348334 sss_out = dict ()
349335 if len (sss_kind_block ) > 0 :
@@ -364,5 +350,5 @@ def _write_maxfilter_record(fid, record):
364350 """Write maxfilter processing record to file."""
365351 _write_mf_data (fid , record , kind = "sss_info" )
366352 _write_mf_data (fid , record , kind = "max_st" )
367- _write_mf_data (fid , record , kind = "cross_talk " )
368- _write_mf_data (fid , record , kind = "fine_calibration " )
353+ _write_mf_data (fid , record , kind = "sss_ctc " )
354+ _write_mf_data (fid , record , kind = "sss_cal " )
0 commit comments