@@ -272,17 +272,14 @@ class Electrode(dj.Part):
272
272
_skip_channel_counts = 9
273
273
274
274
def make (self , key ):
275
- root_dir = pathlib .Path (get_ephys_root_data_dir ())
276
275
acq_software , probe_sn = (EphysRecording
277
276
* ProbeInsertion & key ).fetch1 ('acq_software' , 'probe' )
278
277
279
278
electrode_keys , lfp = [], []
280
279
281
280
if acq_software == 'SpikeGLX' :
282
- spikeglx_meta_fp = (EphysRecording .EphysFile
283
- & key & 'file_path LIKE "%.ap.meta"' ).fetch1 ('file_path' )
284
- spikeglx_rec_dir = (root_dir / spikeglx_meta_fp ).parent
285
- spikeglx_recording = spikeglx .SpikeGLX (spikeglx_rec_dir )
281
+ spikeglx_meta_filepath = get_spikeglx_meta_filepath (key )
282
+ spikeglx_recording = spikeglx .SpikeGLX (spikeglx_meta_filepath .parent )
286
283
287
284
lfp_channel_ind = spikeglx_recording .lfmeta .recording_channels [
288
285
- 1 ::- self ._skip_channel_counts ]
@@ -619,10 +616,8 @@ def yield_unit_waveforms():
619
616
620
617
else :
621
618
if acq_software == 'SpikeGLX' :
622
- ephys_root_dir = get_ephys_root_data_dir ()
623
- npx_meta_fp = ephys_root_dir / (EphysRecording .EphysFile & key
624
- & 'file_path LIKE "%.ap.meta"' ).fetch1 ('file_path' )
625
- neuropixels_recording = spikeglx .SpikeGLX (npx_meta_fp .parent )
619
+ spikeglx_meta_filepath = get_spikeglx_meta_filepath (key )
620
+ neuropixels_recording = spikeglx .SpikeGLX (spikeglx_meta_filepath .parent )
626
621
elif acq_software == 'Open Ephys' :
627
622
sess_dir = pathlib .Path (get_session_directory (key ))
628
623
openephys_dataset = openephys .OpenEphys (sess_dir )
@@ -659,17 +654,35 @@ def yield_unit_waveforms():
659
654
660
655
# ---------------- HELPER FUNCTIONS ----------------
661
656
657
+ def get_spikeglx_meta_filepath (ephys_recording_key ):
658
+ # attempt to retrieve from EphysRecording.EphysFile
659
+ ephys_root_dir = get_ephys_root_data_dir ()
660
+ spikeglx_meta_filepath = ephys_root_dir / (
661
+ EphysRecording .EphysFile & ephys_recording_key
662
+ & 'file_path LIKE "%.ap.meta"' ).fetch1 ('file_path' )
663
+ # if not found, search in session_dir again
664
+ if not spikeglx_meta_filepath .exists ():
665
+ sess_dir = pathlib .Path (get_session_directory (ephys_recording_key ))
666
+ inserted_probe_serial_number = (ProbeInsertion * probe .Probe
667
+ & ephys_recording_key ).fetch1 ('probe' )
668
+
669
+ spikeglx_meta_filepaths = [fp for fp in sess_dir .rglob ('*.ap.meta' )]
670
+ for meta_filepath in spikeglx_meta_filepaths :
671
+ spikeglx_meta = spikeglx .SpikeGLXMeta (meta_filepath )
672
+ if str (spikeglx_meta .probe_SN ) == inserted_probe_serial_number :
673
+ spikeglx_meta_filepath = meta_filepath
674
+ break
675
+ else :
676
+ raise FileNotFoundError (
677
+ 'No SpikeGLX data found for probe insertion: {}' .format (ephys_recording_key ))
678
+
679
+ return spikeglx_meta_filepath
680
+
662
681
663
682
def get_neuropixels_channel2electrode_map (ephys_recording_key , acq_software ):
664
- root_dir = pathlib .Path (get_ephys_root_data_dir ())
665
683
if acq_software == 'SpikeGLX' :
666
- npx_meta_path = root_dir / (EphysRecording .EphysFile
667
- & ephys_recording_key
668
- & 'file_path LIKE "%.ap.meta"' ).fetch1 ('file_path' )
669
- neuropixels_dir = (root_dir / npx_meta_path ).parent
670
-
671
- meta_filepath = next (pathlib .Path (neuropixels_dir ).glob ('*.ap.meta' ))
672
- spikeglx_meta = spikeglx .SpikeGLXMeta (meta_filepath )
684
+ spikeglx_meta_filepath = get_spikeglx_meta_filepath (ephys_recording_key )
685
+ spikeglx_meta = spikeglx .SpikeGLXMeta (spikeglx_meta_filepath )
673
686
electrode_config_key = (EphysRecording * probe .ElectrodeConfig
674
687
& ephys_recording_key ).fetch1 ('KEY' )
675
688
0 commit comments