@@ -360,18 +360,14 @@ def make(self, key):
360
360
for shank , shank_col , shank_row , _ in spikeglx_meta .shankmap ["data" ]
361
361
] # recording session-specific electrode configuration
362
362
363
- # Compute hash for the electrode config (hash of dict of all ElectrodeConfig.Electrode)
364
- electrode_config_hash = dict_to_uuid (
365
- {k ["electrode" ]: k for k in electrode_group_members }
366
- )
367
- electrode_config_name = generate_electrode_config_name (
363
+ econfig_entry , econfig_electrodes = generate_electrode_config_entry (
368
364
probe_type , electrode_group_members
369
365
)
370
366
371
367
self .insert1 (
372
368
{
373
369
** key ,
374
- "electrode_config_hash" : electrode_config_hash ,
370
+ "electrode_config_hash" : econfig_entry [ " electrode_config_hash" ] ,
375
371
"acq_software" : acq_software ,
376
372
"sampling_rate" : spikeglx_meta .meta ["imSampRate" ],
377
373
"recording_datetime" : spikeglx_meta .recording_time ,
@@ -398,7 +394,7 @@ def make(self, key):
398
394
# Get channel and electrode-site mapping
399
395
electrode_query = (
400
396
probe .ProbeType .Electrode * probe .ElectrodeConfig .Electrode
401
- & {"electrode_config_hash" : electrode_config_hash }
397
+ & {"electrode_config_hash" : econfig_entry [ " electrode_config_hash" ] }
402
398
)
403
399
404
400
probe_electrodes = {
@@ -453,18 +449,14 @@ def make(self, key):
453
449
for channel_idx in probe_data .ap_meta ["channels_indices" ]
454
450
] # recording session-specific electrode configuration
455
451
456
- # Compute hash for the electrode config (hash of dict of all ElectrodeConfig.Electrode)
457
- electrode_config_hash = dict_to_uuid (
458
- {k ["electrode" ]: k for k in electrode_group_members }
459
- )
460
- electrode_config_name = generate_electrode_config_name (
452
+ econfig_entry , econfig_electrodes = generate_electrode_config_entry (
461
453
probe_type , electrode_group_members
462
454
)
463
455
464
456
self .insert1 (
465
457
{
466
458
** key ,
467
- "electrode_config_hash" : electrode_config_hash ,
459
+ "electrode_config_hash" : econfig_entry [ " electrode_config_hash" ] ,
468
460
"acq_software" : acq_software ,
469
461
"sampling_rate" : probe_data .ap_meta ["sample_rate" ],
470
462
"recording_datetime" : probe_data .recording_info [
@@ -512,18 +504,11 @@ def make(self, key):
512
504
)
513
505
514
506
# Insert into probe.ElectrodeConfig (recording configuration)
515
- if not probe .ElectrodeConfig & {"electrode_config_hash" : electrode_config_hash }:
516
- probe .ElectrodeConfig .insert1 (
517
- {
518
- "probe_type" : probe_type ,
519
- "electrode_config_hash" : electrode_config_hash ,
520
- "electrode_config_name" : electrode_config_name ,
521
- }
522
- )
523
- probe .ElectrodeConfig .Electrode .insert (
524
- {"electrode_config_hash" : electrode_config_hash , ** electrode }
525
- for electrode in electrode_group_members
526
- )
507
+ if not probe .ElectrodeConfig & {
508
+ "electrode_config_hash" : econfig_entry ["electrode_config_hash" ]
509
+ }:
510
+ probe .ElectrodeConfig .insert1 (econfig_entry )
511
+ probe .ElectrodeConfig .Electrode .insert (econfig_electrodes )
527
512
528
513
529
514
@schema
@@ -1794,16 +1779,19 @@ def get_recording_channels_details(ephys_recording_key: dict) -> np.array:
1794
1779
return channels_details
1795
1780
1796
1781
1797
- def generate_electrode_config_name (probe_type : str , electrode_keys : list ) -> str :
1798
- """Generate electrode config name.
1782
+ def generate_electrode_config_entry (probe_type : str , electrode_keys : list ) -> dict :
1783
+ """Generate and insert new ElectrodeConfig
1799
1784
1800
1785
Args:
1801
1786
probe_type (str): probe type (e.g. neuropixels 2.0 - SS)
1802
1787
electrode_keys (list): list of keys of the probe.ProbeType.Electrode table
1803
1788
1804
1789
Returns:
1805
- electrode_config_name (str)
1790
+ dict: representing a key of the probe.ElectrodeConfig table
1806
1791
"""
1792
+ # compute hash for the electrode config (hash of dict of all ElectrodeConfig.Electrode)
1793
+ electrode_config_hash = dict_to_uuid ({k ["electrode" ]: k for k in electrode_keys })
1794
+
1807
1795
electrode_list = sorted ([k ["electrode" ] for k in electrode_keys ])
1808
1796
electrode_gaps = (
1809
1797
[- 1 ]
@@ -1816,5 +1804,14 @@ def generate_electrode_config_name(probe_type: str, electrode_keys: list) -> str
1816
1804
for start , end in zip (electrode_gaps [:- 1 ], electrode_gaps [1 :])
1817
1805
]
1818
1806
)
1807
+ electrode_config_key = {"electrode_config_hash" : electrode_config_hash }
1808
+ econfig_entry = {
1809
+ ** electrode_config_key ,
1810
+ "probe_type" : probe_type ,
1811
+ "electrode_config_name" : electrode_config_name ,
1812
+ }
1813
+ econfig_electrodes = [
1814
+ {** electrode , ** electrode_config_key } for electrode in electrode_keys
1815
+ ]
1819
1816
1820
- return electrode_config_name
1817
+ return econfig_entry , econfig_electrodes
0 commit comments