@@ -364,38 +364,10 @@ def make(self, key):
364
364
electrode_config_hash = dict_to_uuid (
365
365
{k ["electrode" ]: k for k in electrode_group_members }
366
366
)
367
-
368
- electrode_list = sorted (
369
- [k ["electrode" ] for k in electrode_group_members ]
370
- )
371
- electrode_gaps = (
372
- [- 1 ]
373
- + np .where (np .diff (electrode_list ) > 1 )[0 ].tolist ()
374
- + [len (electrode_list ) - 1 ]
375
- )
376
- electrode_config_name = "; " .join (
377
- [
378
- f"{ electrode_list [start + 1 ]} -{ electrode_list [end ]} "
379
- for start , end in zip (electrode_gaps [:- 1 ], electrode_gaps [1 :])
380
- ]
367
+ electrode_config_name = generate_electrode_config_name (
368
+ probe_type , electrode_group_members
381
369
)
382
370
383
- electrode_config_key = {"electrode_config_hash" : electrode_config_hash }
384
-
385
- # Insert into ElectrodeConfig
386
- if not probe .ElectrodeConfig & electrode_config_key :
387
- probe .ElectrodeConfig .insert1 (
388
- {
389
- ** electrode_config_key ,
390
- "probe_type" : probe_type ,
391
- "electrode_config_name" : electrode_config_name ,
392
- }
393
- )
394
- probe .ElectrodeConfig .Electrode .insert (
395
- {** electrode_config_key , ** electrode }
396
- for electrode in electrode_group_members
397
- )
398
-
399
371
self .insert1 (
400
372
{
401
373
** key ,
@@ -426,7 +398,7 @@ def make(self, key):
426
398
# Get channel and electrode-site mapping
427
399
electrode_query = (
428
400
probe .ProbeType .Electrode * probe .ElectrodeConfig .Electrode
429
- & electrode_config_key
401
+ & { "electrode_config_hash" : electrode_config_hash }
430
402
)
431
403
432
404
probe_electrodes = {
@@ -474,34 +446,20 @@ def make(self, key):
474
446
475
447
probe_electrodes = {
476
448
key ["electrode" ]: key for key in electrode_query .fetch ("KEY" )
477
- }
449
+ } # electrode configuration
478
450
479
451
electrode_group_members = [
480
452
probe_electrodes [channel_idx ]
481
453
for channel_idx in probe_data .ap_meta ["channels_indices" ]
482
- ]
454
+ ] # recording session-specific electrode configuration
483
455
484
456
# Compute hash for the electrode config (hash of dict of all ElectrodeConfig.Electrode)
485
457
electrode_config_hash = dict_to_uuid (
486
458
{k ["electrode" ]: k for k in electrode_group_members }
487
459
)
488
-
489
- electrode_list = sorted (
490
- [k ["electrode" ] for k in electrode_group_members ]
491
- )
492
- electrode_gaps = (
493
- [- 1 ]
494
- + np .where (np .diff (electrode_list ) > 1 )[0 ].tolist ()
495
- + [len (electrode_list ) - 1 ]
460
+ electrode_config_name = generate_electrode_config_name (
461
+ probe_type , electrode_group_members
496
462
)
497
- electrode_config_name = "; " .join (
498
- [
499
- f"{ electrode_list [start + 1 ]} -{ electrode_list [end ]} "
500
- for start , end in zip (electrode_gaps [:- 1 ], electrode_gaps [1 :])
501
- ]
502
- )
503
-
504
- electrode_config_key = {"electrode_config_hash" : electrode_config_hash }
505
463
506
464
self .insert1 (
507
465
{
@@ -553,6 +511,20 @@ def make(self, key):
553
511
]
554
512
)
555
513
514
+ # 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
+ )
527
+
556
528
557
529
@schema
558
530
class LFP (dj .Imported ):
@@ -1820,3 +1792,29 @@ def get_recording_channels_details(ephys_recording_key: dict) -> np.array:
1820
1792
)
1821
1793
1822
1794
return channels_details
1795
+
1796
+
1797
+ def generate_electrode_config_name (probe_type : str , electrode_keys : list ) -> str :
1798
+ """Generate electrode config name.
1799
+
1800
+ Args:
1801
+ probe_type (str): probe type (e.g. neuropixels 2.0 - SS)
1802
+ electrode_keys (list): list of keys of the probe.ProbeType.Electrode table
1803
+
1804
+ Returns:
1805
+ electrode_config_name (str)
1806
+ """
1807
+ electrode_list = sorted ([k ["electrode" ] for k in electrode_keys ])
1808
+ electrode_gaps = (
1809
+ [- 1 ]
1810
+ + np .where (np .diff (electrode_list ) > 1 )[0 ].tolist ()
1811
+ + [len (electrode_list ) - 1 ]
1812
+ )
1813
+ electrode_config_name = "; " .join (
1814
+ [
1815
+ f"{ electrode_list [start + 1 ]} -{ electrode_list [end ]} "
1816
+ for start , end in zip (electrode_gaps [:- 1 ], electrode_gaps [1 :])
1817
+ ]
1818
+ )
1819
+
1820
+ return electrode_config_name
0 commit comments