Skip to content

Commit 1d80584

Browse files
committed
add generate_electrode_config_name
1 parent 5bfe201 commit 1d80584

File tree

1 file changed

+47
-49
lines changed

1 file changed

+47
-49
lines changed

element_array_ephys/ephys_no_curation.py

Lines changed: 47 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -364,38 +364,10 @@ def make(self, key):
364364
electrode_config_hash = dict_to_uuid(
365365
{k["electrode"]: k for k in electrode_group_members}
366366
)
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
381369
)
382370

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-
399371
self.insert1(
400372
{
401373
**key,
@@ -426,7 +398,7 @@ def make(self, key):
426398
# Get channel and electrode-site mapping
427399
electrode_query = (
428400
probe.ProbeType.Electrode * probe.ElectrodeConfig.Electrode
429-
& electrode_config_key
401+
& {"electrode_config_hash": electrode_config_hash}
430402
)
431403

432404
probe_electrodes = {
@@ -474,34 +446,20 @@ def make(self, key):
474446

475447
probe_electrodes = {
476448
key["electrode"]: key for key in electrode_query.fetch("KEY")
477-
}
449+
} # electrode configuration
478450

479451
electrode_group_members = [
480452
probe_electrodes[channel_idx]
481453
for channel_idx in probe_data.ap_meta["channels_indices"]
482-
]
454+
] # recording session-specific electrode configuration
483455

484456
# Compute hash for the electrode config (hash of dict of all ElectrodeConfig.Electrode)
485457
electrode_config_hash = dict_to_uuid(
486458
{k["electrode"]: k for k in electrode_group_members}
487459
)
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
496462
)
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}
505463

506464
self.insert1(
507465
{
@@ -553,6 +511,20 @@ def make(self, key):
553511
]
554512
)
555513

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+
556528

557529
@schema
558530
class LFP(dj.Imported):
@@ -1820,3 +1792,29 @@ def get_recording_channels_details(ephys_recording_key: dict) -> np.array:
18201792
)
18211793

18221794
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

Comments
 (0)