@@ -185,8 +185,7 @@ def auto_generate_entries(cls, session_key):
185
185
186
186
probe_dir = meta_filepath .parent
187
187
try :
188
- probe_number = re .search (
189
- "(imec)?\d{1}$" , probe_dir .name ).group ()
188
+ probe_number = re .search ("(imec)?\d{1}$" , probe_dir .name ).group ()
190
189
probe_number = int (probe_number .replace ("imec" , "" ))
191
190
except AttributeError :
192
191
probe_number = meta_fp_idx
@@ -215,8 +214,7 @@ def auto_generate_entries(cls, session_key):
215
214
}
216
215
)
217
216
else :
218
- raise NotImplementedError (
219
- f"Unknown acquisition software: { acq_software } " )
217
+ raise NotImplementedError (f"Unknown acquisition software: { acq_software } " )
220
218
221
219
probe .Probe .insert (probe_list , skip_duplicates = True )
222
220
cls .insert (probe_insertion_list , skip_duplicates = True )
@@ -323,14 +321,12 @@ def make(self, key):
323
321
break
324
322
else :
325
323
raise FileNotFoundError (
326
- "No SpikeGLX data found for probe insertion: {}" .format (
327
- key )
324
+ "No SpikeGLX data found for probe insertion: {}" .format (key )
328
325
)
329
326
330
327
if spikeglx_meta .probe_model in supported_probe_types :
331
328
probe_type = spikeglx_meta .probe_model
332
- electrode_query = probe .ProbeType .Electrode & {
333
- "probe_type" : probe_type }
329
+ electrode_query = probe .ProbeType .Electrode & {"probe_type" : probe_type }
334
330
335
331
probe_electrodes = {
336
332
(shank , shank_col , shank_row ): key
@@ -363,11 +359,9 @@ def make(self, key):
363
359
}
364
360
)
365
361
366
- root_dir = find_root_directory (
367
- get_ephys_root_data_dir (), meta_filepath )
362
+ root_dir = find_root_directory (get_ephys_root_data_dir (), meta_filepath )
368
363
self .EphysFile .insert1 (
369
- {** key ,
370
- "file_path" : meta_filepath .relative_to (root_dir ).as_posix ()}
364
+ {** key , "file_path" : meta_filepath .relative_to (root_dir ).as_posix ()}
371
365
)
372
366
elif acq_software == "Open Ephys" :
373
367
dataset = openephys .OpenEphys (session_dir )
@@ -376,8 +370,7 @@ def make(self, key):
376
370
break
377
371
else :
378
372
raise FileNotFoundError (
379
- "No Open Ephys data found for probe insertion: {}" .format (
380
- key )
373
+ "No Open Ephys data found for probe insertion: {}" .format (key )
381
374
)
382
375
383
376
if not probe_data .ap_meta :
@@ -387,8 +380,7 @@ def make(self, key):
387
380
388
381
if probe_data .probe_model in supported_probe_types :
389
382
probe_type = probe_data .probe_model
390
- electrode_query = probe .ProbeType .Electrode & {
391
- "probe_type" : probe_type }
383
+ electrode_query = probe .ProbeType .Electrode & {"probe_type" : probe_type }
392
384
393
385
probe_electrodes = {
394
386
key ["electrode" ]: key for key in electrode_query .fetch ("KEY" )
@@ -401,8 +393,7 @@ def make(self, key):
401
393
else :
402
394
raise NotImplementedError (
403
395
"Processing for neuropixels"
404
- " probe model {} not yet implemented" .format (
405
- probe_data .probe_model )
396
+ " probe model {} not yet implemented" .format (probe_data .probe_model )
406
397
)
407
398
408
399
self .insert1 (
@@ -464,7 +455,7 @@ class LFP(dj.Imported):
464
455
465
456
class Electrode (dj .Part ):
466
457
"""Saves local field potential data for each electrode.
467
-
458
+
468
459
Attributes:
469
460
LFP (foreign key): LFP primary key.
470
461
probe.ElectrodeConfig.Electrode (foreign key): probe.ElectrodeConfig.Electrode primary key.
@@ -484,27 +475,24 @@ class Electrode(dj.Part):
484
475
485
476
def make (self , key ):
486
477
"""Populates the LFP tables."""
487
- acq_software = (EphysRecording * ProbeInsertion &
488
- key ).fetch1 ("acq_software" )
478
+ acq_software = (EphysRecording * ProbeInsertion & key ).fetch1 ("acq_software" )
489
479
490
480
electrode_keys , lfp = [], []
491
481
492
482
if acq_software == "SpikeGLX" :
493
483
spikeglx_meta_filepath = get_spikeglx_meta_filepath (key )
494
- spikeglx_recording = spikeglx .SpikeGLX (
495
- spikeglx_meta_filepath .parent )
484
+ spikeglx_recording = spikeglx .SpikeGLX (spikeglx_meta_filepath .parent )
496
485
497
486
lfp_channel_ind = spikeglx_recording .lfmeta .recording_channels [
498
- - 1 :: - self ._skip_channel_counts
487
+ - 1 :: - self ._skip_channel_counts
499
488
]
500
489
501
490
# Extract LFP data at specified channels and convert to uV
502
491
lfp = spikeglx_recording .lf_timeseries [
503
492
:, lfp_channel_ind
504
493
] # (sample x channel)
505
494
lfp = (
506
- lfp *
507
- spikeglx_recording .get_channel_bit_volts ("lf" )[lfp_channel_ind ]
495
+ lfp * spikeglx_recording .get_channel_bit_volts ("lf" )[lfp_channel_ind ]
508
496
).T # (channel x sample)
509
497
510
498
self .insert1 (
@@ -536,21 +524,19 @@ def make(self, key):
536
524
shank , shank_col , shank_row , _ = spikeglx_recording .apmeta .shankmap [
537
525
"data"
538
526
][recorded_site ]
539
- electrode_keys .append (
540
- probe_electrodes [(shank , shank_col , shank_row )])
527
+ electrode_keys .append (probe_electrodes [(shank , shank_col , shank_row )])
541
528
elif acq_software == "Open Ephys" :
542
529
oe_probe = get_openephys_probe_data (key )
543
530
544
531
lfp_channel_ind = np .r_ [
545
532
len (oe_probe .lfp_meta ["channels_indices" ])
546
- - 1 : 0 : - self ._skip_channel_counts
533
+ - 1 : 0 : - self ._skip_channel_counts
547
534
]
548
535
549
536
# (sample x channel)
550
537
lfp = oe_probe .lfp_timeseries [:, lfp_channel_ind ]
551
538
lfp = (
552
- lfp *
553
- np .array (oe_probe .lfp_meta ["channels_gains" ])[lfp_channel_ind ]
539
+ lfp * np .array (oe_probe .lfp_meta ["channels_gains" ])[lfp_channel_ind ]
554
540
).T # (channel x sample)
555
541
lfp_timestamps = oe_probe .lfp_timestamps
556
542
@@ -778,8 +764,7 @@ def auto_generate_entries(cls, ephys_recording_key: dict, paramset_idx: int = 0)
778
764
key = {** ephys_recording_key , "paramset_idx" : paramset_idx }
779
765
780
766
processed_dir = get_processed_root_data_dir ()
781
- output_dir = ClusteringTask .infer_output_dir (
782
- key , relative = False , mkdir = True )
767
+ output_dir = ClusteringTask .infer_output_dir (key , relative = False , mkdir = True )
783
768
784
769
try :
785
770
kilosort .Kilosort (
@@ -826,8 +811,7 @@ def make(self, key):
826
811
)
827
812
828
813
if not output_dir :
829
- output_dir = ClusteringTask .infer_output_dir (
830
- key , relative = True , mkdir = True )
814
+ output_dir = ClusteringTask .infer_output_dir (key , relative = True , mkdir = True )
831
815
# update clustering_output_dir
832
816
ClusteringTask .update1 (
833
817
{** key , "clustering_output_dir" : output_dir .as_posix ()}
@@ -1038,8 +1022,7 @@ def make(self, key):
1038
1022
"acq_software" , "sampling_rate"
1039
1023
)
1040
1024
1041
- sample_rate = kilosort_dataset .data ["params" ].get (
1042
- "sample_rate" , sample_rate )
1025
+ sample_rate = kilosort_dataset .data ["params" ].get ("sample_rate" , sample_rate )
1043
1026
1044
1027
# ---------- Unit ----------
1045
1028
# -- Remove 0-spike units
@@ -1051,8 +1034,7 @@ def make(self, key):
1051
1034
valid_units = kilosort_dataset .data ["cluster_ids" ][withspike_idx ]
1052
1035
valid_unit_labels = kilosort_dataset .data ["cluster_groups" ][withspike_idx ]
1053
1036
# -- Get channel and electrode-site mapping
1054
- channel2electrodes = get_neuropixels_channel2electrode_map (
1055
- key , acq_software )
1037
+ channel2electrodes = get_neuropixels_channel2electrode_map (key , acq_software )
1056
1038
1057
1039
# -- Spike-times --
1058
1040
# spike_times_sec_adj > spike_times_sec > spike_times
@@ -1219,8 +1201,7 @@ def yield_unit_waveforms():
1219
1201
else :
1220
1202
if acq_software == "SpikeGLX" :
1221
1203
spikeglx_meta_filepath = get_spikeglx_meta_filepath (key )
1222
- neuropixels_recording = spikeglx .SpikeGLX (
1223
- spikeglx_meta_filepath .parent )
1204
+ neuropixels_recording = spikeglx .SpikeGLX (spikeglx_meta_filepath .parent )
1224
1205
elif acq_software == "Open Ephys" :
1225
1206
session_dir = find_full_path (
1226
1207
get_ephys_root_data_dir (), get_session_directory (key )
@@ -1268,11 +1249,9 @@ def yield_unit_waveforms():
1268
1249
self .insert1 (key )
1269
1250
for unit_peak_waveform , unit_electrode_waveforms in yield_unit_waveforms ():
1270
1251
if unit_peak_waveform :
1271
- self .PeakWaveform .insert1 (
1272
- unit_peak_waveform , ignore_extra_fields = True )
1252
+ self .PeakWaveform .insert1 (unit_peak_waveform , ignore_extra_fields = True )
1273
1253
if unit_electrode_waveforms :
1274
- self .Waveform .insert (
1275
- unit_electrode_waveforms , ignore_extra_fields = True )
1254
+ self .Waveform .insert (unit_electrode_waveforms , ignore_extra_fields = True )
1276
1255
1277
1256
1278
1257
@schema
@@ -1417,8 +1396,7 @@ def get_spikeglx_meta_filepath(ephys_recording_key: dict) -> str:
1417
1396
ProbeInsertion * probe .Probe & ephys_recording_key
1418
1397
).fetch1 ("probe" )
1419
1398
1420
- spikeglx_meta_filepaths = [
1421
- fp for fp in session_dir .rglob ("*.ap.meta" )]
1399
+ spikeglx_meta_filepaths = [fp for fp in session_dir .rglob ("*.ap.meta" )]
1422
1400
for meta_filepath in spikeglx_meta_filepaths :
1423
1401
spikeglx_meta = spikeglx .SpikeGLXMeta (meta_filepath )
1424
1402
if str (spikeglx_meta .probe_SN ) == inserted_probe_serial_number :
@@ -1458,8 +1436,7 @@ def get_neuropixels_channel2electrode_map(
1458
1436
) -> dict :
1459
1437
"""Get the channel map for neuropixels probe."""
1460
1438
if acq_software == "SpikeGLX" :
1461
- spikeglx_meta_filepath = get_spikeglx_meta_filepath (
1462
- ephys_recording_key )
1439
+ spikeglx_meta_filepath = get_spikeglx_meta_filepath (ephys_recording_key )
1463
1440
spikeglx_meta = spikeglx .SpikeGLXMeta (spikeglx_meta_filepath )
1464
1441
electrode_config_key = (
1465
1442
EphysRecording * probe .ElectrodeConfig & ephys_recording_key
@@ -1514,8 +1491,7 @@ def generate_electrode_config(probe_type: str, electrode_keys: list) -> dict:
1514
1491
dict: representing a key of the probe.ElectrodeConfig table
1515
1492
"""
1516
1493
# compute hash for the electrode config (hash of dict of all ElectrodeConfig.Electrode)
1517
- electrode_config_hash = dict_to_uuid (
1518
- {k ["electrode" ]: k for k in electrode_keys })
1494
+ electrode_config_hash = dict_to_uuid ({k ["electrode" ]: k for k in electrode_keys })
1519
1495
1520
1496
electrode_list = sorted ([k ["electrode" ] for k in electrode_keys ])
1521
1497
electrode_gaps = (
@@ -1585,11 +1561,9 @@ def get_recording_channels_details(ephys_recording_key: dict) -> np.array:
1585
1561
channels_details ["num_channels" ] = len (channels_details ["channel_ind" ])
1586
1562
1587
1563
if acq_software == "SpikeGLX" :
1588
- spikeglx_meta_filepath = get_spikeglx_meta_filepath (
1589
- ephys_recording_key )
1564
+ spikeglx_meta_filepath = get_spikeglx_meta_filepath (ephys_recording_key )
1590
1565
spikeglx_recording = spikeglx .SpikeGLX (spikeglx_meta_filepath .parent )
1591
- channels_details ["uVPerBit" ] = spikeglx_recording .get_channel_bit_volts ("ap" )[
1592
- 0 ]
1566
+ channels_details ["uVPerBit" ] = spikeglx_recording .get_channel_bit_volts ("ap" )[0 ]
1593
1567
channels_details ["connected" ] = np .array (
1594
1568
[v for * _ , v in spikeglx_recording .apmeta .shankmap ["data" ]]
1595
1569
)
0 commit comments