@@ -335,145 +335,144 @@ def make(self, key):
335
335
f"Processing ephys files from acquisition software of type { acq_software } is not yet implemented."
336
336
)
337
337
338
- else :
339
- supported_probe_types = probe .ProbeType .fetch ("probe_type" )
340
-
341
- if acq_software == "SpikeGLX" :
342
- for meta_filepath in ephys_meta_filepaths :
343
- spikeglx_meta = spikeglx .SpikeGLXMeta (meta_filepath )
344
- if str (spikeglx_meta .probe_SN ) == inserted_probe_serial_number :
345
- break
346
- else :
347
- raise FileNotFoundError (
348
- "No SpikeGLX data found for probe insertion: {}" .format (key )
349
- )
338
+ supported_probe_types = probe .ProbeType .fetch ("probe_type" )
350
339
351
- if spikeglx_meta .probe_model in supported_probe_types :
352
- probe_type = spikeglx_meta .probe_model
353
- electrode_query = probe .ProbeType .Electrode & {
354
- "probe_type" : probe_type
355
- }
340
+ if acq_software == "SpikeGLX" :
341
+ for meta_filepath in ephys_meta_filepaths :
342
+ spikeglx_meta = spikeglx .SpikeGLXMeta (meta_filepath )
343
+ if str (spikeglx_meta .probe_SN ) == inserted_probe_serial_number :
344
+ break
345
+ else :
346
+ raise FileNotFoundError (
347
+ "No SpikeGLX data found for probe insertion: {}" .format (key )
348
+ )
356
349
357
- probe_electrodes = {
358
- (shank , shank_col , shank_row ): key
359
- for key , shank , shank_col , shank_row in zip (
360
- * electrode_query .fetch (
361
- "KEY" , "shank" , "shank_col" , "shank_row"
362
- )
363
- )
364
- }
350
+ if spikeglx_meta .probe_model in supported_probe_types :
351
+ probe_type = spikeglx_meta .probe_model
352
+ electrode_query = probe .ProbeType .Electrode & {
353
+ "probe_type" : probe_type
354
+ }
365
355
366
- electrode_group_members = [
367
- probe_electrodes [(shank , shank_col , shank_row )]
368
- for shank , shank_col , shank_row , _ in spikeglx_meta .shankmap [
369
- "data"
370
- ]
371
- ]
372
- else :
373
- raise NotImplementedError (
374
- "Processing for neuropixels probe model"
375
- " {} not yet implemented" .format (spikeglx_meta .probe_model )
356
+ probe_electrodes = {
357
+ (shank , shank_col , shank_row ): key
358
+ for key , shank , shank_col , shank_row in zip (
359
+ * electrode_query .fetch (
360
+ "KEY" , "shank" , "shank_col" , "shank_row"
361
+ )
376
362
)
363
+ }
377
364
378
- self .insert1 (
379
- {
380
- ** key ,
381
- ** generate_electrode_config (
382
- probe_type , electrode_group_members
383
- ),
384
- "acq_software" : acq_software ,
385
- "sampling_rate" : spikeglx_meta .meta ["imSampRate" ],
386
- "recording_datetime" : spikeglx_meta .recording_time ,
387
- "recording_duration" : (
388
- spikeglx_meta .recording_duration
389
- or spikeglx .retrieve_recording_duration (meta_filepath )
390
- ),
391
- }
365
+ electrode_group_members = [
366
+ probe_electrodes [(shank , shank_col , shank_row )]
367
+ for shank , shank_col , shank_row , _ in spikeglx_meta .shankmap [
368
+ "data"
369
+ ]
370
+ ]
371
+ else :
372
+ raise NotImplementedError (
373
+ "Processing for neuropixels probe model"
374
+ " {} not yet implemented" .format (spikeglx_meta .probe_model )
392
375
)
393
376
394
- root_dir = find_root_directory (get_ephys_root_data_dir (), meta_filepath )
395
- self .EphysFile .insert1 (
396
- {** key , "file_path" : meta_filepath .relative_to (root_dir ).as_posix ()}
377
+ self .insert1 (
378
+ {
379
+ ** key ,
380
+ ** generate_electrode_config (
381
+ probe_type , electrode_group_members
382
+ ),
383
+ "acq_software" : acq_software ,
384
+ "sampling_rate" : spikeglx_meta .meta ["imSampRate" ],
385
+ "recording_datetime" : spikeglx_meta .recording_time ,
386
+ "recording_duration" : (
387
+ spikeglx_meta .recording_duration
388
+ or spikeglx .retrieve_recording_duration (meta_filepath )
389
+ ),
390
+ }
391
+ )
392
+
393
+ root_dir = find_root_directory (get_ephys_root_data_dir (), meta_filepath )
394
+ self .EphysFile .insert1 (
395
+ {** key , "file_path" : meta_filepath .relative_to (root_dir ).as_posix ()}
396
+ )
397
+ elif acq_software == "Open Ephys" :
398
+ dataset = openephys .OpenEphys (session_dir )
399
+ for serial_number , probe_data in dataset .probes .items ():
400
+ if str (serial_number ) == inserted_probe_serial_number :
401
+ break
402
+ else :
403
+ raise FileNotFoundError (
404
+ "No Open Ephys data found for probe insertion: {}" .format (key )
397
405
)
398
- elif acq_software == "Open Ephys" :
399
- dataset = openephys .OpenEphys (session_dir )
400
- for serial_number , probe_data in dataset .probes .items ():
401
- if str (serial_number ) == inserted_probe_serial_number :
402
- break
403
- else :
404
- raise FileNotFoundError (
405
- "No Open Ephys data found for probe insertion: {}" .format (key )
406
- )
407
406
408
- if not probe_data .ap_meta :
409
- raise IOError (
410
- 'No analog signals found - check "structure.oebin" file or "continuous" directory'
411
- )
407
+ if not probe_data .ap_meta :
408
+ raise IOError (
409
+ 'No analog signals found - check "structure.oebin" file or "continuous" directory'
410
+ )
412
411
413
- if probe_data .probe_model in supported_probe_types :
414
- probe_type = probe_data .probe_model
415
- electrode_query = probe .ProbeType .Electrode & {
416
- "probe_type" : probe_type
417
- }
412
+ if probe_data .probe_model in supported_probe_types :
413
+ probe_type = probe_data .probe_model
414
+ electrode_query = probe .ProbeType .Electrode & {
415
+ "probe_type" : probe_type
416
+ }
418
417
419
- probe_electrodes = {
420
- key ["electrode" ]: key for key in electrode_query .fetch ("KEY" )
421
- }
418
+ probe_electrodes = {
419
+ key ["electrode" ]: key for key in electrode_query .fetch ("KEY" )
420
+ }
422
421
423
- electrode_group_members = [
424
- probe_electrodes [channel_idx ]
425
- for channel_idx in probe_data .ap_meta ["channels_indices" ]
426
- ]
427
- else :
428
- raise NotImplementedError (
429
- "Processing for neuropixels"
430
- " probe model {} not yet implemented" .format (
431
- probe_data .probe_model
432
- )
422
+ electrode_group_members = [
423
+ probe_electrodes [channel_idx ]
424
+ for channel_idx in probe_data .ap_meta ["channels_indices" ]
425
+ ]
426
+ else :
427
+ raise NotImplementedError (
428
+ "Processing for neuropixels"
429
+ " probe model {} not yet implemented" .format (
430
+ probe_data .probe_model
433
431
)
434
-
435
- self .insert1 (
436
- {
437
- ** key ,
438
- ** generate_electrode_config (
439
- probe_type , electrode_group_members
440
- ),
441
- "acq_software" : acq_software ,
442
- "sampling_rate" : probe_data .ap_meta ["sample_rate" ],
443
- "recording_datetime" : probe_data .recording_info [
444
- "recording_datetimes"
445
- ][0 ],
446
- "recording_duration" : np .sum (
447
- probe_data .recording_info ["recording_durations" ]
448
- ),
449
- }
450
432
)
451
433
452
- root_dir = find_root_directory (
453
- get_ephys_root_data_dir (),
454
- probe_data .recording_info ["recording_files" ][0 ],
455
- )
456
- self .EphysFile .insert (
457
- [
458
- {** key , "file_path" : fp .relative_to (root_dir ).as_posix ()}
459
- for fp in probe_data .recording_info ["recording_files" ]
460
- ]
461
- )
462
- # Explicitly garbage collect "dataset" as these may have large memory footprint and may not be cleared fast enough
463
- del probe_data , dataset
464
- gc .collect ()
434
+ self .insert1 (
435
+ {
436
+ ** key ,
437
+ ** generate_electrode_config (
438
+ probe_type , electrode_group_members
439
+ ),
440
+ "acq_software" : acq_software ,
441
+ "sampling_rate" : probe_data .ap_meta ["sample_rate" ],
442
+ "recording_datetime" : probe_data .recording_info [
443
+ "recording_datetimes"
444
+ ][0 ],
445
+ "recording_duration" : np .sum (
446
+ probe_data .recording_info ["recording_durations" ]
447
+ ),
448
+ }
449
+ )
465
450
466
- # Insert channel information
467
- # Get channel and electrode-site mapping
468
- channel2electrodes = get_neuropixels_channel2electrode_map (
469
- key , acq_software
451
+ root_dir = find_root_directory (
452
+ get_ephys_root_data_dir (),
453
+ probe_data .recording_info ["recording_files" ][0 ],
470
454
)
471
- self .Channel .insert (
455
+ self .EphysFile .insert (
472
456
[
473
- {** key , "channel_idx " : channel_idx , ** channel_info }
474
- for channel_idx , channel_info in channel2electrodes . items ()
457
+ {** key , "file_path " : fp . relative_to ( root_dir ). as_posix () }
458
+ for fp in probe_data . recording_info [ "recording_files" ]
475
459
]
476
460
)
461
+ # Explicitly garbage collect "dataset" as these may have large memory footprint and may not be cleared fast enough
462
+ del probe_data , dataset
463
+ gc .collect ()
464
+
465
+ # Insert channel information
466
+ # Get channel and electrode-site mapping
467
+ channel2electrodes = get_neuropixels_channel2electrode_map (
468
+ key , acq_software
469
+ )
470
+ self .Channel .insert (
471
+ [
472
+ {** key , "channel_idx" : channel_idx , ** channel_info }
473
+ for channel_idx , channel_info in channel2electrodes .items ()
474
+ ]
475
+ )
477
476
478
477
479
478
@schema
0 commit comments