@@ -352,27 +352,40 @@ def scan_files(dirname):
352352 normalize = lambda x : x if isinstance (x , int ) else - 1
353353
354354 # Segment index is determined by the gate_num and trigger_num in that order
355- gate_trigger_tuples = [
356- (info_index , (normalize (info ["gate_num" ]), normalize (info ["trigger_num" ])))
357- for info_index , info in enumerate (info_list )
358- ]
355+ def get_segment_tuple (info ):
356+ # Create a key from the normalized gate_num and trigger_num
357+ gate_num = normalize (info .get ("gate_num" ))
358+ trigger_num = normalize (info .get ("trigger_num" ))
359+ return (gate_num , trigger_num )
359360
360- sorted_info = sorted (gate_trigger_tuples , key = lambda x : x [1 ])
361-
362- for seg_index , (info_index , _ ) in enumerate (sorted_info ):
363- info_list [info_index ]["seg_index" ] = seg_index
364-
365- # Add probe_index
366- # The logic is that the probe_index is the order of the probe_slot, probe_port, and probe_dock
367- slot_port_dock_tuples = [
368- (info_index , (normalize (info ["probe_slot" ]), normalize (info ["probe_port" ]), normalize (info ["probe_dock" ])))
369- for info_index , info in enumerate (info_list )
370- ]
361+ unique_segment_tuples = {get_segment_tuple (info ) for info in info_list }
362+ sorted_keys = sorted (unique_segment_tuples )
363+
364+ # Map each unique key to a corresponding index
365+ segment_tuple_to_segment_index = {key : idx for idx , key in enumerate (sorted_keys )}
366+
367+ for info in info_list :
368+ info ["seg_index" ] = segment_tuple_to_segment_index [get_segment_tuple (info )]
371369
372- # Sorts by the probe_slot, probe_port, and probe_dock tuples
373- sorted_info = sorted (slot_port_dock_tuples , key = lambda x : x [1 ])
374- for probe_index , (info_index , _ ) in enumerate (sorted_info ):
375- info_list [info_index ]["probe_index" ] = probe_index
370+
371+ # Probe index calculation
372+ # This ensures that all nidq entries come before any other keys, which corresponds to index 0.
373+ def get_probe_tuple (info ):
374+ slot = normalize (info .get ("probe_slot" ))
375+ port = normalize (info .get ("probe_port" ))
376+ dock = normalize (info .get ("probe_dock" ))
377+ return (slot , port , dock )
378+
379+ unique_probe_tuples = {get_probe_tuple (info ) for info in info_list }
380+ sorted_probe_keys = sorted (unique_probe_tuples )
381+ probe_tuple_to_probe_index = {key : idx for idx , key in enumerate (sorted_probe_keys )}
382+
383+ for info in info_list :
384+ if info .get ("device" ) == "nidq" :
385+ info ["device_index" ] = 0 # TODO: Handle multi nidq case
386+ else :
387+ info ["device_index" ] = probe_tuple_to_probe_index [get_probe_tuple (info )]
388+
376389
377390 return info_list
378391
0 commit comments