Skip to content

Commit bb27fd0

Browse files
committed
Merge branch 'datajoint-spikeinterface' into dev_new_main
2 parents dc8bac1 + b1104ce commit bb27fd0

File tree

2 files changed

+30
-5
lines changed

2 files changed

+30
-5
lines changed

element_array_ephys/ephys.py

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1033,6 +1033,16 @@ def make(self, key):
10331033

10341034
if si_sorting_analyzer_dir.exists(): # Read from spikeinterface outputs
10351035
import spikeinterface as si
1036+
from spikeinterface import sorters
1037+
1038+
sorting_file = output_dir / sorter_name / "spike_sorting" / "si_sorting.pkl"
1039+
si_sorting_: si.sorters.BaseSorter = si.load_extractor(
1040+
sorting_file, base_folder=output_dir
1041+
)
1042+
if si_sorting_.unit_ids.size == 0:
1043+
logger.info(f"No units found in {sorting_file}. Skipping Unit ingestion...")
1044+
self.insert1(key)
1045+
return
10361046

10371047
sorting_analyzer = si.load_sorting_analyzer(folder=si_sorting_analyzer_dir)
10381048
si_sorting = sorting_analyzer.sorting
@@ -1241,6 +1251,11 @@ def make(self, key):
12411251
output_dir = find_full_path(get_ephys_root_data_dir(), output_dir)
12421252
sorter_name = clustering_method.replace(".", "_")
12431253

1254+
self.insert1(key)
1255+
if not len(CuratedClustering.Unit & key):
1256+
logger.info(f"No CuratedClustering.Unit found for {key}, skipping Waveform ingestion.")
1257+
return
1258+
12441259
# Get channel and electrode-site mapping
12451260
electrode_query = (EphysRecording.Channel & key).proj(..., "-channel_name")
12461261
channel2electrode_map: dict[int, dict] = {
@@ -1294,7 +1309,6 @@ def yield_unit_waveforms():
12941309
]
12951310

12961311
yield unit_peak_waveform, unit_electrode_waveforms
1297-
12981312
else: # read from kilosort outputs (ecephys pipeline)
12991313
kilosort_dataset = kilosort.Kilosort(output_dir)
13001314

@@ -1394,7 +1408,6 @@ def yield_unit_waveforms():
13941408
yield unit_peak_waveform, unit_electrode_waveforms
13951409

13961410
# insert waveform on a per-unit basis to mitigate potential memory issue
1397-
self.insert1(key)
13981411
for unit_peak_waveform, unit_electrode_waveforms in yield_unit_waveforms():
13991412
if unit_peak_waveform:
14001413
self.PeakWaveform.insert1(unit_peak_waveform, ignore_extra_fields=True)
@@ -1501,6 +1514,11 @@ def make(self, key):
15011514
output_dir = find_full_path(get_ephys_root_data_dir(), output_dir)
15021515
sorter_name = clustering_method.replace(".", "_")
15031516

1517+
self.insert1(key)
1518+
if not len(CuratedClustering.Unit & key):
1519+
logger.info(f"No CuratedClustering.Unit found for {key}, skipping QualityMetrics ingestion.")
1520+
return
1521+
15041522
si_sorting_analyzer_dir = output_dir / sorter_name / "sorting_analyzer"
15051523
if si_sorting_analyzer_dir.exists(): # read from spikeinterface outputs
15061524
import spikeinterface as si
@@ -1556,7 +1574,6 @@ def make(self, key):
15561574
for unit_key in (CuratedClustering.Unit & key).fetch("KEY")
15571575
]
15581576

1559-
self.insert1(key)
15601577
self.Cluster.insert(metrics_list, ignore_extra_fields=True)
15611578
self.Waveform.insert(metrics_list, ignore_extra_fields=True)
15621579

element_array_ephys/spike_sorting/si_spike_sorting.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -281,11 +281,18 @@ def make(self, key):
281281

282282
analyzer_output_dir = output_dir / sorter_name / "sorting_analyzer"
283283

284+
has_units = si_sorting.unit_ids.size > 0
285+
284286
@memoized_result(
285287
uniqueness_dict=postprocessing_params,
286288
output_directory=analyzer_output_dir,
287289
)
288290
def _sorting_analyzer_compute():
291+
if not has_units:
292+
log.info("No units found in sorting object. Skipping sorting analyzer.")
293+
analyzer_output_dir.mkdir(parents=True, exist_ok=True) # create empty directory anyway, for consistency
294+
return
295+
289296
# Sorting Analyzer
290297
sorting_analyzer = si.create_sorting_analyzer(
291298
sorting=si_sorting,
@@ -309,6 +316,8 @@ def _sorting_analyzer_compute():
309316

310317
_sorting_analyzer_compute()
311318

319+
do_si_export = postprocessing_params.get("export_to_phy", False) or postprocessing_params.get("export_report", False)
320+
312321
self.insert1(
313322
{
314323
**key,
@@ -317,8 +326,7 @@ def _sorting_analyzer_compute():
317326
datetime.utcnow() - execution_time
318327
).total_seconds()
319328
/ 3600,
320-
"do_si_export": postprocessing_params.get("export_to_phy", False)
321-
or postprocessing_params.get("export_report", False),
329+
"do_si_export": do_si_export and has_units,
322330
}
323331
)
324332

0 commit comments

Comments
 (0)